Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android
Commits:
- 
50c4fb9d
by clairehurst at 2024-05-09T14:51:05-06:00
13 changed files:
- fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
- fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt
- fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
- fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt
- − fenix/app/src/main/java/org/mozilla/fenix/tor/TorBetaConnectionFeaturesFragment.kt
- fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapFragment.kt
- fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt
- fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
- − fenix/app/src/main/res/layout/tor_network_settings_beta_connection_features.xml
- fenix/app/src/main/res/navigation/nav_graph.xml
- fenix/app/src/main/res/values/preference_keys.xml
- fenix/app/src/main/res/xml/preferences.xml
Changes:
| ... | ... | @@ -1186,19 +1186,15 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorIn | 
| 1186 | 1186 |      }
 | 
| 1187 | 1187 | |
| 1188 | 1188 |      open fun navigateToHome() {
 | 
| 1189 | -        if (settings().useNewBootstrap) {
 | |
| 1190 | -            if (settings().useNewBootstrapNativeUi) {
 | |
| 1191 | -                navHost.navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist())
 | |
| 1192 | -            } else {
 | |
| 1193 | -                navHost.navController.navigate(NavGraphDirections.actionStartupHome())
 | |
| 1194 | -                openToBrowserAndLoad(
 | |
| 1195 | -                    searchTermOrURL = "about:torconnect",
 | |
| 1196 | -                    newTab = true,
 | |
| 1197 | -                    from = BrowserDirection.FromHome,
 | |
| 1198 | -                )
 | |
| 1199 | -            }
 | |
| 1189 | +        if (!settings().useHtmlConnectionUi) {
 | |
| 1190 | +            navHost.navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist())
 | |
| 1200 | 1191 |          } else {
 | 
| 1201 | -            navHost.navController.navigate(NavGraphDirections.actionStartupTorbootstrap())
 | |
| 1192 | +            navHost.navController.navigate(NavGraphDirections.actionStartupHome())
 | |
| 1193 | +            openToBrowserAndLoad(
 | |
| 1194 | +                searchTermOrURL = "about:torconnect",
 | |
| 1195 | +                newTab = true,
 | |
| 1196 | +                from = BrowserDirection.FromHome,
 | |
| 1197 | +            )
 | |
| 1202 | 1198 |          }
 | 
| 1203 | 1199 |      }
 | 
| 1204 | 1200 | 
| ... | ... | @@ -1217,12 +1217,7 @@ abstract class BaseBrowserFragment : | 
| 1217 | 1217 |      private fun handleBetaHtmlTorConnect() {
 | 
| 1218 | 1218 |          val currentTab = getCurrentTab() ?: return
 | 
| 1219 | 1219 |          if (currentTab.content.url == "about:torconnect") {
 | 
| 1220 | -            if (!requireActivity().settings().useNewBootstrap) {
 | |
| 1221 | -                requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id)
 | |
| 1222 | -                (requireActivity() as HomeActivity).navHost.navController.navigate(
 | |
| 1223 | -                    NavGraphDirections.actionStartupTorbootstrap(),
 | |
| 1224 | -                )
 | |
| 1225 | -            } else if (!requireActivity().settings().useNewBootstrapHtmlUi) {
 | |
| 1220 | +            if (!requireActivity().settings().useHtmlConnectionUi) {
 | |
| 1226 | 1221 |                  requireContext().components.useCases.tabsUseCases.removeTab(currentTab.id)
 | 
| 1227 | 1222 |                  (requireActivity() as HomeActivity).navigateToHome()
 | 
| 1228 | 1223 |              } else {
 | 
| ... | ... | @@ -202,7 +202,7 @@ class Components(private val context: Context) { | 
| 202 | 202 |              ),
 | 
| 203 | 203 |          )
 | 
| 204 | 204 |      }
 | 
| 205 | -    val torController by lazyMonitored { if (settings.useNewBootstrap) TorControllerGV(context) else TorControllerTAS(context) }
 | |
| 205 | +    val torController by lazyMonitored { TorControllerGV(context) }
 | |
| 206 | 206 |  }
 | 
