From 3ea21fe8231e4ea84c3cd8db871ddff69e6e68f0 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Fri, 2 Sep 2016 21:13:56 -0400 Subject: [PATCH] Update order of checkmark buttons automatically upon exiting settings --- .../habits/list/views/CheckmarkPanelView.java | 22 +++++++++++- .../uhabits/preferences/Preferences.java | 35 ++++++++++++++++--- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java index 3a741f7c2..6e3a01dfa 100644 --- a/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java +++ b/app/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.java @@ -33,7 +33,7 @@ import org.isoron.uhabits.utils.*; import static android.view.View.MeasureSpec.*; -public class CheckmarkPanelView extends LinearLayout +public class CheckmarkPanelView extends LinearLayout implements Preferences.Listener { private static final int CHECKMARK_LEFT_TO_RIGHT = 0; @@ -178,6 +178,26 @@ public class CheckmarkPanelView extends LinearLayout } } + @Override + protected void onAttachedToWindow() + { + super.onAttachedToWindow(); + prefs.addListener(this); + } + + @Override + protected void onDetachedFromWindow() + { + prefs.removeListener(this); + super.onDetachedFromWindow(); + } + + @Override + public void onCheckmarkOrderChanged() + { + setupCheckmarkButtons(); + } + public interface Controller extends CheckmarkButtonController.Listener { diff --git a/app/src/main/java/org/isoron/uhabits/preferences/Preferences.java b/app/src/main/java/org/isoron/uhabits/preferences/Preferences.java index 6cf2f7b12..9b5b7ea09 100644 --- a/app/src/main/java/org/isoron/uhabits/preferences/Preferences.java +++ b/app/src/main/java/org/isoron/uhabits/preferences/Preferences.java @@ -25,6 +25,8 @@ import android.preference.*; import org.isoron.uhabits.*; import org.isoron.uhabits.activities.*; +import java.util.*; + import javax.inject.*; @AppScope @@ -37,15 +39,23 @@ public class Preferences private Boolean shouldReverseCheckmarks = null; + private LinkedList listeners; + @Inject public Preferences(@AppContext Context context) { this.context = context; + listeners = new LinkedList<>(); prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.registerOnSharedPreferenceChangeListener(this); } + public void addListener(Listener listener) + { + listeners.add(listener); + } + public Integer getDefaultHabitColor(int fallbackColor) { return prefs.getInt("pref_default_habit_palette_color", fallbackColor); @@ -59,11 +69,6 @@ public class Preferences return defaultScoreInterval; } - public long getSnoozeInterval() - { - return Long.parseLong(prefs.getString("pref_snooze_interval", "15")); - } - public void setDefaultScoreSpinnerPosition(int position) { prefs.edit().putInt("pref_score_view_interval", position).apply(); @@ -109,6 +114,11 @@ public class Preferences prefs.edit().putBoolean("pref_show_completed", showCompleted).apply(); } + public long getSnoozeInterval() + { + return Long.parseLong(prefs.getString("pref_snooze_interval", "15")); + } + public int getTheme() { return prefs.getInt("pref_theme", ThemeSwitcher.THEME_LIGHT); @@ -155,7 +165,15 @@ public class Preferences String key) { if (key.equals("pref_checkmark_reverse_order")) + { shouldReverseCheckmarks = null; + for(Listener l : listeners) l.onCheckmarkOrderChanged(); + } + } + + public void removeListener(Listener listener) + { + listeners.remove(listener); } public void setDefaultHabitColor(int color) @@ -170,6 +188,8 @@ public class Preferences .edit() .putBoolean("pref_checkmark_reverse_order", reverse) .apply(); + + for(Listener l : listeners) l.onCheckmarkOrderChanged(); } public boolean shouldReverseCheckmarks() @@ -199,4 +219,9 @@ public class Preferences .putLong("last_hint_timestamp", timestamp) .apply(); } + + public interface Listener + { + default void onCheckmarkOrderChanged() {} + } }