Bug 1872885 - Move debug drawer store management from `DebugOverlay` to `FenixOverlay`

fenix/123.0
Noah Bond 5 months ago committed by mergify[bot]
parent 3ddf06c968
commit ece51eebdc

@ -102,8 +102,7 @@ import org.mozilla.fenix.components.metrics.GrowthDataWorker
import org.mozilla.fenix.components.metrics.fonts.FontEnumerationWorker
import org.mozilla.fenix.databinding.ActivityHomeBinding
import org.mozilla.fenix.debugsettings.data.DefaultDebugSettingsRepository
import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
import org.mozilla.fenix.debugsettings.ui.DebugOverlay
import org.mozilla.fenix.debugsettings.ui.FenixOverlay
import org.mozilla.fenix.exceptions.trackingprotection.TrackingProtectionExceptionsFragmentDirections
import org.mozilla.fenix.experiments.ResearchSurfaceDialogFragment
import org.mozilla.fenix.ext.alreadyOnDestination
@ -162,8 +161,6 @@ import org.mozilla.fenix.tabhistory.TabHistoryDialogFragment
import org.mozilla.fenix.tabstray.TabsTrayFragment
import org.mozilla.fenix.tabstray.TabsTrayFragmentDirections
import org.mozilla.fenix.theme.DefaultThemeManager
import org.mozilla.fenix.theme.FirefoxTheme
import org.mozilla.fenix.theme.Theme
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.trackingprotection.TrackingProtectionPanelDialogFragmentDirections
import org.mozilla.fenix.translations.TranslationsDialogFragmentDirections
@ -301,11 +298,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
visibility = View.VISIBLE
setContent {
FirefoxTheme(theme = Theme.getTheme(allowPrivateTheme = false)) {
DebugOverlay(
debugDrawerStore = DebugDrawerStore(),
)
}
FenixOverlay()
}
} else {
setContent {}

@ -13,20 +13,4 @@ import mozilla.components.lib.state.State
*/
data class DebugDrawerState(
val drawerStatus: DrawerStatus = DrawerStatus.Closed,
) : State {
/**
* Possible values of [DebugDrawerState.drawerStatus].
*/
enum class DrawerStatus {
/**
* The state of the drawer when it is closed.
*/
Closed,
/**
* The state of the drawer when it is open.
*/
Open,
}
}
) : State

