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
parent
10f334303d
commit
d1d20b544e
|
@ -85,10 +85,10 @@ open class HomeActivity : AppCompatActivity() {
|
||||||
final override fun onCreate(savedInstanceState: Bundle?) {
|
final override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
setPrivateModeIfNecessary()
|
val mode = setPrivateModeIfNecessary()
|
||||||
|
|
||||||
components.publicSuffixList.prefetch()
|
components.publicSuffixList.prefetch()
|
||||||
setupThemeAndBrowsingMode()
|
setupThemeAndBrowsingMode(mode)
|
||||||
|
|
||||||
setContentView(R.layout.activity_home)
|
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
|
* External sources such as 3rd party links and shortcuts use this function to enter
|
||||||
* private mode directly before the content view is created.
|
* private mode directly before the content view is created.
|
||||||
*/
|
*/
|
||||||
private fun setPrivateModeIfNecessary() {
|
private fun setPrivateModeIfNecessary(): BrowsingMode {
|
||||||
intent?.toSafeIntent()?.let {
|
intent?.toSafeIntent()?.let {
|
||||||
if (it.hasExtra(PRIVATE_BROWSING_MODE)) {
|
if (it.hasExtra(PRIVATE_BROWSING_MODE)) {
|
||||||
val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false)
|
val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false)
|
||||||
settings().usePrivateMode = startPrivateMode
|
|
||||||
intent.removeExtra(PRIVATE_BROWSING_MODE)
|
intent.removeExtra(PRIVATE_BROWSING_MODE)
|
||||||
|
|
||||||
|
return BrowsingMode.fromBoolean(isPrivate = startPrivateMode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return BrowsingMode.Normal
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupThemeAndBrowsingMode() {
|
private fun setupThemeAndBrowsingMode(mode: BrowsingMode) {
|
||||||
browsingModeManager = createBrowsingModeManager()
|
browsingModeManager = createBrowsingModeManager(mode)
|
||||||
themeManager = createThemeManager()
|
themeManager = createThemeManager()
|
||||||
themeManager.setActivityTheme(this)
|
themeManager.setActivityTheme(this)
|
||||||
themeManager.applyStatusBarTheme(this)
|
themeManager.applyStatusBarTheme(this)
|
||||||
|
@ -317,9 +319,9 @@ open class HomeActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun createBrowsingModeManager(): BrowsingModeManager {
|
protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager {
|
||||||
return DefaultBrowsingModeManager(settings()) { mode ->
|
return DefaultBrowsingModeManager(initialMode) { newMode ->
|
||||||
themeManager.currentTheme = mode
|
themeManager.currentTheme = newMode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,14 +31,18 @@ interface BrowsingModeManager {
|
||||||
var mode: BrowsingMode
|
var mode: BrowsingMode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps a [BrowsingMode] and executes a callback whenever [mode] is updated.
|
||||||
|
*/
|
||||||
class DefaultBrowsingModeManager(
|
class DefaultBrowsingModeManager(
|
||||||
private val settings: Settings,
|
private var _mode: BrowsingMode,
|
||||||
private val modeDidChange: (BrowsingMode) -> Unit
|
private val modeDidChange: (BrowsingMode) -> Unit
|
||||||
) : BrowsingModeManager {
|
) : BrowsingModeManager {
|
||||||
|
|
||||||
override var mode: BrowsingMode
|
override var mode: BrowsingMode
|
||||||
get() = BrowsingMode.fromBoolean(settings.usePrivateMode)
|
get() = _mode
|
||||||
set(value) {
|
set(value) {
|
||||||
settings.usePrivateMode = value.isPrivate
|
_mode = value
|
||||||
modeDidChange(value)
|
modeDidChange(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import mozilla.components.support.utils.SafeIntent
|
||||||
import org.mozilla.fenix.BrowserDirection
|
import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.NavGraphDirections
|
import org.mozilla.fenix.NavGraphDirections
|
||||||
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.browser.browsingmode.CustomTabBrowsingModeManager
|
import org.mozilla.fenix.browser.browsingmode.CustomTabBrowsingModeManager
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.ext.components
|
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()
|
CustomTabBrowsingModeManager()
|
||||||
|
|
||||||
final override fun createThemeManager() = CustomTabThemeManager()
|
final override fun createThemeManager() = CustomTabThemeManager()
|
||||||
|
|
Loading…
Reference in New Issue