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 @@