| 207 | 207 | |
| 208 | 208 |  /**
 | 
| ... | ... | @@ -145,7 +145,6 @@ class Core( | 
| 145 | 145 |                  .shouldShowCookieBannerReEngagementDialog(),
 | 
| 146 | 146 |              torSecurityLevel = context.settings().torSecurityLevel().intRepresentation,
 | 
| 147 | 147 |              spoofEnglish = context.settings().spoofEnglish,
 | 
| 148 | -            useNewBootstrap = context.settings().useNewBootstrap,
 | |
| 149 | 148 |          )
 | 
| 150 | 149 | |
| 151 | 150 |          GeckoEngine(
 | 
| ... | ... | @@ -40,6 +40,7 @@ import mozilla.components.concept.sync.Profile | 
| 40 | 40 |  import mozilla.components.service.glean.private.NoExtras
 | 
| 41 | 41 |  import mozilla.components.support.ktx.android.view.showKeyboard
 | 
| 42 | 42 |  import org.mozilla.fenix.BrowserDirection
 | 
| 43 | +import org.mozilla.fenix.BuildConfig
 | |
| 43 | 44 |  import org.mozilla.fenix.Config
 | 
| 44 | 45 |  import org.mozilla.fenix.FeatureFlags
 | 
| 45 | 46 |  import org.mozilla.fenix.GleanMetrics.Addons
 | 
| ... | ... | @@ -738,13 +739,9 @@ class SettingsFragment : PreferenceFragmentCompat() { | 
| 738 | 739 |              }
 | 
| 739 | 740 |          }
 | 
| 740 | 741 | |
| 741 | -        requirePreference<Preference>(R.string.pref_key_use_new_bootstrap).apply {
 | |
| 742 | -            setOnPreferenceClickListener {
 | |
| 743 | -                val directions =
 | |
| 744 | -                    SettingsFragmentDirections.actionSettingsFragmentToBetaConnectionFeaturesFragment()
 | |
| 745 | -                requireView().findNavController().navigate(directions)
 | |
| 746 | -                true
 | |
| 747 | -            }
 | |
| 742 | +        requirePreference<Preference>(R.string.pref_key_use_html_connection_ui).apply {
 | |
| 743 | +            onPreferenceChangeListener = object : SharedPreferenceUpdater() {}
 | |
| 744 | +            isVisible = BuildConfig.DEBUG
 | |
| 748 | 745 |          }
 | 
| 749 | 746 | |
| 750 | 747 |          requirePreference<Preference>(R.string.pref_key_tor_logs).apply {
 | 
| 1 | -/* This Source Code Form is subject to the terms of the Mozilla Public
 | |
| 2 | - * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| 3 | - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 4 | - | |
| 5 | -package org.mozilla.fenix.tor
 | |
| 6 | - | |
| 7 | -import android.os.Bundle
 | |
| 8 | -import android.view.LayoutInflater
 | |
| 9 | -import android.view.View
 | |
| 10 | -import android.view.ViewGroup
 | |
| 11 | -import androidx.core.view.children
 | |
| 12 | -import androidx.fragment.app.Fragment
 | |
| 13 | -import org.mozilla.fenix.databinding.TorNetworkSettingsBetaConnectionFeaturesBinding
 | |
| 14 | -import org.mozilla.fenix.ext.components
 | |
| 15 | -import org.mozilla.fenix.ext.settings
 | |
| 16 | - | |
| 17 | -/**
 | |
| 18 | - * Lets the user customize beta connection features mode.
 | |
| 19 | - */
 | |
