commit 7f6a43a0feb20808d34e5c73546363bec720112e parent b5658e56bc5846208e2547c454a6d8bb79ee5d6e Author: clairehurst <clairehurst@torproject.org> Date: Wed, 21 Jan 2026 17:24:50 -0700 fixup! TB 42655 [android]: Implement "New circuit for this site" on Android Bug 44523: New circuit seems to have disappeared from 147 on Android Diffstat:
5 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt @@ -116,6 +116,9 @@ import org.mozilla.fenix.webcompat.middleware.DefaultWebCompatReporterRetrievalS import org.mozilla.fenix.webcompat.middleware.WebCompatInfoDeserializer import com.google.android.material.R as materialR +import mozilla.components.browser.engine.gecko.GeckoEngineSession +import android.util.Log + // EXPANDED_MIN_RATIO is used for BottomSheetBehavior.halfExpandedRatio(). // That value needs to be less than the PEEK_HEIGHT. // If EXPANDED_MIN_RATIO is greater than the PEEK_HEIGHT, then there will be @@ -784,6 +787,13 @@ class MenuDialogFragment : BottomSheetDialogFragment() { }, ) }, + onNewCircuitButtonClick = { + components.core.store.state.selectedTab?.let { + (it.engineState.engineSession as GeckoEngineSession).newTorCircuit() + components.useCases.sessionUseCases.reload.invoke(it.id) + dismiss() + } ?: Log.e("MenuDialogFragment", "selectedTab was null, tab and tor circuit not refreshed") + }, ) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt @@ -169,6 +169,7 @@ fun MainMenu( extensionsMenuItemDescription: String?, moreSettingsSubmenu: @Composable () -> Unit, extensionSubmenu: @Composable () -> Unit, + onNewCircuitButtonClick: () -> Unit, ) { MenuFrame( contentModifier = Modifier @@ -290,6 +291,7 @@ fun MainMenu( extensionsMenuItemDescription = extensionsMenuItemDescription, moreSettingsSubmenu = moreSettingsSubmenu, extensionSubmenu = extensionSubmenu, + onNewCircuitButtonClick = onNewCircuitButtonClick, ) } @@ -363,6 +365,7 @@ private fun ToolsAndActionsMenuGroup( extensionsMenuItemDescription: String?, moreSettingsSubmenu: @Composable () -> Unit, extensionSubmenu: @Composable () -> Unit, + onNewCircuitButtonClick: (() -> Unit)?, ) { MenuGroup { val labelId = R.string.browser_menu_desktop_site @@ -380,6 +383,12 @@ private fun ToolsAndActionsMenuGroup( menuItemState = if (isPdf) MenuItemState.DISABLED else MenuItemState.ENABLED } + MenuItem( + label = stringResource(R.string.library_new_circuit), + beforeIconPainter = painterResource(R.drawable.new_circuit), + onClick = onNewCircuitButtonClick, + ) + if (isBookmarked) { MenuItem( label = stringResource(id = R.string.browser_menu_edit_bookmark), @@ -764,6 +773,7 @@ private fun MenuDialogPreview() { onShareButtonClick = {}, moreSettingsSubmenu = {}, extensionSubmenu = {}, + onNewCircuitButtonClick = {}, ) } } @@ -853,6 +863,7 @@ private fun MenuDialogPrivatePreview( onWebExtensionMenuItemClick = {}, ) }, + onNewCircuitButtonClick = {}, ) } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt @@ -453,6 +453,7 @@ class DefaultBrowserToolbarMenuController( navController.navigateSafe(R.id.browserFragment, directions) } + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) ToolbarMenu.Item.NewTorCircuit -> { currentSession?.let { sessionUseCases.reload.invoke(it.id) @@ -612,6 +613,7 @@ class DefaultBrowserToolbarMenuController( ), ) + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) ToolbarMenu.Item.NewTorCircuit -> { /* Tor doesn't use telemetry and therefore this doesn't need to be implemented */ } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -227,6 +227,7 @@ open class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.NewTab) } + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) private val newCircuitItem = BrowserMenuImageText( context.getString(R.string.library_new_circuit), R.drawable.new_circuit, @@ -408,6 +409,7 @@ open class DefaultToolbarMenu( listOfNotNull( if (shouldUseBottomToolbar) null else menuToolbar, newTabItem, + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) BrowserMenuDivider(), newCircuitItem, BrowserMenuDivider(), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt @@ -70,6 +70,7 @@ interface ToolbarMenu { object Passwords : Item() object Downloads : Item() object NewTab : Item() + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) object NewTorCircuit : Item() }