From d1d20b544e80b266aa5556a6a1e5ba1abfabd815 Mon Sep 17 00:00:00 2001 From: Severin Rudie Date: Mon, 7 Oct 2019 10:51:09 -0700 Subject: [PATCH] For 4780: update HomeActivity to maintain private mode in memory As an added bonus, this makes the temporal coupling between `setPrivateModeIfNecessary` and `setupThemeAndBrowsingMode` explicit. They previously would have broken if called in reverse order, now it will fail to compile. --- .../java/org/mozilla/fenix/HomeActivity.kt | 20 ++++++++++--------- .../browsingmode/BrowsingModeManager.kt | 10 +++++++--- .../customtabs/ExternalAppBrowserActivity.kt | 3 ++- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 54033f446..3ff2812b4 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -85,10 +85,10 @@ open class HomeActivity : AppCompatActivity() { final override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setPrivateModeIfNecessary() + val mode = setPrivateModeIfNecessary() components.publicSuffixList.prefetch() - setupThemeAndBrowsingMode() + setupThemeAndBrowsingMode(mode) setContentView(R.layout.activity_home) @@ -191,18 +191,20 @@ open class HomeActivity : AppCompatActivity() { * External sources such as 3rd party links and shortcuts use this function to enter * private mode directly before the content view is created. */ - private fun setPrivateModeIfNecessary() { + private fun setPrivateModeIfNecessary(): BrowsingMode { intent?.toSafeIntent()?.let { if (it.hasExtra(PRIVATE_BROWSING_MODE)) { val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false) - settings().usePrivateMode = startPrivateMode intent.removeExtra(PRIVATE_BROWSING_MODE) + + return BrowsingMode.fromBoolean(isPrivate = startPrivateMode) } } + return BrowsingMode.Normal } - private fun setupThemeAndBrowsingMode() { - browsingModeManager = createBrowsingModeManager() + private fun setupThemeAndBrowsingMode(mode: BrowsingMode) { + browsingModeManager = createBrowsingModeManager(mode) themeManager = createThemeManager() themeManager.setActivityTheme(this) themeManager.applyStatusBarTheme(this) @@ -317,9 +319,9 @@ open class HomeActivity : AppCompatActivity() { } } - protected open fun createBrowsingModeManager(): BrowsingModeManager { - return DefaultBrowsingModeManager(settings()) { mode -> - themeManager.currentTheme = mode + protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager { + return DefaultBrowsingModeManager(initialMode) { newMode -> + themeManager.currentTheme = newMode } } diff --git a/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt b/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt index cd8c8faba..4889eace3 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt @@ -31,14 +31,18 @@ interface BrowsingModeManager { var mode: BrowsingMode } +/** + * Wraps a [BrowsingMode] and executes a callback whenever [mode] is updated. + */ class DefaultBrowsingModeManager( - private val settings: Settings, + private var _mode: BrowsingMode, private val modeDidChange: (BrowsingMode) -> Unit ) : BrowsingModeManager { + override var mode: BrowsingMode - get() = BrowsingMode.fromBoolean(settings.usePrivateMode) + get() = _mode set(value) { - settings.usePrivateMode = value.isPrivate + _mode = value modeDidChange(value) } } diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt index ccee13230..a1b08e668 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -11,6 +11,7 @@ import mozilla.components.support.utils.SafeIntent import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.NavGraphDirections +import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.CustomTabBrowsingModeManager import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components @@ -42,7 +43,7 @@ open class ExternalAppBrowserActivity : HomeActivity() { ) } - final override fun createBrowsingModeManager() = + final override fun createBrowsingModeManager(initialMode: BrowsingMode) = CustomTabBrowsingModeManager() final override fun createThemeManager() = CustomTabThemeManager()