Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ccf518f authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

Merge branch...

Merge branch '4147-app-lounge-logs-out-the-user-when-only-1-store-is-enabled-and-user-goes-another-screen' into 'main'

fix(settings): fix switching to sign-in screen while single source was checked and clicked/tapped

See merge request !699
parents b7d1480c ad39b2ec
Loading
Loading
Loading
Loading
Loading
+37 −21
Original line number Diff line number Diff line
@@ -154,30 +154,46 @@ class SettingsFragment : PreferenceFragmentCompat() {
     */
    private val sourceCheckboxListener =
        OnPreferenceChangeListener { preference: Preference, newValue: Any? ->
            val isChecked = newValue == true

            when (preference.key) {
                Constants.PREFERENCE_SHOW_GPLAY -> updateStore(Source.PLAY_STORE, newValue == true)
                Constants.PREFERENCE_SHOW_FOSS -> updateStore(Source.OPEN_SOURCE, newValue == true)
                Constants.PREFERENCE_SHOW_PWA -> updateStore(Source.PWA, newValue == true)
            if (!isChecked && isOnlyRemainingSourceChecked(preference)) {
                showOnlyRemainingSourceWarning(preference)
                return@OnPreferenceChangeListener false
            }

            sourcesChangedFlag = true
            loginViewModel.authObjects.value = null
            applySourceChange(preference, isChecked)
            true
        }

            val otherBoxesChecked =
                allSourceCheckboxes.filter { it != preference }.any { it?.isChecked == true }
    private fun isOnlyRemainingSourceChecked(preference: Preference): Boolean {
        return allSourceCheckboxes
            .filter { it != preference }
            .none { it?.isChecked == true }
    }

            if (newValue == false && !otherBoxesChecked) {
                (preference as CheckBoxPreference).isChecked = true
    private fun showOnlyRemainingSourceWarning(preference: Preference) {
        (preference as? CheckBoxPreference)?.isChecked = true
        Toast.makeText(
            requireActivity(),
            R.string.select_one_source_of_applications,
            Toast.LENGTH_SHORT
        ).show()
                false
            } else {
                true
    }

    private fun applySourceChange(preference: Preference, isEnabled: Boolean) {
        val sourceMap = mapOf(
            Constants.PREFERENCE_SHOW_GPLAY to Source.PLAY_STORE,
            Constants.PREFERENCE_SHOW_FOSS to Source.OPEN_SOURCE,
            Constants.PREFERENCE_SHOW_PWA to Source.PWA
        )

        val source = sourceMap[preference.key]
            ?: error("No Source mapping found for preference key: ${preference.key}")

        updateStore(source, isEnabled)

        sourcesChangedFlag = true
        loginViewModel.authObjects.value = null
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {