Commit d1d20b54 authored by Severin Rudie's avatar Severin Rudie Committed by Emily Kager
Browse files

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.
parent 10f33430
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -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
        }
    }

+7 −3
Original line number Diff line number Diff line
@@ -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)
        }
}
+2 −1
Original line number Diff line number Diff line
@@ -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()