From dbe268b8e90a63d2ad1ab2c04a4f68c08043e6f6 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Thu, 30 Jun 2016 07:23:28 -0400 Subject: [PATCH] Add simple filter to menu --- .../org/isoron/uhabits/BaseComponent.java | 2 + .../ui/habits/list/ListHabitsActivity.java | 11 ---- .../ui/habits/list/ListHabitsMenu.java | 62 ++++++++++++++---- .../habits/list/model/HabitCardListCache.java | 1 + .../org/isoron/uhabits/utils/Preferences.java | 20 ++++++ .../drawable-hdpi/ic_action_filter_dark.png | Bin 0 -> 111 bytes .../drawable-hdpi/ic_action_filter_light.png | Bin 0 -> 107 bytes .../drawable-mdpi/ic_action_filter_dark.png | Bin 0 -> 90 bytes .../drawable-mdpi/ic_action_filter_light.png | Bin 0 -> 89 bytes .../drawable-xhdpi/ic_action_filter_dark.png | Bin 0 -> 103 bytes .../drawable-xhdpi/ic_action_filter_light.png | Bin 0 -> 103 bytes .../drawable-xxhdpi/ic_action_filter_dark.png | Bin 0 -> 107 bytes .../ic_action_filter_light.png | Bin 0 -> 112 bytes .../ic_action_filter_dark.png | Bin 0 -> 106 bytes .../ic_action_filter_light.png | Bin 0 -> 123 bytes app/src/main/res/layout/filter.xml | 31 +++++++++ .../{main_activity.xml => list_habits.xml} | 26 ++++++-- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 2 + 20 files changed, 129 insertions(+), 29 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_action_filter_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_filter_light.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_filter_dark.png create mode 100644 app/src/main/res/drawable-mdpi/ic_action_filter_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_filter_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_filter_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png create mode 100644 app/src/main/res/layout/filter.xml rename app/src/main/res/menu/{main_activity.xml => list_habits.xml} (75%) diff --git a/app/src/main/java/org/isoron/uhabits/BaseComponent.java b/app/src/main/java/org/isoron/uhabits/BaseComponent.java index feb93f511..86ca692ef 100644 --- a/app/src/main/java/org/isoron/uhabits/BaseComponent.java +++ b/app/src/main/java/org/isoron/uhabits/BaseComponent.java @@ -95,4 +95,6 @@ public interface BaseComponent void inject(BaseWidget baseWidget); void inject(WidgetUpdater widgetManager); + + void inject(ListHabitsMenu listHabitsMenu); } diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java index d4440c178..f5d54179f 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsActivity.java @@ -61,17 +61,6 @@ public class ListHabitsActivity extends BaseActivity system = new BaseSystem(this); adapter = new HabitCardListAdapter(habits, checkmarkCount); -// List colors = new ArrayList<>(); -// colors.add(0); -// colors.add(1); -// colors.add(2); -// -// HabitMatcher matcher = new HabitMatcherBuilder() -// .setArchivedAllowed(false) -// .setAllowedColors(colors) -// .build(); -// adapter.setFilter(matcher); - rootView = new ListHabitsRootView(this, adapter); screen = new ListHabitsScreen(this, rootView); menu = new ListHabitsMenu(this, screen, adapter); diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsMenu.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsMenu.java index b518a33be..d4017e366 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsMenu.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/ListHabitsMenu.java @@ -19,32 +19,43 @@ package org.isoron.uhabits.ui.habits.list; -import android.support.annotation.NonNull; -import android.view.Menu; -import android.view.MenuItem; +import android.support.annotation.*; +import android.view.*; -import org.isoron.uhabits.R; -import org.isoron.uhabits.ui.BaseActivity; -import org.isoron.uhabits.ui.BaseMenu; +import org.isoron.uhabits.*; +import org.isoron.uhabits.models.*; +import org.isoron.uhabits.ui.*; import org.isoron.uhabits.ui.habits.list.model.*; -import org.isoron.uhabits.utils.InterfaceUtils; +import org.isoron.uhabits.utils.*; + +import javax.inject.*; public class ListHabitsMenu extends BaseMenu { @NonNull private final ListHabitsScreen screen; + private final HabitCardListAdapter adapter; + private boolean showArchived; - private final HabitCardListAdapter adapter; + private boolean showCompleted; + + @Inject + Preferences preferences; public ListHabitsMenu(@NonNull BaseActivity activity, @NonNull ListHabitsScreen screen, @NonNull HabitCardListAdapter adapter) { super(activity); + HabitsApplication.getComponent().inject(this); this.screen = screen; this.adapter = adapter; + + showCompleted = preferences.getShowCompleted(); + showArchived = preferences.getShowArchived(); + updateAdapterFilter(); } @Override @@ -55,6 +66,9 @@ public class ListHabitsMenu extends BaseMenu MenuItem showArchivedItem = menu.findItem(R.id.action_show_archived); showArchivedItem.setChecked(showArchived); + + MenuItem showCompletedItem = menu.findItem(R.id.actionShowCompleted); + showCompletedItem.setChecked(showCompleted); } @Override @@ -83,8 +97,12 @@ public class ListHabitsMenu extends BaseMenu return true; case R.id.action_show_archived: - showArchived = !showArchived; - adapter.setShowArchived(showArchived); + toggleShowArchived(); + invalidate(); + return true; + + case R.id.actionShowCompleted: + toggleShowCompleted(); invalidate(); return true; @@ -96,6 +114,28 @@ public class ListHabitsMenu extends BaseMenu @Override protected int getMenuResourceId() { - return R.menu.main_activity; + return R.menu.list_habits; + } + + private void toggleShowArchived() + { + showArchived = !showArchived; + preferences.setShowArchived(showArchived); + updateAdapterFilter(); + } + + private void toggleShowCompleted() + { + showCompleted = !showCompleted; + preferences.setShowCompleted(showCompleted); + updateAdapterFilter(); + } + + private void updateAdapterFilter() + { + adapter.setFilter(new HabitMatcherBuilder() + .setArchivedAllowed(showArchived) + .setCompletedAllowed(showCompleted) + .build()); } } diff --git a/app/src/main/java/org/isoron/uhabits/ui/habits/list/model/HabitCardListCache.java b/app/src/main/java/org/isoron/uhabits/ui/habits/list/model/HabitCardListCache.java index 6edb3be10..e41789c14 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/habits/list/model/HabitCardListCache.java +++ b/app/src/main/java/org/isoron/uhabits/ui/habits/list/model/HabitCardListCache.java @@ -172,6 +172,7 @@ public class HabitCardListCache implements CommandRunner.Listener public void setFilter(HabitMatcher matcher) { filteredHabits = allHabits.getFiltered(matcher); + refreshAllHabits(true); } public void setListener(@Nullable Listener listener) diff --git a/app/src/main/java/org/isoron/uhabits/utils/Preferences.java b/app/src/main/java/org/isoron/uhabits/utils/Preferences.java index 73a9e729b..22c631df6 100644 --- a/app/src/main/java/org/isoron/uhabits/utils/Preferences.java +++ b/app/src/main/java/org/isoron/uhabits/utils/Preferences.java @@ -61,6 +61,16 @@ public class Preferences return prefs.getLong("last_hint_timestamp", -1); } + public boolean getShowArchived() + { + return prefs.getBoolean("pref_show_archived", false); + } + + public boolean getShowCompleted() + { + return prefs.getBoolean("pref_show_completed", true); + } + public void incrementLaunchCount() { int count = prefs.getInt("launch_count", 0); @@ -105,6 +115,16 @@ public class Preferences .apply(); } + public void setShowCompleted(boolean showCompleted) + { + prefs.edit().putBoolean("pref_show_completed", showCompleted).apply(); + } + + public void setShowArchived(boolean showArchived) + { + prefs.edit().putBoolean("pref_show_archived", showArchived).apply(); + } + public boolean shouldReverseCheckmarks() { return prefs.getBoolean("pref_checkmark_reverse_order", false); diff --git a/app/src/main/res/drawable-hdpi/ic_action_filter_dark.png b/app/src/main/res/drawable-hdpi/ic_action_filter_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8a6b536bdfcba999ba36bfdba7ca975fd7b68c GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;nWu|mh)3t!ix)W=3^|k0wldT1B8K;k*AAeNCo5DGm3l+3L=Lu)PK2K z6(dWz6@&-RC`6Y)gifU*)TCiW4)t2FXm;2ua);ke1YA>Asd=;ph!PC{xWt~$( F69B-SBB1~P literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_filter_dark.png b/app/src/main/res/drawable-mdpi/ic_action_filter_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..59a2ec755e90e6be335d3d6c79ede6d85a7ed488 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1MNb#U5R22v2@&Hr5(PMPpn nt`GJgTe~DWM4fp6nTa literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_action_filter_light.png b/app/src/main/res/drawable-mdpi/ic_action_filter_light.png new file mode 100644 index 0000000000000000000000000000000000000000..d86492b42df06096c171dc7b2cb2a893de183fb2 GIT binary patch literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*11y2{pkP60R1;(DH|1F9qrP{V# m*Sun|#l~NmcSeE;1A|e9^WOQ_&q)E*GI+ZBxvX?Mkcif|mkfCs7&s0X{F%+h z&%)%Mop4@>VctnaroRklqT+)Y_}1iWG8C+2XgDPM|LJEjE1*sWPgg&ebxsLQ0G~@6 Ar~m)} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_filter_light.png b/app/src/main/res/drawable-xhdpi/ic_action_filter_light.png new file mode 100644 index 0000000000000000000000000000000000000000..b64df3612a16d378c6cea2299ab28c16c39252b7 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}a}tJx>?MkP61Pmkk9O9C(-xe$W4< z+^EJn^QP;8P@4v;`gEqsfM2hC7=F!@<&mdKI;Vst0N}G6 AdH?_b literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_filter_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1263ae82e71dfbfd5aba9a11483442542e74ce15 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^9w5vJBp7O^^}Pa8OeH~n!3+##lh0ZJc`BYRjv*C{ z$r6(m{IloyqulHooWQ^35x=C46!WwH>?aa9)4kR*{W|XsGR4!?&t;ucLK6Tv CS{)|< literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png b/app/src/main/res/drawable-xxhdpi/ic_action_filter_light.png new file mode 100644 index 0000000000000000000000000000000000000000..2314642f936d4617377df066a4837b44b18a53ba GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw%spKkLo)8Yy|R&!fq{j^@VEY1 zE)kPS@efw@GcYu)w3(yeXy43W@jK74iG^{)mj_KOoJzG^v6L%NQOF98Gg2B_( K&t;ucLK6U<10nJN literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png b/app/src/main/res/drawable-xxxhdpi/ic_action_filter_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2207f11fb53879554df5541522fa4ee564e975 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^2_Vb}Bp6OT_L>T$m`Z~Df*BafCZDwc@{~PY978G? zlNE$}nEw3__|Q0Q&OttfcS{V@Ia-)>EuS<8GB8}PYOf6O+;0yu#M9N!Wt~$(6988y B9v1)r literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png b/app/src/main/res/drawable-xxxhdpi/ic_action_filter_light.png new file mode 100644 index 0000000000000000000000000000000000000000..9319c4bb41a21feaae9739dc5ffa5ad3eb1fe5e4 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0R?HmZtAK52P4Ng8YIR z9G=}s19Fr-T^vIy7?Tx*dzk+H5BShHZO%bHg?CE~(>Yq0bS + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_activity.xml b/app/src/main/res/menu/list_habits.xml similarity index 75% rename from app/src/main/res/menu/main_activity.xml rename to app/src/main/res/menu/list_habits.xml index 958594485..5ad16cd12 100644 --- a/app/src/main/res/menu/main_activity.xml +++ b/app/src/main/res/menu/list_habits.xml @@ -29,19 +29,31 @@ app:showAsAction="ifRoom"/> + android:id="@+id/action_filter" + android:icon="?iconFilter" + android:title="@string/filter" + app:showAsAction="ifRoom"> + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 23f9e3719..b5a25def8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -180,4 +180,6 @@ Score Reminder sound None + Filter + Show completed \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 94bf2a851..0a71982e7 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -56,6 +56,7 @@ @drawable/ic_action_edit_dark @drawable/ic_action_unarchive_dark @drawable/ic_action_color_dark + @drawable/ic_action_filter_dark @drawable/ic_repeat_black @drawable/ic_alarm_black @drawable/ic_action_color_light @@ -106,6 +107,7 @@ @drawable/ic_action_archive_dark @drawable/ic_action_edit_dark @drawable/ic_action_unarchive_dark + @drawable/ic_action_filter_dark @drawable/ic_action_color_dark @drawable/ic_action_color_dark @drawable/ic_repeat_white