diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt index 572ae0af1..53d12a28c 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt @@ -33,15 +33,32 @@ class ListHabitsMenu @Inject constructor( private val preferences: Preferences, private val themeSwitcher: ThemeSwitcher, private val behavior: ListHabitsMenuBehavior -) : BaseMenu(activity) { +) : BaseMenu(activity), Preferences.Listener { + + private lateinit var topBarMenu: Menu override fun onCreate(menu: Menu) { val nightModeItem = menu.findItem(R.id.actionToggleNightMode) val hideArchivedItem = menu.findItem(R.id.actionHideArchived) val hideCompletedItem = menu.findItem(R.id.actionHideCompleted) + nightModeItem.isChecked = themeSwitcher.isNightMode hideArchivedItem.isChecked = !preferences.showArchived hideCompletedItem.isChecked = !preferences.showCompleted + + + topBarMenu = menu + //the habit creation menu should be disabled when numeric habits are also disabled + if (!preferences.isNumericalHabitsFeatureEnabled) { + setCreateHabitMenuEnabled(false, menu) + } + //let the class add itself as listener + preferences.addListener(this) + } + + override fun onNumericalHabitsFeatureChanged() { + if(topBarMenu==null){return} + setCreateHabitMenuEnabled(preferences.isNumericalHabitsFeatureEnabled, topBarMenu) } override fun onItemSelected(item: MenuItem): Boolean { @@ -107,5 +124,18 @@ class ListHabitsMenu @Inject constructor( } } + /** + * @param enabled whether the create habit menu should be enabled or disabled + * @param menu a reference to the menu on which should be enabled or disabled + */ + fun setCreateHabitMenuEnabled(enabled: Boolean, menu: Menu) { + val habitCreationMenu = menu.findItem(R.id.actionAdd).subMenu + for (itemIndex: Int in 0 until habitCreationMenu.size()) { + val menuItem = habitCreationMenu.getItem(itemIndex) + menuItem.isEnabled = enabled + menuItem.isVisible = enabled + } + } + override fun getMenuResourceId() = R.menu.list_habits } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt index cc7553deb..5572cbe51 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt @@ -89,6 +89,8 @@ class SharedPreferencesStorage preferences.setNotificationsLed(getBoolean(key, false)) "pref_feature_sync" -> preferences.isSyncEnabled = getBoolean(key, false) + "pref_feature_numerical_habits" -> + preferences.isNumericalHabitsFeatureEnabled = getBoolean(key, false) } sharedPreferences.registerOnSharedPreferenceChangeListener(this) } diff --git a/android/uhabits-android/src/main/res/menu/list_habits.xml b/android/uhabits-android/src/main/res/menu/list_habits.xml index 66ea0b7da..c03d2e5a2 100644 --- a/android/uhabits-android/src/main/res/menu/list_habits.xml +++ b/android/uhabits-android/src/main/res/menu/list_habits.xml @@ -18,15 +18,28 @@ -->
@@ -74,23 +87,23 @@ android:enabled="true" android:orderInCategory="50" android:title="@string/night_mode" - app:showAsAction="never"/> + app:showAsAction="never" />