[accents] create a separate fragment for accents

This commit is contained in:
aliveoutside
2022-11-23 23:29:01 +03:00
parent 2bcf5d1c2d
commit 88339feb12
2 changed files with 93 additions and 61 deletions
@@ -0,0 +1,86 @@
package ru.vtosters.lite.ui.fragments;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.util.ToastUtils;
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
import com.vtosters.lite.R;
import com.vtosters.lite.ui.EditText;
import ru.vtosters.lite.themes.ColorReferences;
import ru.vtosters.lite.themes.ThemesCore;
import ru.vtosters.lite.ui.PreferencesUtil;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.ThemesUtils;
public class AccentsFragment extends MaterialPreferenceToolbarFragment {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
addPreferencesFromResource(R.xml.empty);
PreferencesUtil.addPreference(this, "Выбор акцента через HEX", "", 0, new AccentHexDialog());
}
private class AccentHexDialog implements Preference.OnPreferenceClickListener {
@Override
public boolean onPreferenceClick(Preference preference) {
LinearLayout linearLayout = new LinearLayout(requireContext());
final EditText editText = new EditText(requireContext());
editText.setHint("Акцент");
editText.setText(ThemesUtils.hex(AndroidUtils.getPreferences().getInt("accent_color", ColorReferences.stockAccent)));
editText.setHintTextColor(PreferencesUtil.getSTextColor(requireActivity()));
editText.setBackgroundTintList(ColorStateList.valueOf(ThemesUtils.getAccentColor()));
linearLayout.addView(editText);
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
margin.setMargins(AndroidUtils.dp2px(24f), 0, AndroidUtils.dp2px(24f), 0);
editText.setLayoutParams(margin);
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(requireContext());
builder.setTitle("Акценты");
builder.setMessage("Это изменит цвет иконки таббара, ссылки и.т.д.\nДанная функция еще в разработке, поэтому возможны недокрасы!\n\nЦвет указывается в формате #RRGGBB (#9600FF).\n\nЧтобы вернуть стандартный акцент ВК, оставьте это поле пустым.");
builder.setView(linearLayout);
builder.setPositiveButton("OK", (dialog, which) -> {
String color = editText.getText().toString();
if (color.equals("")) {
AndroidUtils.edit().putInt("theme_accent", ColorReferences.stockAccent).apply();
ToastUtils.a("Функция отключена.");
ThemesCore.clear();
ThemesUtils.setTheme(ThemesUtils.getCurrentTheme(), requireActivity());
return;
}
if (!color.startsWith("#")) {
ToastUtils.a("Цвет надо вводить в HEX-формате!");
return;
}
if (color.length() != 7) {
ToastUtils.a("Неправильная длина цвета (прозрачность не поддерживается)");
return;
}
try {
Color.parseColor(color);
} catch (Exception e) {
ToastUtils.a("Ошибка: неправильный формат цвета.");
return;
}
AndroidUtils.edit().putInt("accent_color", Color.parseColor(color)).apply();
ThemesCore.setThemedColors(Color.parseColor(color));
ThemesUtils.setTheme(ThemesUtils.getCurrentTheme(), requireActivity());
});
builder.show();
return false;
}
}
}
@@ -2,28 +2,17 @@ package ru.vtosters.lite.ui.fragments;
import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.preference.Preference;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.util.ToastUtils;
import com.vk.navigation.Navigator;
import com.vtosters.lite.R;
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
import com.vtosters.lite.ui.EditText;
import ru.vtosters.lite.themes.ColorReferences;
import ru.vtosters.lite.themes.ThemesCore;
import ru.vtosters.lite.ui.PreferencesUtil;
import ru.vtosters.lite.utils.AndroidUtils;
import ru.vtosters.lite.utils.LifecycleUtils;
import ru.vtosters.lite.utils.Preferences;
import ru.vtosters.lite.utils.ThemesUtils;
public class ThemesFragment extends MaterialPreferenceToolbarFragment {
@@ -36,7 +25,7 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
}
private void prefs() {
findPreference("accent_color").setOnPreferenceClickListener(new AccentDialog());
findPreference("accent_color").setOnPreferenceClickListener(new Accents());
findPreference("navbar").setOnPreferenceClickListener(new restart());
findPreference("milkshake").setOnPreferenceClickListener(new restart());
findPreference("darktheme").setOnPreferenceChangeListener(new restartdark());
@@ -95,57 +84,14 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
}
}
private class AccentDialog implements Preference.OnPreferenceClickListener {
private class Accents implements Preference.OnPreferenceClickListener {
@Override
public boolean onPreferenceClick(Preference preference) {
LinearLayout linearLayout = new LinearLayout(requireContext());
final EditText editText = new EditText(requireContext());
editText.setHint("Акцент");
editText.setText(ThemesUtils.hex(AndroidUtils.getPreferences().getInt("accent_color", ColorReferences.stockAccent)));
editText.setHintTextColor(PreferencesUtil.getSTextColor(requireActivity()));
editText.setBackgroundTintList(ColorStateList.valueOf(ThemesUtils.getAccentColor()));
linearLayout.addView(editText);
editText.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) editText.getLayoutParams());
margin.setMargins(AndroidUtils.dp2px(24f), 0, AndroidUtils.dp2px(24f), 0);
editText.setLayoutParams(margin);
VkAlertDialog.Builder builder = new VkAlertDialog.Builder(requireContext());
builder.setTitle("Акценты");
builder.setMessage("Это изменит цвет иконки таббара, ссылки и.т.д.\nДанная функция еще в разработке, поэтому возможны недокрасы!\n\nЦвет указывается в формате #RRGGBB (#9600FF).\n\nЧтобы вернуть стандартный акцент ВК, оставьте это поле пустым.");
builder.setView(linearLayout);
builder.setPositiveButton("OK", (dialog, which) -> {
String color = editText.getText().toString();
if (color.equals("")) {
AndroidUtils.edit().putInt("theme_accent", ColorReferences.stockAccent).apply();
ToastUtils.a("Функция отключена.");
ThemesCore.clear();
ThemesUtils.setTheme(ThemesUtils.getCurrentTheme(), requireActivity());
return;
}
if (!color.startsWith("#")) {
ToastUtils.a("Цвет надо вводить в HEX-формате!");
return;
}
if (color.length() != 7) {
ToastUtils.a("Неправильная длина цвета (прозрачность не поддерживается)");
return;
}
try {
Color.parseColor(color);
} catch (Exception e) {
ToastUtils.a("Ошибка: неправильный формат цвета.");
return;
}
AndroidUtils.edit().putInt("accent_color", Color.parseColor(color)).apply();
ThemesCore.setThemedColors(Color.parseColor(color));
ThemesUtils.setTheme(ThemesUtils.getCurrentTheme(), requireActivity());
});
builder.show();
return false;
Context context = requireContext();
Intent a2 = new Navigator(AccentsFragment.class).b(context);
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(a2);
return true;
}
}
}