diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java
index 9fd3dfee..4b2d0474 100644
--- a/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java
+++ b/app/src/main/java/pl/jakubweg/SponsorBlockPreferenceFragment.java
@@ -28,7 +28,6 @@ import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
-import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
@@ -41,6 +40,7 @@ import java.text.DecimalFormat;
import java.util.ArrayList;
import fi.vanced.libraries.youtube.whitelisting.WhitelistType;
+import pl.jakubweg.objects.EditTextListPreference;
import pl.jakubweg.requests.SBRequester;
@SuppressWarnings({"unused", "deprecation"}) // injected
@@ -159,7 +159,7 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment implement
SponsorBlockSettings.SegmentInfo[] categories = SponsorBlockSettings.SegmentInfo.valuesWithoutUnsubmitted();
for (SponsorBlockSettings.SegmentInfo segmentInfo : categories) {
- ListPreference preference = new ListPreference(context);
+ EditTextListPreference preference = new EditTextListPreference(context);
preference.setTitle(segmentInfo.getTitleWithDot());
preference.setSummary(segmentInfo.description.toString());
preference.setKey(segmentInfo.key);
@@ -170,22 +170,10 @@ public class SponsorBlockPreferenceFragment extends PreferenceFragment implement
category.addPreference(preference);
}
- Preference colorPreference = new Preference(context);
+ Preference colorPreference = new Preference(context); // TODO remove this after the next major update
screen.addPreference(colorPreference);
colorPreference.setTitle(str("color_change"));
-
- colorPreference.setOnPreferenceClickListener(preference1 -> {
- CharSequence[] items = new CharSequence[categories.length];
- for (int i = 0; i < items.length; i++) {
- items[i] = categories[i].getTitleWithDot();
- }
-
- new AlertDialog.Builder(context)
- .setTitle(str("color_choose_category"))
- .setItems(items, SponsorBlockUtils.categoryColorChangeClickListener)
- .show();
- return true;
- });
+ colorPreference.setSummary(str("color_change_sum"));
preferencesToDisableWhenSBDisabled.add(colorPreference);
}
diff --git a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java
index db78ce3c..dff52955 100644
--- a/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java
+++ b/app/src/main/java/pl/jakubweg/SponsorBlockUtils.java
@@ -34,13 +34,11 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.graphics.Color;
import android.net.Uri;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.text.Html;
-import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -237,40 +235,6 @@ public abstract class SponsorBlockUtils {
})
.show();
};
- public static final DialogInterface.OnClickListener categoryColorChangeClickListener = (dialog, which) -> {
- SponsorBlockSettings.SegmentInfo segmentInfo = SponsorBlockSettings.SegmentInfo.valuesWithoutUnsubmitted()[which];
- String key = segmentInfo.key + PREFERENCES_KEY_CATEGORY_COLOR_SUFFIX;
-
- Context context = ((AlertDialog) dialog).getContext();
- EditText editText = new EditText(context);
- editText.setInputType(InputType.TYPE_CLASS_TEXT);
- editText.setText(formatColorString(segmentInfo.color));
-
- Context applicationContext = context.getApplicationContext();
- SharedPreferences preferences = SponsorBlockSettings.getPreferences(context);
-
- new AlertDialog.Builder(context)
- .setView(editText)
- .setPositiveButton(str("change"), (dialog1, which1) -> {
- try {
- int color = Color.parseColor(editText.getText().toString());
- segmentInfo.setColor(color);
- Toast.makeText(applicationContext, str("color_changed"), Toast.LENGTH_SHORT).show();
- preferences.edit().putString(key, formatColorString(color)).apply();
- }
- catch (Exception ex) {
- Toast.makeText(applicationContext, str("color_invalid"), Toast.LENGTH_SHORT).show();
- }
- })
- .setNeutralButton(str("reset"), (dialog1, which1) -> {
- int defaultColor = segmentInfo.defaultColor;
- segmentInfo.setColor(defaultColor);
- Toast.makeText(applicationContext, str("color_reset"), Toast.LENGTH_SHORT).show();
- preferences.edit().putString(key, formatColorString(defaultColor)).apply();
- })
- .setNegativeButton(android.R.string.cancel, null)
- .show();
- };
private static final Runnable submitRunnable = () -> {
messageToToast = null;
final String uuid = SponsorBlockSettings.uuid;
diff --git a/app/src/main/java/pl/jakubweg/objects/EditTextListPreference.java b/app/src/main/java/pl/jakubweg/objects/EditTextListPreference.java
new file mode 100644
index 00000000..80b8565b
--- /dev/null
+++ b/app/src/main/java/pl/jakubweg/objects/EditTextListPreference.java
@@ -0,0 +1,97 @@
+package pl.jakubweg.objects;
+
+import static pl.jakubweg.SponsorBlockUtils.formatColorString;
+import static pl.jakubweg.StringRef.str;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.preference.ListPreference;
+import android.text.InputType;
+import android.util.AttributeSet;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import pl.jakubweg.SponsorBlockSettings;
+
+@SuppressWarnings("deprecation")
+public class EditTextListPreference extends ListPreference {
+
+ private EditText mEditText;
+ private int mClickedDialogEntryIndex;
+
+ public EditTextListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public EditTextListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public EditTextListPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public EditTextListPreference(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+ SponsorBlockSettings.SegmentInfo category = getCategoryBySelf();
+
+ mEditText = new EditText(builder.getContext());
+ mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
+ mEditText.setText(formatColorString(category.color));
+ builder.setView(mEditText);
+
+ builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
+ EditTextListPreference.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
+ });
+ builder.setNeutralButton(str("reset"), (dialog, which) -> {
+ //EditTextListPreference.this.onClick(dialog, DialogInterface.BUTTON_NEUTRAL);
+ int defaultColor = category.defaultColor;
+ category.setColor(defaultColor);
+ Toast.makeText(getContext().getApplicationContext(), str("color_reset"), Toast.LENGTH_SHORT).show();
+ getSharedPreferences().edit().putString(getColorPreferenceKey(), formatColorString(defaultColor)).apply();
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+
+ mClickedDialogEntryIndex = findIndexOfValue(getValue());
+ builder.setSingleChoiceItems(getEntries(), mClickedDialogEntryIndex, (dialog, which) -> mClickedDialogEntryIndex = which);
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ if (positiveResult && mClickedDialogEntryIndex >= 0 && getEntryValues() != null) {
+ String value = getEntryValues()[mClickedDialogEntryIndex].toString();
+ if (callChangeListener(value)) {
+ setValue(value);
+ }
+ String colorString = mEditText.getText().toString();
+ SponsorBlockSettings.SegmentInfo category = getCategoryBySelf();
+ if (colorString.equals(formatColorString(category.color))) {
+ return;
+ }
+ Context applicationContext = getContext().getApplicationContext();
+ try {
+ int color = Color.parseColor(colorString);
+ category.setColor(color);
+ Toast.makeText(applicationContext, str("color_changed"), Toast.LENGTH_SHORT).show();
+ getSharedPreferences().edit().putString(getColorPreferenceKey(), formatColorString(color)).apply();
+ }
+ catch (Exception ex) {
+ Toast.makeText(applicationContext, str("color_invalid"), Toast.LENGTH_SHORT).show();
+ }
+ }
+ }
+
+ private SponsorBlockSettings.SegmentInfo getCategoryBySelf() {
+ return SponsorBlockSettings.SegmentInfo.byCategoryKey(getKey());
+ }
+
+ private String getColorPreferenceKey() {
+ return getKey() + SponsorBlockSettings.PREFERENCES_KEY_CATEGORY_COLOR_SUFFIX;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2779c181..a2ea7edb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -330,7 +330,8 @@
You\'ve skipped <b>%s</b> segments.
That\'s <b>%s</b>.
minutes
- Change colors
+ Are you looking for changing colors?
+ You can now change a category\'s color by clicking on it above.
Choose the category
Color changed
Color reset