1
0
Fork 0

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.
master
Severin Rudie 2019-10-07 10:51:09 -07:00 committed by Emily Kager
parent 10f334303d
commit d1d20b544e
3 changed files with 20 additions and 13 deletions

View File

@ -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
}
}

View File

@ -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)
}
}

View File

@ -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()