| 20 | -class TorBetaConnectionFeaturesFragment : Fragment() {
 | |
| 21 | -    override fun onCreateView(
 | |
| 22 | -        inflater: LayoutInflater,
 | |
| 23 | -        container: ViewGroup?,
 | |
| 24 | -        savedInstanceState: Bundle?,
 | |
| 25 | -    ): View {
 | |
| 26 | -        val binding = TorNetworkSettingsBetaConnectionFeaturesBinding.inflate(inflater)
 | |
| 27 | - | |
| 28 | -        binding.enableBetaConnectionFeaturesSwitch.run {
 | |
| 29 | -            isChecked = context.settings().useNewBootstrap
 | |
| 30 | -            setConnectionAssistUI(binding, isChecked)
 | |
| 31 | - | |
| 32 | -            setOnCheckedChangeListener { _, isConnectionAssistEnabled ->
 | |
| 33 | -                context.settings().useNewBootstrap = isConnectionAssistEnabled
 | |
| 34 | -                setConnectionAssistUI(binding, isConnectionAssistEnabled)
 | |
| 35 | -                updateEngineConnectionAssistMode()
 | |
| 36 | -            }
 | |
| 37 | -        }
 | |
| 38 | - | |
| 39 | -        // Since the beta connection features modes are in a RadioGroup we only need one listener to know of all their changes.
 | |
| 40 | -        binding.useNewBootstrapWithNativeUiRadioButton.setOnCheckedChangeListener { _, _ ->
 | |
| 41 | -            updateEngineConnectionAssistMode()
 | |
| 42 | -        }
 | |
| 43 | - | |
| 44 | -        return binding.root
 | |
| 45 | -    }
 | |
| 46 | - | |
| 47 | -    private fun setConnectionAssistUI(
 | |
| 48 | -        binding: TorNetworkSettingsBetaConnectionFeaturesBinding,
 | |
| 49 | -        isBetaConnectionAssistEnabled: Boolean,
 | |
| 50 | -    ) {
 | |
| 51 | -        if (!isBetaConnectionAssistEnabled) {
 | |
| 52 | -            binding.enableBetaConnectionFeaturesModes.apply {
 | |
| 53 | -                clearCheck()
 | |
| 54 | -                children.forEach { it.isEnabled = false }
 | |
| 55 | -            }
 | |
| 56 | -        } else {
 | |
| 57 | -            binding.enableBetaConnectionFeaturesModes.children.forEach { it.isEnabled = true }
 | |
| 58 | -        }
 | |
| 59 | -    }
 | |
| 60 | - | |
| 61 | -    private fun updateEngineConnectionAssistMode() {
 | |
| 62 | -        requireContext().components.core.engine.settings.useNewBootstrap =
 | |
| 63 | -            requireContext().settings().useNewBootstrap
 | |
| 64 | -    }
 | |
| 65 | - | |
| 66 | -} | 
| ... | ... | @@ -164,9 +164,7 @@ class TorBootstrapFragment : Fragment() { | 
| 164 | 164 |          // triggered to cause an automatic update on warm start (no tab selection occurs). So we
 | 
| 165 | 165 |          // update it manually here.
 | 
| 166 | 166 |          requireComponents.useCases.sessionUseCases.updateLastAccess()
 | 
| 167 | -        if (requireContext().settings().useNewBootstrap){
 | |
| 168 | -            (requireActivity() as HomeActivity).navigateToHome()
 | |
| 169 | -        }
 | |
| 167 | +        (requireActivity() as HomeActivity).navigateToHome()
 | |
| 170 | 168 |      }
 | 
