mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-03 23:15:31 +00:00
Bug 1815013 - Port over the Tabs Tray FAB
This commit is contained in:
parent
1641e7f979
commit
0f93e5a97d
110
app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFab.kt
Normal file
110
app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFab.kt
Normal file
@ -0,0 +1,110 @@
|
||||
/* 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.tabstray
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import mozilla.components.lib.state.ext.observeAsComposableState
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.compose.annotation.LightDarkPreview
|
||||
import org.mozilla.fenix.compose.button.FloatingActionButton
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* Floating action button for tabs tray.
|
||||
*
|
||||
* @param tabsTrayStore [TabsTrayStore] used to listen for changes to [TabsTrayState].
|
||||
*/
|
||||
@Composable
|
||||
fun TabsTrayFab(
|
||||
tabsTrayStore: TabsTrayStore,
|
||||
) {
|
||||
val currentPage: Page = tabsTrayStore.observeAsComposableState { state ->
|
||||
state.selectedPage
|
||||
}.value ?: Page.NormalTabs
|
||||
val isSyncing: Boolean = tabsTrayStore.observeAsComposableState { state ->
|
||||
state.syncing
|
||||
}.value ?: false
|
||||
val isInNormalMode: Boolean = tabsTrayStore.observeAsComposableState { state ->
|
||||
state.mode == TabsTrayState.Mode.Normal
|
||||
}.value ?: false
|
||||
|
||||
val icon: Painter
|
||||
val contentDescription: String
|
||||
val label: String?
|
||||
|
||||
when (currentPage) {
|
||||
Page.NormalTabs -> {
|
||||
icon = painterResource(id = R.drawable.ic_new)
|
||||
contentDescription = stringResource(id = R.string.add_tab)
|
||||
label = null
|
||||
}
|
||||
|
||||
Page.SyncedTabs -> {
|
||||
icon = painterResource(id = R.drawable.ic_fab_sync)
|
||||
contentDescription = stringResource(id = R.string.tab_drawer_fab_sync)
|
||||
label = if (isSyncing) {
|
||||
stringResource(id = R.string.sync_syncing_in_progress)
|
||||
} else {
|
||||
stringResource(id = R.string.resync_button_content_description)
|
||||
}.uppercase()
|
||||
}
|
||||
|
||||
Page.PrivateTabs -> {
|
||||
icon = painterResource(id = R.drawable.ic_new)
|
||||
contentDescription = stringResource(id = R.string.add_private_tab)
|
||||
label = stringResource(id = R.string.tab_drawer_fab_content).uppercase()
|
||||
}
|
||||
}
|
||||
|
||||
Box(Modifier.fillMaxSize()) {
|
||||
if (isInNormalMode) {
|
||||
FloatingActionButton(
|
||||
icon = icon,
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomEnd)
|
||||
.padding(16.dp),
|
||||
contentDescription = contentDescription,
|
||||
label = label,
|
||||
) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@LightDarkPreview
|
||||
@Composable
|
||||
private fun TabsTraySyncFabPreview() {
|
||||
val store = TabsTrayStore(
|
||||
initialState = TabsTrayState(
|
||||
selectedPage = Page.SyncedTabs,
|
||||
syncing = true,
|
||||
),
|
||||
)
|
||||
|
||||
FirefoxTheme {
|
||||
TabsTrayFab(store)
|
||||
}
|
||||
}
|
||||
|
||||
@LightDarkPreview
|
||||
@Composable
|
||||
private fun TabsTrayPrivateFabPreview() {
|
||||
val store = TabsTrayStore(
|
||||
initialState = TabsTrayState(
|
||||
selectedPage = Page.PrivateTabs,
|
||||
),
|
||||
)
|
||||
FirefoxTheme {
|
||||
TabsTrayFab(store)
|
||||
}
|
||||
}
|
@ -40,6 +40,7 @@ import org.mozilla.fenix.components.FenixSnackbar
|
||||
import org.mozilla.fenix.components.StoreProvider
|
||||
import org.mozilla.fenix.databinding.ComponentTabstray2Binding
|
||||
import org.mozilla.fenix.databinding.ComponentTabstray3Binding
|
||||
import org.mozilla.fenix.databinding.ComponentTabstray3FabBinding
|
||||
import org.mozilla.fenix.databinding.ComponentTabstrayFabBinding
|
||||
import org.mozilla.fenix.databinding.FragmentTabTrayDialogBinding
|
||||
import org.mozilla.fenix.databinding.TabsTrayTabCounter2Binding
|
||||
@ -115,6 +116,10 @@ class TabsTrayFragment : AppCompatDialogFragment() {
|
||||
internal var _tabsTrayComposeBinding: ComponentTabstray3Binding? = null
|
||||
private val tabsTrayComposeBinding get() = _tabsTrayComposeBinding!!
|
||||
|
||||
@Suppress("VariableNaming")
|
||||
internal var _fabButtonComposeBinding: ComponentTabstray3FabBinding? = null
|
||||
private val fabButtonComposeBinding get() = _fabButtonComposeBinding!!
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStyle(STYLE_NO_TITLE, R.style.TabTrayDialogStyle)
|
||||
@ -205,6 +210,12 @@ class TabsTrayFragment : AppCompatDialogFragment() {
|
||||
true,
|
||||
)
|
||||
|
||||
_fabButtonComposeBinding = ComponentTabstray3FabBinding.inflate(
|
||||
inflater,
|
||||
tabsTrayDialogBinding.root,
|
||||
true,
|
||||
)
|
||||
|
||||
tabsTrayComposeBinding.root.setContent {
|
||||
FirefoxTheme(theme = Theme.getTheme(allowPrivateTheme = false)) {
|
||||
TabsTray(
|
||||
@ -224,6 +235,12 @@ class TabsTrayFragment : AppCompatDialogFragment() {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fabButtonComposeBinding.root.setContent {
|
||||
FirefoxTheme(theme = Theme.getTheme(allowPrivateTheme = false)) {
|
||||
TabsTrayFab(tabsTrayStore = tabsTrayStore)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_tabsTrayBinding = ComponentTabstray2Binding.inflate(
|
||||
inflater,
|
||||
|
8
app/src/main/res/layout/component_tabstray3_fab.xml
Normal file
8
app/src/main/res/layout/component_tabstray3_fab.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- 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/. -->
|
||||
<androidx.compose.ui.platform.ComposeView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:elevation="99dp" />
|
Loading…
Reference in New Issue
Block a user