[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] Enable the connect assist experiments on alpha



Title: GitLab

Pier Angelo Vendrame pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android

Commits:

  • 48593938
    by clairehurst at 2023-12-21T14:48:46-07:00
    Enable the connect assist experiments on alpha
    

13 changed files:

Changes:

  • android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
    ... ... @@ -799,6 +799,11 @@ class GeckoEngine(
    799 799
             override var prioritizeOnions: Boolean
    
    800 800
                 get() = runtime.settings.prioritizeOnions
    
    801 801
                 set(value) { runtime.settings.prioritizeOnions = value }
    
    802
    +        override var useNewBootstrap: Boolean
    
    803
    +            get() = runtime.settings.useNewBootstrap
    
    804
    +            set(value) {
    
    805
    +                runtime.settings.useNewBootstrap = value
    
    806
    +            }
    
    802 807
         }.apply {
    
    803 808
             defaultSettings?.let {
    
    804 809
                 this._javascript_Enabled = it._javascript_Enabled
    
    ... ... @@ -824,6 +829,7 @@ class GeckoEngine(
    824 829
                 this.torSecurityLevel = it.torSecurityLevel
    
    825 830
                 this.spoofEnglish = it.spoofEnglish
    
    826 831
                 this.prioritizeOnions = it.prioritizeOnions
    
    832
    +            this.useNewBootstrap = it.useNewBootstrap
    
    827 833
             }
    
    828 834
         }
    
    829 835
     
    
    ... ... @@ -929,6 +935,8 @@ class GeckoEngine(
    929 935
                 unBlockedBySmartBlock = this.blockingData.any { it.unBlockedBySmartBlock() },
    
    930 936
             )
    
    931 937
         }
    
    938
    +
    
    939
    +    fun getTorIntegrationController() = runtime.getTorIntegrationController()
    
    932 940
     }
    
    933 941
     
    
    934 942
     internal fun ContentBlockingController.LogEntry.BlockingData.hasBlockedCookies(): Boolean {
    

  • android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt
    ... ... @@ -214,6 +214,8 @@ abstract class Settings {
    214 214
         open var spoofEnglish: Boolean by UnsupportedSetting()
    
    215 215
     
    
    216 216
         open var prioritizeOnions: Boolean by UnsupportedSetting()
    
    217
    +
    
    218
    +    open var useNewBootstrap: Boolean by UnsupportedSetting()
    
    217 219
     }
    
    218 220
     
    
    219 221
     /**
    
    ... ... @@ -259,6 +261,7 @@ data class DefaultSettings(
    259 261
         override var torSecurityLevel: Int = 4,
    
    260 262
         override var spoofEnglish: Boolean = false,
    
    261 263
         override var prioritizeOnions: Boolean = false,
    
    264
    +    override var useNewBootstrap: Boolean = false,
    
    262 265
     ) : Settings()
    
    263 266
     
    
    264 267
     class UnsupportedSetting<T> {
    

  • fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt
    ... ... @@ -164,6 +164,11 @@ import org.mozilla.fenix.utils.Settings
    164 164
     import java.lang.ref.WeakReference
    
    165 165
     import java.util.Locale
    
    166 166
     
    
    167
    +import androidx.navigation.fragment.findNavController
    
    168
    +import mozilla.components.browser.engine.gecko.GeckoEngine
    
    169
    +import mozilla.components.browser.state.selector.findCustomTab
    
    170
    +import org.mozilla.geckoview.TorIntegrationAndroid
    
    171
    +
    
    167 172
     /**
    
    168 173
      * The main activity of the application. The application is primarily a single Activity (this one)
    
    169 174
      * with fragments switching out to display different views. The most important views shown here are the:
    
    ... ... @@ -171,7 +176,7 @@ import java.util.Locale
    171 176
      * - browser screen
    
    172 177
      */
    
    173 178
     @SuppressWarnings("TooManyFunctions", "LargeClass", "LongParameterList", "LongMethod")
    
    174
    -open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    
    179
    +open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorIntegrationAndroid.BootstrapStateChangeListener {
    
    175 180
         // DO NOT MOVE ANYTHING ABOVE THIS, GETTING INIT TIME IS CRITICAL
    
    176 181
         // we need to store startup timestamp for warm startup. we cant directly store
    
    177 182
         // inside AppStartupTelemetry since that class lives inside components and
    
    ... ... @@ -201,7 +206,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    201 206
     
    
    202 207
         private var inflater: LayoutInflater? = null
    
    203 208
     
    
    204
    -    private val navHost by lazy {
    
    209
    +    val navHost by lazy {
    
    205 210
             supportFragmentManager.findFragmentById(R.id.container) as NavHostFragment
    
    206 211
         }
    
    207 212
     
    
    ... ... @@ -396,6 +401,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    396 401
     
    
    397 402
             components.notificationsDelegate.bindToActivity(this)
    
    398 403
     
    
    404
    +        val engine = components.core.engine
    
    405
    +        if (engine is GeckoEngine) {
    
    406
    +            val torIntegration = engine.getTorIntegrationController()
    
    407
    +            torIntegration.registerBootstrapStateChangeListener(this)
    
    408
    +        }
    
    409
    +
    
    399 410
             StartupTimeline.onActivityCreateEndHome(this) // DO NOT MOVE ANYTHING BELOW HERE.
    
    400 411
         }
    
    401 412
     
    
    ... ... @@ -609,6 +620,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    609 620
                 // underlying Application, as well.
    
    610 621
                 (application as FenixApplication).terminate()
    
    611 622
             }
    
    623
    +
    
    624
    +        val engine = components.core.engine
    
    625
    +        if (engine is GeckoEngine) {
    
    626
    +            val torIntegration = engine.getTorIntegrationController()
    
    627
    +            torIntegration.unregisterBootstrapStateChangeListener(this)
    
    628
    +        }
    
    612 629
         }
    
    613 630
     
    
    614 631
         override fun onConfigurationChanged(newConfig: Configuration) {
    
    ... ... @@ -1163,7 +1180,20 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    1163 1180
         }
    
    1164 1181
     
    
    1165 1182
         open fun navigateToHome() {
    
    1166
    -        navHost.navController.navigate(NavGraphDirections.actionStartupTorbootstrap())
    
    1183
    +        if (settings().useNewBootstrap) {
    
    1184
    +            if (settings().useNewBootstrapNativeUi) {
    
    1185
    +                navHost.navController.navigate(NavGraphDirections.actionStartupTorConnectionAssist())
    
    1186
    +            } else {
    
    1187
    +                navHost.navController.navigate(NavGraphDirections.actionStartupHome())
    
    1188
    +                openToBrowserAndLoad(
    
    1189
    +                    searchTermOrURL = "about:torconnect",
    
    1190
    +                    newTab = true,
    
    1191
    +                    from = BrowserDirection.FromHome,
    
    1192
    +                )
    
    1193
    +            }
    
    1194
    +        } else {
    
    1195
    +            navHost.navController.navigate(NavGraphDirections.actionStartupTorbootstrap())
    
    1196
    +        }
    
    1167 1197
         }
    
    1168 1198
     
    
    1169 1199
         override fun attachBaseContext(base: Context) {
    
    ... ... @@ -1341,4 +1371,15 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
    1341 1371
             // telemetry purposes.
    
    1342 1372
             const val PWA_RECENTLY_USED_THRESHOLD = DateUtils.DAY_IN_MILLIS * 30L
    
    1343 1373
         }
    
    1374
    +
    
    1375
    +    override fun onBootstrapStateChange(state: String) = Unit
    
    1376
    +    override fun onBootstrapProgress(progress: Double, status: String, hasWarnings: Boolean) = Unit
    
    1377
    +    override fun onBootstrapComplete() {
    
    1378
    +        components.useCases.tabsUseCases.removeAllTabs()
    
    1379
    +        navHost.navController.navigate(NavGraphDirections.actionStartupHome())
    
    1380
    +    }
    
    1381
    +    override fun onBootstrapError(message: String, details: String) = Unit
    
    1382
    +    override fun onSettingsRequested() {
    
    1383
    +        navHost.navController.navigate(NavGraphDirections.actionGlobalSettingsFragment())
    
    1384
    +    }
    
    1344 1385
     }

  • fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
    ... ... @@ -1189,6 +1189,9 @@ abstract class BaseBrowserFragment :
    1189 1189
                     val context = requireContext()
    
    1190 1190
                     resumeDownloadDialogState(selectedTab.id, context.components.core.store, context, toolbarHeight)
    
    1191 1191
                     it.announceForAccessibility(selectedTab.toDisplayTitle())
    
    1192
    +                if (getCurrentTab()?.content?.url == "about:torconnect") {
    
    1193
    +                    browserToolbarView.view.visibility = View.GONE
    
    1194
    +                }
    
    1192 1195
                 }
    
    1193 1196
             } else {
    
    1194 1197
                 view?.let { view -> initializeUI(view) }
    
    ... ... @@ -1206,6 +1209,24 @@ abstract class BaseBrowserFragment :
    1206 1209
                 components.useCases.sessionUseCases.reload()
    
    1207 1210
             }
    
    1208 1211
             hideToolbar()
    
    1212
    +        handleBetaHtmlTorConnect()
    
    1213
    +    }
    
    1214
    +
    
    1215
    +    private fun handleBetaHtmlTorConnect() {
    
    1216
    +        if (getCurrentTab()?.content?.url == "about:torconnect") {
    
    1217
    +            if (!requireActivity().settings().useNewBootstrap) {
    
    1218
    +                requireContext().components.useCases.tabsUseCases.removeAllTabs()
    
    1219
    +                (requireActivity() as HomeActivity).navHost.navController.navigate(
    
    1220
    +                    NavGraphDirections.actionStartupTorbootstrap(),
    
    1221
    +                )
    
    1222
    +            } else if (!requireActivity().settings().useNewBootstrapHtmlUi) {
    
    1223
    +                requireContext().components.useCases.tabsUseCases.removeAllTabs()
    
    1224
    +                (requireActivity() as HomeActivity).navigateToHome()
    
    1225
    +            } else {
    
    1226
    +                // This just makes it not flash (be visible for a split second) before handleTabSelected() hides it again
    
    1227
    +                browserToolbarView.view.visibility = View.GONE
    
    1228
    +            }
    
    1229
    +        }
    
    1209 1230
         }
    
    1210 1231
     
    
    1211 1232
         @CallSuper
    

  • fenix/app/src/main/java/org/mozilla/fenix/components/Core.kt
    ... ... @@ -146,6 +146,7 @@ class Core(
    146 146
                 torSecurityLevel = context.settings().torSecurityLevel().intRepresentation,
    
    147 147
                 spoofEnglish = context.settings().spoofEnglish,
    
    148 148
                 prioritizeOnions = context.settings().prioritizeOnions,
    
    149
    +            useNewBootstrap = context.settings().useNewBootstrap,
    
    149 150
             )
    
    150 151
     
    
    151 152
             GeckoEngine(
    

  • fenix/app/src/main/java/org/mozilla/fenix/settings/TorNetworkSettingsFragment.kt
    ... ... @@ -76,6 +76,15 @@ class TorNetworkSettingsFragment : PreferenceFragmentCompat(), TorEvents {
    76 76
                 }
    
    77 77
             }
    
    78 78
     
    
    79
    +        requirePreference<Preference>(R.string.pref_key_use_new_bootstrap).apply {
    
    80
    +            setOnPreferenceClickListener {
    
    81
    +                val directions =
    
    82
    +                    TorNetworkSettingsFragmentDirections.actionTorNetworkSettingsFragmentToBetaConnectionFeaturesFragment()
    
    83
    +                requireView().findNavController().navigate(directions)
    
    84
    +                true
    
    85
    +            }
    
    86
    +        }
    
    87
    +
    
    79 88
             setStatus()
    
    80 89
         }
    
    81 90
     
    

  • fenix/app/src/main/java/org/mozilla/fenix/tor/TorBetaConnectionFeaturesFragment.kt
    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
    +            // Do not enable the native UI until it is actually available.
    
    58
    +            // binding.enableBetaConnectionFeaturesModes.children.forEach { it.isEnabled = true }
    
    59
    +            binding.useNewBootstrapWithHtmlUiRadioButton.isEnabled = true
    
    60
    +            binding.useNewBootstrapWithNativeUiRadioButton.isEnabled = false
    
    61
    +        }
    
    62
    +    }
    
    63
    +
    
    64
    +    private fun updateEngineConnectionAssistMode() {
    
    65
    +        requireContext().components.core.engine.settings.useNewBootstrap =
    
    66
    +            requireContext().settings().useNewBootstrap
    
    67
    +    }
    
    68
    +
    
    69
    +}

  • fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapFragment.kt
    ... ... @@ -20,8 +20,10 @@ import org.mozilla.fenix.tor.interactor.DefaultTorBootstrapInteractor
    20 20
     import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor
    
    21 21
     import androidx.navigation.fragment.findNavController
    
    22 22
     import com.google.android.material.appbar.AppBarLayout
    
    23
    +import org.mozilla.fenix.HomeActivity
    
    23 24
     import org.mozilla.fenix.ext.components
    
    24 25
     import org.mozilla.fenix.ext.hideToolbar
    
    26
    +import org.mozilla.fenix.ext.settings
    
    25 27
     import org.mozilla.fenix.tor.controller.DefaultTorBootstrapController
    
    26 28
     import org.mozilla.fenix.tor.view.TorBootstrapView
    
    27 29
     
    
    ... ... @@ -169,6 +171,9 @@ class TorBootstrapFragment : Fragment() {
    169 171
             // triggered to cause an automatic update on warm start (no tab selection occurs). So we
    
    170 172
             // update it manually here.
    
    171 173
             requireComponents.useCases.sessionUseCases.updateLastAccess()
    
    174
    +        if (requireContext().settings().useNewBootstrap){
    
    175
    +            (requireActivity() as HomeActivity).navigateToHome()
    
    176
    +        }
    
    172 177
         }
    
    173 178
     
    
    174 179
         private fun handleTorBootstrapConnect() {
    

  • fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
    ... ... @@ -1859,4 +1859,19 @@ class Settings(private val appContext: Context) : PreferencesHolder {
    1859 1859
          * Indicates if the new Search settings UI is enabled.
    
    1860 1860
          */
    
    1861 1861
         var enableUnifiedSearchSettingsUI: Boolean = showUnifiedSearchFeature && FeatureFlags.unifiedSearchSettings
    
    1862
    +
    
    1863
    +    var useNewBootstrap by booleanPreference(
    
    1864
    +        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap),
    
    1865
    +        default = false,
    
    1866
    +    )
    
    1867
    +
    
    1868
    +    var useNewBootstrapNativeUi by booleanPreference(
    
    1869
    +        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_android_native),
    
    1870
    +        default = false,
    
    1871
    +    )
    
    1872
    +
    
    1873
    +    var useNewBootstrapHtmlUi by booleanPreference(
    
    1874
    +        appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_html),
    
    1875
    +        default = true
    
    1876
    +    )
    
    1862 1877
     }

  • fenix/app/src/main/res/layout/tor_network_settings_beta_connection_features.xml
    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_html_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="HTML 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_html"
    
    78
    +            app:preferenceKeyDefaultValue="true" />
    
    79
    +
    
    80
    +        <org.mozilla.fenix.settings.PreferenceBackedRadioButton
    
    81
    +            android:id="@+id/use_new_bootstrap_with_native_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:enabled="false"
    
    88
    +            android:paddingStart="@dimen/radio_button_preference_horizontal"
    
    89
    +            android:paddingTop="@dimen/radio_button_preference_vertical"
    
    90
    +            android:paddingEnd="@dimen/radio_button_preference_horizontal"
    
    91
    +            android:paddingBottom="@dimen/radio_button_preference_vertical"
    
    92
    +            android:text="Native Android UI"
    
    93
    +            android:textAppearance="?android:attr/textAppearanceListItem"
    
    94
    +            android:textSize="16sp"
    
    95
    +            app:drawableStartCompat="?android:attr/listChoiceIndicatorSingle"
    
    96
    +            app:preferenceKey="@string/pref_key_use_new_bootstrap_with_android_native"
    
    97
    +            app:preferenceKeyDefaultValue="false" />
    
    98
    +    </RadioGroup>
    
    99
    +
    
    100
    +</androidx.constraintlayout.widget.ConstraintLayout>

  • fenix/app/src/main/res/navigation/nav_graph.xml
    ... ... @@ -27,6 +27,12 @@
    27 27
             app:popUpTo="@id/startupFragment"
    
    28 28
             app:popUpToInclusive="true" />
    
    29 29
     
    
    30
    +    <action
    
    31
    +        android:id="@+id/action_startup_tor_connection_assist"
    
    32
    +        app:destination="@+id/torConnectionAssistFragment"
    
    33
    +        app:popUpTo="@id/startupFragment"
    
    34
    +        app:popUpToInclusive="true" />
    
    35
    +
    
    30 36
         <action
    
    31 37
             android:id="@+id/action_global_home"
    
    32 38
             app:destination="@id/homeFragment"
    
    ... ... @@ -941,12 +947,25 @@
    941 947
                 app:exitAnim="@anim/slide_out_left"
    
    942 948
                 app:popEnterAnim="@anim/slide_in_left"
    
    943 949
                 app:popExitAnim="@anim/slide_out_right" />
    
    950
    +        <action
    
    951
    +            android:id="@+id/action_torNetworkSettingsFragment_to_BetaConnectionFeaturesFragment"
    
    952
    +            app:destination="@+id/torBetaConnectionFeaturesFragment"
    
    953
    +            app:enterAnim="@anim/slide_in_right"
    
    954
    +            app:exitAnim="@anim/slide_out_left"
    
    955
    +            app:popEnterAnim="@anim/slide_in_left"
    
    956
    +            app:popExitAnim="@anim/slide_out_right" />
    
    944 957
         </fragment>
    
    945 958
         <fragment
    
    946 959
             android:id="@+id/torBridgeConfigFragment"
    
    947 960
             android:name="org.mozilla.fenix.settings.TorBridgeConfigFragment"
    
    948 961
             android:label="@string/preferences_tor_network_settings_bridge_config"
    
    949 962
             tools:layout="@layout/fragment_tor_bridge_config" />
    
    963
    +    <fragment
    
    964
    +        android:id="@+id/torBetaConnectionFeaturesFragment"
    
    965
    +        android:name="org.mozilla.fenix.tor.TorBetaConnectionFeaturesFragment"
    
    966
    +        android:label="Enable beta connection features"
    
    967
    +        tools:layout="@layout/tor_network_settings_beta_connection_features" />
    
    968
    +
    
    950 969
         <fragment
    
    951 970
             android:id="@+id/trackingProtectionFragment"
    
    952 971
             android:name="org.mozilla.fenix.settings.TrackingProtectionFragment">
    

  • fenix/app/src/main/res/values/preference_keys.xml
    ... ... @@ -376,6 +376,9 @@
    376 376
         <string name="pref_key_tor_network_settings" translatable="false">pref_key_tor_network_settings</string>
    
    377 377
         <string name="pref_key_tor_network_settings_explanation" translatable="false">pref_key_tor_network_settings_explanation</string>
    
    378 378
         <string name="pref_key_tor_network_settings_bridge_config" translatable="false">pref_key_tor_network_settings_bridge_config</string>
    
    379
    +    <string name="pref_key_use_new_bootstrap" translatable="false">pref_key_use_new_bootstrap</string>
    
    380
    +    <string name="pref_key_use_new_bootstrap_with_android_native" translatable="false">pref_key_use_new_bootstrap_with_android_native</string>
    
    381
    +    <string name="pref_key_use_new_bootstrap_with_html" translatable="false">pref_key_use_new_bootstrap_with_html</string>
    
    379 382
         <string name="pref_key_tor_network_settings_bridge_config_explanation" translatable="false">pref_key_tor_network_settings_bridge_config_explanation</string>
    
    380 383
         <string name="pref_key_tor_network_settings_bridge_config_toggle" translatable="false">pref_key_tor_network_settings_bridge_config_toggle</string>
    
    381 384
         <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>
    

  • fenix/app/src/main/res/xml/tor_network_settings_preferences.xml
    ... ... @@ -27,4 +27,9 @@
    27 27
             android:title="@string/preferences_tor_network_settings_bridge_config"
    
    28 28
             android:summary="@string/preferences_tor_network_settings_bridge_config_description"
    
    29 29
             app:allowDividerAbove="true" />
    
    30
    +    <Preference
    
    31
    +        android:key="@string/pref_key_use_new_bootstrap"
    
    32
    +        android:title="Enable beta connection features"
    
    33
    +        app:allowDividerAbove="true" />
    
    34
    +
    
    30 35
     </androidx.preference.PreferenceScreen>

  • _______________________________________________
    tor-commits mailing list
    tor-commits@xxxxxxxxxxxxxxxxxxxx
    https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits