From 8a33897f3a15f3a58d4f6253c1fde7646086a5fc Mon Sep 17 00:00:00 2001 From: Christian Sadilek Date: Fri, 7 Feb 2020 14:54:08 -0500 Subject: [PATCH] For #8201: Enable/Disable uBlock button status isn't updated --- .../addons/InstalledAddonDetailsFragment.kt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt index 43540a3ae..e42557d31 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/InstalledAddonDetailsFragment.kt @@ -15,9 +15,16 @@ import androidx.navigation.Navigation import androidx.navigation.findNavController import kotlinx.android.synthetic.main.activity_addons.view.* import kotlinx.android.synthetic.main.fragment_installed_add_on_details.view.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.map import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.ui.translate import mozilla.components.feature.addons.ui.translatedName +import mozilla.components.lib.state.ext.flowScoped +import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.showToolbar @@ -27,6 +34,7 @@ import org.mozilla.fenix.ext.showToolbar */ class InstalledAddonDetailsFragment : Fragment() { private lateinit var addon: Addon + private var scope: CoroutineScope? = null override fun onCreateView( inflater: LayoutInflater, @@ -42,6 +50,31 @@ class InstalledAddonDetailsFragment : Fragment() { } } + @UseExperimental(ExperimentalCoroutinesApi::class) + override fun onStart() { + super.onStart() + scope = requireContext().components.core.store.flowScoped { flow -> + flow.ifChanged { it.extensions } + .map { it.extensions.filterValues { extension -> extension.id == addon.id } } + .ifChanged() + .collect { + val addonState = it[addon.id] + if (addonState != null && addonState.enabled != addon.isEnabled()) { + view?.let { view -> + val newState = addon.installedState?.copy(enabled = addonState.enabled) + this.addon = addon.copy(installedState = newState) + view.enable_switch.setState(addon.isEnabled()) + } + } + } + } + } + + override fun onStop() { + super.onStop() + scope?.cancel() + } + private fun bind(view: View) { val title = addon.translatableName.translate() showToolbar(title)