From e0e7ba5a436fcd48aa4bed08af9d6321628c187a Mon Sep 17 00:00:00 2001 From: Emily Kager Date: Tue, 14 May 2019 13:02:44 -0700 Subject: [PATCH] For #2302 - Listen to session to update QuickSettingsSheetDialogFragment --- .../mozilla/fenix/browser/BrowserFragment.kt | 10 ++-- .../QuickSettingsSheetDialogFragment.kt | 51 +++++++++++++++++++ app/src/main/res/navigation/nav_graph.xml | 3 ++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index f48a62226..f1acc0155 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -659,15 +659,17 @@ class BrowserFragment : Fragment(), BackHandler, CoroutineScope, private fun showQuickSettingsDialog() { val session = requireNotNull(getSessionById()) - val host = requireNotNull(session.url.toUri()?.host) - launch { - val storage = requireContext().components.storage - val sitePermissions: SitePermissions? = storage.findSitePermissionsBy(host) + val host = session.url.toUri()?.host + val sitePermissions: SitePermissions? = host?.let { + val storage = requireContext().components.storage + storage.findSitePermissionsBy(it) + } launch(Main) { view?.let { val directions = BrowserFragmentDirections.actionBrowserFragmentToQuickSettingsSheetDialogFragment( + sessionId = session.id, url = session.url, isSecured = session.securityInfo.secure, isTrackingProtectionOn = session.trackerBlockingEnabled, diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt index 6fff6a599..cd67473fa 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsSheetDialogFragment.kt @@ -23,7 +23,9 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import mozilla.components.browser.session.Session import mozilla.components.feature.sitepermissions.SitePermissions +import mozilla.components.support.ktx.kotlin.toUri import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.BrowserFragment @@ -43,6 +45,7 @@ private const val REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS = 4 @SuppressWarnings("TooManyFunctions") class QuickSettingsSheetDialogFragment : AppCompatDialogFragment(), CoroutineScope { private val safeArguments get() = requireNotNull(arguments) + private val sessionId: String by lazy { QuickSettingsSheetDialogFragmentArgs.fromBundle(safeArguments).sessionId } private val url: String by lazy { QuickSettingsSheetDialogFragmentArgs.fromBundle(safeArguments).url } private val isSecured: Boolean by lazy { QuickSettingsSheetDialogFragmentArgs.fromBundle(safeArguments).isSecured } private val isTrackingProtectionOn: Boolean by lazy { @@ -68,6 +71,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment(), CoroutineSco ): View { sitePermissions = QuickSettingsSheetDialogFragmentArgs.fromBundle(safeArguments).sitePermissions val rootView = inflateRootView(container) + requireComponents.core.sessionManager.findSessionById(sessionId)?.register(sessionObserver, view = rootView) quickSettingsComponent = QuickSettingsComponent( rootView as NestedScrollView, this, ActionBusFactory.get(this), QuickSettingsState( @@ -218,4 +222,51 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment(), CoroutineSco .onNext(QuickSettingsChange.PromptRestarted(sitePermissions)) } } + + private val sessionObserver = object : Session.Observer { + override fun onUrlChanged(session: Session, url: String) { + super.onUrlChanged(session, url) + launch { + val host = session.url.toUri()?.host + val sitePermissions: SitePermissions? = host?.let { + val storage = requireContext().components.storage + storage.findSitePermissionsBy(it) + } + launch(Dispatchers.Main) { + getManagedEmitter().onNext( + QuickSettingsChange.Change( + url, + session.securityInfo.secure, + session.trackerBlockingEnabled, + sitePermissions + ) + ) + } + } + } + + override fun onTrackerBlockingEnabledChanged(session: Session, blockingEnabled: Boolean) { + super.onTrackerBlockingEnabledChanged(session, blockingEnabled) + getManagedEmitter().onNext( + QuickSettingsChange.Change( + session.url, + session.securityInfo.secure, + blockingEnabled, + sitePermissions + ) + ) + } + + override fun onSecurityChanged(session: Session, securityInfo: Session.SecurityInfo) { + super.onSecurityChanged(session, securityInfo) + getManagedEmitter().onNext( + QuickSettingsChange.Change( + session.url, + securityInfo.secure, + session.trackerBlockingEnabled, + sitePermissions + ) + ) + } + } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index a3429b629..a56a98b91 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -318,6 +318,9 @@ android:id="@+id/quickSettingsSheetDialogFragment" android:name="org.mozilla.fenix.settings.quicksettings.QuickSettingsSheetDialogFragment" android:label="QuickSettingsSheetDialogFragment" > +