| 171 | 169 | |
| 172 | 170 |      private fun handleTorBootstrapConnect() {
 | 
| ... | ... | @@ -21,7 +21,7 @@ class TorConnectionAssistViewModel( | 
| 21 | 21 |      private val TAG = "torConnectionAssistVM"
 | 
| 22 | 22 |      private val components = getApplication<Application>().components
 | 
| 23 | 23 | |
| 24 | -    private val _torController: TorControllerGV = components.torController as TorControllerGV
 | |
| 24 | +    private val _torController: TorControllerGV = components.torController
 | |
| 25 | 25 | |
| 26 | 26 |      private val _torConnectScreen = MutableStateFlow(ConnectAssistUiState.Splash)
 | 
| 27 | 27 |      internal val torConnectScreen: StateFlow<ConnectAssistUiState> = _torConnectScreen
 | 
| ... | ... | @@ -1855,18 +1855,8 @@ class Settings(private val appContext: Context) : PreferencesHolder { | 
| 1855 | 1855 |       */
 | 
| 1856 | 1856 |      var enableUnifiedSearchSettingsUI: Boolean = showUnifiedSearchFeature && FeatureFlags.unifiedSearchSettings
 | 
| 1857 | 1857 | |
| 1858 | -    var useNewBootstrap by booleanPreference(
 | |
| 1859 | -        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap),
 | |
| 1860 | -        default = true,
 | |
| 1861 | -    )
 | |
| 1862 | - | |
| 1863 | -    var useNewBootstrapNativeUi by booleanPreference(
 | |
| 1864 | -        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_android_native),
 | |
| 1865 | -        default = true,
 | |
| 1866 | -    )
 | |
| 1867 | - | |
| 1868 | -    var useNewBootstrapHtmlUi by booleanPreference(
 | |
| 1869 | -        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_html),
 | |
| 1870 | -        default = false
 | |
| 1858 | +    var useHtmlConnectionUi by booleanPreference(
 | |
| 1859 | +        appContext.getPreferenceKey(R.string.pref_key_use_html_connection_ui),
 | |
| 1860 | +        default = false,
 | |
| 1871 | 1861 |      )
 | 
| 1872 | 1862 |  } | 
| 1 | -<?xml version="1.0" encoding="utf-8"?><!-- This Source Code Form is subject to the terms of the Mozilla Public
 | |
| 2 | -   - License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| 3 | -   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 | |
| 4 | -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | |
| 5 | -    xmlns:app="http://schemas.android.com/apk/res-auto"
 | |
| 6 | -    android:layout_width="match_parent"
 | |
| 7 | -    android:layout_height="wrap_content">
 | |
| 8 | - | |
| 9 | -    <TextView
 | |
| 10 | -        android:id="@+id/enable_beta_connection_features_title"
 | |
| 11 | -        android:layout_width="0dp"
 | |
| 12 | -        android:layout_height="wrap_content"
 | |
| 13 | -        android:layout_marginStart="16dp"
 | |
| 14 | -        android:layout_marginTop="16dp"
 | |
| 15 | -        android:layout_marginBottom="2dp"
 | |
| 16 | -        android:clickable="false"
 | |
| 17 | -        android:text="Enable beta connection features"
 | |
| 18 | -        android:textAppearance="@style/ListItemTextStyle"
 | |
| 19 | -        android:textSize="16sp"
 | |
| 20 | -        app:layout_constraintBottom_toTopOf="@id/enable_beta_connection_features_summary"
 | |
| 21 | -        app:layout_constraintEnd_toStartOf="@id/enable_beta_connection_features_switch"
 | |
| 22 | -        app:layout_constraintStart_toStartOf="parent"
 | |
| 23 | -        app:layout_constraintTop_toTopOf="parent"
 | |
| 24 | -        app:lineHeight="24.sp" />
 | |
| 25 | - | |
| 26 | -    <TextView
 | |
| 27 | -        android:id="@+id/enable_beta_connection_features_summary"
 | |
| 28 | -        android:layout_width="0dp"
 | |
| 29 | -        android:layout_height="wrap_content"
 | |
| 30 | -        android:text="Help us test our new connection assist features which focuses on a streamlined connection with better integration with bridges"
 | |
| 31 | -        android:textColor="?attr/textSecondary"
 | |
| 32 | -        android:textColorLink="?attr/textSecondary"
 | |
| 33 | -        android:textSize="12sp"
 | |
| 34 | -        app:layout_constraintBottom_toTopOf="@id/enable_beta_connection_features_modes"
 | |
| 35 | -        app:layout_constraintEnd_toEndOf="@id/enable_beta_connection_features_title"
 | |
| 36 | -        app:layout_constraintStart_toStartOf="@id/enable_beta_connection_features_title"
 | |
| 37 | -        app:layout_constraintTop_toBottomOf="@id/enable_beta_connection_features_title"
 | |
| 38 | -        app:lineHeight="16.sp" />
 | |
| 39 | - | |
| 40 | -    <androidx.appcompat.widget.SwitchCompat
 | |
| 41 | -        android:id="@+id/enable_beta_connection_features_switch"
 | |