@ -22,7 +22,7 @@ class DebugDrawerStore(
private fun reduce(state: DebugDrawerState, action: DebugDrawerAction): DebugDrawerState {
return when (action) {
is DebugDrawerAction.DrawerOpened -> state.copy(drawerStatus = DebugDrawerState.DrawerStatus.Open)
is DebugDrawerAction.DrawerClosed -> state.copy(drawerStatus = DebugDrawerState.DrawerStatus.Closed)
is DebugDrawerAction.DrawerOpened -> state.copy(drawerStatus = DrawerStatus.Open)
is DebugDrawerAction.DrawerClosed -> state.copy(drawerStatus = DrawerStatus.Closed)
}
}

@ -0,0 +1,20 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.debugsettings.store
/**
* Possible values of the debug drawer's physical state.
*/
enum class DrawerStatus {
/**
* The state of the drawer when it is closed.
*/
Closed,
/**
* The state of the drawer when it is open.
*/
Open,
}

@ -17,7 +17,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -27,29 +29,25 @@ import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import mozilla.components.lib.state.ext.observeAsState
import org.mozilla.fenix.R
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.compose.button.FloatingActionButton
import org.mozilla.fenix.debugsettings.store.DebugDrawerAction
import org.mozilla.fenix.debugsettings.store.DebugDrawerState
import org.mozilla.fenix.debugsettings.store.DebugDrawerState.DrawerStatus
import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
import org.mozilla.fenix.debugsettings.store.DrawerStatus
import org.mozilla.fenix.theme.FirefoxTheme
/**
* Overlay for presenting Fenix-wide debugging content.
* Overlay for presenting app-wide debugging content.
*
* @param debugDrawerStore [DebugDrawerStore] used to listen for changes to [DebugDrawerState] and
* dispatch any [DebugDrawerAction]s.
* @param drawerStatus The [DrawerStatus] indicating the physical state of the drawer.
* @param onDrawerOpen Invoked when the drawer is opened.
* @param onDrawerClose Invoked when the drawer is closed.
*/
@Composable
fun DebugOverlay(
debugDrawerStore: DebugDrawerStore,
drawerStatus: DrawerStatus,
onDrawerOpen: () -> Unit,
onDrawerClose: () -> Unit,
) {
val drawerStatus by debugDrawerStore.observeAsState(initialValue = DrawerStatus.Closed) { state ->
state.drawerStatus
}
val snackbarState = remember { SnackbarHostState() }
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
@ -64,7 +62,7 @@ fun DebugOverlay(
.distinctUntilChanged()
.filter { it == DrawerValue.Closed }
.collect {
debugDrawerStore.dispatch(DebugDrawerAction.DrawerClosed)
onDrawerClose()
}
}
@ -77,7 +75,7 @@ fun DebugOverlay(
.align(Alignment.CenterStart)
.padding(start = 16.dp),
onClick = {
debugDrawerStore.dispatch(DebugDrawerAction.DrawerOpened)
onDrawerOpen()
},
)
@ -123,9 +121,17 @@ fun DebugOverlay(
@Composable
@LightDarkPreview
private fun DebugOverlayPreview() {
var drawerStatus by remember { mutableStateOf(DrawerStatus.Closed) }
FirefoxTheme {
DebugOverlay(
debugDrawerStore = DebugDrawerStore(),
drawerStatus = drawerStatus,
onDrawerOpen = {
drawerStatus = DrawerStatus.Open
},
onDrawerClose = {
drawerStatus = DrawerStatus.Closed
},
)
}
}

@ -0,0 +1,45 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.debugsettings.ui
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import mozilla.components.lib.state.ext.observeAsState
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.debugsettings.store.DebugDrawerAction
import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
import org.mozilla.fenix.debugsettings.store.DrawerStatus
import org.mozilla.fenix.theme.FirefoxTheme
import org.mozilla.fenix.theme.Theme
/**
* Overlay for presenting Fenix-wide debugging content.
*/
@Composable
fun FenixOverlay() {
val debugDrawerStore = remember { DebugDrawerStore() }
val drawerStatus by debugDrawerStore.observeAsState(initialValue = DrawerStatus.Closed) { state ->
state.drawerStatus
}
FirefoxTheme(theme = Theme.getTheme(allowPrivateTheme = false)) {
DebugOverlay(
drawerStatus = drawerStatus,
onDrawerOpen = {
debugDrawerStore.dispatch(DebugDrawerAction.DrawerOpened)
},
onDrawerClose = {
debugDrawerStore.dispatch(DebugDrawerAction.DrawerClosed)
},
)
}
}
@LightDarkPreview
@Composable
private fun FenixOverlayPreview() {
FenixOverlay()
}

@ -6,12 +6,13 @@ import org.junit.Test
import org.mozilla.fenix.debugsettings.store.DebugDrawerAction
import org.mozilla.fenix.debugsettings.store.DebugDrawerState
import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
import org.mozilla.fenix.debugsettings.store.DrawerStatus
class DebugDrawerStoreTest {
@Test
fun `GIVEN the drawer is closed WHEN the drawer is opened THEN the state should be set to open`() {
val expected = DebugDrawerState.DrawerStatus.Open
val expected = DrawerStatus.Open
val store = createStore()
store.dispatch(DebugDrawerAction.DrawerOpened).joinBlocking()
@ -21,9 +22,9 @@ class DebugDrawerStoreTest {
@Test
fun `GIVEN the drawer is opened WHEN the drawer is closed THEN the state should be set to closed`() {
val expected = DebugDrawerState.DrawerStatus.Closed
val expected = DrawerStatus.Closed
val store = createStore(
drawerStatus = DebugDrawerState.DrawerStatus.Open,
drawerStatus = DrawerStatus.Open,
)
store.dispatch(DebugDrawerAction.DrawerClosed).joinBlocking()
@ -32,7 +33,7 @@ class DebugDrawerStoreTest {
}
private fun createStore(
drawerStatus: DebugDrawerState.DrawerStatus = DebugDrawerState.DrawerStatus.Closed,
drawerStatus: DrawerStatus = DrawerStatus.Closed,
) = DebugDrawerStore(
initialState = DebugDrawerState(
drawerStatus = drawerStatus,

Loading…
Cancel
Save