commit c4473522f977dfbb6bd5c39bcd55616d236947f2 parent 8c0ff4f977b3a513eb9eaed715b658265380da32 Author: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 2 Oct 2025 12:50:33 +0000 Bug 1991158 - Migrate from SwitchPreferenceCompat to Material3 SwitchPreference. r=android-reviewers,avirvara This patch migrates the application from using `SwitchPreferenceCompat` to the Material3 `SwitchPreference`. The changes include: - Replacing all instances of `SwitchPreferenceCompat` with `SwitchPreference` across various settings fragments and XML layouts. - Defining a new global `switchStyle` in the main application theme (`styles.xml`) that points to a Material3 switch widget. - Using a custom theme for the switch (`SwitchTheme`) to restore original switch appearance Differential Revision: https://phabricator.services.mozilla.com/D267055 Diffstat:
12 files changed, 89 insertions(+), 66 deletions(-)
diff --git a/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsAdvancedMenuRobot.kt b/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsAdvancedMenuRobot.kt @@ -53,7 +53,7 @@ private fun assertOpenLinksInAppsSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -65,7 +65,7 @@ private fun assertOpenLinksInAppsSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -100,7 +100,7 @@ private fun assertRemoteDebuggingSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), diff --git a/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsPrivacyMenuRobot.kt b/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsPrivacyMenuRobot.kt @@ -29,7 +29,6 @@ import org.mozilla.focus.helpers.TestHelper.mDevice import org.mozilla.focus.helpers.TestHelper.packageName import org.mozilla.focus.helpers.TestHelper.waitingTime import org.mozilla.focus.helpers.TestHelper.waitingTimeShort -import androidx.preference.R as preferenceR class SettingsPrivacyMenuRobot { @@ -93,7 +92,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -105,7 +104,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -121,7 +120,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -133,7 +132,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -149,7 +148,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -161,7 +160,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -177,7 +176,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -189,7 +188,7 @@ class SettingsPrivacyMenuRobot { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -282,7 +281,7 @@ private fun assertAdTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -294,7 +293,7 @@ private fun assertAdTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -316,7 +315,7 @@ private fun assertAnalyticTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -328,7 +327,7 @@ private fun assertAnalyticTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -350,7 +349,7 @@ private fun assertSocialTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -362,7 +361,7 @@ private fun assertSocialTrackersBlockSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -384,7 +383,7 @@ private fun assertOtherContentTrackersBlockSwitchState(enabled: Boolean = false) matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -396,7 +395,7 @@ private fun assertOtherContentTrackersBlockSwitchState(enabled: Boolean = false) matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -418,7 +417,7 @@ private fun assertBlockWebFontsSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -430,7 +429,7 @@ private fun assertBlockWebFontsSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -452,7 +451,7 @@ private fun assertBlockJavaScriptSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -464,7 +463,7 @@ private fun assertBlockJavaScriptSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -514,7 +513,7 @@ private fun assertUseFingerprintSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -526,7 +525,7 @@ private fun assertUseFingerprintSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -548,7 +547,7 @@ private fun assertStealthModeSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -560,7 +559,7 @@ private fun assertStealthModeSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -588,7 +587,7 @@ private fun assertSafeBrowsingSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -600,7 +599,7 @@ private fun assertSafeBrowsingSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -622,7 +621,7 @@ private fun assertHttpsOnlyModeSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -634,7 +633,7 @@ private fun assertHttpsOnlyModeSwitchState(enabled: Boolean = true) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), @@ -656,7 +655,7 @@ private fun assertSendDataSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isChecked(), ), ), @@ -668,7 +667,7 @@ private fun assertSendDataSwitchState(enabled: Boolean = false) { matches( hasCousin( allOf( - withId(preferenceR.id.switchWidget), + withId(android.R.id.switch_widget), isNotChecked(), ), ), diff --git a/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsSearchMenuRobot.kt b/mobile/android/focus-android/app/src/androidTest/java/org/mozilla/focus/activity/robots/SettingsSearchMenuRobot.kt @@ -143,7 +143,7 @@ private val searchSuggestionLearnMoreLink: UiObject = private val searchSuggestionsSwitch: UiObject = mDevice.findObject( UiSelector() - .resourceId("$packageName:id/switchWidget"), + .resourceId("android:id/switch_widget"), ) private val urlAutocompleteSubMenu = diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/LearnMoreSwitchPreference.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/LearnMoreSwitchPreference.kt @@ -9,14 +9,24 @@ import android.util.AttributeSet import android.widget.TextView import androidx.core.view.isVisible import androidx.preference.PreferenceViewHolder -import androidx.preference.SwitchPreferenceCompat +import androidx.preference.SwitchPreference import mozilla.components.browser.state.state.SessionState import org.mozilla.focus.R import org.mozilla.focus.ext.components import org.mozilla.focus.state.AppAction +/** + * A [SwitchPreference] that displays a "Learn more" link which, when clicked, opens a new tab + * with a specified URL. + * + * Subclasses must implement [getLearnMoreUrl] to define the URL to be opened. + * Optionally, subclasses can override [getDescription] to provide a custom description text + * that appears above the "Learn more" link. + * + * The layout for this preference is defined in `R.layout.preference_switch_learn_more`. + */ abstract class LearnMoreSwitchPreference(context: Context, attrs: AttributeSet?) : - SwitchPreferenceCompat(context, attrs) { + SwitchPreference(context, attrs) { init { layoutResource = R.layout.preference_switch_learn_more @@ -52,7 +62,19 @@ abstract class LearnMoreSwitchPreference(context: Context, attrs: AttributeSet?) learnMoreLink.background = backgroundDrawable } + /** + * Returns the description text to be displayed above the "Learn more" link. + * + * Subclasses can override this method to provide a custom description. + * If this method returns `null` or is not overridden, no description will be shown. + * + * @return The description string, or `null` if no description is to be shown. + */ open fun getDescription(): String? = null + /** + * Returns the URL to be opened when the "Learn more" link is clicked. + * This method must be implemented by subclasses. + */ abstract fun getLearnMoreUrl(): String } diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/advanced/SecretSettingsFragment.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/advanced/SecretSettingsFragment.kt @@ -7,7 +7,7 @@ package org.mozilla.focus.settings.advanced import android.content.SharedPreferences import android.os.Bundle import androidx.preference.Preference -import androidx.preference.SwitchPreferenceCompat +import androidx.preference.SwitchPreference import org.mozilla.focus.R import org.mozilla.focus.ext.components import org.mozilla.focus.ext.getPreferenceKey @@ -31,13 +31,13 @@ class SecretSettingsFragment : override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.secret_settings) - requirePreference<SwitchPreferenceCompat>(R.string.pref_key_remote_server_prod).apply { + requirePreference<SwitchPreference>(R.string.pref_key_remote_server_prod).apply { isVisible = true isChecked = context.settings.useProductionRemoteSettingsServer onPreferenceChangeListener = SharedPreferenceUpdater() } - requirePreference<SwitchPreferenceCompat>(R.string.pref_key_use_remote_search_configuration).apply { + requirePreference<SwitchPreference>(R.string.pref_key_use_remote_search_configuration).apply { isVisible = true isChecked = context.settings.useRemoteSearchConfiguration onPreferenceChangeListener = object : SharedPreferenceUpdater() { @@ -54,7 +54,7 @@ class SecretSettingsFragment : } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { - findPreference<SwitchPreferenceCompat>( + findPreference<SwitchPreference>( getPreferenceKey(R.string.pref_key_use_nimbus_preview), )?.let { nimbusPreviewPref -> if (key == nimbusPreviewPref.key) { diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/privacy/PrivacySecuritySettingsFragment.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/privacy/PrivacySecuritySettingsFragment.kt @@ -8,7 +8,7 @@ import android.content.SharedPreferences import android.os.Bundle import androidx.core.content.edit import androidx.preference.Preference -import androidx.preference.SwitchPreferenceCompat +import androidx.preference.SwitchPreference import mozilla.components.lib.auth.canUseBiometricFeature import mozilla.telemetry.glean.private.NoExtras import org.mozilla.focus.GleanMetrics.CookieBanner @@ -32,7 +32,7 @@ class PrivacySecuritySettingsFragment : override fun onCreatePreferences(p0: Bundle?, p1: String?) { addPreferencesFromResource(R.xml.privacy_security_settings) - val biometricPreference: SwitchPreferenceCompat? = + val biometricPreference: SwitchPreference? = findPreference(getString(R.string.pref_key_biometric)) val appName = getString(R.string.app_name) biometricPreference?.summary = @@ -57,11 +57,11 @@ class PrivacySecuritySettingsFragment : cookiesPreference?.updateSummary() val safeBrowsingSwitchPreference = - findPreference(getString(R.string.pref_key_safe_browsing)) as? SwitchPreferenceCompat + findPreference(getString(R.string.pref_key_safe_browsing)) as? SwitchPreference val javaScriptPreference = - findPreference(getString(R.string.pref_key_performance_block_javascript)) as? SwitchPreferenceCompat + findPreference(getString(R.string.pref_key_performance_block_javascript)) as? SwitchPreference val webFontsPreference = - findPreference(getString(R.string.pref_key_performance_block_webfonts)) as? SwitchPreferenceCompat + findPreference(getString(R.string.pref_key_performance_block_webfonts)) as? SwitchPreference val cookieBannerPreference = findPreference<Preference>(getString(R.string.pref_key_cookie_banner_settings)) cookiesPreference?.onPreferenceChangeListener = preferencesListener @@ -129,7 +129,7 @@ class PrivacySecuritySettingsFragment : private fun updateBiometricsToggleAvailability() { val switch = preferenceScreen.findPreference(resources.getString(R.string.pref_key_biometric)) - as? SwitchPreferenceCompat + as? SwitchPreference if (!requireContext().canUseBiometricFeature()) { switch?.isChecked = false @@ -210,7 +210,7 @@ class PrivacySecuritySettingsFragment : private fun updateStealthToggleAvailability() { val switch = - preferenceScreen.findPreference(resources.getString(R.string.pref_key_secure)) as? SwitchPreferenceCompat + preferenceScreen.findPreference(resources.getString(R.string.pref_key_secure)) as? SwitchPreference val sharedPreferences = preferenceManager.sharedPreferences diff --git a/mobile/android/focus-android/app/src/main/res/values/styles.xml b/mobile/android/focus-android/app/src/main/res/values/styles.xml @@ -17,6 +17,7 @@ <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item> <item name="disabled">@color/disabled</item> <item name="destructive">@color/destructive</item> + <item name="switchStyle">@style/App.Widget.Switch</item> <!-- Use the same colors for both themes until light theme it will be implemented --> <item name="primaryText">@color/primaryText</item> @@ -298,6 +299,10 @@ <item name="android:background">@color/modal_background</item> </style> + <style name="App.Widget.Switch" parent="Widget.Material3.CompoundButton.Switch"> + <item name="android:theme">@style/SwitchTheme</item> + </style> + <style name="SwitchTheme" parent="Theme.AppCompat.Light"> <item name="colorControlActivated">@color/accentBright</item> </style> diff --git a/mobile/android/focus-android/app/src/main/res/xml/advanced_settings.xml b/mobile/android/focus-android/app/src/main/res/xml/advanced_settings.xml @@ -6,19 +6,19 @@ <androidx.preference.PreferenceCategory android:layout="@layout/preference_section_header_layout" android:title="@string/preference_advanced_summary"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_remote_debugging" android:layout="@layout/focus_preference_no_icon" android:title="@string/preference_remote_debugging" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_open_links_in_external_app" android:layout="@layout/focus_preference_no_icon" android:title="@string/preferences_open_links_in_apps" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="true" android:key="@string/pref_key_leakcanary" android:title="@string/preference_leakcanary" diff --git a/mobile/android/focus-android/app/src/main/res/xml/experiments_settings.xml b/mobile/android/focus-android/app/src/main/res/xml/experiments_settings.xml @@ -4,7 +4,7 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:key="use_gecko_engine" android:summary="Use the newest GeckoView renderer to take advantage of the latest features" android:title="Use new renderer?" /> diff --git a/mobile/android/focus-android/app/src/main/res/xml/privacy_security_settings.xml b/mobile/android/focus-android/app/src/main/res/xml/privacy_security_settings.xml @@ -18,28 +18,28 @@ android:layout="@layout/preference_section_header_layout" android:title="@string/preference_category_tracking_protection3"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="true" android:key="@string/pref_key_privacy_block_ads" android:layout="@layout/focus_preference_no_icon" android:summary="@string/preference_privacy_block_ads_summary" android:title="@string/preference_privacy_block_ads" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="true" android:key="@string/pref_key_privacy_block_analytics" android:layout="@layout/focus_preference_no_icon" android:summary="@string/preference_privacy_block_analytics_summary" android:title="@string/preference_privacy_block_analytics" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="true" android:key="@string/pref_key_privacy_block_social" android:layout="@layout/focus_preference_no_icon" android:summary="@string/preference_privacy_block_social_summary" android:title="@string/preference_privacy_block_social" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_privacy_block_other3" android:layout="@layout/focus_preference_no_icon" @@ -52,14 +52,14 @@ android:layout="@layout/preference_section_header_layout" android:title="@string/preference_category_web_content"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_performance_block_webfonts" android:layout="@layout/focus_preference_no_icon" android:summary="@string/preference_performance_block_webfonts_summary" android:title="@string/preference_performance_block_webfonts" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_performance_block_javascript" android:layout="@layout/focus_preference_no_icon" @@ -107,13 +107,13 @@ <androidx.preference.PreferenceCategory android:layout="@layout/preference_section_header_layout" android:title="@string/preference_category_switching_apps"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_biometric" android:layout="@layout/focus_preference_no_icon" android:summary="@string/preference_security_biometric_summary2" android:title="@string/preference_security_biometric" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_secure" android:layout="@layout/focus_preference_no_icon" diff --git a/mobile/android/focus-android/app/src/main/res/xml/secret_settings.xml b/mobile/android/focus-android/app/src/main/res/xml/secret_settings.xml @@ -3,19 +3,19 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:defaultValue="false" android:key="@string/pref_key_use_nimbus_preview" android:layout="@layout/focus_preference_no_icon" android:title="@string/preference_use_nimbus_preview" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:key="@string/pref_key_remote_server_prod" android:layout="@layout/focus_preference_no_icon" android:title="@string/preferences_debug_settings_remote_settings_server" /> - <androidx.preference.SwitchPreferenceCompat + <androidx.preference.SwitchPreference android:key="@string/pref_key_use_remote_search_configuration" android:layout="@layout/focus_preference_no_icon" android:title="@string/preferences_debug_settings_remote_search_configuration" diff --git a/mobile/android/focus-android/quality/detekt-baseline.xml b/mobile/android/focus-android/quality/detekt-baseline.xml @@ -68,7 +68,6 @@ <ID>UndocumentedPublicClass:LanguageScreenStore.kt$LanguageScreenAction$UpdateLanguages : LanguageScreenAction</ID> <ID>UndocumentedPublicClass:LanguageScreenStore.kt$LanguageScreenStore : Store</ID> <ID>UndocumentedPublicClass:LanguageStorage.kt$LanguageStorage</ID> - <ID>UndocumentedPublicClass:LearnMoreSwitchPreference.kt$LearnMoreSwitchPreference : SwitchPreferenceCompat</ID> <ID>UndocumentedPublicClass:LocaleDescriptor.kt$LocaleDescriptor : Comparable</ID> <ID>UndocumentedPublicClass:MainActivity.kt$MainActivity$AppOpenType</ID> <ID>UndocumentedPublicClass:ManualAddSearchEnginePreference.kt$ManualAddSearchEnginePreference : Preference</ID> @@ -173,8 +172,6 @@ <ID>UndocumentedPublicFunction:FocusTheme.kt$fun phoneDimensions()</ID> <ID>UndocumentedPublicFunction:FocusTheme.kt$fun tabletDimensions()</ID> <ID>UndocumentedPublicFunction:HomeMenu.kt$HomeMenu$fun getMenuBuilder(): BrowserMenuBuilder</ID> - <ID>UndocumentedPublicFunction:LearnMoreSwitchPreference.kt$LearnMoreSwitchPreference$abstract fun getLearnMoreUrl(): String</ID> - <ID>UndocumentedPublicFunction:LearnMoreSwitchPreference.kt$LearnMoreSwitchPreference$open fun getDescription(): String?</ID> <ID>UndocumentedPublicFunction:LocaleDescriptor.kt$LocaleDescriptor$fun getNativeName(): String?</ID> <ID>UndocumentedPublicFunction:LocaleDescriptor.kt$LocaleDescriptor$fun getTag(): String</ID> <ID>UndocumentedPublicFunction:LocaleFragmentCompose.kt$@Composable fun LanguageNameAndTagItem( language: Language, isSelected: Boolean, onClick: (String) -> Unit, )</ID>