clairehurst pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 12387757 by clairehurst at 2026-02-05T12:20:55-07:00 fixup! Temporary changes to about:torconnect for Android. This reverts commit aed2663396d9fe060829290ac9e64774131ac1c3. - - - - - cd8bcb6e by clairehurst at 2026-02-05T12:20:55-07:00 fixup! [android] Implement Android-native Connection Assist UI - - - - - 9 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt - mobile/android/fenix/app/src/main/res/values/preference_keys.xml - mobile/android/fenix/app/src/main/res/xml/preferences.xml - toolkit/components/torconnect/content/aboutTorConnect.css - toolkit/components/torconnect/content/aboutTorConnect.html - toolkit/components/torconnect/content/aboutTorConnect.js Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -185,7 +185,6 @@ import org.mozilla.fenix.compose.core.Action import org.mozilla.fenix.compose.snackbar.SnackbarState import org.mozilla.fenix.compose.snackbar.Snackbar import org.mozilla.fenix.tor.UrlQuickLoadViewModel -import org.mozilla.geckoview.TorAndroidIntegration import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener import org.mozilla.geckoview.TorConnectStage import kotlin.system.exitProcess @@ -197,7 +196,7 @@ import kotlin.system.exitProcess * - browser screen */ @SuppressWarnings("TooManyFunctions", "LargeClass", "LongMethod") -open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAndroidIntegration.BootstrapStateChangeListener { +open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { @VisibleForTesting internal lateinit var binding: ActivityHomeBinding lateinit var themeManager: ThemeManager @@ -611,14 +610,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn onBackPressedCallback = onBackPressedCallback, ) - if (settings().useHtmlConnectionUi) { - val engine = components.core.engine - if (engine is GeckoEngine) { - val torIntegration = engine.getTorIntegrationController() - torIntegration.registerBootstrapStateChangeListener(this) - } - } - StartupTimeline.onActivityCreateEndHome(this) // DO NOT MOVE ANYTHING BELOW HERE. } @@ -1388,20 +1379,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn @VisibleForTesting internal fun navigateToHome(navController: NavController) { - // if (this is ExternalAppBrowserActivity) { - // return - // } - - if (!settings().useHtmlConnectionUi) { - navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist()) - } else { - navController.navigate(NavGraphDirections.actionStartupHome()) - openToBrowserAndLoad( - searchTermOrURL = "about:torconnect", - newTab = true, - from = BrowserDirection.FromHome, - ) - } + navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist()) } final override fun attachBaseContext(base: Context) { @@ -1610,14 +1588,4 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn finishAndRemoveTask() exitProcess(0) } - - override fun onBootstrapStageChange(stage: TorConnectStage) { - if (stage.isBootstrapped) { - if (settings().useHtmlConnectionUi) { - components.useCases.tabsUseCases.removeAllTabs() - navHost.navController.navigate(NavGraphDirections.actionStartupHome()) - } - } - } - override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) = Unit } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt ===================================== @@ -1954,10 +1954,6 @@ abstract class BaseBrowserFragment : @Suppress("DEPRECATION") it.announceForAccessibility(selectedTab.toDisplayTitle()) - if (getCurrentTab()?.content?.url == "about:torconnect") { - // FIXME: view is not available anymore. - // browserToolbarView.view.visibility = View.GONE - } } } else { view?.let { view -> initializeUI(view) } @@ -1991,26 +1987,6 @@ abstract class BaseBrowserFragment : ), ) } - - handleBetaHtmlTorConnect() - } - - private fun handleBetaHtmlTorConnect() { - val currentTab = getCurrentTab() ?: return - if (currentTab.content.url == "about:torconnect") { - if (!requireActivity().settings().useHtmlConnectionUi) { - requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id) - (requireActivity() as HomeActivity).navigateToHome( - findNavController(), - ) - } else { - // This just makes it not flash (be visible for a split second) before handleTabSelected() hides it again - // FIXME: view is not available anymore. - // browserToolbarView.view.visibility = View.GONE - } - } else if (currentTab.content.url == "about:tor") { - requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id) - } } private fun evaluateMessagesForMicrosurvey(components: Components) = ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt ===================================== @@ -10,7 +10,6 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.os.StrictMode -import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.Toast @@ -31,7 +30,6 @@ import androidx.preference.SwitchPreference import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine @@ -732,20 +730,6 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { @VisibleForTesting internal fun setupHomepagePreference(settings: Settings) { - /*with(requirePreference<Preference>(R.string.pref_key_home)) { - summary = when { - settings.alwaysOpenTheHomepageWhenOpeningTheApp -> - getString(R.string.opening_screen_homepage_summary) - - settings.openHomepageAfterFourHoursOfInactivity -> - getString(R.string.opening_screen_after_four_hours_of_inactivity_summary) - - settings.alwaysOpenTheLastTabWhenOpeningTheApp -> - getString(R.string.opening_screen_last_tab_summary) - - else -> null - } - }*/ } @VisibleForTesting @@ -804,11 +788,6 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { } } - requirePreference<Preference>(R.string.pref_key_use_html_connection_ui).apply { - onPreferenceChangeListener = object : SharedPreferenceUpdater() {} - isVisible = Config.channel != ReleaseChannel.Release - } - requirePreference<Preference>(R.string.pref_key_tor_logs).apply { setOnPreferenceClickListener { val directions = ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -2899,11 +2899,6 @@ class Settings( return sharedPreferences.getBoolean(cleanupPreferenceKey, false) } - var useHtmlConnectionUi by booleanPreference( - key = appContext.getPreferenceKey(R.string.pref_key_use_html_connection_ui), - default = false, - ) - var quickStart by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_quick_start), default = false, ===================================== mobile/android/fenix/app/src/main/res/values/preference_keys.xml ===================================== @@ -538,7 +538,6 @@ <string name="pref_key_tor_network_settings_explanation" translatable="false">pref_key_tor_network_settings_explanation</string> <string name="pref_key_tor_network_settings_bridge_config" translatable="false">pref_key_tor_network_settings_bridge_config</string> <string name="pref_key_tor_logs" translatable="false">pref_key_tor_logs</string> - <string name="pref_key_use_html_connection_ui" translatable="false">pref_key_use_html_connection_ui</string> <!-- Changing the pref_key should reset it to off for users that had it enabled --> <string name="pref_key_about_config_shortcut" translatable="false">pref_key_about_config_shortcut</string> <string name="pref_key_tor_network_settings_bridge_config_explanation" translatable="false">pref_key_tor_network_settings_bridge_config_explanation</string> <string name="pref_key_tor_network_settings_bridge_config_toggle" translatable="false">pref_key_tor_network_settings_bridge_config_toggle</string> ===================================== mobile/android/fenix/app/src/main/res/xml/preferences.xml ===================================== @@ -181,13 +181,6 @@ android:title="@string/tor_connect_automatically_label" app:iconSpaceReserved="false" /> - <SwitchPreference - android:defaultValue="false" - android:key="@string/pref_key_use_html_connection_ui" - android:summary="Recommended only for debugging" - android:title="Enable HTML connection UI" - app:iconSpaceReserved="false" /> - <Preference android:key="@string/pref_key_tor_logs" app:iconSpaceReserved="false" ===================================== toolkit/components/torconnect/content/aboutTorConnect.css ===================================== @@ -4,11 +4,6 @@ @import url("chrome://global/skin/tor-colors.css"); @import url("chrome://global/skin/onion-pattern.css"); -html { - width: 100%; - height: 100%; -} - body:not(.loaded) { /* Keep blank whilst loading. */ display: none; @@ -275,147 +270,3 @@ body.aboutTorConnect .title.location { background-image: url("chrome://global/content/torconnect/connection-location.svg"); stroke: var(--icon-color-warning); } - -/* Android-specific CSS, to be removed when we use only the native UI. */ -:root { - --android-dark-accents-buttons: #9059ff; - --android-dark-background-secondary: #e1e0e7; - --android-dark-text-primary: #fbfbfe; - --android-light-text-primary: #15141a; -} - -[hidden="true"] { - display: none !important; -} - -body.android { - width: 100%; - height: 100%; - box-sizing: border-box; - margin: 0; - padding: 0 24px !important; - color: var(--android-dark-text-primary); - background: linear-gradient(194deg, #692e9d -0.93%, #393270 48.91%); - font: menu; - font-size: var(--font-size-small); - display: flex; -} - -.android #connectPageContainer { - max-width: none; - display: flex; - flex-direction: column; - flex: 1; -} - -.android #breadcrumbs { - display: none; -} - -.android #text-container { - display: flex; - flex-direction: column; - flex: 1; -} - -.android .title { - background-position: left 0; - background-repeat: no-repeat; - background-size: 40px; - padding-top: 64px; - font-size: var(--font-size-xlarge); - line-height: 28px; -} - -.android h1 { - font-weight: var(--font-weight); - font-size: inherit; - margin: 0 0 16px 0; -} - -.android p { - margin: 0; - padding-bottom: 8px; - line-height: 20px; -} - -.android #quickstartContainer { - margin-top: 24px; -} - -.android .button-container { - display: flex; - flex: 1; - flex-direction: column; -} - -.android #locationDropdown { - width: 100%; - max-width: none; - margin: 0; -} - -.android select { - background: transparent; - border: none; - /* stylelint-disable-next-line stylelint-plugin-mozilla/use-border-color-tokens */ - border-bottom: 1px solid var(--android-dark-text-primary); - color: var(--android-dark-text-primary); - display: block; - width: 100%; - margin-top: 10px; - padding: 8px; -} - -.android #buttonPadding { - flex: 1; -} - -body:not(.android) #connectButtonContainer { - /* Use the .button-container context */ - display: contents; -} - -.android #connectButtonContainer { - width: 100%; - padding-bottom: 18px; - display: grid; -} - -/* Be sure not to match the togglee */ -.android #connectButtonContainer button { - display: block; - width: 100%; - margin: 4px 0; - padding: 11px 30px; - font-size: var(--font-size-small); - font-weight: var(--font-weight); - border: none; - border-radius: var(--border-radius-small); -} - -.android #connectButton, -.android #tryBridgeButton, -.android #configureButton.primary { - color: var(--android-dark-text-primary); - background-color: var(--android-dark-accents-buttons); -} - -.android #configureButton { - order: 1; -} - -.android #restartButton { - order: 2; -} - -.android #restartButton, -.android #cancelButton, -.android #configureButton { - color: var(--android-light-text-primary); - background-color: var(--android-dark-background-secondary); -} - -.android .onion-pattern-container { - display: none; -} ===================================== toolkit/components/torconnect/content/aboutTorConnect.html ===================================== @@ -6,7 +6,6 @@ http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" /> - <meta name="viewport" content="width=device-width" /> <link rel="stylesheet" href="chrome://global/content/torconnect/aboutTorConnect.css" @@ -65,7 +64,11 @@ <moz-toggle id="quickstartToggle"></moz-toggle> </div> - <div class="button-container"> + <div id="connectButtonContainer" class="button-container"> + <button id="restartButton" hidden="true"></button> + <button id="configureButton" hidden="true"></button> + <button id="cancelButton" hidden="true"></button> + <button id="connectButton" hidden="true" class="tor-button"></button> <label id="locationDropdownLabel" for="countries"></label> <form id="locationDropdown" hidden="true"> <select id="regions-select"> @@ -74,22 +77,11 @@ <optgroup id="full-regions-option-group"></optgroup> </select> </form> - <span id="buttonPadding"></span> - <span id="connectButtonContainer"> - <button id="restartButton" hidden="true"></button> - <button id="configureButton" hidden="true"></button> - <button id="cancelButton" hidden="true"></button> - <button - id="connectButton" - hidden="true" - class="tor-button" - ></button> - <button - id="tryBridgeButton" - hidden="true" - class="tor-button" - ></button> - </span> + <button + id="tryBridgeButton" + hidden="true" + class="tor-button" + ></button> </div> </div> </div> ===================================== toolkit/components/torconnect/content/aboutTorConnect.js ===================================== @@ -66,7 +66,7 @@ class AboutTorConnect { connect: "button#connectButton", tryBridge: "button#tryBridgeButton", locationDropdownLabel: "#locationDropdownLabel", - locationDropdown: "#locationDropdown", + locationDropdown: "form#locationDropdown", locationDropdownSelect: "#regions-select", }, }); @@ -757,9 +757,6 @@ class AboutTorConnect { } initElements(direction) { - const isAndroid = navigator.userAgent.includes("Android"); - document.body.classList.toggle("android", isAndroid); - document.documentElement.setAttribute("dir", direction); this.elements.connectToTorLink.addEventListener("click", () => { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/e2e8168... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/e2e8168... You're receiving this email because of your account on gitlab.torproject.org.
participants (1)
-
clairehurst (@clairehurst)