tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit caaba16c6d0bed687aa4eb105e4541cc1a749995
parent 233f1f890ae795c72f979ae2759d8558a11a1354
Author: t-p-white <towhite@mozilla.com>
Date:   Fri, 24 Oct 2025 13:36:07 +0000

Bug 1995749 - Fix the Terms of Use bottom sheet to allow the user access "remind me later" while in the mobile landscape orientation. r=android-reviewers,joberhauser

Mobile
|{F34114499}|{F34114504}

Tablet
|{F34114488}|{F34114492}

Differential Revision: https://phabricator.services.mozilla.com/D269648

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheet.kt | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheetFragment.kt | 1-
2 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheet.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheet.kt @@ -10,6 +10,8 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SheetState @@ -22,9 +24,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.tooling.preview.Devices.TABLET +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import kotlinx.coroutines.launch -import mozilla.components.compose.base.annotation.FlexibleWindowLightDarkPreview import mozilla.components.compose.base.button.FilledButton import mozilla.components.compose.base.button.TextButton import org.mozilla.fenix.R @@ -32,6 +37,8 @@ import org.mozilla.fenix.compose.LinkText import org.mozilla.fenix.compose.LinkTextState import org.mozilla.fenix.theme.FirefoxTheme +private val sheetMaxWidth = 450.dp + /** * The terms of service prompt. * @@ -89,6 +96,7 @@ private fun BottomSheet( ) { ModalBottomSheet( onDismissRequest = { onDismissRequest() }, + sheetMaxWidth = sheetMaxWidth, sheetState = sheetState, containerColor = FirefoxTheme.colors.layer2, ) { @@ -116,13 +124,12 @@ private fun BottomSheetContent( onLearnMoreClicked: () -> Unit = {}, ) { val coroutineScope = rememberCoroutineScope() + val scrollState = rememberScrollState() Column( modifier = Modifier - .fillMaxWidth() - .padding( - horizontal = 32.dp, - ), + .verticalScroll(scrollState) + .padding(horizontal = 32.dp), ) { Image( painter = painterResource(id = R.drawable.ic_firefox), @@ -132,7 +139,7 @@ private fun BottomSheetContent( .align(Alignment.CenterHorizontally), ) - Spacer(Modifier.size(20.dp)) + Spacer(Modifier.size(16.dp)) Text( modifier = Modifier @@ -142,7 +149,7 @@ private fun BottomSheetContent( color = FirefoxTheme.colors.textPrimary, ) - Spacer(Modifier.size(20.dp)) + Spacer(Modifier.size(16.dp)) BottomSheetMessage( onTermsOfUseClicked = onTermsOfUseClicked, @@ -150,7 +157,7 @@ private fun BottomSheetContent( onLearnMoreClicked = onLearnMoreClicked, ) - Spacer(Modifier.size(34.dp)) + Spacer(Modifier.size(16.dp)) FilledButton( modifier = Modifier.fillMaxWidth(), @@ -165,8 +172,6 @@ private fun BottomSheetContent( } } - Spacer(Modifier.size(10.dp)) - TextButton( modifier = Modifier.fillMaxWidth(), text = stringResource(R.string.terms_of_use_prompt_postpone), @@ -218,7 +223,7 @@ private fun BottomSheetMessage( style = FirefoxTheme.typography.body2.copy( color = FirefoxTheme.colors.textSecondary, ), - shouldApplyAccessibleSize = true, + linkTextDecoration = TextDecoration.Underline, ) Spacer(Modifier.size(20.dp)) @@ -234,14 +239,64 @@ private fun BottomSheetMessage( style = FirefoxTheme.typography.body2.copy( color = FirefoxTheme.colors.textSecondary, ), - shouldApplyAccessibleSize = true, + linkTextDecoration = TextDecoration.Underline, ) } @OptIn(ExperimentalMaterial3Api::class) -@FlexibleWindowLightDarkPreview +@PreviewLightDark +@Composable +private fun TermsOfUseBottomSheetMobilePortraitPreview() { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + FirefoxTheme { + BottomSheet(sheetState = sheetState) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +/** + * Preview copied from [androidx.compose.ui.tooling.preview.PreviewScreenSizes]. + */ +@Preview( + name = "Phone - Landscape", + device = "spec:width=411dp,height=891dp,orientation=landscape,dpi=420", + showSystemUi = true, +) +@Composable +private fun TermsOfUseBottomSheetMobileLandscapePreview() { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + FirefoxTheme { + BottomSheet(sheetState = sheetState) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +/** + * Preview copied from [androidx.compose.ui.tooling.preview.PreviewScreenSizes]. + */ +@Preview( + name = "Tablet - Portrait", + device = "spec:width=1280dp,height=800dp,dpi=240,orientation=portrait", + showSystemUi = true, +) +@Composable +private fun TermsOfUseBottomSheetTabletPortraitPreview() { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + FirefoxTheme { + BottomSheet(sheetState = sheetState) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +/** + * Preview copied from [androidx.compose.ui.tooling.preview.PreviewScreenSizes]. + */ +@Preview(name = "Tablet - Landscape", device = TABLET, showSystemUi = true) @Composable -private fun TermsOfUseBottomSheetPreview() { +private fun TermsOfUseBottomSheetTabletLandscapePreview() { val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) FirefoxTheme { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheetFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/ui/TermsOfUseBottomSheetFragment.kt @@ -46,7 +46,6 @@ class TermsOfUseBottomSheetFragment : BottomSheetDialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = super.onCreateDialog(savedInstanceState).apply { - window?.setDimAmount(0f) setOnShowListener { val bottomSheet = findViewById<View?>(materialR.id.design_bottom_sheet) bottomSheet?.setBackgroundResource(android.R.color.transparent)