add new accent choices
This commit is contained in:
@@ -1,147 +0,0 @@
|
||||
package ru.vtosters.lite.ui.fragments;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
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.R;
|
||||
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
|
||||
import com.vtosters.lite.ui.EditText;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
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.ThemesUtils;
|
||||
|
||||
public class AccentsFragment extends MaterialPreferenceToolbarFragment {
|
||||
private static final int MAX_COLOR_STR_LEN = 7; // without transparency
|
||||
private static final String HEX = "0123456789abcdefABCDEF";
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
addPreferencesFromResource(R.xml.empty);
|
||||
|
||||
PreferencesUtil.addPreferenceCategory(this, "Выбор цвета");
|
||||
|
||||
PreferencesUtil.addPreferenceDrawable(this, "", "Выбор акцента через Hex", "Точная настройка цвета", ThemesUtils.recolorDrawable(requireContext().getDrawable(R.drawable.bg_accent_circle)), preference -> {
|
||||
showEditAccentColorDialog();
|
||||
return false;
|
||||
});
|
||||
|
||||
PreferencesUtil.addPreferenceCategory(this, "Полезная информация");
|
||||
|
||||
PreferencesUtil.addPreference(this, "Внимание!", "Функция находится на стадии тестирования и могут наблюдаться ошибки", 0, null);
|
||||
|
||||
PreferencesUtil.addPreference(this, "Color-Hex", "Полезный ресурс со всевозможными hex-цветами", 0, preference -> {
|
||||
requireContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://www.color-hex.com")));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
void showEditAccentColorDialog() {
|
||||
LinearLayout linearLayout = new LinearLayout(requireContext());
|
||||
|
||||
final EditText editText = new EditText(requireContext());
|
||||
editText.setHint("Акцент");
|
||||
editText.setText(ThemesUtils.hex(ThemesUtils.getAccentColor()));
|
||||
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);
|
||||
|
||||
editText.addTextChangedListener(new TextWatcher() {
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
if (!TextUtils.isEmpty(s)) {
|
||||
if (s.length() > MAX_COLOR_STR_LEN)
|
||||
// check if data is fully color string
|
||||
if (s.charAt(0) == '#' && s.charAt(1) == '#')
|
||||
s.replace(0, 1, "");
|
||||
else
|
||||
s.replace(MAX_COLOR_STR_LEN - 1, s.length() - 1, "");
|
||||
int i = s.charAt(0) == '#' ? 1 : 0;
|
||||
// If the first distinct character is found, then there is no need to return to the start of the array
|
||||
while (i >= 0 && i < s.length()) {
|
||||
if (HEX.indexOf(s.charAt(i)) == -1) {
|
||||
s.delete(i, i + 1);
|
||||
} else i++;
|
||||
}
|
||||
} else s.append("#");
|
||||
}
|
||||
});
|
||||
|
||||
new VkAlertDialog.Builder(requireContext())
|
||||
.setTitle("Акценты")
|
||||
.setMessage("Это изменит цвет иконки таббара, ссылки и.т.д." +
|
||||
"\nДанная функция еще в разработке, поэтому возможны недокрасы!" +
|
||||
"\n\nЦвет указывается в формате #RRGGBB (#9600FF).")
|
||||
.setView(linearLayout)
|
||||
.setPositiveButton("OK",
|
||||
(dialog, which)
|
||||
-> changeAccentColor(editText.getText()
|
||||
.toString()
|
||||
.toUpperCase()))
|
||||
.setNeutralButton("Сброс", (dialog, which) -> resetAccentColor())
|
||||
.show();
|
||||
}
|
||||
|
||||
void changeAccentColor(String colorStr) {
|
||||
if (TextUtils.isEmpty(colorStr)) {
|
||||
ThemesUtils.setCustomAccentColor(0, false);
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
return;
|
||||
}
|
||||
// fix color string length
|
||||
if (colorStr.length() < MAX_COLOR_STR_LEN)
|
||||
colorStr += String.join("", Collections.nCopies(MAX_COLOR_STR_LEN - colorStr.length(), "0"));
|
||||
int color;
|
||||
try {
|
||||
color = Color.parseColor(colorStr);
|
||||
} catch (Exception e) {
|
||||
ToastUtils.a("Ошибка: неправильный формат цвета.");
|
||||
return;
|
||||
}
|
||||
|
||||
ThemesUtils.setCustomAccentColor(color, false);
|
||||
ThemesCore.setThemedColors(color);
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
}
|
||||
|
||||
void resetAccentColor() {
|
||||
changeAccentColor("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int T4() {
|
||||
return R.string.vtlthemes;
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,7 @@ public abstract class BaseToolbarFragment extends FragmentImpl {
|
||||
private Toolbar mToolbar;
|
||||
private FrameLayout mContentLayout;
|
||||
|
||||
@CallSuper
|
||||
|
||||
protected void onCreateMenu(Menu menu) {
|
||||
if (menu.size() > 0)
|
||||
for (int i = 0; i < menu.size(); i++)
|
||||
@@ -63,6 +63,10 @@ public abstract class BaseToolbarFragment extends FragmentImpl {
|
||||
return mRootView;
|
||||
}
|
||||
|
||||
public Toolbar getToolbar() {
|
||||
return mToolbar;
|
||||
}
|
||||
|
||||
public abstract View onCreateContent(@NonNull LayoutInflater inflater, @Nullable Bundle bundle);
|
||||
|
||||
private void initToolbar() {
|
||||
|
||||
@@ -1,19 +1,27 @@
|
||||
package ru.vtosters.lite.ui.fragments;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
|
||||
import com.vk.core.dialogs.alert.VkAlertDialog;
|
||||
import com.vk.core.fragments.FragmentImpl;
|
||||
import com.vk.navigation.Navigator;
|
||||
import com.vtosters.lite.R;
|
||||
import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment;
|
||||
|
||||
import ru.vtosters.lite.themes.ColorReferences;
|
||||
import ru.vtosters.lite.themes.ThemesCore;
|
||||
import ru.vtosters.lite.themes.palettes.PalettesManager;
|
||||
import ru.vtosters.lite.ui.dialogs.PalettesBottomSheetDialog;
|
||||
import ru.vtosters.lite.ui.views.rarepebble.ColorPickerView;
|
||||
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 {
|
||||
|
||||
@@ -21,24 +29,75 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
addPreferencesFromResource(R.xml.preferences_themes);
|
||||
prefs();
|
||||
initPreferences();
|
||||
}
|
||||
|
||||
private void prefs() {
|
||||
findPreference("accent_color").setOnPreferenceClickListener(new Accents());
|
||||
findPreference("navbar").setOnPreferenceClickListener(new restart());
|
||||
findPreference("milkshake").setOnPreferenceClickListener(new restart());
|
||||
findPreference("darktheme").setOnPreferenceChangeListener(new restartdark());
|
||||
findPreference("lighttheme").setOnPreferenceChangeListener(new restartlight());
|
||||
findPreference("iconmanager").setOnPreferenceClickListener(new openicons());
|
||||
findPreference("dockbar_tab_titles").setOnPreferenceClickListener(new restart());
|
||||
findPreference("dockbar_accent").setOnPreferenceClickListener(new restart());
|
||||
findPreference("dockcounter").setOnPreferenceClickListener(new restart());
|
||||
findPreference("newsfeed_notif").setOnPreferenceClickListener(new restart());
|
||||
findPreference("newsfeed_notif").setVisible(Preferences.milkshake());
|
||||
private void initPreferences() {
|
||||
var accentColorPreference = findPreference("accent_color");
|
||||
accentColorPreference.setIcon(ThemesUtils.recolorDrawable(requireContext().getDrawable(R.drawable.bg_accent_circle)));
|
||||
accentColorPreference.setOnPreferenceClickListener(preference -> {
|
||||
changeAccent();
|
||||
return false;
|
||||
});
|
||||
|
||||
var navBarPreference = findPreference("navbar");
|
||||
navBarPreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
|
||||
var milkshakePreference = findPreference("milkshake");
|
||||
milkshakePreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
|
||||
var darkThemePreference = findPreference("darktheme");
|
||||
darkThemePreference.setOnPreferenceChangeListener((preference, o) -> {
|
||||
restartDark(o.toString());
|
||||
return false;
|
||||
});
|
||||
|
||||
var lightThemePreference = findPreference("lighttheme");
|
||||
lightThemePreference.setOnPreferenceChangeListener(((preference, o) -> {
|
||||
restartLight(o.toString());
|
||||
return false;
|
||||
}));
|
||||
|
||||
var iconManagerPreference = findPreference("iconmanager");
|
||||
iconManagerPreference.setOnPreferenceClickListener(preference -> {
|
||||
switchFragment(IconsFragment.class);
|
||||
return false;
|
||||
});
|
||||
|
||||
var dockbarTabTitlesPreference = findPreference("dockbar_tab_titles");
|
||||
dockbarTabTitlesPreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
|
||||
var dockbarAccentPreference = findPreference("dockbar_accent");
|
||||
dockbarAccentPreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
|
||||
var dockCounterPreference = findPreference("dockcounter");
|
||||
dockCounterPreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
|
||||
var newsfeedNotificationsPreference = findPreference("newsfeed_notif");
|
||||
newsfeedNotificationsPreference.setOnPreferenceClickListener(preference -> {
|
||||
restart();
|
||||
return false;
|
||||
});
|
||||
newsfeedNotificationsPreference.setVisible(Preferences.milkshake());
|
||||
|
||||
if (AndroidUtils.isTablet()) {
|
||||
findPreference("dockbarsett").setVisible(false);
|
||||
PreferenceCategory dockbarSettingsPreferenceCategory = (PreferenceCategory) findPreference("dockbarsett");
|
||||
dockbarSettingsPreferenceCategory.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,51 +106,78 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment {
|
||||
return R.string.vtlthemes;
|
||||
}
|
||||
|
||||
public static class restart implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
return true;
|
||||
}
|
||||
void changeAccent() {
|
||||
final var titles = new String[] {
|
||||
"Advanced Color Picker by Martin Stone",
|
||||
"From Palettes"
|
||||
};
|
||||
new VkAlertDialog.Builder(requireContext())
|
||||
.setTitle("Change accent color")
|
||||
.setItems(titles, (dialog, which) -> {
|
||||
switch (which) {
|
||||
case 0:
|
||||
showColorPicker();
|
||||
break;
|
||||
case 1:
|
||||
showPalettesDialog();
|
||||
break;
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.reset, (dialog, which) -> setAccentColor(ColorReferences.stockAccent))
|
||||
.setPositiveButton(R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
public static class restartlight implements Preference.OnPreferenceChangeListener {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
AndroidUtils.edit().putString("lighttheme", o.toString()).commit();
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
return false;
|
||||
}
|
||||
void showColorPicker() {
|
||||
final var colorPickerView = new ColorPickerView(requireContext());
|
||||
colorPickerView.setColor(ThemesUtils.getAccentColor());
|
||||
new VkAlertDialog.Builder(requireContext())
|
||||
.setTitle("Select color")
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.select, (dialog, which) -> setAccentColor(colorPickerView.getColor()))
|
||||
.setView(colorPickerView)
|
||||
.show();
|
||||
}
|
||||
|
||||
public static class restartdark implements Preference.OnPreferenceChangeListener {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object o) {
|
||||
AndroidUtils.edit().putString("darktheme", o.toString()).commit();
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
return false;
|
||||
}
|
||||
void showPalettesDialog() {
|
||||
final var manager = PalettesManager.getInstance();
|
||||
final var titles = new String[manager.getPalettesCount()];
|
||||
for (int i = 0; i < titles.length; ++i)
|
||||
titles[i] = manager.getPalette(i).name;
|
||||
new VkAlertDialog.Builder(requireContext())
|
||||
.setTitle("Select palette")
|
||||
.setItems(titles, (dialog, which) ->
|
||||
PalettesBottomSheetDialog.create(requireActivity(), manager.getPalette(which),
|
||||
(adapter, vtlcolor) -> setAccentColor(vtlcolor.color))
|
||||
)
|
||||
.setPositiveButton(R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
public class openicons implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Context context = requireContext();
|
||||
Intent a2 = new Navigator(IconsFragment.class).b(context);
|
||||
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(a2);
|
||||
return true;
|
||||
}
|
||||
void setAccentColor(int color) {
|
||||
ThemesUtils.setCustomAccentColor(color, false);
|
||||
ThemesCore.setThemedColors(color);
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
}
|
||||
|
||||
private class Accents implements Preference.OnPreferenceClickListener {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Context context = requireContext();
|
||||
Intent a2 = new Navigator(AccentsFragment.class).b(context);
|
||||
a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
context.startActivity(a2);
|
||||
return true;
|
||||
}
|
||||
void restart() {
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
}
|
||||
|
||||
void restartLight(String value) {
|
||||
AndroidUtils.edit().putString("lighttheme", value).commit();
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
}
|
||||
|
||||
void restartDark(String value) {
|
||||
AndroidUtils.edit().putString("darktheme", value).commit();
|
||||
LifecycleUtils.restartApplicationWithTimer();
|
||||
}
|
||||
|
||||
private void switchFragment(Class<? extends FragmentImpl> fragmentClz) {
|
||||
var intent = new Navigator(fragmentClz)
|
||||
.b(requireContext())
|
||||
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
requireContext().startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,8 +84,8 @@ public class StickersFragment extends BaseToolbarFragment {
|
||||
@Override
|
||||
protected void onCreateMenu(Menu menu) {
|
||||
var item = menu.add(0, 0, 0, "");
|
||||
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
item.setIcon(R.drawable.ic_settings_24);
|
||||
item.setIcon(R.drawable.ic_settings_24)
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
|
||||
super.onCreateMenu(menu);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<Preference
|
||||
android:key="accent_color"
|
||||
android:summary="Цвет акцента в приложении"
|
||||
android:icon="@drawable/bg_accent_circle"
|
||||
android:title="Цвет акцента" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/vtlthemes">
|
||||
|
||||
Reference in New Issue
Block a user