| 42 | -        android:layout_width="wrap_content"
 | |
| 43 | -        android:layout_height="wrap_content"
 | |
| 44 | -        android:minHeight="48dp"
 | |
| 45 | -        android:paddingStart="18dp"
 | |
| 46 | -        android:paddingEnd="18dp"
 | |
| 47 | -        android:textColor="@color/state_list_text_color"
 | |
| 48 | -        android:textOff="@string/studies_off"
 | |
| 49 | -        android:textOn="@string/studies_on"
 | |
| 50 | -        app:layout_constraintEnd_toEndOf="parent"
 | |
| 51 | -        app:layout_constraintTop_toTopOf="@id/enable_beta_connection_features_title" />
 | |
| 52 | - | |
| 53 | -    <RadioGroup
 | |
| 54 | -        android:id="@+id/enable_beta_connection_features_modes"
 | |
| 55 | -        android:layout_width="match_parent"
 | |
| 56 | -        android:layout_height="wrap_content"
 | |
| 57 | -        android:layout_marginTop="10dp"
 | |
| 58 | -        app:layout_constraintEnd_toEndOf="parent"
 | |
| 59 | -        app:layout_constraintStart_toStartOf="parent"
 | |
| 60 | -        app:layout_constraintTop_toBottomOf="@id/enable_beta_connection_features_summary">
 | |
| 61 | - | |
| 62 | -        <org.mozilla.fenix.settings.PreferenceBackedRadioButton
 | |
| 63 | -            android:id="@+id/use_new_bootstrap_with_native_ui_radio_button"
 | |
| 64 | -            android:layout_width="match_parent"
 | |
| 65 | -            android:layout_height="wrap_content"
 | |
| 66 | -            android:background="?android:attr/selectableItemBackground"
 | |
| 67 | -            android:button="@null"
 | |
| 68 | -            android:drawablePadding="@dimen/radio_button_preference_drawable_padding"
 | |
| 69 | -            android:paddingStart="@dimen/radio_button_preference_horizontal"
 | |
| 70 | -            android:paddingTop="@dimen/radio_button_preference_vertical"
 | |
| 71 | -            android:paddingEnd="@dimen/radio_button_preference_horizontal"
 | |
| 72 | -            android:paddingBottom="@dimen/radio_button_preference_vertical"
 | |
| 73 | -            android:text="Native Android UI"
 | |
| 74 | -            android:textAppearance="?android:attr/textAppearanceListItem"
 | |
| 75 | -            android:textSize="16sp"
 | |
| 76 | -            app:drawableStartCompat="?android:attr/listChoiceIndicatorSingle"
 | |
| 77 | -            app:preferenceKey="@string/pref_key_use_new_bootstrap_with_android_native"
 | |
| 78 | -            app:preferenceKeyDefaultValue="true" />
 | |
| 79 | - | |
| 80 | -        <org.mozilla.fenix.settings.PreferenceBackedRadioButton
 | |
| 81 | -            android:id="@+id/use_new_bootstrap_with_html_ui_radio_button"
 | |
| 82 | -            android:layout_width="match_parent"
 | |
| 83 | -            android:layout_height="48dp"
 | |
| 84 | -            android:background="?android:attr/selectableItemBackground"
 | |
| 85 | -            android:button="@null"
 | |
| 86 | -            android:drawablePadding="@dimen/radio_button_preference_drawable_padding"
 | |
| 87 | -            android:paddingStart="@dimen/radio_button_preference_horizontal"
 | |
| 88 | -            android:paddingTop="@dimen/radio_button_preference_vertical"
 | |
| 89 | -            android:paddingEnd="@dimen/radio_button_preference_horizontal"
 | |
| 90 | -            android:paddingBottom="@dimen/radio_button_preference_vertical"
 | |
| 91 | -            android:text="HTML UI"
 | |
| 92 | -            android:textAppearance="?android:attr/textAppearanceListItem"
 | |
| 93 | -            android:textSize="16sp"
 | |
| 94 | -            app:drawableStartCompat="?android:attr/listChoiceIndicatorSingle"
 | |
