Commit 0fc26121 authored by Gabriel Luong's avatar Gabriel Luong
Browse files

Bug 1885586 - Part 1: Introduce a MenuScaffold composable that provides the...

Bug 1885586 - Part 1: Introduce a MenuScaffold composable that provides the layout of the menu header and content r=android-reviewers,007

- This refactors the existing Columns and Spacers that is used to for the menu header and content layout, which
is reused in our main menu and submenus

Differential Revision: https://phabricator.services.mozilla.com/D209961
parent bc77f97e
Loading
Loading
Loading
Loading
+22 −38
Original line number Diff line number Diff line
@@ -5,16 +5,11 @@
package org.mozilla.fenix.components.menu.compose

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import org.mozilla.fenix.R
import org.mozilla.fenix.components.menu.compose.header.SubmenuHeader
import org.mozilla.fenix.compose.annotation.LightDarkPreview
@@ -30,23 +25,13 @@ internal fun ExtensionsSubmenu(
    onManageExtensionsMenuClick: () -> Unit,
    onDiscoverMoreExtensionsMenuClick: () -> Unit,
) {
    Column {
    MenuScaffold(
        header = {
            SubmenuHeader(
                header = stringResource(id = R.string.browser_menu_extensions),
                onClick = onBackButtonClick,
            )

        Spacer(modifier = Modifier.height(8.dp))

        Column(
            modifier = Modifier
                .padding(
                    start = 16.dp,
                    top = 12.dp,
                    end = 16.dp,
                    bottom = 32.dp,
                ),
            verticalArrangement = Arrangement.spacedBy(32.dp),
        },
    ) {
        MenuGroup {
            MenuItem(
@@ -66,7 +51,6 @@ internal fun ExtensionsSubmenu(
        }
    }
}
}

@LightDarkPreview
@Composable
+34 −50
Original line number Diff line number Diff line
@@ -5,17 +5,12 @@
package org.mozilla.fenix.components.menu.compose

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import mozilla.components.service.fxa.manager.AccountState
import mozilla.components.service.fxa.manager.AccountState.NotAuthenticated
import mozilla.components.service.fxa.store.Account
@@ -79,7 +74,8 @@ internal fun MainMenu(
    onCustomizeHomepageMenuClick: () -> Unit,
    onNewInFirefoxMenuClick: () -> Unit,
) {
    Column {
    MenuScaffold(
        header = {
            MenuHeader(
                account = account,
                accountState = accountState,
@@ -87,18 +83,7 @@ internal fun MainMenu(
                onHelpButtonClick = onHelpButtonClick,
                onSettingsButtonClick = onSettingsButtonClick,
            )

        Spacer(modifier = Modifier.height(8.dp))

        Column(
            modifier = Modifier
                .padding(
                    start = 16.dp,
                    top = 12.dp,
                    end = 16.dp,
                    bottom = 32.dp,
                ),
            verticalArrangement = Arrangement.spacedBy(32.dp),
        },
    ) {
        NewTabsMenuGroup(
            accessPoint = accessPoint,
@@ -131,7 +116,6 @@ internal fun MainMenu(
        }
    }
}
}

@Composable
private fun NewTabsMenuGroup(
+47 −0
Original line number Diff line number Diff line
/* 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.components.menu.compose

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

/**
 * A scaffold for a menu UI that implements the basic layout structure with [header] and [content].
 *
 * @param header The Composable header block to render.
 * @param content The Composable content block to render.
 * @param modifier [Modifier] to be applied to the layout.
 */
@Composable
internal fun MenuScaffold(
    header: @Composable ColumnScope.() -> Unit,
    content: @Composable ColumnScope.() -> Unit,
    modifier: Modifier = Modifier,
) {
    Column(modifier = modifier) {
        header()

        Spacer(modifier = Modifier.height(8.dp))

        Column(
            modifier = Modifier.padding(
                start = 16.dp,
                top = 12.dp,
                end = 16.dp,
                bottom = 32.dp,
            ),
            verticalArrangement = Arrangement.spacedBy(32.dp),
        ) {
            content()
        }
    }
}
+38 −54
Original line number Diff line number Diff line
@@ -5,17 +5,12 @@
package org.mozilla.fenix.components.menu.compose

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.mozilla.fenix.R
import org.mozilla.fenix.components.menu.compose.header.SubmenuHeader
import org.mozilla.fenix.compose.Divider
@@ -37,23 +32,13 @@ internal fun SaveSubmenu(
    onSaveToCollectionMenuClick: () -> Unit,
    onSaveAsPDFMenuClick: () -> Unit,
) {
    Column {
    MenuScaffold(
        header = {
            SubmenuHeader(
                header = stringResource(id = R.string.browser_menu_save),
                onClick = onBackButtonClick,
            )

        Spacer(modifier = Modifier.height(8.dp))

        Column(
            modifier = Modifier
                .padding(
                    start = 16.dp,
                    top = 12.dp,
                    end = 16.dp,
                    bottom = 32.dp,
                ),
            verticalArrangement = Arrangement.spacedBy(32.dp),
        },
    ) {
        MenuGroup {
            BookmarkMenuItem(
@@ -96,7 +81,6 @@ internal fun SaveSubmenu(
        }
    }
}
}

@Composable
private fun BookmarkMenuItem(
+37 −53
Original line number Diff line number Diff line
@@ -5,17 +5,12 @@
package org.mozilla.fenix.components.menu.compose

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.mozilla.fenix.R
import org.mozilla.fenix.components.menu.compose.header.SubmenuHeader
import org.mozilla.fenix.compose.Divider
@@ -37,23 +32,13 @@ internal fun ToolsSubmenu(
    onShareMenuClick: () -> Unit,
    onOpenInAppMenuClick: () -> Unit,
) {
    Column {
    MenuScaffold(
        header = {
            SubmenuHeader(
                header = stringResource(id = R.string.browser_menu_tools),
                onClick = onBackButtonClick,
            )

        Spacer(modifier = Modifier.height(8.dp))

        Column(
            modifier = Modifier
                .padding(
                    start = 16.dp,
                    top = 12.dp,
                    end = 16.dp,
                    bottom = 32.dp,
                ),
            verticalArrangement = Arrangement.spacedBy(32.dp),
        },
    ) {
        MenuGroup {
            ReaderViewMenuItem(
@@ -94,7 +79,6 @@ internal fun ToolsSubmenu(
        }
    }
}
}

@Composable
private fun ReaderViewMenuItem(