diff --git a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt index 2642d20f3fef25eee4881d03ec0e0d1275e9075a..3fead6e10740c87f056e088f9552e684de23ddf5 100644 --- a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +++ b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt @@ -29,6 +29,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.findNavController import androidx.preference.CheckBoxPreference import androidx.preference.Preference +import androidx.preference.Preference.OnPreferenceChangeListener import androidx.preference.PreferenceFragmentCompat import androidx.work.ExistingPeriodicWorkPolicy import coil.load @@ -160,6 +161,14 @@ class SettingsFragment : PreferenceFragmentCompat() { super.onViewCreated(view, savedInstanceState) + val autoInstallUpdate = fetchCheckboxPreference(R.string.auto_install_enabled) + val onlyUnmeteredNetwork = fetchCheckboxPreference(R.string.only_unmetered_network) + + setCheckboxDependency(onlyUnmeteredNetwork, autoInstallUpdate) + + // This is useful if a user from older App Lounge updates to this version + disableDependentCheckbox(onlyUnmeteredNetwork, autoInstallUpdate) + mainActivityViewModel.gPlayAuthData.let { authData -> mainActivityViewModel.getUser().name.let { user -> when (user) { @@ -226,6 +235,10 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + private fun fetchCheckboxPreference(id: Int): CheckBoxPreference? { + return findPreference(getString(id)) + } + fun isAnyAppSourceSelected() = showAllApplications?.isChecked == true || showFOSSApplications?.isChecked == true || showPWAApplications?.isChecked == true @@ -238,6 +251,34 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + private fun disableDependentCheckbox( + checkBox: CheckBoxPreference?, + parentCheckBox: CheckBoxPreference? + ) { + checkBox?.apply { + if (parentCheckBox?.isChecked == false) { + this.isChecked = false + this.isEnabled = false + } + } + } + + private fun setCheckboxDependency( + checkBox: CheckBoxPreference?, + parentCheckBox: CheckBoxPreference?, + parentCheckBoxPreferenceChangeListener: OnPreferenceChangeListener? = null, + ) { + checkBox?.dependency = parentCheckBox?.key + parentCheckBox?.onPreferenceChangeListener = + OnPreferenceChangeListener { preference, newValue -> + if (newValue == false) { + checkBox?.isChecked = false + } + parentCheckBoxPreferenceChangeListener?.onPreferenceChange(preference, newValue) + ?: true + } + } + override fun onDestroyView() { if (sourcesChangedFlag) { UpdatesDao.addItemsForUpdate(emptyList()) diff --git a/app/src/main/res/layout/layout_custom_checkbox_preference.xml b/app/src/main/res/layout/layout_custom_checkbox_preference.xml deleted file mode 100644 index 257ccf8608c747f3a1868bc33733ff203e9e9d8f..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/layout_custom_checkbox_preference.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/xml/settings_preferences.xml b/app/src/main/res/xml/settings_preferences.xml index 2672c00a1883bf7dbbcaa731b2c45c163e076cbb..c69f967b44bd9d9c05e3ad969f913bfcaf22f28f 100644 --- a/app/src/main/res/xml/settings_preferences.xml +++ b/app/src/main/res/xml/settings_preferences.xml @@ -33,33 +33,33 @@ android:entries="@array/update_interval_names" android:entryValues="@array/update_interval_values" android:key="@string/update_check_intervals" - android:layout="@layout/layout_custom_checkbox_preference" android:summary="%s" android:title="@string/preference_update_interval_title" + app:singleLineTitle="false" app:iconSpaceReserved="false" /> @@ -70,7 +70,6 @@ @@ -78,7 +77,6 @@ @@ -86,7 +84,6 @@ @@ -100,6 +97,7 @@