| 95 | -            app:preferenceKey="@string/pref_key_use_new_bootstrap_with_html"
 | |
| 96 | -            app:preferenceKeyDefaultValue="false" />
 | |
| 97 | -    </RadioGroup>
 | |
| 98 | - | |
| 99 | -</androidx.constraintlayout.widget.ConstraintLayout> | 
| ... | ... | @@ -977,11 +977,6 @@ | 
| 977 | 977 |          android:id="@+id/torBridgeConfigFragment"
 | 
| 978 | 978 |          android:name="org.mozilla.fenix.settings.TorBridgeConfigFragment"
 | 
| 979 | 979 |          android:label="@string/preferences_tor_network_settings_bridge_config" />
 | 
| 980 | -    <fragment
 | |
| 981 | -        android:id="@+id/torBetaConnectionFeaturesFragment"
 | |
| 982 | -        android:name="org.mozilla.fenix.tor.TorBetaConnectionFeaturesFragment"
 | |
| 983 | -        android:label="Enable beta connection features"
 | |
| 984 | -        tools:layout="@layout/tor_network_settings_beta_connection_features" />
 | |
| 985 | 980 |      <fragment
 | 
| 986 | 981 |          android:id="@+id/torLogsFragment"
 | 
| 987 | 982 |          android:name="org.mozilla.fenix.tor.TorLogsComposeFragment"
 | 
| ... | ... | @@ -378,10 +378,8 @@ | 
| 378 | 378 | |
| 379 | 379 |      <string name="pref_key_tor_network_settings_explanation" translatable="false">pref_key_tor_network_settings_explanation</string>
 | 
| 380 | 380 |      <string name="pref_key_tor_network_settings_bridge_config" translatable="false">pref_key_tor_network_settings_bridge_config</string>
 | 
| 381 | -    <string name="pref_key_use_new_bootstrap" translatable="false">pref_key_use_new_bootstrap</string>
 | |
| 382 | 381 |      <string name="pref_key_tor_logs" translatable="false">pref_key_tor_logs</string>
 | 
| 383 | -    <string name="pref_key_use_new_bootstrap_with_android_native" translatable="false">pref_key_use_new_bootstrap_with_android_native</string>
 | |
| 384 | -    <string name="pref_key_use_new_bootstrap_with_html" translatable="false">pref_key_use_new_bootstrap_with_html</string>
 | |
| 382 | +    <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   -->
 | |
| 385 | 383 |      <string name="pref_key_tor_network_settings_bridge_config_explanation" translatable="false">pref_key_tor_network_settings_bridge_config_explanation</string>
 | 
| 386 | 384 |      <string name="pref_key_tor_network_settings_bridge_config_toggle" translatable="false">pref_key_tor_network_settings_bridge_config_toggle</string>
 | 
| 387 | 385 |      <string name="pref_key_tor_network_settings_bridge_config_builtin_bridge_obfs4" translatable="false">pref_key_tor_network_settings_bridge_config_builtin_bridge_obfs4</string>
 | 
| ... | ... | @@ -176,10 +176,12 @@ | 
| 176 | 176 |              android:title="@string/tor_bootstrap_quick_start_label"
 | 
| 177 | 177 |              app:iconSpaceReserved="false" />
 | 
| 178 | 178 | |
| 179 | -        <Preference
 | |
| 180 | -            android:key="@string/pref_key_use_new_bootstrap"
 | |
| 181 | -            app:iconSpaceReserved="false"
 | |
| 182 | -            android:title="Enable beta connection features" />
 | |
| 179 | +        <SwitchPreference
 | |
| 180 | +            android:defaultValue="false"
 | |
| 181 | +            android:key="@string/pref_key_use_html_connection_ui"
 | |
| 182 | +            android:summary="Recommended only for debugging"
 | |
| 183 | +            android:title="Enable HTML connection UI"
 | |
| 184 | +            app:iconSpaceReserved="false" />
 | |
| 183 | 185 | |
| 184 | 186 |          <Preference
 | 
| 185 | 187 |              android:key="@string/pref_key_tor_logs"
 |