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
-
cd8bcb6e
by clairehurst at 2026-02-05T12:20:55-07:00
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:
| ... | ... | @@ -185,7 +185,6 @@ import org.mozilla.fenix.compose.core.Action |
| 185 | 185 | import org.mozilla.fenix.compose.snackbar.SnackbarState
|
| 186 | 186 | import org.mozilla.fenix.compose.snackbar.Snackbar
|
| 187 | 187 | import org.mozilla.fenix.tor.UrlQuickLoadViewModel
|
| 188 | -import org.mozilla.geckoview.TorAndroidIntegration
|
|
| 189 | 188 | import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener
|
| 190 | 189 | import org.mozilla.geckoview.TorConnectStage
|
| 191 | 190 | import kotlin.system.exitProcess
|
| ... | ... | @@ -197,7 +196,7 @@ import kotlin.system.exitProcess |
| 197 | 196 | * - browser screen
|
| 198 | 197 | */
|
| 199 | 198 | @SuppressWarnings("TooManyFunctions", "LargeClass", "LongMethod")
|
| 200 | -open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAndroidIntegration.BootstrapStateChangeListener {
|
|
| 199 | +open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
|
|
| 201 | 200 | @VisibleForTesting
|
| 202 | 201 | internal lateinit var binding: ActivityHomeBinding
|
| 203 | 202 | lateinit var themeManager: ThemeManager
|
| ... | ... | @@ -611,14 +610,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
| 611 | 610 | onBackPressedCallback = onBackPressedCallback,
|
| 612 | 611 | )
|
| 613 | 612 | |
| 614 | - if (settings().useHtmlConnectionUi) {
|
|
| 615 | - val engine = components.core.engine
|
|
| 616 | - if (engine is GeckoEngine) {
|
|
| 617 | - val torIntegration = engine.getTorIntegrationController()
|
|
| 618 | - torIntegration.registerBootstrapStateChangeListener(this)
|
|
| 619 | - }
|
|
| 620 | - }
|
|
| 621 | - |
|
| 622 | 613 | StartupTimeline.onActivityCreateEndHome(this) // DO NOT MOVE ANYTHING BELOW HERE.
|
| 623 | 614 | }
|
| 624 | 615 | |
| ... | ... | @@ -1388,20 +1379,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
| 1388 | 1379 | |
| 1389 | 1380 | @VisibleForTesting
|
| 1390 | 1381 | internal fun navigateToHome(navController: NavController) {
|
| 1391 | - // if (this is ExternalAppBrowserActivity) {
|
|
| 1392 | - // return
|
|
| 1393 | - // }
|
|
| 1394 | - |
|
| 1395 | - if (!settings().useHtmlConnectionUi) {
|
|
| 1396 | - navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist())
|
|
| 1397 | - } else {
|
|
| 1398 | - navController.navigate(NavGraphDirections.actionStartupHome())
|
|
| 1399 | - openToBrowserAndLoad(
|
|
| 1400 | - searchTermOrURL = "about:torconnect",
|
|
| 1401 | - newTab = true,
|
|
| 1402 | - from = BrowserDirection.FromHome,
|
|
| 1403 | - )
|
|
| 1404 | - }
|
|
| 1382 | + navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist())
|
|
| 1405 | 1383 | }
|
| 1406 | 1384 | |
| 1407 | 1385 | final override fun attachBaseContext(base: Context) {
|
| ... | ... | @@ -1610,14 +1588,4 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn |
| 1610 | 1588 | finishAndRemoveTask()
|
| 1611 | 1589 | exitProcess(0)
|
| 1612 | 1590 | }
|
| 1613 | - |
|
| 1614 | - override fun onBootstrapStageChange(stage: TorConnectStage) {
|
|
| 1615 | - if (stage.isBootstrapped) {
|
|
| 1616 | - if (settings().useHtmlConnectionUi) {
|
|
| 1617 | - components.useCases.tabsUseCases.removeAllTabs()
|
|
| 1618 | - navHost.navController.navigate(NavGraphDirections.actionStartupHome())
|
|
| 1619 | - }
|
|
| 1620 | - }
|
|
| 1621 | - }
|
|
| 1622 | - override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) = Unit
|
|
| 1623 | 1591 | } |
| ... | ... | @@ -1954,10 +1954,6 @@ abstract class BaseBrowserFragment : |
| 1954 | 1954 | |
| 1955 | 1955 | @Suppress("DEPRECATION")
|
| 1956 | 1956 | it.announceForAccessibility(selectedTab.toDisplayTitle())
|
| 1957 | - if (getCurrentTab()?.content?.url == "about:torconnect") {
|
|
| 1958 | - // FIXME: view is not available anymore.
|
|
| 1959 | - // browserToolbarView.view.visibility = View.GONE
|
|
| 1960 | - }
|
|
| 1961 | 1957 | }
|
| 1962 | 1958 | } else {
|
| 1963 | 1959 | view?.let { view -> initializeUI(view) }
|
| ... | ... | @@ -1991,26 +1987,6 @@ abstract class BaseBrowserFragment : |
| 1991 | 1987 | ),
|
| 1992 | 1988 | )
|
| 1993 | 1989 | }
|
| 1994 | - |
|
| 1995 | - handleBetaHtmlTorConnect()
|
|
| 1996 | - }
|
|
| 1997 | - |
|
| 1998 | - private fun handleBetaHtmlTorConnect() {
|
|
| 1999 | - val currentTab = getCurrentTab() ?: return
|
|
| 2000 | - if (currentTab.content.url == "about:torconnect") {
|
|
| 2001 | - if (!requireActivity().settings().useHtmlConnectionUi) {
|
|
| 2002 | - requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id)
|
|
| 2003 | - (requireActivity() as HomeActivity).navigateToHome(
|
|
| 2004 | - findNavController(),
|
|
| 2005 | - )
|
|
| 2006 | - } else {
|
|
| 2007 | - // This just makes it not flash (be visible for a split second) before handleTabSelected() hides it again
|
|
| 2008 | - // FIXME: view is not available anymore.
|
|
| 2009 | - // browserToolbarView.view.visibility = View.GONE
|
|
| 2010 | - }
|
|
| 2011 | - } else if (currentTab.content.url == "about:tor") {
|
|
| 2012 | - requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id)
|
|
| 2013 | - }
|
|
| 2014 | 1990 | }
|
| 2015 | 1991 | |
| 2016 | 1992 | private fun evaluateMessagesForMicrosurvey(components: Components) =
|
| ... | ... | @@ -10,7 +10,6 @@ import android.os.Bundle |
| 10 | 10 | import android.os.Handler
|
| 11 | 11 | import android.os.Looper
|
| 12 | 12 | import android.os.StrictMode
|
| 13 | -import android.util.Log
|
|
| 14 | 13 | import android.view.LayoutInflater
|
| 15 | 14 | import android.view.View
|
| 16 | 15 | import android.widget.Toast
|
| ... | ... | @@ -31,7 +30,6 @@ import androidx.preference.SwitchPreference |
| 31 | 30 | import androidx.recyclerview.widget.RecyclerView
|
| 32 | 31 | import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
| 33 | 32 | import kotlinx.coroutines.CoroutineScope
|
| 34 | -import kotlinx.coroutines.Dispatchers
|
|
| 35 | 33 | import kotlinx.coroutines.delay
|
| 36 | 34 | import kotlinx.coroutines.launch
|
| 37 | 35 | import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine
|
| ... | ... | @@ -732,20 +730,6 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { |
| 732 | 730 | |
| 733 | 731 | @VisibleForTesting
|
| 734 | 732 | internal fun setupHomepagePreference(settings: Settings) {
|
| 735 | - /*with(requirePreference<Preference>(R.string.pref_key_home)) {
|
|
| 736 | - summary = when {
|
|
| 737 | - settings.alwaysOpenTheHomepageWhenOpeningTheApp ->
|
|
| 738 | - getString(R.string.opening_screen_homepage_summary)
|
|
| 739 | - |
|
| 740 | - settings.openHomepageAfterFourHoursOfInactivity ->
|
|
| 741 | - getString(R.string.opening_screen_after_four_hours_of_inactivity_summary)
|
|
| 742 | - |
|
| 743 | - settings.alwaysOpenTheLastTabWhenOpeningTheApp ->
|
|
| 744 | - getString(R.string.opening_screen_last_tab_summary)
|
|
| 745 | - |
|
| 746 | - else -> null
|
|
| 747 | - }
|
|
| 748 | - }*/
|
|
| 749 | 733 | }
|
| 750 | 734 | |
| 751 | 735 | @VisibleForTesting
|
| ... | ... | @@ -804,11 +788,6 @@ class SettingsFragment : PreferenceFragmentCompat(), UserInteractionHandler { |
| 804 | 788 | }
|
| 805 | 789 | }
|
| 806 | 790 | |
| 807 | - requirePreference<Preference>(R.string.pref_key_use_html_connection_ui).apply {
|
|
| 808 | - onPreferenceChangeListener = object : SharedPreferenceUpdater() {}
|
|
| 809 | - isVisible = Config.channel != ReleaseChannel.Release
|
|
| 810 | - }
|
|
| 811 | - |
|
| 812 | 791 | requirePreference<Preference>(R.string.pref_key_tor_logs).apply {
|
| 813 | 792 | setOnPreferenceClickListener {
|
| 814 | 793 | val directions =
|
| ... | ... | @@ -2899,11 +2899,6 @@ class Settings( |
| 2899 | 2899 | return sharedPreferences.getBoolean(cleanupPreferenceKey, false)
|
| 2900 | 2900 | }
|
| 2901 | 2901 | |
| 2902 | - var useHtmlConnectionUi by booleanPreference(
|
|
| 2903 | - key = appContext.getPreferenceKey(R.string.pref_key_use_html_connection_ui),
|
|
| 2904 | - default = false,
|
|
| 2905 | - )
|
|
| 2906 | - |
|
| 2907 | 2902 | var quickStart by booleanPreference(
|
| 2908 | 2903 | appContext.getPreferenceKey(R.string.pref_key_quick_start),
|
| 2909 | 2904 | default = false,
|
| ... | ... | @@ -538,7 +538,6 @@ |
| 538 | 538 | <string name="pref_key_tor_network_settings_explanation" translatable="false">pref_key_tor_network_settings_explanation</string>
|
| 539 | 539 | <string name="pref_key_tor_network_settings_bridge_config" translatable="false">pref_key_tor_network_settings_bridge_config</string>
|
| 540 | 540 | <string name="pref_key_tor_logs" translatable="false">pref_key_tor_logs</string>
|
| 541 | - <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 -->
|
|
| 542 | 541 | <string name="pref_key_about_config_shortcut" translatable="false">pref_key_about_config_shortcut</string>
|
| 543 | 542 | <string name="pref_key_tor_network_settings_bridge_config_explanation" translatable="false">pref_key_tor_network_settings_bridge_config_explanation</string>
|
| 544 | 543 | <string name="pref_key_tor_network_settings_bridge_config_toggle" translatable="false">pref_key_tor_network_settings_bridge_config_toggle</string>
|
| ... | ... | @@ -181,13 +181,6 @@ |
| 181 | 181 | android:title="@string/tor_connect_automatically_label"
|
| 182 | 182 | app:iconSpaceReserved="false" />
|
| 183 | 183 | |
| 184 | - <SwitchPreference
|
|
| 185 | - android:defaultValue="false"
|
|
| 186 | - android:key="@string/pref_key_use_html_connection_ui"
|
|
| 187 | - android:summary="Recommended only for debugging"
|
|
| 188 | - android:title="Enable HTML connection UI"
|
|
| 189 | - app:iconSpaceReserved="false" />
|
|
| 190 | - |
|
| 191 | 184 | <Preference
|
| 192 | 185 | android:key="@string/pref_key_tor_logs"
|
| 193 | 186 | app:iconSpaceReserved="false"
|
| ... | ... | @@ -4,11 +4,6 @@ |
| 4 | 4 | @import url("chrome://global/skin/tor-colors.css");
|
| 5 | 5 | @import url("chrome://global/skin/onion-pattern.css");
|
| 6 | 6 | |
| 7 | -html {
|
|
| 8 | - width: 100%;
|
|
| 9 | - height: 100%;
|
|
| 10 | -}
|
|
| 11 | - |
|
| 12 | 7 | body:not(.loaded) {
|
| 13 | 8 | /* Keep blank whilst loading. */
|
| 14 | 9 | display: none;
|
| ... | ... | @@ -275,147 +270,3 @@ body.aboutTorConnect .title.location { |
| 275 | 270 | background-image: url("chrome://global/content/torconnect/connection-location.svg");
|
| 276 | 271 | stroke: var(--icon-color-warning);
|
| 277 | 272 | } |
| 278 | - |
|
| 279 | -/* Android-specific CSS, to be removed when we use only the native UI. */
|
|
| 280 | -:root {
|
|
| 281 | - --android-dark-accents-buttons: #9059ff;
|
|
| 282 | - --android-dark-background-secondary: #e1e0e7;
|
|
| 283 | - --android-dark-text-primary: #fbfbfe;
|
|
| 284 | - --android-light-text-primary: #15141a;
|
|
| 285 | -}
|
|
| 286 | - |
|
| 287 | -[hidden="true"] {
|
|
| 288 | - display: none !important;
|
|
| 289 | -}
|
|
| 290 | - |
|
| 291 | -body.android {
|
|
| 292 | - width: 100%;
|
|
| 293 | - height: 100%;
|
|
| 294 | - box-sizing: border-box;
|
|
| 295 | - margin: 0;
|
|
| 296 | - padding: 0 24px !important;
|
|
| 297 | - color: var(--android-dark-text-primary);
|
|
| 298 | - background: linear-gradient(194deg, #692e9d -0.93%, #393270 48.91%);
|
|
| 299 | - font: menu;
|
|
| 300 | - font-size: var(--font-size-small);
|
|
| 301 | - display: flex;
|
|
| 302 | -}
|
|
| 303 | - |
|
| 304 | -.android #connectPageContainer {
|
|
| 305 | - max-width: none;
|
|
| 306 | - display: flex;
|
|
| 307 | - flex-direction: column;
|
|
| 308 | - flex: 1;
|
|
| 309 | -}
|
|
| 310 | - |
|
| 311 | -.android #breadcrumbs {
|
|
| 312 | - display: none;
|
|
| 313 | -}
|
|
| 314 | - |
|
| 315 | -.android #text-container {
|
|
| 316 | - display: flex;
|
|
| 317 | - flex-direction: column;
|
|
| 318 | - flex: 1;
|
|
| 319 | -}
|
|
| 320 | - |
|
| 321 | -.android .title {
|
|
| 322 | - background-position: left 0;
|
|
| 323 | - background-repeat: no-repeat;
|
|
| 324 | - background-size: 40px;
|
|
| 325 | - padding-top: 64px;
|
|
| 326 | - font-size: var(--font-size-xlarge);
|
|
| 327 | - line-height: 28px;
|
|
| 328 | -}
|
|
| 329 | - |
|
| 330 | -.android h1 {
|
|
| 331 | - font-weight: var(--font-weight);
|
|
| 332 | - font-size: inherit;
|
|
| 333 | - margin: 0 0 16px 0;
|
|
| 334 | -}
|
|
| 335 | - |
|
| 336 | -.android p {
|
|
| 337 | - margin: 0;
|
|
| 338 | - padding-bottom: 8px;
|
|
| 339 | - line-height: 20px;
|
|
| 340 | -}
|
|
| 341 | - |
|
| 342 | -.android #quickstartContainer {
|
|
| 343 | - margin-top: 24px;
|
|
| 344 | -}
|
|
| 345 | - |
|
| 346 | -.android .button-container {
|
|
| 347 | - display: flex;
|
|
| 348 | - flex: 1;
|
|
| 349 | - flex-direction: column;
|
|
| 350 | -}
|
|
| 351 | - |
|
| 352 | -.android #locationDropdown {
|
|
| 353 | - width: 100%;
|
|
| 354 | - max-width: none;
|
|
| 355 | - margin: 0;
|
|
| 356 | -}
|
|
| 357 | - |
|
| 358 | -.android select {
|
|
| 359 | - background: transparent;
|
|
| 360 | - border: none;
|
|
| 361 | - /* stylelint-disable-next-line stylelint-plugin-mozilla/use-border-color-tokens */
|
|
| 362 | - border-bottom: 1px solid var(--android-dark-text-primary);
|
|
| 363 | - color: var(--android-dark-text-primary);
|
|
| 364 | - display: block;
|
|
| 365 | - width: 100%;
|
|
| 366 | - margin-top: 10px;
|
|
| 367 | - padding: 8px;
|
|
| 368 | -}
|
|
| 369 | - |
|
| 370 | -.android #buttonPadding {
|
|
| 371 | - flex: 1;
|
|
| 372 | -}
|
|
| 373 | - |
|
| 374 | -body:not(.android) #connectButtonContainer {
|
|
| 375 | - /* Use the .button-container context */
|
|
| 376 | - display: contents;
|
|
| 377 | -}
|
|
| 378 | - |
|
| 379 | -.android #connectButtonContainer {
|
|
| 380 | - width: 100%;
|
|
| 381 | - padding-bottom: 18px;
|
|
| 382 | - display: grid;
|
|
| 383 | -}
|
|
| 384 | - |
|
| 385 | -/* Be sure not to match the togglee */
|
|
| 386 | -.android #connectButtonContainer button {
|
|
| 387 | - display: block;
|
|
| 388 | - width: 100%;
|
|
| 389 | - margin: 4px 0;
|
|
| 390 | - padding: 11px 30px;
|
|
| 391 | - font-size: var(--font-size-small);
|
|
| 392 | - font-weight: var(--font-weight);
|
|
| 393 | - border: none;
|
|
| 394 | - border-radius: var(--border-radius-small);
|
|
| 395 | -}
|
|
| 396 | - |
|
| 397 | -.android #connectButton,
|
|
| 398 | -.android #tryBridgeButton,
|
|
| 399 | -.android #configureButton.primary {
|
|
| 400 | - color: var(--android-dark-text-primary);
|
|
| 401 | - background-color: var(--android-dark-accents-buttons);
|
|
| 402 | -}
|
|
| 403 | - |
|
| 404 | -.android #configureButton {
|
|
| 405 | - order: 1;
|
|
| 406 | -}
|
|
| 407 | - |
|
| 408 | -.android #restartButton {
|
|
| 409 | - order: 2;
|
|
| 410 | -}
|
|
| 411 | - |
|
| 412 | -.android #restartButton,
|
|
| 413 | -.android #cancelButton,
|
|
| 414 | -.android #configureButton {
|
|
| 415 | - color: var(--android-light-text-primary);
|
|
| 416 | - background-color: var(--android-dark-background-secondary);
|
|
| 417 | -}
|
|
| 418 | - |
|
| 419 | -.android .onion-pattern-container {
|
|
| 420 | - display: none;
|
|
| 421 | -} |
| ... | ... | @@ -6,7 +6,6 @@ |
| 6 | 6 | http-equiv="Content-Security-Policy"
|
| 7 | 7 | content="default-src chrome:; object-src 'none'"
|
| 8 | 8 | />
|
| 9 | - <meta name="viewport" content="width=device-width" />
|
|
| 10 | 9 | <link
|
| 11 | 10 | rel="stylesheet"
|
| 12 | 11 | href="chrome://global/content/torconnect/aboutTorConnect.css"
|
| ... | ... | @@ -65,7 +64,11 @@ |
| 65 | 64 | <moz-toggle id="quickstartToggle"></moz-toggle>
|
| 66 | 65 | </div>
|
| 67 | 66 | |
| 68 | - <div class="button-container">
|
|
| 67 | + <div id="connectButtonContainer" class="button-container">
|
|
| 68 | + <button id="restartButton" hidden="true"></button>
|
|
| 69 | + <button id="configureButton" hidden="true"></button>
|
|
| 70 | + <button id="cancelButton" hidden="true"></button>
|
|
| 71 | + <button id="connectButton" hidden="true" class="tor-button"></button>
|
|
| 69 | 72 | <label id="locationDropdownLabel" for="countries"></label>
|
| 70 | 73 | <form id="locationDropdown" hidden="true">
|
| 71 | 74 | <select id="regions-select">
|
| ... | ... | @@ -74,22 +77,11 @@ |
| 74 | 77 | <optgroup id="full-regions-option-group"></optgroup>
|
| 75 | 78 | </select>
|
| 76 | 79 | </form>
|
| 77 | - <span id="buttonPadding"></span>
|
|
| 78 | - <span id="connectButtonContainer">
|
|
| 79 | - <button id="restartButton" hidden="true"></button>
|
|
| 80 | - <button id="configureButton" hidden="true"></button>
|
|
| 81 | - <button id="cancelButton" hidden="true"></button>
|
|
| 82 | - <button
|
|
| 83 | - id="connectButton"
|
|
| 84 | - hidden="true"
|
|
| 85 | - class="tor-button"
|
|
| 86 | - ></button>
|
|
| 87 | - <button
|
|
| 88 | - id="tryBridgeButton"
|
|
| 89 | - hidden="true"
|
|
| 90 | - class="tor-button"
|
|
| 91 | - ></button>
|
|
| 92 | - </span>
|
|
| 80 | + <button
|
|
| 81 | + id="tryBridgeButton"
|
|
| 82 | + hidden="true"
|
|
| 83 | + class="tor-button"
|
|
| 84 | + ></button>
|
|
| 93 | 85 | </div>
|
| 94 | 86 | </div>
|
| 95 | 87 | </div>
|
| ... | ... | @@ -66,7 +66,7 @@ class AboutTorConnect { |
| 66 | 66 | connect: "button#connectButton",
|
| 67 | 67 | tryBridge: "button#tryBridgeButton",
|
| 68 | 68 | locationDropdownLabel: "#locationDropdownLabel",
|
| 69 | - locationDropdown: "#locationDropdown",
|
|
| 69 | + locationDropdown: "form#locationDropdown",
|
|
| 70 | 70 | locationDropdownSelect: "#regions-select",
|
| 71 | 71 | },
|
| 72 | 72 | });
|
| ... | ... | @@ -757,9 +757,6 @@ class AboutTorConnect { |
| 757 | 757 | }
|
| 758 | 758 | |
| 759 | 759 | initElements(direction) {
|
| 760 | - const isAndroid = navigator.userAgent.includes("Android");
|
|
| 761 | - document.body.classList.toggle("android", isAndroid);
|
|
| 762 | - |
|
| 763 | 760 | document.documentElement.setAttribute("dir", direction);
|
| 764 | 761 | |
| 765 | 762 | this.elements.connectToTorLink.addEventListener("click", () => {
|