Merge "To disable Wi-Fi tethering when user restriction is set"
diff --git a/Android.bp b/Android.bp
index 2c3b2ec..0116237 100644
--- a/Android.bp
+++ b/Android.bp
@@ -59,7 +59,6 @@
"com.google.android.material_material",
"setupcompat",
"setupdesign",
- "androidx-constraintlayout_constraintlayout-solver",
"androidx.lifecycle_lifecycle-runtime",
"androidx.lifecycle_lifecycle-extensions",
"guava",
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cd23521..9147605 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -110,6 +110,9 @@
<uses-permission android:name="android.permission.MANAGE_APP_HIBERNATION" />
<uses-permission android:name="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" />
<uses-permission android:name="android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS" />
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
+ <uses-permission android:name="android.permission.READ_APP_SPECIFIC_LOCALES" />
+ <uses-permission android:name="android.permission.QUERY_ADMIN_POLICY" />
<application
android:name=".SettingsApplication"
@@ -146,10 +149,11 @@
<!-- Activity for launching deep link page in 2-pane. -->
<activity android:name=".homepage.DeepLinkHomepageActivity"
android:label="@string/settings_label_launcher"
- android:theme="@style/Theme.Settings.Home"
+ android:theme="@style/Theme.Settings.Home.DeepLink"
android:taskAffinity=""
android:launchMode="singleTask"
android:exported="true"
+ android:enabled="false"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"
android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK">
<intent-filter>
@@ -162,7 +166,7 @@
<activity android:name=".homepage.SliceDeepLinkHomepageActivity"
android:label="@string/settings_label_launcher"
- android:theme="@style/Theme.Settings.Home"
+ android:theme="@style/Theme.Settings.Home.DeepLink"
android:taskAffinity=""
android:launchMode="singleTask"
android:exported="false"
@@ -196,7 +200,6 @@
</receiver>
<activity android:name=".SubSettings"
- android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|smallestScreenSize"
android:theme="@style/Theme.SubSettings" />
<activity android:name=".Settings$CreateShortcutActivity"
@@ -236,11 +239,14 @@
android:value="true" />
</activity>
- <activity android:name=".network.telephony.MobileNetworkActivity"
- android:label="@string/network_settings_title"
- android:exported="true"
- android:launchMode="singleTask"
- android:configChanges="orientation|screenSize|keyboardHidden">
+ <activity
+ android:name=".Settings$MobileNetworkActivity"
+ android:label="@string/network_settings_title"
+ android:configChanges="orientation|screenSize|keyboardHidden"
+ android:launchMode="singleInstance"
+ android:exported="true">
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.network.telephony.MobileNetworkSettings"/>
<intent-filter android:priority="1">
<!-- Displays the MobileNetworkActivity and opt-in dialog for capability discovery. -->
<action android:name="android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
@@ -307,6 +313,7 @@
<receiver android:name=".search.SearchStateReceiver"
android:exported="true"
+ android:enabled="false"
android:permission="android.permission.READ_SEARCH_INDEXABLES">
<intent-filter>
<action android:name="com.android.settings.SEARCH_START"/>
@@ -370,6 +377,16 @@
</activity>
<activity
+ android:name="Settings$NetworkSelectActivity"
+ android:label="@string/choose_network_title"
+ android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|smallestScreenSize">
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.network.telephony.NetworkSelectSettings" />
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
+ </activity>
+
+ <activity
android:name="Settings$WifiDetailsSettingsActivity"
android:label="@string/wifi_details_title"
android:icon="@drawable/ic_homepage_network"
@@ -522,7 +539,6 @@
<activity android:name="Settings$ApnSettingsActivity"
android:label="@string/apn_settings"
- android:launchMode="singleTask"
android:exported="true"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter android:priority="1">
@@ -659,12 +675,12 @@
<activity android:name=".network.telephony.ToggleSubscriptionDialogActivity"
android:exported="false"
android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
- android:theme="@*android:style/Theme.DeviceDefault.Dialog.Alert.DayNight" />
+ android:theme="@style/Theme.AlertDialog.SimConfirmDialog"/>
<activity android:name=".network.telephony.DeleteEuiccSubscriptionDialogActivity"
android:exported="false"
android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
- android:theme="@*android:style/Theme.DeviceDefault.Dialog.Alert.DayNight" />
+ android:theme="@style/Theme.AlertDialog.SimConfirmDialog"/>
<activity
android:name="Settings$TetherSettingsActivity"
@@ -817,6 +833,18 @@
</activity>
<activity
+ android:name=".applications.appinfo.AppLocalePickerActivity"
+ android:label="@string/app_locale_picker_title"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.settings.APP_LOCALE_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
+ </activity>
+
+ <activity
android:name=".Settings$LanguageAndInputSettingsActivity"
android:label="@string/language_settings"
android:exported="true"
@@ -1269,6 +1297,23 @@
</activity>
<activity
+ android:name=".Settings$BlueToothPairingActivity"
+ android:label="@string/bluetooth_pairing_page_title"
+ android:permission="android.permission.BLUETOOTH_SCAN"
+ android:exported="true">
+ <intent-filter android:priority="1">
+ <action android:name="android.settings.BLUETOOTH_PAIRING_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.bluetooth.BluetoothPairingDetail" />
+ <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+ android:value="@string/menu_key_connected_devices"/>
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
+ </activity>
+
+ <activity
android:name="SettingsLicenseActivity"
android:label="@string/settings_license_activity_title"
android:exported="true"
@@ -1900,6 +1945,7 @@
<activity
android:name=".accessibility.AccessibilityScreenSizeForSetupWizardActivity"
+ android:theme="@android:style/Theme.DeviceDefault.Settings"
android:exported="false"/>
<activity
@@ -2103,8 +2149,7 @@
android:screenOrientation="portrait"/>
<activity android:name=".biometrics.BiometricHandoffActivity"
- android:exported="false"
- android:screenOrientation="portrait"/>
+ android:exported="false"/>
<!-- Must not be exported -->
<activity android:name=".biometrics.BiometricEnrollActivity$InternalActivity"
@@ -2930,6 +2975,12 @@
</activity>
<activity
+ android:name=".users.AddSupervisedUserActivity"
+ android:label="@*android:string/supervised_user_creation_label"
+ android:icon="@drawable/ic_settings_multiuser">
+ </activity>
+
+ <activity
android:name="Settings$PaymentSettingsActivity"
android:label="@string/nfc_payment_settings_title"
android:exported="true"
@@ -3378,7 +3429,7 @@
<activity
android:name=".sim.SimDialogActivity"
- android:theme="@style/Theme.AlertDialog"
+ android:theme="@style/Theme.AlertDialog.SimConfirmDialog"
android:label="@string/sim_settings_title"
android:launchMode="singleTop"
android:exported="true"
@@ -4174,7 +4225,7 @@
<activity android:name="Settings$MediaControlsSettingsActivity"
android:exported="true"
- android:label="@strings/media_controls_title">
+ android:label="@string/media_controls_title">
<intent-filter>
<action android:name="android.settings.ACTION_MEDIA_CONTROLS_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
@@ -4229,14 +4280,14 @@
android:exported="false"
android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
android:launchMode="singleInstance"
- android:theme="@*android:style/Theme.DeviceDefault.Dialog.Alert.DayNight" />
+ android:theme="@style/Theme.AlertDialog.SimConfirmDialog"/>
<activity
android:name=".sim.DsdsDialogActivity"
android:exported="false"
android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
android:launchMode="singleInstance"
- android:theme="@*android:style/Theme.DeviceDefault.Dialog.Alert.DayNight" />
+ android:theme="@style/Theme.AlertDialog.SimConfirmDialog"/>
<service android:name=".sim.SimNotificationService"
android:permission="android.permission.BIND_JOB_SERVICE" />
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index 0b272d9..2907416 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -213,6 +213,22 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="setup_wizard_wifi_color_dark">#89ffffff</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="27"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <color name="notification_importance_button_unselected">#5F6368</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -229,6 +245,22 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="setup_wizard_wifi_color_light">#89000000</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="28"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <color name="notification_history_background">#202124</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -245,8 +277,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="setup_lock_pattern_view_success_color_dark">#ff84ffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="lock_pattern_background">#00000000</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="30"
@@ -261,24 +293,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="setup_lock_pattern_view_error_color_dark">#fff44336</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="32"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="setup_wizard_wifi_color_dark">#89ffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="fingerprint_title_color">#ffffffff</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="33"
@@ -293,8 +309,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="setup_wizard_wifi_color_light">#89000000</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="fingerprint_message_color">#de000000</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="34"
@@ -309,8 +325,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="lock_pattern_background">#00000000</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="running_processes_system_ram">#ff384248</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="36"
@@ -325,8 +341,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="lock_pattern_view_regular_color">#ff37474f</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="running_processes_free_ram">#ffced7db</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="37"
@@ -341,11 +357,11 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="lock_pattern_view_regular_color_dark">#ffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="confirm_device_credential_transparent_black">#60000000</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="39"
+ line="41"
column="5"/>
</issue>
@@ -357,8 +373,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="fingerprint_title_color">#ffffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="icon_accent">#ffabffec</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="44"
@@ -389,24 +405,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="fingerprint_message_color">#de000000</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="45"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="running_processes_system_ram">#ff384248</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="material_blue_500">#4285F4</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="47"
@@ -437,8 +437,8 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="running_processes_free_ram">#ffced7db</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ errorLine1=" <color name="material_blue_700">#3367D6</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
line="48"
@@ -469,6 +469,22 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="material_grey_100">#f5f5f5</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="49"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <color name="biometric_enroll_intro_color_outline">#5e5e5e</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -485,6 +501,22 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <color name="material_grey_200">#ffffff</color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="50"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <color name="fingerprint_enrollment_finish_color_outline">#669df6</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
@@ -501,107 +533,11 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="confirm_device_credential_transparent_black">#60000000</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="52"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="icon_accent">#ffabffec</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="55"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="material_blue_500">#4285F4</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="58"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="material_blue_700">#3367D6</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="59"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="material_grey_100">#f5f5f5</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="60"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <color name="material_grey_200">#ffffff</color>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values/colors.xml"
- line="61"
- column="5"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <color name="message_text_incoming">#ffffffff</color>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="63"
+ line="52"
column="5"/>
</issue>
@@ -617,7 +553,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="64"
+ line="53"
column="5"/>
</issue>
@@ -633,7 +569,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="65"
+ line="54"
column="5"/>
</issue>
@@ -649,7 +585,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="66"
+ line="55"
column="5"/>
</issue>
@@ -665,7 +601,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="67"
+ line="56"
column="5"/>
</issue>
@@ -681,7 +617,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="68"
+ line="57"
column="5"/>
</issue>
@@ -697,7 +633,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="69"
+ line="58"
column="5"/>
</issue>
@@ -713,7 +649,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="70"
+ line="59"
column="5"/>
</issue>
@@ -729,7 +665,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="71"
+ line="60"
column="5"/>
</issue>
@@ -745,7 +681,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="72"
+ line="61"
column="5"/>
</issue>
@@ -761,7 +697,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="74"
+ line="63"
column="5"/>
</issue>
@@ -777,7 +713,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="77"
+ line="66"
column="5"/>
</issue>
@@ -793,7 +729,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="80"
+ line="69"
column="5"/>
</issue>
@@ -809,7 +745,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="83"
+ line="72"
column="5"/>
</issue>
@@ -825,7 +761,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="86"
+ line="75"
column="5"/>
</issue>
@@ -841,7 +777,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="87"
+ line="76"
column="5"/>
</issue>
@@ -857,7 +793,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="88"
+ line="77"
column="5"/>
</issue>
@@ -873,7 +809,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="89"
+ line="78"
column="5"/>
</issue>
@@ -889,7 +825,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="90"
+ line="79"
column="5"/>
</issue>
@@ -905,7 +841,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="91"
+ line="80"
column="5"/>
</issue>
@@ -921,7 +857,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="92"
+ line="81"
column="5"/>
</issue>
@@ -937,7 +873,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="93"
+ line="82"
column="5"/>
</issue>
@@ -953,7 +889,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="94"
+ line="83"
column="5"/>
</issue>
@@ -969,7 +905,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="95"
+ line="84"
column="5"/>
</issue>
@@ -985,7 +921,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="96"
+ line="85"
column="5"/>
</issue>
@@ -1001,7 +937,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="97"
+ line="86"
column="5"/>
</issue>
@@ -1017,7 +953,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="98"
+ line="87"
column="5"/>
</issue>
@@ -1033,7 +969,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="99"
+ line="88"
column="5"/>
</issue>
@@ -1049,7 +985,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="100"
+ line="89"
column="5"/>
</issue>
@@ -1065,7 +1001,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="101"
+ line="90"
column="5"/>
</issue>
@@ -1081,7 +1017,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="102"
+ line="91"
column="5"/>
</issue>
@@ -1097,7 +1033,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="103"
+ line="92"
column="5"/>
</issue>
@@ -1113,7 +1049,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="104"
+ line="93"
column="5"/>
</issue>
@@ -1129,7 +1065,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="111"
+ line="100"
column="5"/>
</issue>
@@ -1145,7 +1081,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="114"
+ line="103"
column="5"/>
</issue>
@@ -1161,7 +1097,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="115"
+ line="104"
column="5"/>
</issue>
@@ -1177,7 +1113,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="116"
+ line="105"
column="5"/>
</issue>
@@ -1193,7 +1129,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="117"
+ line="106"
column="5"/>
</issue>
@@ -1209,7 +1145,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="118"
+ line="107"
column="5"/>
</issue>
@@ -1225,7 +1161,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="119"
+ line="108"
column="5"/>
</issue>
@@ -1241,7 +1177,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="122"
+ line="111"
column="5"/>
</issue>
@@ -1257,7 +1193,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="123"
+ line="112"
column="5"/>
</issue>
@@ -1273,7 +1209,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="124"
+ line="113"
column="5"/>
</issue>
@@ -1289,7 +1225,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="125"
+ line="114"
column="5"/>
</issue>
@@ -1305,7 +1241,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="126"
+ line="115"
column="5"/>
</issue>
@@ -1321,7 +1257,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="129"
+ line="118"
column="5"/>
</issue>
@@ -1337,7 +1273,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="130"
+ line="119"
column="5"/>
</issue>
@@ -1353,7 +1289,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="131"
+ line="120"
column="5"/>
</issue>
@@ -1369,7 +1305,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="134"
+ line="123"
column="5"/>
</issue>
@@ -1385,7 +1321,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="135"
+ line="124"
column="5"/>
</issue>
@@ -1401,7 +1337,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="136"
+ line="125"
column="5"/>
</issue>
@@ -1417,7 +1353,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="137"
+ line="126"
column="5"/>
</issue>
@@ -1433,7 +1369,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="138"
+ line="127"
column="5"/>
</issue>
@@ -1449,7 +1385,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="139"
+ line="128"
column="5"/>
</issue>
@@ -1465,7 +1401,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="146"
+ line="135"
column="5"/>
</issue>
@@ -1481,7 +1417,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="147"
+ line="136"
column="5"/>
</issue>
@@ -1497,7 +1433,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="148"
+ line="137"
column="5"/>
</issue>
@@ -1513,7 +1449,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="154"
+ line="143"
column="5"/>
</issue>
@@ -1529,7 +1465,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="156"
+ line="145"
column="5"/>
</issue>
@@ -1545,7 +1481,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="160"
+ line="149"
column="5"/>
</issue>
@@ -1561,7 +1497,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="161"
+ line="150"
column="5"/>
</issue>
@@ -1577,7 +1513,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="162"
+ line="151"
column="5"/>
</issue>
@@ -1593,7 +1529,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="163"
+ line="152"
column="5"/>
</issue>
@@ -1609,7 +1545,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="164"
+ line="153"
column="5"/>
</issue>
@@ -1625,7 +1561,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="165"
+ line="154"
column="5"/>
</issue>
@@ -1641,7 +1577,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="166"
+ line="155"
column="5"/>
</issue>
@@ -1657,7 +1593,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="167"
+ line="156"
column="5"/>
</issue>
@@ -1673,7 +1609,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="170"
+ line="159"
column="5"/>
</issue>
@@ -1689,7 +1625,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="171"
+ line="160"
column="5"/>
</issue>
@@ -1705,7 +1641,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="172"
+ line="161"
column="5"/>
</issue>
@@ -1721,7 +1657,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="173"
+ line="162"
column="5"/>
</issue>
@@ -1737,7 +1673,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="174"
+ line="163"
column="5"/>
</issue>
@@ -1753,7 +1689,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="175"
+ line="164"
column="5"/>
</issue>
@@ -1769,7 +1705,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="176"
+ line="165"
column="5"/>
</issue>
@@ -1785,7 +1721,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="177"
+ line="166"
column="5"/>
</issue>
@@ -1801,7 +1737,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="180"
+ line="169"
column="5"/>
</issue>
@@ -1817,7 +1753,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="181"
+ line="170"
column="5"/>
</issue>
@@ -1833,7 +1769,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="182"
+ line="171"
column="5"/>
</issue>
@@ -1849,7 +1785,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="183"
+ line="172"
column="5"/>
</issue>
@@ -1865,7 +1801,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="184"
+ line="173"
column="5"/>
</issue>
@@ -1881,7 +1817,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="185"
+ line="174"
column="5"/>
</issue>
@@ -1897,7 +1833,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="188"
+ line="177"
column="5"/>
</issue>
@@ -1913,7 +1849,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="189"
+ line="178"
column="5"/>
</issue>
@@ -1929,7 +1865,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="190"
+ line="179"
column="5"/>
</issue>
@@ -1945,7 +1881,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="191"
+ line="180"
column="5"/>
</issue>
@@ -1961,7 +1897,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="192"
+ line="181"
column="5"/>
</issue>
@@ -1977,7 +1913,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="193"
+ line="182"
column="5"/>
</issue>
@@ -1993,7 +1929,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="196"
+ line="185"
column="5"/>
</issue>
@@ -2009,7 +1945,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="197"
+ line="186"
column="5"/>
</issue>
@@ -2025,7 +1961,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="198"
+ line="187"
column="5"/>
</issue>
@@ -2041,7 +1977,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="199"
+ line="188"
column="5"/>
</issue>
@@ -2057,7 +1993,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="200"
+ line="189"
column="5"/>
</issue>
@@ -2073,7 +2009,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="201"
+ line="190"
column="5"/>
</issue>
@@ -2089,7 +2025,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="207"
+ line="196"
column="5"/>
</issue>
@@ -2105,7 +2041,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="208"
+ line="197"
column="5"/>
</issue>
@@ -2121,7 +2057,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="209"
+ line="198"
column="5"/>
</issue>
@@ -2137,7 +2073,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="210"
+ line="199"
column="5"/>
</issue>
@@ -2153,7 +2089,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="212"
+ line="201"
column="5"/>
</issue>
@@ -2169,7 +2105,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="214"
+ line="203"
column="5"/>
</issue>
@@ -2185,7 +2121,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/colors.xml"
- line="217"
+ line="206"
column="5"/>
</issue>
@@ -4681,7 +4617,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rAU/strings.xml"
- line="3091"
+ line="3092"
column="64"/>
</issue>
@@ -4697,7 +4633,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rCA/strings.xml"
- line="3091"
+ line="3092"
column="64"/>
</issue>
@@ -4713,7 +4649,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rGB/strings.xml"
- line="3091"
+ line="3092"
column="64"/>
</issue>
@@ -4729,7 +4665,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rIN/strings.xml"
- line="3091"
+ line="3092"
column="64"/>
</issue>
@@ -4745,7 +4681,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rXC/strings.xml"
- line="3091"
+ line="3092"
column="170"/>
</issue>
@@ -4761,7 +4697,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/strings.xml"
- line="7106"
+ line="7103"
column="36"/>
</issue>
@@ -4789,54 +4725,6 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <item name="*android:regularColor">@color/lock_pattern_view_regular_color</item>"
- errorLine2=" ^">
- <location
- file="res/values/styles.xml"
- line="447"
- column="44"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <item name="*android:regularColor">@color/lock_pattern_view_regular_color_dark</item>"
- errorLine2=" ^">
- <location
- file="res/values/styles.xml"
- line="453"
- column="44"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <item name="*android:successColor">@color/lock_pattern_view_regular_color_dark</item>"
- errorLine2=" ^">
- <location
- file="res/values/styles.xml"
- line="454"
- column="44"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <item name="android:colorError">@color/settings_dialog_colorError</item>"
errorLine2=" ^">
<location
diff --git a/res/drawable/homepage_highlighted_item_background.xml b/res/drawable/homepage_highlighted_item_background.xml
index d45e489..b7b24e9 100644
--- a/res/drawable/homepage_highlighted_item_background.xml
+++ b/res/drawable/homepage_highlighted_item_background.xml
@@ -15,12 +15,11 @@
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:insetLeft="@dimen/homepage_menu_entry_padding_horizontal"
android:insetRight="@dimen/homepage_menu_entry_padding_horizontal">
<shape android:shape="rectangle">
<solid
- android:color="?androidprv:attr/colorAccentSecondaryVariant" />
+ android:color="?android:attr/textColorPrimary" />
<corners
android:radius="@dimen/homepage_menu_entry_corner_radius" />
</shape>
diff --git a/res/drawable/ic_settings_safety_center.xml b/res/drawable/ic_settings_safety_center.xml
new file mode 100644
index 0000000..f43359f
--- /dev/null
+++ b/res/drawable/ic_settings_safety_center.xml
@@ -0,0 +1,29 @@
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<!-- TODO(b/208624929): Update to an UX approved icon. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24"
+ android:viewportWidth="24"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M12,15m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"/>
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M18.5,1C16.01,1 14,3.01 14,5.5V8H6c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V10c0,-1.1 -0.9,-2 -2,-2h-2V5.5C16,4.12 17.12,3 18.5,3C19.88,3 21,4.12 21,5.5V6h2V5.5C23,3.01 20.99,1 18.5,1zM18,10v10H6V10H18z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/sim_confirm_dialog_btn_outline.xml b/res/drawable/sim_confirm_dialog_btn_outline.xml
new file mode 100644
index 0000000..5722f8c
--- /dev/null
+++ b/res/drawable/sim_confirm_dialog_btn_outline.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:insetTop="16dp"
+ android:insetBottom="24dp">
+ <ripple android:color="?android:attr/colorControlHighlight">
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <solid android:color="@android:color/white"/>
+ <corners android:radius="24dp"/>
+ </shape>
+ </item>
+ <item>
+ <shape android:shape="rectangle">
+ <corners android:radius="24dp"/>
+ <solid android:color="@android:color/transparent"/>
+ <stroke android:color="?androidprv:attr/colorAccentPrimaryVariant"
+ android:width="1dp" />
+ <padding android:left="16dp"
+ android:top="8dp"
+ android:right="16dp"
+ android:bottom="8dp"/>
+ </shape>
+ </item>
+ </ripple>
+</inset>
diff --git a/res/drawable/sim_confirm_dialog_rounded_bg.xml b/res/drawable/sim_confirm_dialog_rounded_bg.xml
new file mode 100644
index 0000000..ab7e392
--- /dev/null
+++ b/res/drawable/sim_confirm_dialog_rounded_bg.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+ android:insetLeft="24dp"
+ android:insetRight="24dp">
+ <shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="@color/settingslib_state_on_color"/>
+ <corners
+ android:bottomLeftRadius="8dp"
+ android:topLeftRadius="8dp"
+ android:bottomRightRadius="8dp"
+ android:topRightRadius="8dp"
+ />
+ </shape>
+</inset>
diff --git a/res/layout/accessibility_launch_activity_preference.xml b/res/layout/accessibility_launch_activity_preference.xml
new file mode 100644
index 0000000..772bb84
--- /dev/null
+++ b/res/layout/accessibility_launch_activity_preference.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:minHeight="@dimen/settingslib_min_switch_bar_height"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_margin="@dimen/settingslib_switchbar_margin"
+ android:paddingStart="@dimen/settingslib_switchbar_padding_left"
+ android:paddingEnd="@dimen/settingslib_switchbar_padding_right"
+ android:background="@drawable/settingslib_switch_bar_bg_on">
+
+ <TextView
+ android:id="@android:id/title"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_marginEnd="@dimen/settingslib_switch_title_margin"
+ android:layout_marginVertical="@dimen/settingslib_switch_title_margin"
+ android:layout_gravity="center_vertical"
+ android:ellipsize="end"
+ android:textAppearance="?android:attr/textAppearanceListItem"
+ style="@style/MainSwitchText.Settingslib" />
+</LinearLayout>
diff --git a/res/layout/add_supervised_user.xml b/res/layout/add_supervised_user.xml
new file mode 100644
index 0000000..b95e0f7
--- /dev/null
+++ b/res/layout/add_supervised_user.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <Button
+ android:id="@+id/createSupervisedUser"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:text="@*android:string/supervised_user_creation_label" />
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/app_locale_details_description.xml b/res/layout/app_locale_details_description.xml
new file mode 100644
index 0000000..989f6c9
--- /dev/null
+++ b/res/layout/app_locale_details_description.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_horizontal" >
+ <TextView
+ android:id="@id/description"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="15dip"
+ android:layout_marginRight="6dip"
+ android:layout_marginTop="6dip"
+ android:textAlignment="center"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/biometric_handoff.xml b/res/layout/biometric_handoff.xml
index 4861568..7da4917 100644
--- a/res/layout/biometric_handoff.xml
+++ b/res/layout/biometric_handoff.xml
@@ -17,8 +17,8 @@
<com.google.android.setupdesign.GlifLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- style="?attr/face_layout_theme"
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent">
-</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
+ android:layout_height="match_parent"
+ android:icon="@drawable/ic_lock">
+</com.google.android.setupdesign.GlifLayout>
diff --git a/res/layout/dialog_sim_status.xml b/res/layout/dialog_sim_status.xml
index 27d12a8..c169e58 100644
--- a/res/layout/dialog_sim_status.xml
+++ b/res/layout/dialog_sim_status.xml
@@ -166,6 +166,7 @@
android:id="@+id/esim_id_value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:textIsSelectable="true"
android:text="@string/device_info_not_available"/>
<TextView
diff --git a/res/layout/dream_start_button.xml b/res/layout/dream_start_button.xml
new file mode 100644
index 0000000..17ba78d
--- /dev/null
+++ b/res/layout/dream_start_button.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:gravity="bottom"
+ android:paddingStart="72dp"
+ android:paddingEnd="72dp"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Button
+ android:id="@+id/dream_start_now_button"
+ style="@style/ActionPrimaryButton"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="@string/screensaver_settings_dream_start"/>
+
+</LinearLayout>
diff --git a/res/layout/font_size_preview.xml b/res/layout/font_size_preview.xml
index 2b1773b..f916ac4 100644
--- a/res/layout/font_size_preview.xml
+++ b/res/layout/font_size_preview.xml
@@ -26,6 +26,7 @@
android:layout_height="wrap_content">
<LinearLayout
+ android:id="@+id/font_size_preview_text_group"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="16dp"
diff --git a/res/layout/select_account_list_item.xml b/res/layout/select_account_list_item.xml
index 3587e55..716adff 100644
--- a/res/layout/select_account_list_item.xml
+++ b/res/layout/select_account_list_item.xml
@@ -16,42 +16,26 @@
<!-- Layout of a single item for displaying sim cards. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
+ android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="?android:attr/selectableItemBackground" >
-
- <ImageView android:id="@+id/icon"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:scaleType="center" />
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_marginStart="15dip"
- android:layout_marginEnd="6dip"
- android:layout_marginTop="6dip"
- android:layout_marginBottom="6dip"
+ android:minHeight="?attr/listPreferredItemHeightSmall"
+ android:background="@drawable/sim_confirm_dialog_rounded_bg"
+ android:gravity="center">
+ <TextView android:id="@+id/title"
+ android:textAppearance="@style/TextAppearance.SimConfirmDialogList"
+ android:gravity="start|center_vertical"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_width="0dp"
- android:layout_weight="1" >
- <TextView android:id="@+id/title"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:gravity="start|center_vertical"
- android:layout_marginLeft="8dp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal" />
- <TextView android:id="@+id/summary"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:gravity="start|center_vertical"
- android:layout_marginLeft="8dp"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/title"
- android:textColor="?android:attr/textColorSecondary"
- android:layout_alignStart="@id/title" />
- </LinearLayout>
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal" />
+ <TextView android:id="@+id/summary"
+ android:textAppearance="@style/TextAppearance.SimConfirmDialogList.Summary"
+ android:gravity="start|center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/title"
+ android:textColor="?android:attr/textColorSecondary"
+ android:layout_alignStart="@id/title" />
</LinearLayout>
diff --git a/res/layout/settings_homepage_container.xml b/res/layout/settings_homepage_container.xml
index a4b556d..4f0d804 100644
--- a/res/layout/settings_homepage_container.xml
+++ b/res/layout/settings_homepage_container.xml
@@ -46,8 +46,7 @@
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:animateLayoutChanges="true"
- android:background="?android:attr/windowBackground"/>
+ android:animateLayoutChanges="true"/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/sim_confirm_dialog_item_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_item_multiple_enabled_profiles_supported.xml
new file mode 100644
index 0000000..003cdbf
--- /dev/null
+++ b/res/layout/sim_confirm_dialog_item_multiple_enabled_profiles_supported.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?attr/listPreferredItemHeightSmall"
+ style="?attr/materialAlertDialogBodyTextStyle"
+ android:gravity="center"
+ android:paddingTop="?attr/listPreferredItemPaddingStart"
+ android:paddingBottom="?attr/listPreferredItemPaddingEnd"
+ android:paddingLeft="?attr/listPreferredItemPaddingLeft"
+ android:paddingRight="?attr/listPreferredItemPaddingRight"
+ android:background="@drawable/sim_confirm_dialog_rounded_bg"
+ android:textAppearance="@style/TextAppearance.SimConfirmDialogList"
+ />
diff --git a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
new file mode 100644
index 0000000..610bf3d
--- /dev/null
+++ b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+ <TextView
+ android:id="@+id/msg"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="24dp"
+ android:paddingTop="16dp"
+ android:paddingStart="24dp"
+ android:gravity="center"
+ android:textAppearance="@style/TextAppearance.DialogMessage"/>
+ <ListView
+ android:id="@+id/carrier_list"
+ android:layout_gravity="center"
+ android:paddingTop="16dp"
+ android:dividerHeight="1dp"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <LinearLayout
+ android:id="@+id/info_outline_layout"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="start|top"
+ android:orientation="horizontal"
+ android:paddingEnd="24dp"
+ android:paddingTop="16dp"
+ android:paddingStart="24dp"
+ android:layout_marginBottom="16dp"
+ android:baselineAligned="true">
+ <ImageView
+ android:src="@drawable/ic_info_outline_24dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:tint="?android:attr/textColorTertiary"/>
+ <TextView
+ android:id="@+id/info_outline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="16dp"
+ android:text="@string/sim_action_switch_sub_dialog_info_outline_for_turning_off"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAppearance="@style/TextAppearance.DialogMessage"/>
+ </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/sim_confirm_dialog_title_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_title_multiple_enabled_profiles_supported.xml
new file mode 100644
index 0000000..f43303f
--- /dev/null
+++ b/res/layout/sim_confirm_dialog_title_multiple_enabled_profiles_supported.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/title"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingEnd="24dp"
+ android:paddingTop="16dp"
+ android:paddingLeft="24dp"
+ android:gravity="center"
+ style="?android:attr/textAppearanceLarge"/>
diff --git a/res/layout/suw_font_size_fragment.xml b/res/layout/suw_font_size_fragment.xml
index 0e03a69..898b9eb 100644
--- a/res/layout/suw_font_size_fragment.xml
+++ b/res/layout/suw_font_size_fragment.xml
@@ -75,12 +75,6 @@
android:contentDescription="@string/font_size_make_larger_desc"
style="@style/screen_size_imageview_style"/>
</LinearLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/font_size_summary"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead"/>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/suw_screen_zoom_fragment.xml b/res/layout/suw_screen_zoom_fragment.xml
index 0747381..369ff14 100644
--- a/res/layout/suw_screen_zoom_fragment.xml
+++ b/res/layout/suw_screen_zoom_fragment.xml
@@ -74,12 +74,6 @@
android:contentDescription="@string/screen_zoom_make_larger_desc"
style="@style/screen_size_imageview_style"/>
</LinearLayout>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/screen_zoom_summary"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead"/>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/wifi_calling_settings_preferences.xml b/res/layout/wifi_calling_settings_preferences.xml
index 98acd95..9a6cbe6 100644
--- a/res/layout/wifi_calling_settings_preferences.xml
+++ b/res/layout/wifi_calling_settings_preferences.xml
@@ -29,16 +29,11 @@
<FrameLayout
android:id="@android:id/tabcontent"
- android:layout_width="0dip"
- android:layout_height="0dip" />
-
- <FrameLayout
- android:id="@+id/prefs_container"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1"
- android:clipChildren="false"
- android:clipToPadding="false"
+ android:clipChildren="true"
+ android:clipToPadding="true"
android:smoothScrollbar="false" />
</LinearLayout>
diff --git a/res/raw/udfps_edu_lottie.json b/res/raw/udfps_edu_lottie.json
index c13a02f..e012380 100644
--- a/res/raw/udfps_edu_lottie.json
+++ b/res/raw/udfps_edu_lottie.json
@@ -1,12485 +1 @@
-{
- "v": "5.7.13",
- "fr": 60,
- "ip": 0,
- "op": 541,
- "w": 300,
- "h": 289,
- "nm": "enrollment_edu_02",
- "ddd": 0,
- "assets": [],
- "layers": [
- {
- "ddd": 0,
- "ind": 1,
- "ty": 4,
- "nm": "fingerprint motion 8",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 429,
- "s": [
- 100
- ]
- },
- {
- "t": 440,
- "s": [
- 0
- ]
- }
- ],
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 100,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 418,
- "op": 630,
- "st": 232,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 2,
- "ty": 4,
- "nm": "fingerprint motion 7",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.667
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 380,
- "s": [
- 100
- ]
- },
- {
- "t": 394,
- "s": [
- 0
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 369,
- "op": 418,
- "st": 232,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 3,
- "ty": 4,
- "nm": "fingerprint motion 6",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 335,
- "s": [
- 100
- ]
- },
- {
- "t": 348,
- "s": [
- 0
- ]
- }
- ],
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 100,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 324,
- "op": 369,
- "st": 131,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 4,
- "ty": 4,
- "nm": "fingerprint motion 5",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.667
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 285,
- "s": [
- 100
- ]
- },
- {
- "t": 299,
- "s": [
- 0
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 278,
- "op": 324,
- "st": 131,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 5,
- "ty": 4,
- "nm": "fingerprint motion 4",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 232,
- "s": [
- 100
- ]
- },
- {
- "t": 245,
- "s": [
- 0
- ]
- }
- ],
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 100,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 218,
- "op": 278,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 6,
- "ty": 4,
- "nm": "fingerprint motion 3",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.667
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 185,
- "s": [
- 100
- ]
- },
- {
- "t": 199,
- "s": [
- 0
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 160,
- "op": 218,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 7,
- "ty": 4,
- "nm": "fingerprint motion 2",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 138,
- "s": [
- 100
- ]
- },
- {
- "t": 149,
- "s": [
- 0
- ]
- }
- ],
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 100,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 0,
- "op": 160,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 8,
- "ty": 4,
- "nm": "fingerprint motion",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541000007181,
- 0.705999995213,
- 0.972999961703,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.667
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.333
- ],
- "y": [
- 0
- ]
- },
- "t": 92,
- "s": [
- 100
- ]
- },
- {
- "t": 106,
- "s": [
- 0
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 0,
- "op": 160,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 9,
- "ty": 4,
- "nm": "fingerprint static",
- "parent": 10,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- -10.467,
- 814.892,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 22.5,
- 28.676,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 353.53,
- 353.53,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 3.564,
- 0
- ],
- [
- 2.241,
- 1.694
- ]
- ],
- "o": [
- [
- -2.329,
- 2.012
- ],
- [
- -3.23,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 8.7,
- -1.624
- ],
- [
- -0.335,
- 1.624
- ],
- [
- -8.7,
- -1.076
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.290196078431,
- 0.313725490196,
- 0.352941176471,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.837,
- 48.229
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -7.553,
- 0
- ],
- [
- 0,
- -6.83
- ]
- ],
- "o": [
- [
- -0.988,
- -2.577
- ],
- [
- 0,
- -6.83
- ],
- [
- 7.553,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -12.247,
- 8.824
- ],
- [
- -13.235,
- 3.529
- ],
- [
- 0,
- -8.824
- ],
- [
- 13.235,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.290196078431,
- 0.313725490196,
- 0.352941176471,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 30.441
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 2",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 2,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 2.647,
- 0
- ],
- [
- 0.388,
- 2.294
- ],
- [
- 0,
- 0
- ],
- [
- 2.117,
- 0
- ],
- [
- -5.241,
- -1.482
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 2.629
- ],
- [
- -2.33,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- -0.353,
- -2.1
- ],
- [
- -7.624,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 10.95,
- -1.756
- ],
- [
- 10.95,
- -1.244
- ],
- [
- 6.168,
- 3.538
- ],
- [
- 1.456,
- -0.45
- ],
- [
- 0.962,
- -3.415
- ],
- [
- -3.326,
- -7.05
- ],
- [
- -2.568,
- 7.05
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.290196078431,
- 0.313725490196,
- 0.352941176471,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 24.786,
- 35.727
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 3",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 3,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -6.618,
- 0
- ],
- [
- -2.665,
- -4.165
- ]
- ],
- "o": [
- [
- 2.665,
- -4.165
- ],
- [
- 6.618,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -15,
- 3.529
- ],
- [
- 0,
- -3.529
- ],
- [
- 15,
- 3.529
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.290196078431,
- 0.313725490196,
- 0.352941176471,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 18.088
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 4",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 4,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- -3.53,
- 0
- ],
- [
- -2.859,
- -1.429
- ]
- ],
- "o": [
- [
- 2.859,
- -1.429
- ],
- [
- 3.529,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- -9.706,
- 1.12
- ],
- [
- 0,
- -1.12
- ],
- [
- 9.706,
- 1.12
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.290196078431,
- 0.313725490196,
- 0.352941176471,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 3,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 10,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 22.5,
- 8.621
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 5",
- "np": 2,
- "cix": 2,
- "bm": 0,
- "ix": 5,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 100,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 6,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 0,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 10,
- "ty": 4,
- "nm": "background",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.14,
- 205.871,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- -11.477,
- 810.793,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.511,
- 0.511,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 92,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833,
- 0.833,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 102,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.369,
- 0.369,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.292,
- 0.292,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 138,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.667,
- 0.667,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.167,
- 0.167,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 148,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.511,
- 0.511,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 185,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833,
- 0.833,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 195,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.369,
- 0.369,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.292,
- 0.292,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 232,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.667,
- 0.667,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.167,
- 0.167,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 242,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.511,
- 0.511,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 285,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833,
- 0.833,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 295,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.369,
- 0.369,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.292,
- 0.292,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 335,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.667,
- 0.667,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.167,
- 0.167,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 345,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.511,
- 0.511,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 380,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833,
- 0.833,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.333,
- 0.333,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 390,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.369,
- 0.369,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.292,
- 0.292,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 429,
- "s": [
- 16.92,
- 16.92,
- 100
- ]
- },
- {
- "t": 439,
- "s": [
- 17.82,
- 17.82,
- 100
- ]
- }
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 258.387,
- 258.387
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "fl",
- "c": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 92,
- "s": [
- 0.247058838489,
- 0.305882352941,
- 0.396078461292,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 98,
- "s": [
- 0.105882360421,
- 0.152941176471,
- 0.223529426724,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 138,
- "s": [
- 0.105882360421,
- 0.152941176471,
- 0.223529426724,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 143,
- "s": [
- 0.247058838489,
- 0.305882352941,
- 0.396078461292,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 185,
- "s": [
- 0.247058838489,
- 0.305882352941,
- 0.396078461292,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 190,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 232,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 237,
- "s": [
- 0.258823543787,
- 0.305882364511,
- 0.388235300779,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 285,
- "s": [
- 0.258823543787,
- 0.305882364511,
- 0.388235300779,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 290,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 335,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 340,
- "s": [
- 0.258823543787,
- 0.305882364511,
- 0.388235300779,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 380,
- "s": [
- 0.258823543787,
- 0.305882364511,
- 0.388235300779,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 385,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 429,
- "s": [
- 0.117647059262,
- 0.152941182256,
- 0.219607844949,
- 1
- ]
- },
- {
- "t": 434,
- "s": [
- 0.258823543787,
- 0.305882364511,
- 0.388235300779,
- 1
- ]
- }
- ],
- "ix": 4
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 5
- },
- "r": 1,
- "bm": 0,
- "nm": "Fill 1",
- "mn": "ADBE Vector Graphic - Fill",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- -8.807,
- 813.193
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- }
- ],
- "ip": 0,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 11,
- "ty": 4,
- "nm": "Phone/Phone_Illustration Outlines 2",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.5,
- 139.97,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 64,
- 118.5,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 103.629,
- 103.629,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 4.901,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 4.902
- ],
- [
- 0,
- 0
- ],
- [
- -4.902,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- -4.902
- ]
- ],
- "o": [
- [
- 0,
- 4.902
- ],
- [
- 0,
- 0
- ],
- [
- -4.902,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- -4.902
- ],
- [
- 0,
- 0
- ],
- [
- 4.901,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 58.897,
- 106.681
- ],
- [
- 50.008,
- 115.572
- ],
- [
- -52.229,
- 115.572
- ],
- [
- -61.118,
- 106.681
- ],
- [
- -61.118,
- -106.68
- ],
- [
- -52.229,
- -115.571
- ],
- [
- 50.008,
- -115.571
- ],
- [
- 58.897,
- -106.68
- ]
- ],
- "c": true
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ind": 1,
- "ty": "sh",
- "ix": 2,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 1.227
- ],
- [
- 0,
- 0
- ],
- [
- 1.227,
- 0.001
- ],
- [
- 0,
- 0
- ],
- [
- 6.127,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- -6.128
- ],
- [
- 0,
- 0
- ],
- [
- -6.127,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 6.128
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 1.228
- ],
- [
- 0,
- 0
- ],
- [
- 1.227,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- -1.228
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- -6.128
- ],
- [
- 0,
- 0
- ],
- [
- -6.127,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 6.128
- ],
- [
- 0,
- 0
- ],
- [
- 6.127,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 1.227,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- -1.227
- ],
- [
- 0,
- 0
- ],
- [
- 1.227,
- 0
- ]
- ],
- "v": [
- [
- 63.341,
- -48.896
- ],
- [
- 63.341,
- -57.786
- ],
- [
- 61.12,
- -60.008
- ],
- [
- 61.12,
- -106.68
- ],
- [
- 50.008,
- -117.795
- ],
- [
- -52.229,
- -117.795
- ],
- [
- -63.341,
- -106.68
- ],
- [
- -63.341,
- 106.681
- ],
- [
- -52.229,
- 117.795
- ],
- [
- 50.008,
- 117.795
- ],
- [
- 61.12,
- 106.681
- ],
- [
- 61.12,
- -2.223
- ],
- [
- 63.341,
- -4.445
- ],
- [
- 63.341,
- -26.671
- ],
- [
- 61.12,
- -28.893
- ],
- [
- 61.12,
- -46.674
- ]
- ],
- "c": true
- },
- "ix": 2
- },
- "nm": "Path 2",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "mm",
- "mm": 1,
- "nm": "Merge Paths 1",
- "mn": "ADBE Vector Filter - Merge",
- "hd": false
- },
- {
- "ty": "fl",
- "c": {
- "a": 0,
- "k": [
- 0.501999978458,
- 0.525,
- 0.545000023935,
- 1
- ],
- "ix": 4
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 60,
- "s": [
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 70,
- "s": [
- 0
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 489,
- "s": [
- 0
- ]
- },
- {
- "t": 499,
- "s": [
- 100
- ]
- }
- ],
- "ix": 5
- },
- "r": 1,
- "bm": 0,
- "nm": "Fill 1",
- "mn": "ADBE Vector Graphic - Fill",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 63.591,
- 118.045
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Group 1",
- "np": 4,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- }
- ],
- "ip": 0,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 13,
- "ty": 4,
- "nm": "checkmark 2",
- "parent": 14,
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 338.091,
- 629.95,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 334.381,
- 630.336,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 104.745,
- 104.745,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "ind": 0,
- "ty": "sh",
- "ix": 1,
- "ks": {
- "a": 0,
- "k": {
- "i": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "o": [
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ],
- [
- 0,
- 0
- ]
- ],
- "v": [
- [
- 283,
- 629.5
- ],
- [
- 322.5,
- 661.5
- ],
- [
- 382.5,
- 591.5
- ]
- ],
- "c": false
- },
- "ix": 2
- },
- "nm": "Path 1",
- "mn": "ADBE Vector Shape - Group",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.400000029919,
- 0.61568627451,
- 0.964705942191,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 487,
- "s": [
- 100
- ]
- },
- {
- "t": 490,
- "s": [
- 0
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 14,
- "ix": 5
- },
- "lc": 1,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Shape 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.645
- ],
- "y": [
- 0
- ]
- },
- "t": 433,
- "s": [
- 0
- ]
- },
- {
- "t": 447,
- "s": [
- 100
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 0,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": 429,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 14,
- "ty": 4,
- "nm": "checkmark",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 200.737,
- 254.567,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 338.647,
- 629.648,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.549,
- 0.549,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.04,
- 0.04,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 429,
- "s": [
- 7.2,
- 7.2,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.323,
- 0.323,
- 0.667
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.271,
- 0.271,
- 0.333
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 437,
- "s": [
- 19.525,
- 19.525,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.833,
- 0.833,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 0.167,
- 0.167,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 454,
- "s": [
- 17.185,
- 17.185,
- 100
- ]
- },
- {
- "i": {
- "x": [
- 0.913,
- 0.913,
- 0.833
- ],
- "y": [
- 1,
- 1,
- 1
- ]
- },
- "o": {
- "x": [
- 1,
- 1,
- 0.167
- ],
- "y": [
- 0,
- 0,
- 0
- ]
- },
- "t": 480,
- "s": [
- 17.185,
- 17.185,
- 100
- ]
- },
- {
- "t": 490,
- "s": [
- 7.2,
- 7.2,
- 100
- ]
- }
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 177.191,
- 177.191
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.400000029919,
- 0.61568627451,
- 0.964705942191,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 482,
- "s": [
- 100
- ]
- },
- {
- "t": 490,
- "s": [
- 0
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 14,
- "ix": 5
- },
- "lc": 1,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "fl",
- "c": {
- "a": 0,
- "k": [
- 0.125490196078,
- 0.129411764706,
- 0.141176470588,
- 1
- ],
- "ix": 4
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 482,
- "s": [
- 100
- ]
- },
- {
- "t": 490,
- "s": [
- 0
- ]
- }
- ],
- "ix": 5
- },
- "r": 1,
- "bm": 0,
- "nm": "Fill 1",
- "mn": "ADBE Vector Graphic - Fill",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 338.104,
- 629.943
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100,
- 100
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- }
- ],
- "ip": 429,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 15,
- "ty": 4,
- "nm": "Shape Layer 20",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 270,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541176470588,
- 0.705882352941,
- 0.972549079446,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 480,
- "s": [
- 100
- ]
- },
- {
- "t": 486,
- "s": [
- 0
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- }
- ],
- "ip": 477,
- "op": 630,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 16,
- "ty": 4,
- "nm": "Shape Layer 19",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 270,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541176470588,
- 0.705882352941,
- 0.972549079446,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.2
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.4
- ],
- "y": [
- 0
- ]
- },
- "t": 380,
- "s": [
- 0
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 429,
- "s": [
- 22.5
- ]
- },
- {
- "t": 440,
- "s": [
- 26
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 17,
- "ty": 4,
- "nm": "Shape Layer 18",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 270,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.18431372549,
- 0.223529426724,
- 0.282352941176,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 69,
- "s": [
- 0
- ]
- },
- {
- "t": 79,
- "s": [
- 100
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 22.5,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 18,
- "ty": 4,
- "nm": "Shape Layer 17",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 180,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541176470588,
- 0.705882352941,
- 0.972549079446,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.21
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.564
- ],
- "y": [
- 0
- ]
- },
- "t": 285,
- "s": [
- 0
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 335,
- "s": [
- 22.5
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 429,
- "s": [
- 22.5
- ]
- },
- {
- "t": 440,
- "s": [
- 26
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 19,
- "ty": 4,
- "nm": "Shape Layer 16",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 180,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.18431372549,
- 0.223529426724,
- 0.282352941176,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 69,
- "s": [
- 0
- ]
- },
- {
- "t": 79,
- "s": [
- 100
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 22.5,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 20,
- "ty": 4,
- "nm": "Shape Layer 15",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 90,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541176470588,
- 0.705882352941,
- 0.972549079446,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.2
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.4
- ],
- "y": [
- 0
- ]
- },
- "t": 185,
- "s": [
- 0
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 232,
- "s": [
- 22.5
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 429,
- "s": [
- 22.5
- ]
- },
- {
- "t": 440,
- "s": [
- 26
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 21,
- "ty": 4,
- "nm": "Shape Layer 14",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 90,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.18431372549,
- 0.223529426724,
- 0.282352941176,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 69,
- "s": [
- 0
- ]
- },
- {
- "t": 79,
- "s": [
- 100
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 22.5,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 22,
- "ty": 4,
- "nm": "Shape Layer 9",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.541176470588,
- 0.705882352941,
- 0.972549079446,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.2
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.4
- ],
- "y": [
- 0
- ]
- },
- "t": 92,
- "s": [
- 0
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 138,
- "s": [
- 22.5
- ]
- },
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 1
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0
- ]
- },
- "t": 429,
- "s": [
- 22.5
- ]
- },
- {
- "t": 440,
- "s": [
- 26
- ]
- }
- ],
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- },
- {
- "ddd": 0,
- "ind": 23,
- "ty": 4,
- "nm": "Shape Layer 6",
- "sr": 1,
- "ks": {
- "o": {
- "a": 0,
- "k": 100,
- "ix": 11
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 10
- },
- "p": {
- "a": 0,
- "k": [
- 151.32,
- 206.475,
- 0
- ],
- "ix": 2,
- "l": 2
- },
- "a": {
- "a": 0,
- "k": [
- 37.523,
- 788.471,
- 0
- ],
- "ix": 1,
- "l": 2
- },
- "s": {
- "a": 0,
- "k": [
- 17.09,
- 17.09,
- 100
- ],
- "ix": 6,
- "l": 2
- }
- },
- "ao": 0,
- "shapes": [
- {
- "ty": "gr",
- "it": [
- {
- "d": 1,
- "ty": "el",
- "s": {
- "a": 0,
- "k": [
- 793.047,
- 793.047
- ],
- "ix": 2
- },
- "p": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 3
- },
- "nm": "Ellipse Path 1",
- "mn": "ADBE Vector Shape - Ellipse",
- "hd": false
- },
- {
- "ty": "st",
- "c": {
- "a": 0,
- "k": [
- 0.18431372549,
- 0.223529426724,
- 0.282352941176,
- 1
- ],
- "ix": 3
- },
- "o": {
- "a": 1,
- "k": [
- {
- "i": {
- "x": [
- 0.833
- ],
- "y": [
- 0.833
- ]
- },
- "o": {
- "x": [
- 0.167
- ],
- "y": [
- 0.167
- ]
- },
- "t": 69,
- "s": [
- 0
- ]
- },
- {
- "t": 79,
- "s": [
- 100
- ]
- }
- ],
- "ix": 4
- },
- "w": {
- "a": 0,
- "k": 34,
- "ix": 5
- },
- "lc": 2,
- "lj": 1,
- "ml": 4,
- "bm": 0,
- "nm": "Stroke 1",
- "mn": "ADBE Vector Graphic - Stroke",
- "hd": false
- },
- {
- "ty": "tr",
- "p": {
- "a": 0,
- "k": [
- 37.523,
- 787.523
- ],
- "ix": 2
- },
- "a": {
- "a": 0,
- "k": [
- 0,
- 0
- ],
- "ix": 1
- },
- "s": {
- "a": 0,
- "k": [
- 100.278,
- 100.278
- ],
- "ix": 3
- },
- "r": {
- "a": 0,
- "k": 0,
- "ix": 6
- },
- "o": {
- "a": 0,
- "k": 100,
- "ix": 7
- },
- "sk": {
- "a": 0,
- "k": 0,
- "ix": 4
- },
- "sa": {
- "a": 0,
- "k": 0,
- "ix": 5
- },
- "nm": "Transform"
- }
- ],
- "nm": "Ellipse 1",
- "np": 3,
- "cix": 2,
- "bm": 0,
- "ix": 1,
- "mn": "ADBE Vector Group",
- "hd": false
- },
- {
- "ty": "tm",
- "s": {
- "a": 0,
- "k": 0,
- "ix": 1
- },
- "e": {
- "a": 0,
- "k": 22.5,
- "ix": 2
- },
- "o": {
- "a": 0,
- "k": 365,
- "ix": 3
- },
- "m": 1,
- "ix": 2,
- "nm": "Trim Paths 1",
- "mn": "ADBE Vector Filter - Trim",
- "hd": false
- }
- ],
- "ip": -7,
- "op": 477,
- "st": 30,
- "bm": 0
- }
- ],
- "markers": []
-}
\ No newline at end of file
+{"v":"5.7.6","fr":60,"ip":0,"op":601,"w":1650,"h":2900,"nm":"UDFPS_EDU_LOTTIE_V02","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"PHONE_OUTLINE 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":571,"s":[0]},{"t":593.5,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[837,1430,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[929.1,929.1,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.243,0],[0,0],[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244]],"o":[[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244],[0,0],[5.243,0],[0,0]],"v":[[63.454,114.112],[53.945,123.622],[-55.413,123.622],[-64.922,114.112],[-64.922,-114.112],[-55.413,-123.622],[53.945,-123.622],[63.454,-114.112]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.313],[0,0],[1.313,0],[0,0],[6.554,0],[0,0],[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[0,1.313],[0,0],[1.313,0],[0,0]],"o":[[0,0],[0,-1.313],[0,0],[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[6.554,0],[0,0],[1.313,0],[0,0],[0,-1.313],[0,0],[1.313,0]],"v":[[68.209,-52.302],[68.209,-61.811],[65.832,-64.188],[65.832,-114.112],[53.945,-126],[-55.413,-126],[-67.3,-114.112],[-67.3,114.112],[-55.413,126],[53.945,126],[65.832,114.112],[65.832,-2.378],[68.209,-4.755],[68.209,-28.528],[65.832,-30.906],[65.832,-49.924]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.368627458811,0.368627458811,0.368627458811,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":467.5,"op":2942.5,"st":542.5,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".blue400","cl":"blue400","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.512,0.901,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-16.824,-0.768],[-4.154,11.903],[16.824,-9.075],[13.995,-11.903],[-4.154,6.247],[-13.996,-3.596]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.988235294118,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Checkmark","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,13.798],[13.798,0],[0,-13.798],[-13.798,0]],"o":[[0,-13.798],[-13.798,0],[0,13.798],[13.798,0]],"v":[[25.345,-0.429],[0.322,-25.454],[-24.701,-0.429],[0.322,24.595]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.399993896484,0.615661621094,0.964691162109,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Outline","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":328,"op":2428,"st":328,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".black","cl":"black","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.78],"y":[0]},"t":472,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":478,"s":[100]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.52],"y":[0]},"t":548,"s":[100]},{"t":555,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1348.087,2521.152,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1.015,1.015,1]},"o":{"x":[0.363,0.363,0.333],"y":[0.038,0.038,0]},"t":473,"s":[0,0,100]},{"i":{"x":[0.474,0.474,0.667],"y":[1,1,1]},"o":{"x":[0.651,0.651,0.333],"y":[0.331,0.331,0]},"t":493,"s":[243.6,243.6,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":513,"s":[232,232,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":545,"s":[232,232,100]},{"t":555,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,12.703],[12.703,0],[0,-12.703],[-12.703,0]],"o":[[0,-12.703],[-12.703,0],[0,12.703],[12.703,0]],"v":[[23.037,0],[0,-23.038],[-23.037,0],[0,23.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[200,200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":328,"op":2428,"st":328,"bm":0},{"ddd":0,"ind":5,"ty":3,"nm":"MAIN_MOVEMENT","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.07,"y":0.954},"o":{"x":0.64,"y":0.046},"t":143.928,"s":[837,2098,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":151.455,"s":[879,2057,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.99},"o":{"x":0.64,"y":0.01},"t":219.176,"s":[879,2057,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":226.697,"s":[856,2015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.99},"o":{"x":0.64,"y":0},"t":295.674,"s":[856,2015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":303.193,"s":[808,2019,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.64,"y":0},"t":507.961,"s":[808,2019,0],"to":[0,0,0],"ti":[0,0,0]},{"t":521.345703125,"s":[837,2098,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.07,0.07,0.07],"y":[0.985,0.985,1]},"o":{"x":[0.64,0.64,0.64],"y":[0.015,0.015,0]},"t":90,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":100.035,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":130.133,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1.025]},"o":{"x":[0.439,0.439,0.439],"y":[0,0,0]},"t":135,"s":[105,105,100]},{"i":{"x":[0.07,0.07,0.07],"y":[0.701,0.701,1]},"o":{"x":[0.64,0.64,0.64],"y":[0.299,0.299,0]},"t":145,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":152.5,"s":[105,105,100]},{"i":{"x":[0.6,0.6,0.6],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,-0.833]},"t":157.5,"s":[105,105,100]},{"i":{"x":[0.07,0.07,0.07],"y":[0.97,0.97,1]},"o":{"x":[0.64,0.64,0.64],"y":[0.03,0.03,0]},"t":165.246,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":175.281,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":205.377,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.175]},"o":{"x":[0.341,0.341,0.341],"y":[0,0,0]},"t":210.391,"s":[100,100,100]},{"i":{"x":[0.07,0.07,0.07],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":220,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":227.5,"s":[105,105,100]},{"i":{"x":[0.621,0.621,0.621],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0.102]},"t":232.5,"s":[105,105,100]},{"i":{"x":[0.07,0.07,0.07],"y":[0.984,0.984,1]},"o":{"x":[0.64,0.64,0.64],"y":[0.016,0.016,0]},"t":240,"s":[105,105,100]},{"i":{"x":[0.07,0.07,0.07],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":250.527,"s":[95,95,100]},{"i":{"x":[0.316,0.316,0.316],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":285,"s":[95,95,100]},{"i":{"x":[0.577,0.577,0.577],"y":[1,1,1]},"o":{"x":[0.253,0.253,0.253],"y":[0,0,0]},"t":295,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,0.925]},"o":{"x":[0.299,0.299,0.299],"y":[0,0,0]},"t":302.5,"s":[105,105,100]},{"i":{"x":[0.627,0.627,0.627],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0.262]},"t":307.5,"s":[105,105,100]},{"i":{"x":[0.07,0.07,0.07],"y":[0.984,0.984,1]},"o":{"x":[0.64,0.64,0.64],"y":[0.016,0.016,0]},"t":365,"s":[105,105,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.64,0.64,0.64],"y":[0,0,0]},"t":375.771,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":508.369,"s":[95,95,100]},{"t":515,"s":[105,105,100]}],"ix":6,"l":2}},"ao":0,"ip":-70,"op":2517.5,"st":117.5,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".grey700","cl":"grey700","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.5,-3,0],"ix":2,"l":2},"a":{"a":0,"k":[28,34,0],"ix":1,"l":2},"s":{"a":0,"k":[527,527,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.703,0],[2.328,1.76]],"o":[[-2.42,2.09],[-3.355,0],[0,0]],"v":[[9.038,-1.687],[-0.348,1.687],[-9.038,-1.118]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.847,0],[0,-7.095]],"o":[[-1.027,-2.676],[0,-7.095],[7.847,0],[0,0]],"v":[[-13.072,-9.314],[-14.099,-14.814],[-0.349,-27.648],[13.401,-14.814]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.75,0],[0.403,2.384],[0,0],[2.2,0],[-5.445,-1.54]],"o":[[0,0],[0,2.733],[-2.42,0],[0,0],[-0.367,-2.181],[-7.92,0],[0,0]],"v":[[13.401,-14.814],[13.401,-14.283],[8.433,-9.314],[3.538,-13.458],[3.025,-16.538],[-1.43,-20.314],[-0.642,-5.665]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[-6.875,0],[-2.769,-4.327]],"o":[[2.768,-4.327],[6.876,0],[0,0]],"v":[[-15.933,-27.646],[-0.35,-34.979],[15.234,-27.646]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[-3.666,0],[-2.97,-1.485]],"o":[[2.97,-1.485],[3.667,0],[0,0]],"v":[[-10.433,-39.985],[-0.35,-42.313],[9.734,-39.985]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.372549027205,0.388235300779,0.407843142748,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.933,54.313],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":90,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.64],"y":[0]},"t":110.035,"s":[0]},{"t":150.197,"s":[0],"h":1},{"t":152.705,"s":[100],"h":1},{"i":{"x":[0],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":165.246,"s":[100]},{"i":{"x":[0.833],"y":[-14.687]},"o":{"x":[0.64],"y":[0]},"t":185.281,"s":[0]},{"t":225.441,"s":[0],"h":1},{"t":227.949,"s":[100],"h":1},{"i":{"x":[0],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":240.494,"s":[100]},{"i":{"x":[0.833],"y":[-14.701]},"o":{"x":[0.64],"y":[0]},"t":260,"s":[0]},{"t":300.689,"s":[0],"h":1},{"t":303.193,"s":[100],"h":1},{"i":{"x":[0],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":365.74,"s":[100]},{"i":{"x":[0.833],"y":[-15.359]},"o":{"x":[0.64],"y":[0]},"t":385,"s":[0]},{"t":518.434,"s":[0],"h":1},{"t":520.943359375,"s":[100],"h":1}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.07],"y":[0.941]},"o":{"x":[0.64],"y":[0.059]},"t":130.133,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.64],"y":[0]},"t":140.146,"s":[0]},{"t":150.197,"s":[0],"h":1},{"t":152.705,"s":[100],"h":1},{"i":{"x":[0],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":205.377,"s":[100]},{"i":{"x":[0.833],"y":[-12.439]},"o":{"x":[0.64],"y":[0]},"t":215,"s":[0]},{"t":225.441,"s":[0],"h":1},{"t":227.949,"s":[100],"h":1},{"i":{"x":[0.07],"y":[0.941]},"o":{"x":[0.64],"y":[0.059]},"t":280.623,"s":[100]},{"i":{"x":[0.833],"y":[-12.342]},"o":{"x":[0.64],"y":[0]},"t":290.641,"s":[0]},{"t":300.689,"s":[0],"h":1},{"t":303.193,"s":[100],"h":1},{"i":{"x":[0.07],"y":[0.97]},"o":{"x":[0.64],"y":[0.03]},"t":508.369,"s":[100]},{"i":{"x":[0.833],"y":[-10.133]},"o":{"x":[0.64],"y":[0]},"t":513.385,"s":[0]},{"t":518.434,"s":[0],"h":1},{"t":520.943359375,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":-20,"op":4855,"st":55,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".blue400","cl":"blue400","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.5,-3,0],"ix":2,"l":2},"a":{"a":0,"k":[28,34,0],"ix":1,"l":2},"s":{"a":0,"k":[527,527,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.703,0],[2.328,1.76]],"o":[[-2.42,2.09],[-3.355,0],[0,0]],"v":[[9.038,-1.687],[-0.348,1.687],[-9.038,-1.118]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.933,54.313],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.847,0],[0,-7.095]],"o":[[-1.027,-2.676],[0,-7.095],[7.847,0],[0,0]],"v":[[-12.723,9.167],[-13.75,3.667],[0,-9.167],[13.75,3.667]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.584,35.833],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.75,0],[0.403,2.384],[0,0],[2.2,0],[-5.445,-1.54]],"o":[[0,0],[0,2.733],[-2.42,0],[0,0],[-0.367,-2.181],[-7.92,0],[0,0]],"v":[[11.376,-1.824],[11.376,-1.293],[6.408,3.676],[1.512,-0.468],[0.999,-3.548],[-3.456,-7.324],[-2.667,7.324]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[29.958,41.324],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-6.875,0],[-2.769,-4.327]],"o":[[2.768,-4.327],[6.876,0],[0,0]],"v":[[-15.583,3.667],[-0.001,-3.667],[15.583,3.667]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.583,23.001],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.666,0],[-2.97,-1.485]],"o":[[2.97,-1.485],[3.667,0],[0,0]],"v":[[-10.083,1.164],[-0.001,-1.164],[10.083,1.164]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[27.583,13.164],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":-20,"op":4855,"st":55,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":".blue400","cl":"blue400","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":88,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":128,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":158,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":183,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":198,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":223,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":230,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":255,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":280,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":295,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":368,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":383,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":508,"s":[0]},{"t":518,"s":[40]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2.91,-13.59,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[440,440],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-13.09,1270.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".grey700","cl":"grey700","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":88,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":128,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":158,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":183,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":198,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":223,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":230,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":255,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":280,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":295,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":368,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":383,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":508,"s":[40]},{"t":518,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2.91,-13.59,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[440,440],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.372549027205,0.388235300779,0.407843142748,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-13.09,1270.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":".grey600","cl":"grey600","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":12.5,"s":[100]},{"t":47.5,"s":[1]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[837,1430,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[929.094,929.094,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.243,0],[0,0],[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244]],"o":[[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244],[0,0],[5.243,0],[0,0]],"v":[[63.454,114.112],[53.945,123.622],[-55.413,123.622],[-64.922,114.112],[-64.922,-114.112],[-55.413,-123.622],[53.945,-123.622],[63.454,-114.112]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.313],[0,0],[1.313,0],[0,0],[6.554,0],[0,0],[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[0,1.313],[0,0],[1.313,0],[0,0]],"o":[[0,0],[0,-1.313],[0,0],[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[6.554,0],[0,0],[1.313,0],[0,0],[0,-1.313],[0,0],[1.313,0]],"v":[[68.209,-52.302],[68.209,-61.811],[65.832,-64.188],[65.832,-114.112],[53.945,-126],[-55.413,-126],[-67.3,-114.112],[-67.3,114.112],[-55.413,126],[53.945,126],[65.832,114.112],[65.832,-2.378],[68.209,-4.755],[68.209,-28.528],[65.832,-30.906],[65.832,-49.924]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960813999,0.525490224361,0.54509806633,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-20,"op":2455,"st":55,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":".blue400","cl":"blue400","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":547.5,"s":[100]},{"t":555,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":392.5,"s":[0]},{"t":618,"s":[630.722]}],"ix":10},"p":{"a":0,"k":[839.723,2083.641,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[125,125,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[1075,1075],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":92.535,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":141.172,"s":[25]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":168.826,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":215,"s":[50]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":242.439,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":290.633,"s":[75]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":335.787,"s":[75]},{"t":508.98046875,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-13.09,1270.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":".blue400","cl":"blue400","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":37.5,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[40]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":550,"s":[40]},{"t":582.5,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[839.723,2083.641,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[125,125,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[1075,1075],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-13.09,1270.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"bm":0}],"markers":[{"tm":0,"cm":"0","dr":0},{"tm":292.5,"cm":"2","dr":0},{"tm":600,"cm":"3","dr":0}]}
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 8b4cae8..cfc8414 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Bel oor Wi-Fi. Die oproep sal eindig as jy nie meer Wi-Fi het nie."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"As Wi-Fi-oproepe aan is, kan jou foon oproepe deur Wi-Fi-netwerke of jou diensverskaffer se netwerk roeteer, afhangend van jou voorkeur en watter sein die sterkste is. Vind by jou diensverskaffer oor tariewe en ander besonderhede uit voordat jy hierdie kenmerk aanskakel.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Noodadres"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Word as jou ligging gebruik wanneer jy \'n noodoproep oor Wi-Fi maak"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Kom meer te wete"</annotation>" oor Private DNS-kenmerke"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aan"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hou volumesleutels om oop te maak"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Tripeltik op skerm om oop te maak"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Gebruik gebaar om oop te maak"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Gebruik nuwe toeganklikheidgebaar"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Gebruik toeganklikheidsgebaar"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Tik op die toeganklikheidknoppie <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> onderaan jou skerm om hierdie kenmerk te gebruik.\n\nRaak en hou die toeganklikheidknoppie om tussen kenmerke te wissel."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Tik op die toeganklikheidknoppie op jou skerm om hierdie kenmerke te gebruik."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Druk en hou albei volumesleutels om hierdie kenmerk te gebruik."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Koppel aan <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ontkoppel hierdie VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ontkoppel"</string>
- <string name="vpn_version" msgid="41856553718304367">"Weergawe <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Vergeet VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vervang bestaande VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Stel altyd-aan VPN?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lank"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Wys beursie"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Laat toegang tot beursie vanaf sluitskerm en kitsinstellings toe"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Wys QR-kodeskandeerders"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Laat toegang tot QR-kodeskandeerder van sluitskerm af toe"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Wys toestelkontroles"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Toegangkontroles wanneer dit gesluit is"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Wys dubbellynhorlosie as dit beskikbaar is"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Dubbellynhorlosie"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Af"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM\'s"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Soek en koppel aan wi-fi-netwerke"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"vliegtuig, vliegtuigveilig"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Oproepe en SMS\'e"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-fi-oproepe"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 50be6fe..817985b 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"በ Wi-Fi በኩል ደውል። Wi‑Fi ከጠፋ፣ ጥሪ ያበቃል።"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"የWi-Fi ጥሪ ሲበራ የእርስዎ ስልክ በምርጫዎ እና በየትኛው ይበልጥ ጠንካራ እንደሆነ የሚወሰን ሆኖ ጥሪዎችን በWi-Fi አውታረ መረቦች ወይም በአገልግሎት አቅራቢዎ አውታረ መረብ በኩል ሊያዞር ይችላል። ይህን ባህሪ ከማብራትዎ በፊት ክፍያዎችን እና ሌሎች ዝርዝሮችን በተመለከተ አገልግሎት አቅራቢዎን ያነጋግሩ።<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"የአስቸኳይ አደጋ አድራሻ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"በWi-Fi ላይ የአስቸኳይ አደጋ ጥሪ ሲያደርጉ እንደ የእርስዎ አካባቢ ሆኖ ስራ ላይ ይውላል"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ስለግል ዲኤንኤስ ባህሪያት "<annotation id="url">"የበለጠ ይረዱ"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"በርቷል"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ለመክፈት የድምጽ ቁልፎችን ይያዙ"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ለመክፈት ማያ ገጹን ሦስት ጊዜ መታ ያድርጉ"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ለመክፈት የጣት ምልክትን ይጠቀሙ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"አዲስ የተደራሽነት የጣት ምልክትን ይጠቀሙ"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"የተደራሽነት እጅ ምልክትን ይጠቀሙ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ይህን ባህሪ ለመጠቀም በማያ ገጽዎ ግርጌ ላይ ያለውን የተደራሽነት አዝራሩን <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> መታ ያድርጉ።\n\nባህሪያት መካከል ለመቀያየር የተደራሽነት አዝራሩን ነክተው ይያዙ።"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ይህን ባህሪ ለመጠቀም በማያ ገጽዎ ላይ ያለውን የተደራሽነት አዝራር መታ ያድርጉ።"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ይህን ባህሪ ለመጠቀም ሁለቱንም የድምጽ ቁልፎች ተጭነው ይያዙ።"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"ከ<xliff:g id="PROFILE">%s</xliff:g> ጋር ተገናኝ"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"የዚህ ቪፒኤን ግንኙነት ይቋረጥ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ግንኙነት አቋርጥ"</string>
- <string name="vpn_version" msgid="41856553718304367">"ሥሪት <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPNን እርሳ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"አሁን ያለው VPN ይተካ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ሁልጊዜ-የበራ VPN ይቀናበር?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ረጅም"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"የኪስ ቦርሳን አሳይ"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"ከማያ ገጽ ቁልፍ እና ፈጣን ቅንብሮች ሆነው የኪስ ቦርሳ መድረሻን ይፍቀዱ"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"የQR ኮድ መቃኛን አሳይ"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ከማያ ገጽ መቆለፊያ ሆነው ለQR ኮድ መቃኛ መዳረሻ ይፍቀዱ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"የመሣሪያ መቆጣጠሪያዎችን አሳይ"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ሲቆለፍ መቆጣጠሪያዎችን ይድረሱ"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"የሚገኝ ሲሆን ባለ ሁለት-መስመር ሰዓት አሳይ"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ባለ ሁለት-መስመር ሰዓት"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"አጥፋ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"በይነመረብ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMዎች"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ከWi‑Fi አውታረ መረቦችን ያገኙ እና ያገናኙ"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"አውሮፕላን፣ የአውሮፕላን ድህንነቱ የተጠበቀ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ጥሪዎች እና ኤስኤምኤስ"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"የWi-Fi ጥሪ ማድረጊያ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index cb6094f..db8b2b9 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -1313,7 +1313,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"يمكنك الاتصال عبر شبكة Wi-Fi. وإذا لم تكن متوفرة، سيتم إنهاء المكالمة."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"عند تفعيل الاتصال عبر Wi-Fi، يمكن للهاتف توجيه المكالمات عبر شبكة Wi-Fi أو عبر مشغّل شبكة الجوّال، حسب تفضيلك وحسب الإشارة الأقوى. وقبل تفعيل هذه الميزة، يُرجى مراجعة الرسوم والتفاصيل الأخرى مع مشغّل شبكة الجوّال.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"عنوان الطوارئ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"يتم اعتباره موقعك الجغرافي عند إجراء مكالمة طوارئ عبر Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"مزيد من المعلومات"</annotation>" عن ميزات نظام أسماء النطاقات الخاص"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"مفعَّل"</string>
@@ -2418,7 +2419,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"اضغط مع الاستمرار على مفتاحَي مستوى الصوت للفتح"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"انقر على الشاشة ثلاث مرات لفتحها."</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"الفتح بحركة واحدة"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"استخدام إيماءة \"سهولة الاستخدام\" الجديدة"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"استخدام إيماءة تسهيل الاستخدام"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"لاستخدام هذه الميزة، انقر على زر أدوات تمكين الوصول <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> في أسفل الشاشة.\n\nللتبديل بين الميزات، انقر مع الاستمرار على زر أدوات تمكين الوصول."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"لاستخدام هذه الميزة، انقر على زر أدوات تسهيل الاستخدام في شاشتك."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"لاستخدام هذه الميزة، اضغط مع الاستمرار على كلا مفتاحَي مستوى الصوت."</string>
@@ -3120,7 +3121,7 @@
<string name="adaptive_connectivity_summary" msgid="3648731530666326885">"إطالة عمر البطارية وتحسين أداء الجهاز عن طريق الإدارة التلقائية للاتصالات بالشبكات"</string>
<string name="adaptive_connectivity_switch_on" msgid="3653067561620745493">"تفعيل"</string>
<string name="adaptive_connectivity_switch_off" msgid="5076172560836115265">"إيقاف"</string>
- <string name="credentials_title" msgid="7535942196886123656">"تخزين بيانات الاعتماد"</string>
+ <string name="credentials_title" msgid="7535942196886123656">"وحدة تخزين بيانات الاعتماد"</string>
<string name="credentials_install" msgid="3933218407598415827">"تثبيت شهادة"</string>
<string name="credentials_install_summary" product="nosdcard" msgid="6644116499934553975">"تثبيت الشهادات من وحدة تخزين"</string>
<string name="credentials_install_summary" product="default" msgid="8161351950524166012">"تثبيت الشهادات من بطاقة SD"</string>
@@ -3407,7 +3408,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"الاتصال بـ <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"هل تريد قطع الاتصال بهذه الشبكة الافتراضية الخاصة (VPN)؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"قطع الاتصال"</string>
- <string name="vpn_version" msgid="41856553718304367">"الإصدار <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"نسيان الشبكة الافتراضية الخاصة"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"هل تريد استبدال الشبكة الافتراضية الخاصة الحالية؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"هل تريد تشغيل الشبكة الافتراضية الخاصة باستمرار؟"</string>
@@ -5804,12 +5806,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ضغطة طويلة"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"إظهار المحفظة"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"السماح بالوصول إلى المحفظة من شاشة القفل والإعدادات السريعة"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"إظهار الماسح الضوئي لرمز الاستجابة السريعة"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"السماح بالوصول إلى الماسح الضوئي لرمز الاستجابة السريعة من شاشة القفل"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"إظهار عناصر التحكّم في الجهاز"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"يمكنك الوصول إلى عناصر التحكّم عندما تكون الشاشة مُقفَلة."</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"إظهار الساعة بخطين عندما تكون متاحة."</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ساعة بخطين"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5838,7 +5840,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"غير مفعّلة"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"الإنترنت"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"شرائح SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"البحث عن شبكات Wi‑Fi والاتصال بها"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"وضع الطيران، آمنة في وضع الطيران"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"المكالمات والرسائل القصيرة SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"الاتصال عبر Wi-Fi"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 8c7b268..7d889d7 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ৱাই-ফাইৰ জৰিয়তে কল কৰক। ৱাই-ফাই সংযোগ হেৰালে কল সমাপ্ত হ’ব।"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"ৱাই-ফাই কলিং অন হৈ থকাৰ সময়ত, আপোনাৰ অগ্ৰাধিকাৰ অনুসৰি আৰু ছিগনেলৰ ক্ষমতাক ভিত্তি কৰি, আপোনাৰ ফ’নটোৱে ৱাই-ফাই নেটৱৰ্ক বা আপোনাৰ বাহকৰ নেটৱৰ্কৰ যোগেদি কলবোৰ পঠিয়াব পাৰে৷ এই সুবিধাটো অন কৰাৰ পূৰ্বে, মাছুল আৰু অন্যান্য সবিশেষ জানিবলৈ আপোনাৰ বাহকৰ সৈতে সম্পৰ্ক কৰক৷<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"জৰূৰীকালীন ঠিকনা"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"আপুনি ৱাই-ফাইৰ জৰিয়তে জৰুৰীকালীন কল কৰাৰ সময়ত আপোনাৰ অৱস্থান হিচাপে ব্যৱহাৰ কৰা হৈছে"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ব্যক্তিগত ডিএনএছ সুবিধাসমূহৰ বিষয়ে "<annotation id="url">"অধিক জানক"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"অন আছে"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"খুলিবলৈ ভলিউম কীসমূহ টিপি ধৰি থাকক"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"খুলিবলৈ স্ক্ৰীনখনত তিনিবাৰ টিপক"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"খুলিবলৈ ভংগিমা ব্যৱহাৰ কৰক"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"সাধ্য সুবিধাৰ নতুন ভংগিমা ব্যৱহাৰ কৰক"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"সাধ্য সুবিধাৰ নিৰ্দেশ ব্যৱহাৰ কৰক"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ, আপোনাৰ স্ক্রীনখনৰ একেবাৰে তলৰ অংশত থকা সাধ্য-সুবিধাৰ বুটামটোত <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> টিপক।\n\nসুবিধাসমূহ সালসলনিকৈ ব্যৱহাৰ কৰিবলৈ সাধ্য-সুবিধাৰ বুটামটো স্পৰ্শ কৰি ধৰি ৰাখক।"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ আপোনাৰ স্ক্ৰীনত থকা সাধ্য-সুবিধাৰ বুটামটোত টিপক।"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ, দুয়োটা ভলিউম কী টিপি ধৰি ৰাখক।"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g>ৰ সৈতে সংযোগ কৰক"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"এই ভিপিএনটোৰ সৈতে সংযোগ বিচ্ছিন্ন কৰিবনে?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"সংযোগ বিচ্ছিন্ন কৰক"</string>
- <string name="vpn_version" msgid="41856553718304367">"সংস্কৰণ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"ভিপিএন পাহৰক"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"পূৰ্বৰ ভিপিএনটো সলনি কৰেনে?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ভিপিএনক যিকোনো সময়ত অন থকা অবস্থাত ছেট কৰিবনে?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"দীঘলীয়া"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"ৱালেট দেখুৱাওক"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"লক স্ক্ৰীন আৰু ক্ষিপ্ৰ ছেটিঙৰ পৰা ৱালেটৰ এক্সেছ দিয়ক"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"কিউআৰ ক’ড স্কেনাৰ দেখুৱাওক"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"লক স্ক্ৰীনৰ পৰা কিউআৰ ক’ড স্কেনাৰৰ এক্সেছ দিয়ক"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ডিভাইচৰ নিয়ন্ত্ৰণ দেখুৱাওক"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"লক কৰি থোৱা অৱস্থাত নিয়ন্ত্ৰণ এক্সেছ কৰক"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"যেতিয়া উপলব্ধ হয় দ্বৈত-শাৰীৰ ঘড়ী দেখুৱাব"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"দ্বৈত-শাৰীৰ ঘড়ী"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"অফ আছে"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ইণ্টাৰনেট"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ছিম"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ৱাই-ফাই নেটৱৰ্ক বিচাৰক আৰু তাত সংযোগ কৰক"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"এয়াৰপ্লেন, এয়াৰপ্লেন-সুৰক্ষিত"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"কল আৰু এছএমএছ"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"ৱাই-ফাই কলিং"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 9229305..29993c9 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi ilə zəng edin. Wi‑Fi itsə, zəng sonlandırılacaq."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi zəngi aktiv olan zaman tərcihinizdən və siqnalın gücündən asılı olaraq telefon zəngləri Wi-Fi və ya mobil şəbəkə ilə yönləndirə bilər. Bu funksiyanı aktiv etməzdən əvvəl operator tarifləri və digər məlumatları öyrənin. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Fövqəladə Ünvan"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi vasitəilə təcili zəng etdiyiniz zaman məkanınız kimi istidafə edilir"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Fərdi DNS funksiyaları haqqında "<annotation id="url">"ətraflı məlumat"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aktiv"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Açmaq üçün səs düymələrini basıb saxlayın"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Açmaq üçün ekrana üç dəfə toxunun"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Açmaq üçün jestdən istifadə edin"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Yeni əlçatımlılıq jestindən istifadə edin"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Əlçatımlılıq jestindən istifadə edin"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Bu funksiyanı işlətmək üçün ekranın altındakı xüsusi imkanlar düyməsinə <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> toxunun.\n\nFunksiyadan funksiyaya keçmək üçün xüsusi imkanlar düyməsinə toxunub saxlayın."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Bu funksiyanı işlətmək üçün xüsusi imkanlar düyməsinə toxunun."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Bu funksiyanı istifadə etmək üçün hər iki səs düyməsini basıb saxlayın."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> profilinə qoşulun"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN bağlantısı kəsilsin?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Bağlantını kəsin"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versiya <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN\'i unudun"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mövcud VPN əvəz edilsin?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Hər zaman aktiv VPN quraşdırılsın?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Uzun"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Pulqabını göstərin"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Kilid ekranından və sürətli ayarlardan pulqabına girişə icazə verin"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR Kodu Skanerini göstərin"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Kilid ekranından QR kod skanerinə girişə icazə verin"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Cihaz nizamlayıcılarını göstərin"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Kilidli olduqda nizamlayıcılara giriş edin"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Əlçatan olduqda ikisətirli saatı göstərin"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"İkisətirli saat"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Deaktiv"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"İnternet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-lər"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi şəbəkələrini tapın və qoşulun"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"təyyarə, güvənli təyyarə şəbəkəsi"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Zənglər və SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi zəngi"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index e79105e..e6f08c2 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -1253,7 +1253,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Pozivanje preko WiFi-a. Ako se Wi‑Fi veza izgubi, poziv će se završiti."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kada je pozivanje preko WiFi-a uključeno, telefon može da preusmerava pozive preko WiFi mreža ili mreže mobilnog operatera u zavisnosti od toga koje ste podešavanje izabrali i koji signal je jači. Pre nego što uključite ovu funkciju, informišite se kod mobilnog operatera o naknadama i drugim detaljima.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresa za hitne slučajeve"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Koristi se kao vaša lokacija kada uputite hitni poziv pomoću WiFi-a"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saznajte više"</annotation>" o funkcijama Privatnog DNS-a"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Uključeno"</string>
@@ -2346,7 +2347,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Zadržite tastere za jačinu zvuka da biste otvorili"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triput dodirnite ekran da biste otvorili"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otvarajte pomoću pokreta"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Koristite novi pokret za pristupačnost"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Koristite pokret za pristupačnost"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Da biste koristili ovu funkciju, dodirnite dugme Pristupačnost <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> u dnu ekrana.\n\nDa biste prelazili sa jedne funkcije na drugu, dodirnite i zadržite dugme Pristupačnost."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Da biste koristili ovu funkciju, dodirnite dugme Pristupačnost na ekranu."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Da biste koristili ovu funkciju, pritisnite i zadržite oba tastera za jačinu zvuka."</string>
@@ -3287,7 +3288,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Povezivanje na profil <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Želite li da prekinete vezu sa ovim VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li da zamenite postojeći VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li da podesite uvek uključeni VPN?"</string>
@@ -5537,12 +5539,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dugo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Prikaži novčanik"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Dozvolite pristup novčaniku sa zaključanog ekrana i iz brzih podešavanja"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Prikaži skener QR koda"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Dozvoljava pristup skeneru QR koda sa zaključanog ekrana"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Prikaži kontrole uređaja"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Pristupite kontrolama kada je ekran zaključan"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Prikazuje dvolinijski sat kada je dostupan"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Dvolinijski sat"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5571,7 +5573,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Isključeno"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM kartice"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Pronađite WiFi mreže i povežite se sa njima"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avion, bezbedno po avion"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Pozivi i SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Pozivanje preko WiFi-a"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index edd8bf1..2f1fafd 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -1275,7 +1275,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Выклікайце праз Wi‑Fi. Калі сігналу Wi‑Fi няма, выклік завяршаецца."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Калі ўключана Wi-Fi-тэлефанія, ваш тэлефон можа накіроўваць выклікі праз сеткі Wi-Fi або сетку вашага аператара, у залежнасці ад вашых налад і таго, які сігнал мацнейшы. Перад уключэннем гэтай функцыі спытайце ў вашага аператара наконт аплаты і запытайце іншую падрабязную інфармацыю.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Экстранны адрас"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Выкарыстоўваецца як ваша месцазнаходжанне, калі вы робіце экстранны выклік праз Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Дадатковыя звесткі"</annotation>" аб функцыях Прыватнай DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Уключана"</string>
@@ -2372,7 +2373,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Каб адкрыць, утрымлівайце клавішы гучнасці"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Каб адкрыць, тройчы націсніце на экран"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Адкрывайце жэстам"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Выкарыстоўвайце новы жэст спецыяльных магчымасцей"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Скарыстаць жэст спецыяльных магчымасцей"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Каб скарыстаць гэту функцыю, націсніце кнопку спецыяльных магчымасцей <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> унізе экрана.\n\nКаб пераключыцца на іншую функцыю, утрымлівайце кнопку спецыяльных магчымасцей націснутай."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Каб выкарыстоўваць гэту функцыю, націсніце на экране кнопку спецыяльных магчымасцей."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Каб скарыстаць гэту функцыю, націсніце і ўтрымлівайце абедзве клавішы гучнасці."</string>
@@ -3329,7 +3330,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Падключэнне да профiлю <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Адключыць гэту VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Адключыць"</string>
- <string name="vpn_version" msgid="41856553718304367">"Версія <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Забыць VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Замяніць існуючую VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Наладзіць заўсёды ўключаную VPN?"</string>
@@ -5628,12 +5630,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Доўга"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Паказ кашалька"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Дазволіць доступ да кашалька з заблакіраванага экрана і хуткіх налад"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Паказваць сканер QR-кодаў"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Дазволіць доступ да сканера QR-кодаў з экрана блакіроўкі"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Паказ элементаў кіравання прыладай"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Доступ да элементаў кіравання пры заблакіраваным экране"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Паказваць двухрадковы дысплэй гадзінніка, калі ён даступны"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Двухрадковы дысплэй гадзінніка"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5662,7 +5664,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Выключана"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Інтэрнэт"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-карты"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Знайсці сеткі Wi-Fi і падключыцца"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"самалёт, бяспека ў самалёце"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Выклікі і SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-тэлефанія"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index aa295d1..cb3dfd9 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Обаждане през Wi‑Fi. Ако връзката прекъсне, обаждането ще завърши."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Когато функцията „Обаждания през Wi-Fi“ е включена, телефонът ви може да маршрутизира обажданията през Wi-Fi или мрежата за мобилни данни на оператора ви в зависимост от предпочитанието ви и това, кой сигнал е по-силен. Преди да я включите, обърнете се към оператора си относно таксите и други подробности. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Адрес за спешни случаи"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Използва се като вашето местоположение, когато извършвате спешно обаждане през Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Научете повече"</annotation>" за функциите на частния DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Включено"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"За отваряне натиснете бутоните за силата на звука"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Трикратно докосване на екрана с цел отваряне"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Отваряне с жест"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Използване на новите жестове за достъпност"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Използване на жеста за достъпност"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"За да използвате тази функция, докоснете бутона за достъпност <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> в долната част на екрана.\n\nДокоснете и задръжте този бутон и за превключване между функциите."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"За да използвате тази функция, докоснете бутона за достъпност на екрана."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"За да използвате тази функция, натиснете и задръжте двата бутона за силата на звука."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Свързване със: <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Да се прекрати ли връзката с тази виртуална частна мрежа (VPN)?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекратяване на връзката"</string>
- <string name="vpn_version" msgid="41856553718304367">"Версия <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Забравяне на вирт. частна мрежа (VPN)"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Да се замени ли съществуващата VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Да се зададе ли винаги включена виртуална частна мрежа (VPN)?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Продължително"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Показване на портфейла"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Разрешаване на достъп до портфейла от заключения екран и от бързите настройки"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Показване на инструмента за сканиране на QR кодове"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Разрешаване на достъп до инструмента за сканиране на QR кодове от заключения екран"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Показване на контролите за устройството"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Достъп до контролите при заключен екран"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Показване на часовника с двойна линия, когато е налице"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Часовник с двойна линия"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Изкл."</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM карти"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Намиране на Wi‑Fi мрежи и свързване с тях"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"самолет, безопасно за използване по време на полет"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Обаждания и SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Обаждания през Wi-Fi"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index be96b31..0cb1156 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ওয়াই-ফাইয়ের মাধ্যমে কল করুন। ওয়াই-ফাই বিঘ্নিত হলে, কল বন্ধ হয়ে যাবে।"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi কলিং চালু থাকার সময়ে, আপনার পছন্দ এবং কোন সিগন্যাল বেশি শক্তিশালী তার উপর নির্ভর করে আপনার ফোন ওয়াই-ফাই নেটওয়ার্ক বা আপনার পরিষেবা প্রদানকারীর নেটওয়ার্কের মাধ্যমে আপনার কলের রুট তৈরি করে। এই বৈশিষ্ট্যটি চালু করার আগে, আপনার পরিষেবা প্রদানকারীর থেকে ফি এবং অন্যান্য বিষয় সম্বন্ধে জেনে নিন।<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"জরুরি ঠিকানা"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ওয়াই-ফাই নেটওয়ার্ক ব্যবহার করে জরুরি কল করার সময় আপনার লোকেশন হিসেবে ব্যবহার করা হয়"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ব্যক্তিগত ডিএনএস বৈশিষ্ট্যের বিষয়ে "<annotation id="url">"আরও জানুন"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"চালু আছে"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"খোলার জন্য ভলিউম কী প্রেস করে ধরে থাকুন"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"খুলতে স্ক্রিনে ট্রিপল ট্যাপ করুন"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ইঙ্গিতের মাধ্যমে খোলা"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"নতুন অ্যাক্সেসিবিলিটি ইঙ্গিত ব্যবহার করা"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"\'অ্যাক্সেসিবিলিটি\' জেসচার ব্যবহার করুন"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"এই ফিচারটি ব্যবহার করার জন্য, স্ক্রিনের নিচের দিকের অ্যাক্সেসিবিলিটি বোতামে <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ট্যাপ করুন।\n\nএকটি ফিচার থেকে অন্যটিতে যেতে, অ্যাক্সেসিবিলিটি বোতাম টাচ করে ধরে থাকুন।"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"এই ফিচার ব্যবহার করতে, আপনার স্ক্রিনে অ্যাক্সেসিবিলিটি বোতাম ট্যাপ করুন।"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"এই ফিচার ব্যবহার করার জন্য, উভয় ভলিউম কী প্রেস করে ধরে থাকুন।"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> এতে কানেক্ট করুন"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"এই VPN থেকে ডিসকানেক্ট করবেন?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ডিসকানেক্ট করুন"</string>
- <string name="vpn_version" msgid="41856553718304367">"ভার্সন <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN সরিয়ে দিন"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"বিদ্যমান VPN প্রতিস্থাপন করতে চান?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"সর্বদা-চালু VPN সেট করতে চান?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"দীর্ঘ সময়ের জন্য"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"ওয়ালেট দেখুন"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"লক স্ক্রিন এবং দ্রুত সেটিংস থেকে ওয়ালেটে অ্যাক্সেসের অনুরোধ করুন"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR কোড স্ক্যানার দেখুন"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"লক স্ক্রিন থেকে QR কোড স্ক্যানার অ্যাক্সেস করার অনুমতি দিন"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ডিভাইস কন্ট্রোল দেখুন"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"লক থাকাকালীন কন্ট্রোল অ্যাক্সেস করুন"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ডবল-লাইন ঘড়ি উপলভ্য থাকলে তা দেখান"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ডবল-লাইন ঘড়ি"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"বন্ধ আছে"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ইন্টারনেট"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"সিম"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ওয়াই-ফাই নেটওয়ার্ক খুঁজে তার সাথে কানেক্ট করুন"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"বিমান, বিমান-সুরক্ষা"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"কল ও এসএমএস"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi কলিং"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 8f55a4f..c774625 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -1253,7 +1253,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Pozivanje putem WiFi-ja. Ako se izgubi WiFi, poziv će se prekinuti."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kada je opcija Pozivanje putem WiFi-ja uključena, telefon može preusmjeravati pozive putem WiFi mreža ili mreže vašeg operatera, u zavisnosti od toga kakve su vaše postavke i koji signal je jači. Prije nego što uključite ovu funkciju, raspitajte se o naknadi i drugim informacijama kod operatera.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresa za hitne slučajeve"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Koristi se kao vaša lokacija prilikom hitnog poziva putem Wi‑Fi mreže"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saznajte više"</annotation>" o funkcijama privatnog DNS-a"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Uključeno"</string>
@@ -2346,7 +2347,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Držite tipke za jačinu zvuka da otvorite"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triput dodirnite ekran da otvorite"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otvorite pokretom"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Koristite novi pokret za pristupačnost"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Korištenje pokreta za pristupačnost"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Da koristite ovu funkciju, dodirnite dugme Pristupačnost <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> na dnu ekrana.\n\nDa prebacujete između funkcija, dodirnite i zadržite dugme Pristupačnost."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Da koristite ovu funkciju, dodirnite dugme za pristupačnost na ekranu."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Da koristite ovu funkciju, pritisnite i držite obje tipke za jačinu zvuka."</string>
@@ -3287,7 +3288,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Poveži se na <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Želite li prekinuti vezu s ovim VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li zamijeniti postojeći VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li postaviti uvijek uključen VPN?"</string>
@@ -5537,12 +5539,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dugo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Prikaži novčanik"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Dozvolite pristup novčaniku sa zaključanog ekrana i iz brzih postavki"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Prikaži skener QR kôda"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Dozvolite pristup skeneru QR kôda sa zaključanog ekrana"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Prikaži kontrole uređaja"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Pristupajte kontrolama kada je uređaj zaključan"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Prikaži dvolinijski sat kada je dostupan"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Dvolinijski sat"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5571,7 +5573,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Isključeno"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-ovi"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Pronađite WiFi mreže i povežite se s njima"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avion, sigurno za rad u avionu"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Pozivi i SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Pozivanje putem WiFi-ja"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index b055578..c322155 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Trucades per Wi‑Fi. Si perds la connexió, la trucada finalitzarà."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Quan la funció Trucades per Wi‑Fi està activada, el telèfon pot encaminar trucades a través de xarxes Wi‑Fi o de la xarxa de l\'operador de telefonia mòbil, segons la teva preferència i la intensitat del senyal. Abans d\'activar aquesta funció, contacta amb l\'operador per saber si hi ha cap càrrec i obtenir més informació.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adreça d\'emergència"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"S\'utilitza com la teva ubicació si fas una trucada d\'emergència per Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Més informació"</annotation>" sobre les funcions de DNS privat"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activat"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Per obrir, mantén premudes les tecles de volum"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Per obrir, fes tres tocs a la pantalla"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Utilitza un gest per obrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Utilitza un nou gest d\'accessibilitat"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Utilitza el gest d\'accessibilitat"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Per utilitzar aquesta funció, toca el botó d\'accessibilitat <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> a la part inferior de la pantalla.\n\nPer canviar entre funcions, mantén premut el botó d\'accessibilitat."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Per utilitzar aquesta funció, toca el botó d\'accessibilitat en pantalla."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Per utilitzar aquesta funció, mantén premudes les dues tecles de volum."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connexió amb <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vols desconnectar aquesta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconnecta"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versió <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Oblida la VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vols substituir la VPN actual?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vols definir la VPN sempre activa?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Llarg"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostra la cartera"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permet l\'accés a la cartera des de la pantalla de bloqueig i la configuració ràpida"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostra l\'escàner de codis QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permet l\'accés a l\'escàner de codis QR des de la pantalla de bloqueig"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostra el control de dispositius"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accedeix als controls quan estigui bloquejat"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostra el rellotge de doble línia quan estigui disponible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Rellotge de doble línia"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desactivat"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Targetes SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Cerca xarxes Wi‑Fi i connecta-t\'hi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"mode d\'avió, segur per al mode d\'avió"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Trucades i SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Trucades per Wi‑Fi"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c4defa2..7cbd786 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -1273,7 +1273,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Volání přes Wi‑Fi. Pokud bude signál Wi-Fi ztracen, hovor skončí."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Je-li zapnuto volání přes Wi-Fi, telefon může hovory v závislosti na zadaných nastaveních a na tom, který signál je silnější, směrovat přes sítě Wi-Fi nebo přes sítě operátora. Než tuto funkci zapnete, zeptejte se operátora na možné poplatky a další podrobnosti.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Nouzová adresa"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Použije se jako vaše poloha, pokud uskutečníte tísňové volání přes Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Další informace"</annotation>" o funkcích soukromého režimu DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Zapnuto"</string>
@@ -2370,7 +2371,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Otevřete podržením tlačítek hlasitosti"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Otevřete trojitým klepnutím na obrazovku"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otevření gestem"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Použití nového gesta pro usnadnění přístupu"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Použití gesta přístupnosti"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Tuto funkci použijete klepnutím na tlačítko Přístupnost <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> v dolní části obrazovky.\n\nChcete-li přepnout mezi funkcemi, tlačítko Přístupnost podržte."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Pokud chcete použít tuto funkci, klepněte na tlačítko přístupnosti."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Tuto funkci použijete tak, že stisknete a podržíte obě tlačítka hlasitosti."</string>
@@ -3327,7 +3328,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Připojit k profilu <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odpojit tuto síť VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odpojit"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verze <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zapomenout VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Nahradit stávající síť VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nastavit trvalou síť VPN?"</string>
@@ -5626,12 +5628,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dlouhé"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Zobrazit peněženku"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Povolit přístup k peněžence z obrazovky uzamčení a rychlého nastavení"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Zobrazit čtečku QR kódů"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Povolit přístup ke čtečce QR kódů na obrazovce uzamčení"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Zobrazit ovládací prvky zařízení"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Přístup k ovládání při uzamčení"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Zobrazovat hodiny na dva řádky, je-li to možné"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Hodiny na dva řádky"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5660,7 +5662,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Vypnuto"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM karty"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Vyhledávat sítě Wi‑Fi a připojovat se k nim"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"letadlo, bezpečné v letadle"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Volání a SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Volání přes Wi-Fi"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 1d5fded..0a97933 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Ring via Wi‑Fi. Opkaldet afsluttes, hvis Wi-Fi-forbindelsen afbrydes."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Når Wi-Fi-opkald er slået til, kan enheden dirigere opkald via Wi-Fi-netværk eller dit mobilselskabs netværk, afhængigt af hvad du foretrækker, og hvor signalet er stærkest. Før du slår denne funktion til, skal du kontakte dit mobilselskab angående gebyrer og andre oplysninger.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresse til nødstilfælde"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Anvendes som din lokation, hvis du foretager et nødopkald via Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Få flere oplysninger"</annotation>" om private DNS-funktioner"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Til"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold lydstyrkeknapperne inde for at åbne"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Tryk tre gange på skærmen for at åbne"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Brug en bevægelse til at åbne"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Brug den nye bevægelse for hjælpefunktioner"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Brug bevægelsen for hjælpefunktioner"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Tryk på knappen Hjælpefunktioner <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> nederst på skærmen for at bruge denne funktion.\n\nDu kan skifte mellem funktioner ved at holde knappen Hjælpefunktioner nede."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Tryk på knappen Hjælpefunktioner på din skærm for at bruge denne funktion."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Hold begge lydstyrkeknapper inde for at bruge denne funktion."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Opret forbindelse til <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vil du afbryde dette VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Afbryd"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Glem VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Erstat det eksisterende VPN-netværk?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vil du konfigurere konstant VPN?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Langt"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Vis Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Tillad adgang til Wallet fra låseskærmen og kvikmenuen"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Vis QR-kodescanneren"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Giv adgang til QR-kodescanneren via låseskærmen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Vis enhedsstyring"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Få adgang til styring, selvom enheden er låst"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Vis uret med to linjer, når det er tilgængeligt"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Ur med to linjer"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Fra"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kort"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find og opret forbindelse til Wi-Fi-netværk"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"fly, sikkert netværk i fly"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Opkald og sms-beskeder"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-opkald"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 81e53a6..ca77046 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -1236,7 +1236,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Anruf über WLAN. Bei Abbruch der WLAN-Verbindung endet der Anruf."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wenn die Option „WLAN-Telefonie“ aktiviert ist, kann dein Smartphone abhängig von deiner Einstellung und von der Signalstärke Anrufe über WLANs oder über das Netz deines Mobilfunkanbieters übertragen. Bevor du diese Funktion aktivierst, solltest du dich bei deinem Mobilfunkanbieter nach den hierfür anfallenden Gebühren und anderen Voraussetzungen erkundigen.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Notfalladresse"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wird als dein Standort verwendet, wenn du einen Notruf über WLAN tätigst"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Weitere Informationen zu privaten DNS-Funktionen"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"An"</string>
@@ -2325,7 +2326,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Zum Öffnen die Lautstärketasten gedrückt halten"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Zum Öffnen dreimal auf das Display tippen"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Zum Öffnen Touch-Geste verwenden"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Neue Touch-Geste für Bedienungshilfen verwenden"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Touch-Geste für Bedienungshilfen verwenden"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Wenn du diese Funktion verwenden möchtest, tippe unten auf dem Display auf die Schaltfläche \"Bedienungshilfen\" <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nWenn du zwischen den Funktionen wechseln möchtest, halte diese Schaltfläche gedrückt."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Tippe zum Verwenden dieser Funktion auf dem Display auf die Schaltfläche „Bedienungshilfen“."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Wenn du diese Funktion verwenden möchtest, halte beide Lautstärketasten gedrückt."</string>
@@ -2687,7 +2688,7 @@
<string name="battery_tip_high_usage_title" msgid="9110720762506146697">"Höhere Akkunutzung"</string>
<string name="battery_tip_high_usage_summary" msgid="3938999581403084551">"Apps mit der höchsten Nutzung anzeigen"</string>
<string name="battery_tip_limited_temporarily_title" msgid="5231061779363606924">"Aufladen vorübergehend eingeschränkt"</string>
- <string name="battery_tip_limited_temporarily_summary" msgid="8504402301403419444">"Dadurch wird der Akku geschont. Weitere Informationen"</string>
+ <string name="battery_tip_limited_temporarily_summary" msgid="8504402301403419444">"Dadurch wird der Akku geschont. \\nWeitere Informationen"</string>
<string name="battery_tip_limited_temporarily_dialog_resume_charge" msgid="2302295458913832342">"Ladevorgang fortsetzen"</string>
<string name="battery_tip_limited_temporarily_dialog_msg" product="default" msgid="8125639486214812735">"Unter bestimmten Umständen, z. B. bei hohen Temperaturen und langen Ladezeiten, kann die Ladung auf <xliff:g id="PERCENT">%1$s</xliff:g> begrenzt werden, um den Akku zu schonen.\n\nSobald sich diese Umstände ändern, wird dein Smartphone wieder normal aufgeladen."</string>
<string name="battery_tip_limited_temporarily_dialog_msg" product="tablet" msgid="3890877885222574553">"Unter bestimmten Umständen, z. B. bei hohen Temperaturen und langen Ladezeiten, kann die Ladung auf <xliff:g id="PERCENT">%1$s</xliff:g> begrenzt werden, um den Akku zu schonen.\n\nSobald sich diese Umstände ändern, wird dein Tablet wieder normal aufgeladen."</string>
@@ -3250,7 +3251,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Mit <xliff:g id="PROFILE">%s</xliff:g> verbinden"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Verbindung zu diesem VPN trennen?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Verbindung trennen"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN entfernen"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Aktuelles VPN ersetzen?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Durchgehend aktives VPN aktivieren?"</string>
@@ -5451,12 +5453,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lang"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Geldbörse anzeigen"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Zugriff auf Geldbörse aus Sperrbildschirm und Schnelleinstellungen erlauben"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR-Code-Scanner anzeigen"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Zugriff auf QR-Code-Scanner vom Sperrbildschirm aus zulassen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Gerätesteuerung anzeigen"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Zugriffssteuerung bei Sperre"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Uhr in zwei Zeilen anzeigen, wenn verfügbar"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Uhr in zwei Zeilen"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5485,7 +5487,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Aus"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-Karten"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"WLAN suchen und eine Verbindung herstellen"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"Flug, Flugzeug, flugsicher"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Anrufe & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"WLAN-Telefonie"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 60ba9c5..dab3992 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Κλήση μέσω Wi‑Fi. Εάν χαθεί η σύνδεση Wi‑Fi, η κλήση τερματίζεται."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Όταν η Κλήση Wi-Fi είναι ενεργή, το τηλέφωνό σας μπορεί να δρομολογήσει κλήσεις μέσω δικτύων Wi-Fi ή του δικτύου της εταιρείας κινητής τηλεφωνίας σας, ανάλογα με την προτίμησή σας και την ισχύ του κάθε σήματος. Προτού ενεργοποιήσετε αυτήν τη λειτουργία, επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας σχετικά με χρεώσεις και άλλες λεπτομέρειες.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Διεύθυνση έκτακτης ανάγκης"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Χρήση ως τοποθεσίας σας όταν πραγματοποιείτε κλήση έκτακτης ανάγκης μέσω Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Περισσότερα"</annotation>" σχετικά με τις λειτουργίες Ιδιωτικού DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Ενεργό"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Παρατεταμένο πάτημα πλήκτρων έντασης για άνοιγμα"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Πατήστε τρεις φορές για να ανοίξει η οθόνη"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Χρήση κίνησης για άνοιγμα"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Χρήση της νέας κίνησης προσβασιμότητας"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Χρήση κίνησης προσβασιμότητας"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Για να χρησιμοποιήσετε αυτήν τη λειτουργία, πατήστε το κουμπί προσβασιμότητας <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> στο κάτω μέρος της οθόνης.\n\nΓια εναλλαγή μεταξύ λειτουργιών, αγγίξτε παρατεταμένα το κουμπί προσβασιμότητας."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Για να χρησιμοποιήσετε αυτήν τη λειτουργία, πατήστε το κουμπί προσβασιμότητας στην οθόνη σας."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Για να χρησιμοποιήσετε αυτήν τη λειτουργία, πιέστε παρατεταμένα και τα δύο πλήκτρα έντασης ήχου."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Σύνδεση στο προφίλ <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Να αποσυνδεθεί αυτό το VPN;"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Αποσύνδεση"</string>
- <string name="vpn_version" msgid="41856553718304367">"Έκδοση <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Διαγραφή VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Αντικατάσταση υπάρχοντος VPN;"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ενεργοποίηση του μονίμως ενεργού VPN;"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Μεγάλη"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Εμφάνιση πορτοφολιού"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Επιτρέψτε την πρόσβαση στο πορτοφόλι από την οθόνη κλειδώματος και τις γρήγορες ρυθμίσεις"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Εμφάνιση Σάρωσης κωδικών QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Να επιτρέπεται η πρόσβαση στη Σάρωση κωδικών QR από την οθόνη κλειδώματος"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Εμφάνιση στοιχείων ελέγχου συσκευής"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Πρόσβαση στα στοιχεία ελέγχου κατά το κλείδωμα"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Εμφάνιση ρολογιού διπλής γραμμής όταν είναι διαθέσιμο"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Ρολόι διπλής γραμμής"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Ανενεργή"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Διαδίκτυο"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Κάρτες SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Εύρεση και σύνδεση σε δίκτυα Wi‑Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"πτήση, ασφαλή για την πτήση"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Κλήσεις και SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Κλήση Wi-Fi"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 1178863..ba62230 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your mobile’s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your operator regarding fees and other details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Emergency Address"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Used as your location when you make an emergency call over Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Learn more"</annotation>" about Private DNS features"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold volume keys to open"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triple-tap screen to open"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Use gesture to open"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Use new accessibility gesture"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Use accessibility gesture"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"To use this feature, tap the accessibility button <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch and hold the accessibility button."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"To use this feature, tap the Accessibility button on your screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"To use this feature, press and hold both volume keys."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connect to <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Allow access to QR code scanner from lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Show device controls"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Access controls when locked"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Show double-line clock when available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Double-line clock"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find and connect to Wi‑Fi networks"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aeroplane, aeroplane-safe"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Calls and SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi calling"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 3b4d2a0..19b6140 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your mobile’s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your operator regarding fees and other details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Emergency Address"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Used as your location when you make an emergency call over Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Learn more"</annotation>" about Private DNS features"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold volume keys to open"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triple-tap screen to open"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Use gesture to open"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Use new accessibility gesture"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Use accessibility gesture"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"To use this feature, tap the accessibility button <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch and hold the accessibility button."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"To use this feature, tap the Accessibility button on your screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"To use this feature, press and hold both volume keys."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connect to <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Allow access to QR code scanner from lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Show device controls"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Access controls when locked"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Show double-line clock when available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Double-line clock"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find and connect to Wi‑Fi networks"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aeroplane, aeroplane-safe"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Calls and SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi calling"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index ca7c66a..61f13cf 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your mobile’s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your operator regarding fees and other details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Emergency Address"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Used as your location when you make an emergency call over Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Learn more"</annotation>" about Private DNS features"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold volume keys to open"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triple-tap screen to open"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Use gesture to open"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Use new accessibility gesture"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Use accessibility gesture"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"To use this feature, tap the accessibility button <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch and hold the accessibility button."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"To use this feature, tap the Accessibility button on your screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"To use this feature, press and hold both volume keys."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connect to <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Allow access to QR code scanner from lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Show device controls"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Access controls when locked"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Show double-line clock when available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Double-line clock"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find and connect to Wi‑Fi networks"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aeroplane, aeroplane-safe"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Calls and SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi calling"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2c99062..9296cc0 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your mobile’s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your operator regarding fees and other details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Emergency Address"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Used as your location when you make an emergency call over Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Learn more"</annotation>" about Private DNS features"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold volume keys to open"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triple-tap screen to open"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Use gesture to open"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Use new accessibility gesture"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Use accessibility gesture"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"To use this feature, tap the accessibility button <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch and hold the accessibility button."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"To use this feature, tap the Accessibility button on your screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"To use this feature, press and hold both volume keys."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connect to <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Allow access to QR code scanner from lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Show device controls"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Access controls when locked"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Show double-line clock when available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Double-line clock"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find and connect to Wi‑Fi networks"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aeroplane, aeroplane-safe"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Calls and SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi calling"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 121556a..79e300d 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -1233,7 +1233,7 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"When Wi-Fi calling is on, your phone can route calls via Wi-Fi networks or your carrier’s network, depending on your preference and which signal is stronger. Before turning on this feature, check with your carrier regarding fees and other details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Emergency Address"</string>
+ <string name="emergency_address_title" msgid="8102786488994263815">"Emergency address"</string>
<string name="emergency_address_summary" msgid="3022628750270626473">"Used as your location when you make an emergency call over Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306">""<annotation id="url">"Learn more"</annotation>" about Private DNS features"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2322,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold volume keys to open"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triple tap screen to open"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Use gesture to open"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Use new accessibility gesture"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Use accessibility gesture"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"To use this feature, tap the accessibility button <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch & hold the accessibility button."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"To use this feature, tap the accessibility button on your screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"To use this feature, press & hold both volume keys."</string>
@@ -3247,7 +3247,7 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connect to <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <string name="vpn_version" msgid="6344167191984400976">"Version"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -5452,6 +5452,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Allow access to QR code scanner from lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Show device controls"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Access controls when locked"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Show double-line clock when available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Double-line clock"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5482,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Find and connect to Wi‑Fi networks"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"airplane, airplane-safe"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Calls & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi calling"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 62613b4..ed47580 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Llamar mediante Wi-Fi. La llamada finalizará si se pierde la conexión."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Si está activada la función Llamada por Wi-Fi, el teléfono podrá hacer llamadas mediante redes Wi-Fi o la red de tu proveedor, según la preferencia que hayas elegido y la señal que tenga más intensidad. Antes de activar esta función, verifica el costo y otros detalles con el proveedor.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Dirección de emergencia"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Se usa como tu ubicación cuando haces una llamada de emergencia mediante Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Más información"</annotation>" sobre las funciones de DNS privado"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activado"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantén presionadas teclas de volumen para abrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Presiona tres veces para abrir el servicio"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Usa el gesto para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usa el nuevo gesto de accesibilidad"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usa los gestos de accesibilidad"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para usar esta función, presiona el botón de accesibilidad <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ubicado en la parte inferior de la pantalla.\n\nSi quieres cambiar de función, mantén presionado el botón de accesibilidad."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para usar esta función, presiona el botón de accesibilidad en la pantalla."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para usar esta función, mantén presionadas las teclas de volumen."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"¿Deseas desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Borrar VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"¿Reemplazar VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"¿Configurar la VPN siempre activa?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Larga"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar billetera"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permite el acceso a la billetera desde la pantalla de bloqueo y la Configuración rápida"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar escáner de código QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permitir el acceso al escáner de código QR desde la pantalla de bloqueo"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles del dispositivo"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accede a los controles cuando el dispositivo está bloqueado"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostrar el reloj de dos líneas cuando esté disponible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Reloj de dos líneas"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desactivado"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Buscar redes Wi-Fi y conectarse a ellas"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avión, segura para aviones"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Llamadas y SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Llamada por Wi‑Fi"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b7dccc4..cffb9fa 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Llamar a través de Wi‑Fi. Si se pierde conexión, se cortará la llamada."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Si la función de llamada por Wi‑Fi está activada, el teléfono puede hacer llamadas a través de redes Wi‑Fi o de la red de tu operador, según la preferencia que hayas seleccionado y la señal que tenga más intensidad. Antes de activar esta función, consulta a tu operador las tarifas y otros detalles.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Dirección de emergencia"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Se utiliza como tu ubicación al hacer una llamada de emergencia por Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Más información"</annotation>" sobre las funciones de DNS privado"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activado"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantén pulsadas las teclas de volumen para abrirla"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Tocar tres veces la pantalla para abrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Usar gesto para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usa el nuevo gesto de accesibilidad"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usar gesto de accesibilidad"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para usar esta función, toca el botón de accesibilidad <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>, situado en la parte inferior de la pantalla.\n\nPara pasar de una función a otra, mantén pulsado el botón de accesibilidad."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para usar esta función, toca el botón Accesibilidad de la pantalla."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para usar esta función, mantén pulsadas las dos teclas de volumen."</string>
@@ -2966,8 +2967,8 @@
<string name="vpn_settings_multiple_insecure_multiple_total" msgid="1706236062478680488">"<xliff:g id="VPN_COUNT">%d</xliff:g> no son seguras"</string>
<string name="adaptive_connectivity_title" msgid="7464959640138428192">"Conectividad adaptativa"</string>
<string name="adaptive_connectivity_summary" msgid="3648731530666326885">"Alarga la duración de la batería y mejora el rendimiento del dispositivo gestionando automáticamente las conexiones de red"</string>
- <string name="adaptive_connectivity_switch_on" msgid="3653067561620745493">"Activar"</string>
- <string name="adaptive_connectivity_switch_off" msgid="5076172560836115265">"Desactivar"</string>
+ <string name="adaptive_connectivity_switch_on" msgid="3653067561620745493">"Activado"</string>
+ <string name="adaptive_connectivity_switch_off" msgid="5076172560836115265">"Desactivado"</string>
<string name="credentials_title" msgid="7535942196886123656">"Almacenamiento de credenciales"</string>
<string name="credentials_install" msgid="3933218407598415827">"Instalar certificados"</string>
<string name="credentials_install_summary" product="nosdcard" msgid="6644116499934553975">"Instala certificados desde el almacenamiento"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"¿Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Olvidar VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"¿Reemplazar VPN actual?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"¿Configurar el modo de VPN siempre activada?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Larga"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar cartera"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permite el acceso a la cartera desde la pantalla de bloqueo y los ajustes rápidos"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar escáner de códigos QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permitir el acceso al escáner de códigos QR desde la pantalla de bloqueo"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles del dispositivo"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accede a los controles con la pantalla bloqueada"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostrar el reloj analógico cuando esté disponible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Reloj analógico"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desactivado"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Buscar y conectarse a redes Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"modo avión, seguro para modo avión"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Llamadas y SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Llamadas por Wi-Fi"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index bf1be91..dba31de 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Helistage WiFi-võrgu kaudu. WiFi-ühenduse katkemisel kõne lõpeb."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kui WiFi-kõned on sisse lülitatud, saab telefon olenevalt eelistustest ja signaalitugevusest kõnesid marsruutida WiFi-võrkude või teie operaatori võrgu kaudu. Enne selle funktsiooni sisselülitamist uurige operaatorilt tasude ja muude üksikasjade kohta. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Hädaolukorra aadress"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Seda kasutatakse WiFi kaudu hädaabikõne tegemisel teie asukohana"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Lisateave"</annotation>" privaatse DNS-i funktsioonide kohta"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Sees"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Avamiseks hoidke helitugevuse klahve all"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Avamiseks puudutage ekraani kolm korda"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Kasutage avamiseks liigutust"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Kasutage uut juurdepääsetavuse liigutust"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Juurdepääsuliigutuse kasutamine"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Selle funktsiooni kasutamiseks puudutage ekraanikuva allosas juurdepääsetavuse nuppu <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nFunktsioonide vahel vahetamiseks puudutage juurdepääsetavuse nuppu pikalt."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Selle funktsiooni kasutamiseks puudutage ekraanikuval juurdepääsetavuse nuppu"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Selle funktsiooni kasutamiseks vajutage pikalt mõlemat helitugevuse klahvi."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Profiiliga <xliff:g id="PROFILE">%s</xliff:g> ühendamine"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Kas soovite katkestada ühenduse selle VPN-iga?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Katkesta ühendus"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versioon <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Unusta VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Kas asendada olemasolev VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Kas määrata alati sisselülitatud VPN?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Pikk"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Kuva rahakott"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Rahakotile juurdepääsu lubamine lukustuskuvalt ja kiirseadetest"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Kuva QR-koodi skanner"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Lubage lukustuskuval juurdepääs QR-koodi skannerile"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Kuva seadmete juhtimisvidinad"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Juurdepääs juhtimisvidinatele, kui seade on lukustatud"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Kuva kaherealine kell, kui see on saadaval"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Kaherealine kell"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Väljas"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-id"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"WiFi-võrkude otsimine ja nendega ühenduse loomine"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"lennuk, lennukikindel"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Kõned ja SMS-id"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"WiFi-kõned"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index a86ede1..46fb8e8 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Deitu wifi bidez. Wifi-konexioa galduz gero, eseki egingo da deia."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wifi bidezko deiak aktibatuta daudenean, telefonoak wifi-sareen bidez edo operadorearen sarearen bidez bidera ditzake deiak, zure hobespenen eta seinalearen sendotasunaren arabera. Eginbide hau aktibatu aurretik, eskatu tarifak eta bestelako informazioa operadoreari.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Larrialdietarako helbidea"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Kokapen gisa erabiliko da larrialdi-zerbitzuetara Wi-Fi bidez deituz gero"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Lortu informazio gehiago"</annotation>" DNS pribatuaren eginbideei buruz"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aktibatuta"</string>
@@ -1546,7 +1547,7 @@
<string name="memory_music_usage" msgid="8100634000114206429">"Audioa (musika, tonuak, podcastak eta abar)"</string>
<string name="memory_media_misc_usage" msgid="7066851245178533269">"Beste fitxategi batzuk"</string>
<string name="memory_media_cache_usage" msgid="780808666853685824">"Cachean gordetako datuak"</string>
- <string name="sd_eject" product="nosdcard" msgid="6136102589751843304">"Desmuntatu partekatutako memoria"</string>
+ <string name="sd_eject" product="nosdcard" msgid="6136102589751843304">"Desmuntatu biltegi partekatua"</string>
<string name="sd_eject" product="default" msgid="8062832622096296251">"Desmuntatu SD txartela"</string>
<string name="sd_eject_summary" product="nosdcard" msgid="6859940774161708871">"Desmuntatu barneko USB memoria"</string>
<string name="sd_eject_summary" product="default" msgid="5151243312587186226">"Desmuntatu SD txartela, kentzeko prest egon dadin"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Irekitzeko, eduki sakatuta bolumen-botoiak"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Irekitzeko, sakatu pantaila hiru aldiz"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Erabili keinua irekitzeko"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Erabili erabilerraztasun-keinu berria"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Erabili erabilerraztasun-keinua"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Eginbide hau erabiltzeko, sakatu pantailaren behealdeko <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> Erabilerraztasuna botoia.\n\nEginbide batetik bestera aldatzeko, eduki sakatuta Erabilerraztasuna botoia."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Eginbide hau erabiltzeko, sakatu pantailako Erabilerraztasuna botoia."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Eginbide hau erabiltzeko, eduki sakatuta bi bolumen-botoiak."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Konektatu <xliff:g id="PROFILE">%s</xliff:g> profilera"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"VPN saretik deskonektatu nahi duzu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Deskonektatu"</string>
- <string name="vpn_version" msgid="41856553718304367">"<xliff:g id="VERSION">%s</xliff:g> bertsioa"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Ahaztu VPN konexioa"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Dagoen VPN konexioa ordeztu nahi duzu?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPNa beti aktibatuta egoteko aukera ezarri nahi duzu?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Luzea"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Erakutsi diru-zorroa"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Eman diru-zorroa atzitzeko baimena pantaila blokeatuan eta ezarpen bizkorretan"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Erakutsi QR kodeen eskanerra"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Eman QR kodeen eskanerra atzitzeko baimena pantaila blokeatuan"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Erakutsi gailuak kontrolatzeko widgetak"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Atzitu kontrolatzeko aukerak gailua blokeatuta dagoenean"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Ahal denean, erakutsi erlojua bi lerrotan"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Bi lerroko erlojua"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desaktibatuta"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMak"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Aurkitu wifi-sareak eta konektatu haietara"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"hegaldia, hegaldietarako segurua"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Deiak eta SMSak"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wifi bidezko deiak"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f05e9f8..f49a3fa 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"تماس ازطریق Wi-Fi. اگر اتصال Wi-Fi قطع شود، تماس متوقف میشود."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"اگر تماس ازطریق Wi-Fi روشن باشد، تلفن شما میتواند براساس اولویتتان و اینکه چه سیگنالی قویتر است، تماسها را ازطریق شبکههای Wi-Fi یا شبکه شرکت مخابراتیتان هدایت کند. قبل از روشن کردن این ویژگی، هزینهها و سایر جزئیات را با شرکت مخابراتیتان بررسی کنید.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"نشانی اضطراری"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"وقتی ازطریق Wi-Fi تماس اضطراری برقرار میکنید بهعنوان مکان شما استفاده میشود"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"درباره قابلیتهای DNS خصوصی "<annotation id="url">"بیشتر بدانید"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"روشن"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"نگهداشتن کلیدهای میزان صدا برای باز کردن"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"برای باز کردن، روی صفحهنمایش سه ضربه سریع بزنید"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"استفاده از اشاره برای باز کردن"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"استفاده از اشاره دسترسپذیری جدید"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"استفاده از اشاره دسترسپذیری"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"برای استفاده از این ویژگی، روی دکمه دسترسپذیری <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> در پایین صفحه ضربه بزنید.\n\nبرای جابهجایی بین ویژگیها، دکمه دسترسپذیری را لمس کنید و نگه دارید."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"برای استفاده از این ویژگی، روی دکمه دسترسپذیری در صفحهنمایش ضربه بزنید."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"برای استفاده از این ویژگی، هر دو کلید میزان صدا را فشار دهید و نگه دارید."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"اتصال به <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"اتصال به این VPN.قطع شود؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"قطع ارتباط"</string>
- <string name="vpn_version" msgid="41856553718304367">"نسخه <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"فراموش کردن VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"VPN موجود جایگزین شود؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN همیشه روشن تنظیم شود؟"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"طولانی"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"نمایش کیف پول"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"مجاز کردن دسترسی به کیف پول از صفحه قفل و تنظیمات فوری"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"نمایش «اسکنر رمزینه پاسخسریع»"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"مجاز کردن دسترسی به «اسکنر رمزینه پاسخسریع» از صفحه قفل"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"نمایش کنترلهای دستگاه"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"کنترلهای دسترسی هنگام قفل بودن صفحهنمایش"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"نمایش ساعت دو خطی، درصورت دردسترس بودن"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ساعت دو خطی"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"خاموش"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"اینترنت"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"سیمکارتها"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"پیدا کردن شبکههای Wi-Fi و اتصال به آنها"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"هواپیما، ایمن در هواپیما"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"تماس و پیامک"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"تماس ازطریق Wi-Fi"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 151247c..b8a0df2 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Soita Wi-Fi-yhteyden kautta. Jos Wi-Fi-yhteys katkeaa, puhelu päättyy."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kun Wi-Fi-puhelut on käytössä, puhelimesi voi ohjata puhelut Wi-Fi-verkkojen tai operaattorisi verkon kautta, riippuen asetuksistasi ja siitä, kummassa on voimakkaampi signaali. Ennen kuin otat tämän ominaisuuden käyttöön, tarkista maksut ja muut tiedot operaattoriltasi.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Hätäosoite"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Sijaintisi, kun soitat hätäpuhelun Wi-Fillä"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Lisätietoja"</annotation>" yksityisistä DNS-ominaisuuksista"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Päällä"</string>
@@ -2322,7 +2323,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Avaa painamalla äänenvoimakkuuspainikkeita"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Avaa kolmoisnapauttamalla näyttöä"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Avaa eleellä"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Käytä uutta esteettömyyselettä"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Laita ominaisuus päälle napauttamalla näytön alareunassa olevaa esteettömyyspainiketta <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nVaihda ominaisuudesta toiseen painamalla esteettömyyspainiketta pitkään."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ota ominaisuus käyttöön napauttamalla näytöllä näkyvää esteettömyyspainiketta."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Laita tämä ominaisuus päälle painamalla pitkään molempia äänenvoimakkuuspainikkeita."</string>
@@ -3247,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Yhdistä profiiliin <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Katkaistaanko VPN-yhteys?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Katkaise yhteys"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versio <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Unohda VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Korvataanko nykyinen VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Määritetäänkö aina käytössä oleva VPN?"</string>
@@ -5448,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Pitkään"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Näytä Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Salli Walletin käyttö lukitusnäytöltä ja pika-asetuksista"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Näytä QR-koodiskanneri"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Salli pääsy QR-koodiskanneriin lukitusnäytöltä"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Näytä laitteiden hallinta"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Käytä säätimiä laitteen ollessa lukittuna"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Näytä kaksirivinen kello, kun saatavilla"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Kaksirivinen kello"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Ei käytössä"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kortit"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Etsi Wi-Fi-verkkoja ja yhdistä niihin"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"lentokone, lentokoneturvallinen"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Puhelut ja tekstiviestit"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-puhelut"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index c24c7a0..95c37f6 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -475,7 +475,7 @@
<string name="security_settings_udfps_enroll_find_sensor_message" msgid="8383106460819519961">"Le capteur d\'empreintes digitales se trouve sur votre écran. Vous capturerez votre empreinte digitale au prochain écran."</string>
<string name="security_settings_udfps_enroll_find_sensor_start_button" msgid="3172268783620336357">"Démarrer"</string>
<string name="security_settings_udfps_enroll_a11y" msgid="1899453114050362235">"Déplacez votre doigt sur l\'écran pour trouver le capteur. Maintenez le doigt sur le capteur d\'empreintes digitales."</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration présentant l\'appareil et la position du capteur d\'empreinte digitale"</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration présentant l\'appareil et la position du capteur d\'empreintes digitales"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nom"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Supprimer"</string>
@@ -558,7 +558,7 @@
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="7875826823637114097">"Votre empreinte digitale vous permet non seulement de déverrouiller votre téléphone, mais également d\'autoriser des achats et l\'accès à l\'application. "<annotation id="url">"En savoir plus"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="4260983700868889294">" L\'option de verrouillage de l\'écran est désactivée. Pour en savoir plus, communiquez avec l\'administrateur de votre organisation. "<annotation id="admin_details">"Plus de détails"</annotation>\n\n"Vous pouvez toujours utiliser votre empreinte digitale pour autoriser les achats et l\'accès aux applications. "<annotation id="url">"En savoir plus"</annotation></string>
<string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="2590665137265458789">"Relevez le doigt, puis touchez le capteur à nouveau"</string>
- <string name="security_settings_fingerprint_bad_calibration" msgid="598502302101068608">"Impossible utiliser capteur empreinte digitale. Consultez un fournisseur de services de réparation"</string>
+ <string name="security_settings_fingerprint_bad_calibration" msgid="598502302101068608">"Impossible utiliser capteur empreintes digitales. Consultez un fournisseur de services de réparation"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> empreintes digitales"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Vous avez ajouté le nombre maximal d\'empreintes digitales"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Impossible d\'ajouter des empreintes digitales"</string>
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Appeler sur réseau Wi‑Fi. Si le Wi‑Fi est interr., l\'appel prendra fin."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Lorsque les appels Wi-Fi sont activés, votre téléphone peut transférer les appels par réseau Wi-Fi ou le réseau de votre fournisseur de services, en fonction de votre préférence et du signal le plus puissant. Avant d\'activer cette fonctionnalité, renseignez-vous auprès de votre fournisseur pour en savoir plus sur les frais et d\'autres détails pertinents.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresse d\'urgence"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Cette adresse sera définie comme votre position géographique lorsque vous effectuerez des appels d\'urgence par Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"En savoir plus"</annotation>" sur la fonctionnalité de DNS privé"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activé"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Maintenez enf. les touches de volume pour l\'ouvrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Touchez l\'écran trois fois pour l\'ouvrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Utiliser un geste pour activer le service"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Utiliser le nouveau geste d\'accessibilité"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Utiliser le geste d\'accessibilité"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Pour utiliser cette fonctionnalité, touchez le bouton d\'accessibilité <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> dans le bas de l\'écran.\n\nPour basculer entre les fonctionnalités, maintenez le doigt sur le bouton d\'accessibilité."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Pour utiliser cette fonctionnalité, touchez le bouton d\'accessibilité sur votre écran."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Pour utiliser cette fonctionnalité, maintenez enfoncées les deux touches de volume."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Se connecter à <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Déconnecter ce RPV?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Déconnecter"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Oublier le profil RPV"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Remplacer le RPV existant?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Définir le RPV permanent?"</string>
@@ -3948,22 +3950,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Autoriser <xliff:g id="SERVICE">%1$s</xliff:g> à accéder aux notifications?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"Les notifications améliorées ont remplacé les notifications adaptatives Android sous Android 12. Cette fonctionnalité vous présente des suggestions d\'actions et de réponses, et organise vos notifications. \n\nLes notifications améliorées peuvent accéder au contenu de toutes les notifications, y compris les renseignements personnels comme le nom des contacts et les messages. Cette fonctionnalité peut aussi fermer des notifications ou interagir avec elles, comme répondre aux appels téléphoniques et gérer le mode Ne pas déranger."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Autoriser <xliff:g id="SERVICE">%1$s</xliff:g> à accéder aux notifications?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> pourra lire toutes les notifications, y compris des renseignements personnels, comme le nom des contacts, les photos et le texte des messages que vous recevez. Cette application pourra aussi fermer ou reporter des notifications ou effectuer des actions sur les boutons des notifications, y compris répondre aux appels téléphoniques. \n\nCette action permettra également à l\'application d\'activer et de désactiver la fonctionnalité Ne pas déranger, et de modifier les paramètres connexes."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> pourra effectuer les actions suivantes :"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"Lire vos notifications"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"Elle peut lire vos notifications, y compris les renseignements personnels, comme les contacts, les messages et les photos."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"Répondre aux messages"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"Elle peut répondre aux messages et agir sur les boutons dans les notifications, y compris faire répéter ou ignorer des notifications et répondre à des appels."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"Modifier les paramètres"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"Elle peut activer ou désactiver la fonctionnalité Ne pas déranger et modifier les paramètres connexes."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Si vous désactivez l\'accès aux notifications pour <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, l\'accès au mode Ne pas déranger peut également être désactivé."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"Désactiver"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"Annuler"</string>
@@ -5456,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Long"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Afficher le portefeuille"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Autorisez l\'accès au portefeuille à partir de l\'écran de verrouillage et du menu Paramètres rapides"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Afficher le lecteur de code QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Autorisez l\'accès au lecteur de code QR à partir de l\'écran verrouillé"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Afficher les commandes des appareils"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accéder aux commandes lorsque l\'écran est verrouillé"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Afficher l\'horloge à double ligne lorsqu\'elle est accessible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Horloge à double ligne"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5490,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Désactivé"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Cartes SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Rechercher des réseaux Wi-Fi et s\'y connecter"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avion, sécuritaire pour les avions"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Appels et messages texte"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Appels Wi‑Fi"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 7d2aeb1..bdfcb00 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Appel via le Wi-Fi. Si vous perdez le Wi‑Fi, l\'appel se terminera."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Lorsque les appels Wi-Fi sont activés, votre téléphone peut transférer les appels via les réseaux Wi-Fi ou le réseau de votre opérateur, en fonction de votre préférence et du signal le plus puissant. Avant d\'activer cette fonctionnalité, renseignez-vous auprès de votre opérateur pour en savoir plus sur les frais et autres détails.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresse d\'urgence"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Adresse utilisée pour votre position si vous effectuez un appel d\'urgence à l\'aide du Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"En savoir plus"</annotation>" sur les fonctionnalités de DNS privé"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activé"</string>
@@ -2322,7 +2323,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"maintenir touches de volume appuyées pour ouvrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Appuyez trois fois sur l\'écran pour ouvrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Utiliser un geste pour ouvrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Utiliser le nouveau geste d\'accessibilité"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Pour utiliser cette fonctionnalité, appuyez sur le bouton Accessibilité <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> en bas de l\'écran.\n\nPour changer de fonctionnalité, appuyez dessus de manière prolongée."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Pour utiliser cette fonctionnalité, appuyez sur le bouton Accessibilité sur l\'écran."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Pour utiliser cette fonctionnalité, appuyez de manière prolongée sur les deux touches de volume."</string>
@@ -3247,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Se connecter à <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Déconnecter ce VPN ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Déconnecter"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Supprimer le VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Remplacer le VPN existant ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Définir le VPN permanent ?"</string>
@@ -5448,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Long"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Afficher le portefeuille"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Autoriser l\'accès au portefeuille depuis l\'écran de verrouillage et les Réglages rapides"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Afficher le lecteur de code QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Autoriser l\'accès au lecteur de code QR depuis l\'écran de verrouillage"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Afficher les commandes de contrôle des appareils"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accéder aux commandes lorsque l\'écran est verrouillé"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Afficher l\'horloge sur deux lignes lorsqu\'elle est disponible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Horloge sur deux lignes"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Désactivé"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Profils SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Rechercher les réseaux Wi-Fi et s\'y connecter"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avion, accepté dans les avions"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Appels et SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Appels Wi-Fi"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index b51b810..31e5ceb 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Chama por wifi. Se se perde a conexión wifi, a chamada rematará."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Cando está activada a función Chamadas por wifi, o teléfono pode enviar as túas chamadas a través de redes wifi ou da rede do teu operador, dependendo das túas preferencias e de cal teña o sinal máis forte. Antes de activar esta función, consulta co teu operador as tarifas e outra información.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Enderezo de emerxencia"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Utilízase como a túa localización cando fas unha chamada de emerxencia por wifi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Máis información"</annotation>" sobre as funcións de DNS privado"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activado"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantén premidas as teclas de volume para abrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Toca tres veces a pantalla para abrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Utilizar un xesto para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usar novo xesto de accesibilidade"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usa o xesto de accesibilidade"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Toca o botón Accesibilidade <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> na parte inferior da pantalla para utilizar esta función.\n\nPara cambiar de función, mantén premido o botón Accesibilidade."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para utilizar esta función, toca na pantalla o botón Accesibilidade."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Mantén premidas as dúas teclas de volume para utilizar esta función."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectar con <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Queres desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer perfil da VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Queres substituír a VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Queres definir a VPN como sempre activa?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Longa"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar moedeiro"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permite o acceso ao moedeiro desde a pantalla de bloqueo e o menú Configuración rápida"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar escáner de códigos QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permite acceder ao escáner de códigos QR desde a pantalla de bloqueo"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar control de dispositivos"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accede aos controis cando a pantalla estea bloqueada"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostra o reloxo en dúas liñas se está dispoñible"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Reloxo en dúas liñas"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desactivado"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Tarxetas SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Busca redes wifi e conecta o dispositivo a elas"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avión, segura para os avións"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chamadas e SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Chamadas por wifi"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0e9a8c1..1184cd3 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"વાઇ-ફાઇ પરથી કૉલ કરો. વાઇ-ફાઇ જતું રહેશે, તો કૉલ સમાપ્ત થઈ જશે."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"જ્યારે વાઇ-ફાઇ કૉલિંગ ચાલુ હોય, ત્યારે તમારી પસંદગી અને કયા સિગ્નલ મજબૂત છે તેને આધારે, તમારો ફોન વાઇ-ફાઇ નેટવર્ક અથવા તમારા કૅરિઅરના નેટવર્ક મારફતે કૉલને રૂટ કરી શકે છે. આ સુવિધાને ચાલુ કરતાં પહેલાં, શુલ્ક અને અન્ય વિગતો માટે તમારા કૅરિઅર સાથે વાત કરો.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"કટોકટીનું સરનામું"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"જ્યારે તમે વાઇ-ફાઇનો ઉપયોગ કરીને કોઈ કટોકટીનો કૉલ કરો તો તેનો તમારા સ્થાન તરીકે ઉપયોગ કરવામાં આવશે"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ખાનગી DNS સુવિધા વિશે "<annotation id="url">"વધુ જાણો"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ચાલુ"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ખોલવા માટે વૉલ્યૂમ કીને દબાવી રાખો"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ખોલવા માટે સ્ક્રીનને ત્રણ વાર ટૅપ કરો"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ખોલવા માટે સંકેતનો ઉપયોગ કરો"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"નવા ઍક્સેસિબિલિટી સંકેતનો ઉપયોગ કરો"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ઍક્સેસિબિલિટી સંકેતનો ઉપયોગ કરો"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"આ સુવિધાનો ઉપયોગ કરવા માટે, તમારી સ્ક્રીનમાં નીચેની બાજુએ રહેલા ઍક્સેસિબિલિટી બટન <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>ને ટૅપ કરો.\n\nકોઈ એક સુવિધાથી બીજી સુવિધા પર સ્વિચ કરવા માટે, ઍક્સેસિબિલિટી બટનને ટચ કરીને થોડીવાર દબાવી રાખો."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"આ સુવિધાનો ઉપયોગ કરવા માટે, તમારી સ્ક્રીન પરના ઍક્સેસિબિલિટી બટનને ટૅપ કરો."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"આ સુવિધાનો ઉપયોગ કરવા માટે, વૉલ્યૂમની બન્ને કીને દબાવી રાખો."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> સાથે કનેક્ટ કરો"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"આ VPNને ડિસ્કનેક્ટ કરીએ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ડિસ્કનેક્ટ કરો"</string>
- <string name="vpn_version" msgid="41856553718304367">"વર્ઝન <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ભૂલી ગયાં"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"અસ્તિત્વમાંની VPN ને બદલીએ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"હંમેશાં ચાલુ VPN સેટ કરીએ?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"લાંબો"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"વૉલેટ બતાવો"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"લૉક સ્ક્રીન અને ઝડપી સેટિંગથી વૉલેટ ઍક્સેસ કરવાની મંજૂરી આપો"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR કોડ સ્કૅનર બતાવો"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"લૉક સ્ક્રીનમાંથી QR કોડ સ્કૅનરના ઍક્સેસની મંજૂરી આપો"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ડિવાઇસનાં નિયંત્રણો બતાવો"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"લૉક કરેલું હોય ત્યારે નિયંત્રણોને ઍક્સેસ કરો"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ઉપલબ્ધ હોય ત્યારે ડબલ-લાઇન ઘડિયાળ બતાવો"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ડબલ-લાઇન ઘડિયાળ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"બંધ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ઇન્ટરનેટ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"સિમ"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"વાઇ-ફાઇ નેટવર્ક શોધીને તેની સાથે કનેક્ટ કરો"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"એરપ્લેન, એરપ્લેન મોડમાં ઉપયોગ માટે સુરક્ષિત"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"કૉલ અને SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"વાઇ-ફાઇ કૉલિંગ"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 90dbdc3..934ca6f 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"वाई-फ़ाई के ज़रिए कॉल करें. वाई-फ़ाई रुक जाने पर कॉल खत्म हो जाएगी."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"वाई-फ़ाई कॉलिंग चालू होने पर, आपका फ़ोन वाई-फ़ाई या मोबाइल और इंटरनेट सेवा देने वाली कंपनी के नेटवर्क से कॉल कर सकता है. यह आपकी सेटिंग और इस बात पर निर्भर करेगा कि इनमें से किस सिग्नल का प्रदर्शन बेहतर है. इस सुविधा को चालू करने से पहले, शुल्क और दूसरी जानकारी पाने के लिए मोबाइल और इंटरनेट सेवा देने वाली कंपनी से बात करें. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"आपातकालीन पता"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"जब आप वाई-फ़ाई पर आपातकालीन कॉल करते हैं, तब आपकी मौजूदा जगह को आपके पते के तौर पर इस्तेमाल किया जाता है"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"निजी डीएनएस की सुविधाओं के बारे में "<annotation id="url">"ज़्यादा जानें"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"चालू है"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"खोलने के लिए, आवाज़ कम-ज़्यादा करने वाले दोनों बटन दबाकर रखें"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"खोलने के लिए स्क्रीन पर तीन बार टैप करें"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"इसे खोलने के लिए हाथ के जेस्चर का इस्तेमाल करें"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"सुलभता वाले नए जेस्चर इस्तेमाल करें"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"सुलभता से जुड़े हाथ के जेस्चर का इस्तेमाल करें"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"इस सुविधा का इस्तेमाल करने के लिए, स्क्रीन पर सबसे नीचे मौजूद सुलभता बटन <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> पर टैप करें.\n\nएक सुविधा से दूसरी सुविधा पर जाने के लिए, सुलभता बटन को दबाकर रखें."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"इस सुविधा का इस्तेमाल करने के लिए, स्क्रीन पर मौजूद सुलभता बटन पर टैप करें."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"इस सुविधा का इस्तेमाल करने के लिए, आवाज़ कम-ज़्यादा करने वाले दोनों बटन दबाकर रखें."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">" <xliff:g id="PROFILE">%s</xliff:g> से कनेक्ट करें"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"इस VPN को डिसकनेक्ट करना चाहते हैं?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिसकनेक्ट करें"</string>
- <string name="vpn_version" msgid="41856553718304367">"वर्शन <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"वीपीएन भूल जाएं"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"मौजूदा VPN को बदलें?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"हमेशा-चालू VPN सेट करें?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ज़्यादा समय के लिए"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"वॉलेट दिखाएं"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"लॉक स्क्रीन और फटाफट सेटिंग से वॉलेट ऐक्सेस करने की अनुमति दें"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"क्यूआर कोड स्कैनर दिखाएं"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"क्यूआर कोड स्कैनर को लॉक स्क्रीन से ऐक्सेस करने की अनुमति दें"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"डिवाइस कंट्रोल दिखाएं"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"स्क्रीन लॉक होने पर कंट्रोल को ऐक्सेस करें"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"उपलब्ध होने पर, दो समय क्षेत्र वाली घड़ी दिखाएं"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"दो समय क्षेत्र वाली घड़ी"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"बंद है"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"इंटरनेट"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"सिम"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"वाई-फ़ाई नेटवर्क ढूंढकर, उनसे कनेक्ट करता है"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"हवाई जहाज़, हवाई जहाज़ सुरक्षित नेटवर्क"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"कॉल और एसएमएस"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"वाई-फ़ाई कॉलिंग"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 1fca91f..bc94e83 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -1255,7 +1255,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Pozivi putem Wi-Fija. Ako se Wi‑Fi izgubi, poziv će završiti."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kada su Wi-Fi pozivi uključeni, telefon može usmjeravati pozive putem Wi-Fi mreža ili mreže vašeg mobilnog operatera, ovisno o vašoj želji i o tome koji je signal jači. Prije nego što uključite tu značajku, raspitajte se o naknadi i ostalim pojedinostima kod mobilnog operatera.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresa za hitne pozive"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Upotrebljava se kao vaša lokacija kada upućujete hitne pozive putem Wi‑Fi-ja"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saznajte više"</annotation>" o značajkama privatnog DNS-a"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Uključeno"</string>
@@ -2348,7 +2349,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Zadržite tipke za glasnoću za otvaranje"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Triput dodirnite zaslon za otvaranje"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otvaranje pokretom"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Upotreba novog pokreta pristupačnosti"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Upotreba pokreta za pristupačnost"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Da biste koristili tu značajku, dodirnite gumb za Pristupačnost <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> pri dnu zaslona.\n\nDa biste prešli na neku drugu značajku, dodirnite i zadržite gumb za Pristupačnost."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Da biste koristili tu značajku, dodirnite gumb za pristupačnost na zaslonu."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Da biste koristili tu značajku, pritisnite i zadržite obje tipke za glasnoću."</string>
@@ -3289,7 +3290,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Povezivanje s profilom <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Prekinuti vezu s VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li zamijeniti dosadašnji VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li postaviti uvijek uključeni VPN?"</string>
@@ -5539,12 +5541,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dugo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Prikaži novčanik"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Omogućite pristup novčaniku sa zaključanog zaslona i iz brzih postavki"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Prikaži čitač QR koda"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Omogućite pristup čitaču QR koda sa zaključanog zaslona"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Prikaži kontrole uređaja"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Pristupite kontrolama kada je zaslon zaključan"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Prikaži sat s dva retka kad je dostupan"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Sat s dva retka"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5573,7 +5575,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Isključeno"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-ovi"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Pronađi Wi-Fi mreže i poveži se"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"zrakoplov, sigurno za rad u zrakoplovu"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Pozivi i SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi pozivi"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 6e9cf69..0b3c6fe 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Hívás Wi-Fi-n. Ha a Wi-Fi kapcsolat megszűnik, a hívás véget ér."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Ha be van kapcsolva a Wi-Fi-hívás, akkor a telefon az Ön beállításaitól és a jelerősségtől függően vagy a Wi-Fi-hálózaton, vagy a mobilszolgáltató hálózatán át vezeti a hívásokat. A funkció bekapcsolása előtt tájékozódjon mobilszolgáltatójánál a díjakról és egyéb részletekről. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>."</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Vészhelyzeti cím"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"A Wi-Fi-n keresztül indított segélyhívások esetében megjelenő tartózkodási hely"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"További információ"</annotation>" a Privát DNS-funkciókról"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Be"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"A megnyitáshoz tartsa lenyomva a hangerőgombokat"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Koppintson háromszor a képernyőn a megnyitáshoz"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Megnyitás kézmozdulattal"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Új kisegítő kézmozdulat használata"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Kisegítő kézmozdulat használata"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"A funkció használatához koppintson a képernyő alján megtalálható Kisegítő lehetőségek <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> gombra.\n\nA funkciók közti váltáshoz tartsa lenyomva ujját a Kisegítő lehetőségek gombon."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"A funkció használatához koppintson a képernyőn a Kisegítő lehetőségek gombra."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"A funkció használatához tartsa lenyomva mindkét hangerőszabályzó gombot."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Csatlakozás a következőhöz: <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Leválasztja a VPN-t?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Leválasztás"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verzió: <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN elfelejtése"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Lecseréli a meglévő VPN-t?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Beállítja a mindig bekapcsolt VPN-t?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Hosszú"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Tárca mutatása"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Hozzáférés a tárcához a lezárási képernyőről és a Gyorsbeállításokból"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR-kód-szkennelő megjelenítése"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"A QR-kód-szkennelőhöz a lezárási képernyőn való hozzáférés engedélyezése"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Eszközvezérlők megjelenítése"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Hozzáférés a vezérlőkhöz lezárt képernyő mellett"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Kétsoros óra megjelenítése, amikor rendelkezésre áll"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Kétsoros óra"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Ki"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kártyák"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi-hálózatok keresése és csatlakozás"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"repülőgép, repülőgépen használható"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Hívások és SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-hívás"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index c6c392d..fc78521 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Զանգ Wi-Fi-ի միջոցով։ Եթե Wi‑Fi կապն ընդհատվի, զանգը կավարտվի։"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Երբ «Զանգեր Wi-Fi-ով» գործառույթը միացված է, հեռախոսը կարող է ուղարկել զանգերը Wi-Fi ցանցերի կամ ձեր օպերատորի ցանցի միջոցով՝ կախված ձեր նախընտրություններից և ազդանշանի ուժգնությունից: Մինչ այս գործառույթը միացնելը՝ տեղեկացեք վճարների և այլ մանրամասների մասին ձեր օպերատորից:<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Արտակարգ իրավիճակների հասցե"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Օգտագործվում է որպես ձեր հասցեն, երբ Wi‑Fi-ի միջոցով շտապ կանչ եք կատարում"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Մանրամասն"</annotation>" մասնավոր DNS սերվերի մասին"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Միացված է"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Բացելու համար սեղմած պահեք ձայնի կոճակները"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Բացելու համար երեք անգամ հպեք էկրանին"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Բացեք ձեռքի շարժումով"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Օգտագործեք հատուկ գործառույթների նոր ժեստը"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Հատուկ գործառույթների ժեստի օգտագործում"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Այս գործառույթն օգտագործելու համար էկրանի ներքևում հպեք «Հատուկ գործառույթներ» <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> կոճակին։\n\nՄի գործառույթից մյուսին անցնելու համար հպեք «Հատուկ գործառույթներ» կոճակին և պահեք։"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Այս գործառույթն օգտագործելու համար հպեք ձեր էկրանի «Հատուկ գործառույթներ» կոճակին։"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Այս գործառույթն օգտագործելու համար սեղմեք և պահեք ձայնի ուժգնության երկու կոճակները։"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Միանալ <xliff:g id="PROFILE">%s</xliff:g>-ին"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Անջատե՞լ այս VPN-ը:"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Անջատել"</string>
- <string name="vpn_version" msgid="41856553718304367">"Տարբերակ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Մոռանալ VPN-ը"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Փոխարինե՞լ ընթացիկ VPN-ը:"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Սահմանե՞լ որպես «միշտ միացված» VPN:"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Երկար"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Ցուցադրել դրամապանակը"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Հասանելի դարձնել դրամապանակը կողպէկրանին և արագ կարգավորումներում"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Ցույց տալ QR կոդերի սկաները"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Հասանելի դարձնել QR կոդերի սկաները կողպէկրանին"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Ցուցադրել սարքերի կառավարման տարրերը"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Թույլատրեք կառավարման տարրերը կողպէկրանին"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Առկայության դեպքում ցույց տալ երկտող ժամացույցը"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Երկտող ժամացույց"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Անջատված է"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Ինտերնետ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM քարտեր"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Գտնել և միանալ Wi-Fi ցանցերի"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ինքնաթիռ, ինքնաթիռում անվտանգ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Զանգեր և SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Զանգեր Wi-Fi-ով"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 9b879c2..d5203d5 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Telepon melalui Wi-Fi. Jika Wi-Fi terputus, panggilan akan berakhir."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Jika panggilan Wi-Fi aktif, ponsel dapat mengarahkan panggilan telepon melalui jaringan Wi-Fi atau jaringan operator, bergantung pada preferensi dan sinyal mana yang lebih kuat. Sebelum mengaktifkan fitur ini, sebaiknya tanyakan info biaya dan detail lainnya ke operator.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Alamat Darurat"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Digunakan sebagai lokasi Anda ketika Anda melakukan panggilan darurat melalui Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Pelajari lebih lanjut"</annotation>" fitur DNS Pribadi"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aktif"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Tahan tombol volume untuk membuka"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ketuk tiga kali pada layar untuk membuka"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Menggunakan gestur untuk membuka"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Menggunakan gestur aksesibilitas baru"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Gunakan gestur aksesibilitas"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Untuk menggunakan fitur ini, ketuk tombol aksesibilitas <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> di bagian bawah layar.\n\nUntuk beralih antarfitur, sentuh lama tombol aksesibilitas."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Untuk menggunakan fitur ini, ketuk tombol aksesibilitas di layar."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Untuk menggunakan fitur ini, tekan dan tahan kedua tombol volume."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Menghubungkan ke <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putuskan sambungan VPN ini?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putuskan koneksi"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versi <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Lupakan VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Ganti VPN yang sudah ada?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setel VPN selalu aktif?"</string>
@@ -4491,7 +4493,7 @@
<string name="no_memory_use_summary" msgid="6708111974923274436">"Tidak ada memori yang digunakan dalam 3 jam terakhir"</string>
<string name="sort_avg_use" msgid="4416841047669186903">"Urutkan menurut rata-rata penggunaan"</string>
<string name="sort_max_use" msgid="3370552820889448484">"Urutkan menurut penggunaan maksimum"</string>
- <string name="memory_performance" msgid="5448274293336927570">"Kinerja"</string>
+ <string name="memory_performance" msgid="5448274293336927570">"Performa"</string>
<string name="total_memory" msgid="5244174393008910567">"Total memori"</string>
<string name="average_used" msgid="690235917394070169">"Rata-rata digunakan (%)"</string>
<string name="free_memory" msgid="439783742246854785">"Bebas"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lama"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Tampilkan dompet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Izinkan akses ke dompet dari layar kunci dan setelan cepat"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Tampilkan Pemindai Kode QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Izinkan akses ke pemindai kode QR dari layar kunci"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Tampilkan kontrol perangkat"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Kontrol akses saat terkunci"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Menampilkan jam dua baris jika tersedia"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Jam dua baris"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Nonaktif"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Temukan dan hubungkan ke jaringan Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"pesawat, aman di pesawat"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Panggilan Telepon & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Panggilan Wi-Fi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 2da03d8..31b5269 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Hringja í gegnum Wi-Fi. Ef Wi-Fi tenging slitnar lýkur símtalinu."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Þegar kveikt er á Wi-Fi símtölum getur síminn beint símtölum um Wi-Fi net eða kerfi símafyrirtækisins, eftir því hvað þú velur og hvor tengingin er betri. Kannaðu verðskrá og aðrar upplýsingar hjá símafyrirtækinu þínu áður en þú kveikir á þessu.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Neyðarheimilisfang"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Notað sem staðsetningin þín þegar þú hringir neyðarsímtöl í gegnum Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Frekari upplýsingar"</annotation>" um eiginleika lokaðs DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Kveikt"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Haltu hljóðstyrkstökkunum inni til að opna"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ýttu þrisvar á skjáinn til að opna"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Nota bendingu til að opna"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Notaðu nýja aðgengisbendingu"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Nota aðgengisbendingu"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Til að nota þennan eiginleika skaltu ýta á aðgengishnappinn <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> neðst á skjánum.\n\nTil að skipta á milli eiginleika skaltu halda inni aðgengishnappinum."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ýttu á aðgengishnappinn á skjánum til að nota þennan eiginleika."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Til að nota þennan eiginleika skaltu halda inni báðum hljóðstyrkstökkum."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Tengjast <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Aftengja þessa VPN-tengingu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Aftengja"</string>
- <string name="vpn_version" msgid="41856553718304367">"Útgáfa <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Gleyma VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Skipta út núverandi VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Velja VPN sem alltaf er kveikt á?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lengi"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Sýna veski"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Leyfa aðgang að veski af lásskjá og úr flýtistillingum"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Sýna QR-kóðaskanna"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Leyfa aðgang að QR-kóðaskanna á lásskjá"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Sýna tækjastjórnun"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Aðgangur að stýringum þegar tækið er læst"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Sýna klukku í tveimur línum þegar hægt er"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Klukka í tveimur línum"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Slökkt"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Finna og tengjast Wi-Fi neti"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"flugnetkerfi, öruggt flugnet"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Símtöl og SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi símtöl"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index f619759..edd80c1 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Chiamata tramite Wi‑Fi. Se il Wi‑Fi viene perso, la chiamata termina."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Se le chiamate Wi-Fi sono attive, il tuo telefono può indirizzare le chiamate tramite reti Wi-Fi o la rete del tuo operatore, in base alle tue preferenze e alla potenza del segnale. Prima di attivare questa funzionalità, verifica tariffe e altri dettagli con il tuo operatore.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Indirizzo per le emergenze"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Viene considerato la tua posizione quando fai una chiamata di emergenza tramite Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Scopri di più"</annotation>" sulle funzioni di DNS privato"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"On"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Tieni premuti i tasti del volume per aprire"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Tocca tre volte lo schermo per aprire"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Usa un gesto per aprire"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usa il nuovo gesto di accessibilità"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usa il gesto di accessibilità"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Per usare questa funzione, tocca il pulsante Accessibilità <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> nella parte inferiore dello schermo.\n\nPer spostarti tra le funzioni, tocca e tieni premuto il pulsante Accessibilità."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Per usare questa funzionalità, tocca il pulsante Accessibilità sullo schermo."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Per usare questa funzione, tieni premuti entrambi i tasti del volume."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Connessione a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnettere questa VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnetti"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versione <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Rimuovi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Sostituire la rete VPN esistente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Impostare la rete VPN sempre attiva?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lunga"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostra portafoglio"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Consenti l\'accesso al portafoglio dalla schermata di blocco e dalle impostazioni rapide"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostra Scanner codici QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Consenti l\'accesso a Scanner codici QR dalla schermata di blocco"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostra controlli dei dispositivi"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accedi ai controlli quando i dispositivi sono bloccati"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostra l\'orologio su due righe quando è disponibile"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Orologio su due righe"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Cerca e connetti a reti Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aereo, utilizzabile in aereo"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chiamate e SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Chiamate Wi‑Fi"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index f933a92..ba5bf17 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -1275,7 +1275,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"התקשרות בחיבור Wi-Fi. אם חיבור ה-Wi‑Fi יתנתק, השיחה תסתיים."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"כשתכונת שיחות Wi-Fi פועלת, הטלפון יכול לנתב שיחות ברשתות Wi-Fi או ברשת של הספק, בהתאם להעדפה שלך ולאות שחזק יותר. לפני הפעלת תכונה זו, יש לבדוק עם הספק פרטים הקשורים לעמלות ופרטים אחרים.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"כתובת למקרה חירום"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"משמש כמיקומך בעת ביצוע שיחת חירום באמצעות רשת Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306">""<annotation id="url">"מידע נוסף"</annotation>" על תכונות של DNS פרטי"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"מופעל"</string>
@@ -2372,7 +2373,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"יש ללחוץ לחיצה ארוכה על לחצני עוצמת הקול כדי לפתוח"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"יש להקיש שלוש פעמים על המסך כדי לפתוח"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"שימוש בתנועה לצורך פתיחה"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"שימוש בתנועת נגישות חדשה"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"שימוש בתנועה להפעלת תכונות הנגישות"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"כדי להשתמש בתכונה זו, יש להקיש על לחצן הנגישות <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> שבתחתית המסך.\n\nכדי לעבור בין התכונות השונות, יש ללחוץ לחיצה ארוכה על לחצן הנגישות."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"כדי להשתמש בתכונה הזו, יש להקיש על לחצן הנגישות במסך."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"כדי להשתמש בתכונה זו, יש ללחוץ לחיצה ארוכה על שני הלחצנים של עוצמת הקול."</string>
@@ -3329,7 +3330,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"התחברות אל <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"האם לנתק את ה-VPN הזה?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ניתוק"</string>
- <string name="vpn_version" msgid="41856553718304367">"גרסה <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"אני רוצה לשכוח את ה-VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"האם להחליף רשת VPN קיימת?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"האם להגדיר את רשת ה-VPN בחיבור תמידי?"</string>
@@ -5628,12 +5630,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"לחיצה ארוכה"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"הצגת הארנק"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"אישור גישה אל הארנק ממסך הנעילה ומההגדרות המהירות"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"הצגת הסורק של קודי QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"מתן גישה ממסך הנעילה לסורק של קודי QR"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"הצגת פקדי המכשיר"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"גישה לפקדים כשהמכשיר נעול"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"הצגת השעון עם שתי השורות כשאפשר"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"שעון עם שתי שורות"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5662,7 +5664,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"התכונה כבויה"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"אינטרנט"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"כרטיסי SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"איתור של רשתות Wi-Fi וחיבור אליהן"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"טיסה, בטוח לטיסה"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"שיחות והודעות SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"שיחות Wi-Fi"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 59a5634..6606ff6 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi 経由で通話します。Wi‑Fi が切断されると、通話は終了します。"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi 通話を ON にすると、ユーザーの設定と信号の強度に応じて、スマートフォンから Wi-Fi ネットワークか携帯通信会社ネットワークのいずれかを経由して通話をルーティングできるようになります。この機能を ON にする場合は、事前に料金などの条件について携帯通信会社にご確認ください。<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"緊急対応の住所"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi を使用して緊急通報を行った場合に、現在地として使用されます"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"プライベート DNS 機能の"<annotation id="url">"詳細を見る"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ON"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"音量大と音量小の両方ボタンを長押しして開く"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"画面をトリプルタップして開く"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ジェスチャーで開く"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"新しいユーザー補助操作を使用する"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ユーザー補助操作を使用する"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"この機能を使用するには、画面の下部にあるユーザー補助機能ボタン <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> をタップします。\n\n機能を切り替えるには、ユーザー補助機能ボタンを長押しします。"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"この機能を使用するには、画面上のユーザー補助機能ボタンをタップしてください。"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"この機能を使用するには、音量大と音量小の両方のボタンを長押しします。"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g>に接続"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"この VPN の接続を解除しますか?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"接続を解除"</string>
- <string name="vpn_version" msgid="41856553718304367">"バージョン<xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN を削除"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"既存の VPN を置き換えますか?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"常時接続 VPN を設定しますか?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ロック画面から QR コードスキャナにアクセスできるようにします"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"デバイス コントロールを表示"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ロック画面にデバイスのコントロールを表示します"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"使用可能な場合はダブルライン時計を表示します"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ダブルライン時計"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"OFF"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"インターネット"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi ネットワークを探して自動で接続"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"機内、機内で利用できる"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"通話と SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi 通話"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index a8cfac6..63af654 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"დარეკვა Wi-Fi-ის მეშვეობით. თუ Wi‑Fi გაითიშა, ზარი დასრულდება."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi დარეკვის ჩართვის შემთხვევაში, ტელეფონს ზარების მარშრუტიზაცია შეუძლია როგორც Wi-Fi ქსელების, ისე თქვენი ოპერატორის ქსელის მეშვეობით, რაც დამოკიდებულია თქვენ მიერ მითითებულ პარამეტრებსა და კონკრეტული სიგნალის სიძლიერეზე. ამ ფუნქციის ჩართვამდე მიმართეთ თქვენს ოპერატორს ტარიფებისა და სხვა დეტალების დასაზუსტებლად.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"საგანგებო მისამართი"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"მდებარეობა, რომელიც გადაუდებელი ზარის Wi-Fi-ს მეშვეობით განხორციელებისას თქვენს მდებარეობად გამოიყენება"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"შეიტყვეთ მეტი"</annotation>" პირადი DNS-ის ფუნქციების შესახებ"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ჩართულია"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"გასახსნელად დააჭირეთ ხმის ღილაკებს"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"სამმაგად შეეხეთ ეკრანს გასახსნელად"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"გასახსნელად გამოიყენეთ ჟესტი"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"მარტივი წვდომის ახალი ჟესტის გამოყენება"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"მარტივი წვდომის ჟესტის გამოყენება"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ამ ფუნქციით სარგებლობისთვის შეეხეთ მარტივი წვდომის ღილაკს <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> თქვენი ეკრანის ქვედა ნაწილში.\n\nფუნქციების გადასართავად ხანგრძლივად შეეხეთ მარტივი წვდომის ღილაკს."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ამ ფუნქციის გამოსაყენებლად შეეხეთ მარტივი წვდომის ღილაკს თქვენს ეკრანზე."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ამ ფუნქციით სარგებლობისთვის ხანგრძლივად დააჭირეთ ხმის ორივე ღილაკს."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"დაკავშირებულია <xliff:g id="PROFILE">%s</xliff:g>-თან"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"გსურთ ამ VPN-თან კავშირის გაწყვეტა?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"კავშირის გაწყვეტა"</string>
- <string name="vpn_version" msgid="41856553718304367">"ვერსია <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN-ის დავიწყება"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"გსურთ არსებული VPN-ის ჩანაცვლება?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"გსურთ ყოველთვის ჩართული VPN-ის დაყენება?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"დაბლოკილი ეკრანიდან დაუშვით წვდომა QR კოდის სკანერზე"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"მოწყობილობის მართვის საშუალებების ჩვენება"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"მართვის საშუალებებზე წვდომა, როცა ჩაკეტილია"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ორხაზიანი საათის ჩვენება, როცა ხელმისაწვდომია"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ორხაზიანი საათი"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"გამორთულია"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ინტერნეტი"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-ები"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi ქსელების პოვნა და მათთან დაკავშირება"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"თვითმფრინავი, თვითმფრინავისთვის უსაფრთხო"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ზარები და SMS-ები"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi დარეკვა"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 816e588..f3bda2c 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi арқылы қоңырау шалу. Wi‑Fi байланысы жоғалса, қоңырау аяқталады."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi қоңыраулары қосулы кезде, телефон қоңырауларды параметрге және сигналдың күшіне байланысты Wi-Fi желілері немесе оператор желісі арқылы бағыттай алады. Бұл функцияны қоспас бұрын, алынатын ақы туралы және басқа да мәліметтерді оператордан сұрап алыңыз.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Төтенше жағдайда пайдаланылатын мекенжай"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi арқылы жедел қызметке қоңырау шалғанда орналасқан орныңыз ретінде пайдаланылады"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Жеке DNS функциялары туралы "<annotation id="url">"толығырақ"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Қосулы"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Ашу үшін дыбыс деңгейі пернелерін басып тұрыңыз"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ашу үшін экранды үш рет түртіңіз"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Ашу үшін қол қимылын пайдалану"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Арнайы мүмкіндіктер үшін жаңа қимылды қолдану"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Арнайы мүмкіндік қимылын қолдану"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Бұл функцияны пайдалану үшін экранның төменгі жағындағы арнайы мүмкіндіктер түймесін <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> түртіңіз.\n\nБір функциядан екінші функцияға ауысу үшін арнайы мүмкіндіктер түймесін басып тұрыңыз."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Бұл функцияны пайдалану үшін экрандағы арнайы мүмкіндіктер түймесін түртіңіз."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Бұл функцияны пайдалану үшін дыбыс деңгейі пернелерін басып тұрыңыз."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> профайлына жалғау"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Осы VPN желісі ажыратылсын ба?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ажырату"</string>
- <string name="vpn_version" msgid="41856553718304367">"Нұсқасы: <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ұмыту"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Бар VPN қолданбасын ауыстыру керек пе?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Әрқашан қосулы VPN режимін орнату"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Ұзақ"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Әмиянды көрсету"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Құлыптаулы экран мен жылдам параметрлерден әмиянды пайдалануға рұқсат беру"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR кодын сканерлеу қолданбасын көрсету"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"QR кодын сканерлеу қолданбасын құлыптаулы экраннан пайдалануға рұқсат ету"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Құрылғыны басқару элементтерін көрсету"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Басқару элементтерін құлыпталған экраннан пайдалану"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Қолжетімді болған кезде, екі қатарлы сағатты көрсету"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Екі қатарлы сағат"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Өшірулі"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM карталары"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi желілерін тауып, оларға қосылу"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ұшақ, ұшақта қолдануға болатын желі"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Қоңыраулар мен SMS хабарлары"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi қоңыраулары"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index bc188e9..e86c8be 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ហៅទូរសព្ទតាមរយៈ Wi‑Fi ។ ប្រសិនបើដាច់ Wi‑Fi ការហៅទូរសព្ទនឹងបញ្ចប់។"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"នៅពេលការហៅតាម Wi-Fi បានបើក ទូរសព្ទរបស់អ្នកអាចធ្វើការហៅចេញតាមរយៈបណ្ដាញ Wi-Fi ឬបណ្ដាញរបស់ក្រុមហ៊ុនសេវាទូរសព្ទអ្នក ដោយផ្អែកលើចំណូលចិត្តរបស់អ្នក និងរលកសញ្ញានៃបណ្ដាញណាមួយដែលខ្លាំងជាង។ មុនពេលបើកមុខងារនេះ សូមសាកសួរក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នកអំពីថ្លៃសេវា និងព័ត៌មានលម្អិតផ្សេងៗ។<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"អាសយដ្ឋានគ្រាអាសន្ន"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ត្រូវបានប្រើជាទីតាំងរបស់អ្នក នៅពេលដែលអ្នកហៅទូរសព្ទសង្គ្រោះបន្ទាន់តាមរយៈ Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"ស្វែងយល់បន្ថែម"</annotation>"អំពីមុខងារ DNS ឯកជន"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"បើក"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"សង្កត់ប៊ូតុងកម្រិតសំឡេងឱ្យជាប់ ដើម្បីបើក"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ចុចអេក្រង់បីដង ដើម្បីបើក"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ប្រើចលនា ដើម្បីបើក"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ប្រើចលនាភាពងាយស្រួលថ្មី"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ប្រើចលនាភាពងាយស្រួល"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ដើម្បីប្រើមុខងារនេះ សូមចុចប៊ូតុងភាពងាយស្រួល <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> នៅផ្នែកខាងក្រោមនៃអេក្រង់របស់អ្នក។\n\nដើម្បីប្ដូររវាងមុខងារផ្សេងៗ សូមចុចប៊ូតុងភាពងាយស្រួលឱ្យជាប់។"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ដើម្បីប្រើមុខងារនេះ សូមចុចប៊ូតុងភាពងាយស្រួលនៅលើអេក្រង់របស់អ្នក។"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ដើម្បីប្រើមុខងារនេះ សូមចុចគ្រាប់ចុចកម្រិតសំឡេងទាំងពីរឱ្យជាប់។"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"តភ្ជាប់ <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ផ្តាច់ VPN នេះ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ផ្ដាច់"</string>
- <string name="vpn_version" msgid="41856553718304367">"កំណែ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"បំភ្លេច VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ជំនួស VPN ដែលមានស្រាប់ឬ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"កំណត់ VPN ឲ្យបើកជានិច្ចឬ?"</string>
@@ -5452,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"អនុញ្ញាតឱ្យចូលប្រើកម្មវិធីស្កេនកូដ QR ពីអេក្រង់ចាក់សោ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"បង្ហាញផ្ទាំងគ្រប់គ្រងឧបករណ៍"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ចូលប្រើផ្ទាំងគ្រប់គ្រង នៅពេលចាក់សោ"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"បង្ហាញនាឡិកាពីរជួរ នៅពេលដែលមាន"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"នាឡិកាពីរជួរ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5480,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"បិទ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"អ៊ីនធឺណិត"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ស៊ីម"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ស្វែងរក និងភ្ជាប់បណ្ដាញ Wi‑Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"យន្តហោះ មានសុវត្ថិភាពពេលជិះយន្តហោះ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ការហៅទូរសព្ទ និង SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"ការហៅតាម Wi-Fi"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index a431a9b..d875c28 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ವೈ-ಫೈ ಬಳಸಿ ಕರೆ ಮಾಡಿ. ವೈ-ಫೈ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡರೆ, ಕರೆ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ ಆನ್ ಆದಾಗ, ನಿಮ್ಮ ಫೋನ್ ನಿಮ್ಮ ಆದ್ಯತೆ ಮತ್ತು ಯಾವ ಸಿಗ್ನಲ್ ಬಲವಾಗಿದೆ ಎಂಬುದರ ಅನುಗುಣವಾಗಿ, ಕರೆಗಳನ್ನು ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಅಥವಾ ನಿಮ್ಮ ವಾಹಕದ ನೆಟ್ವರ್ಕ್ ಮೂಲಕ ರವಾನಿಸುತ್ತದೆ. ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಆನ್ ಮಾಡುವ ಮೊದಲು, ಶುಲ್ಕಗಳು ಮತ್ತು ಇತರ ವಿವರಗಳಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ತುರ್ತು ವಿಳಾಸ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ವೈ-ಫೈ ಮೂಲಕ ತುರ್ತು ಕರೆಯನ್ನು ನೀವು ಮಾಡಿದಾಗ ನಿಮ್ಮ ಸ್ಥಳದಂತೆ ಬಳಸಲಾಗುತ್ತದೆ"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ಖಾಸಗಿ DNS ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕುರಿತು "<annotation id="url">"ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ಆನ್ ಆಗಿದೆ"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ತೆರೆಯಲು, ವಾಲ್ಯೂಮ್ ಕೀಗಳನ್ನು ಒತ್ತಿಹಿಡಿಯಿರಿ"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ತೆರೆಯಲು, ಪರದೆಯ ಮೇಲೆ ಟ್ರಿಪಲ್-ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ತೆರೆಯಲು ಗೆಸ್ಚರ್ ಬಳಸಿ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ಹೊಸ ಪ್ರವೇಶಿಸುವಿಕೆ ಗೆಸ್ಚರ್ ಬಳಸಿ"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ಆ್ಯಕ್ಸೆಸ್ಸಿಬಿಲಿಟಿ ಗೆಸ್ಚರ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ಈ ಫೀಚರ್ ಬಳಸಲು, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ನ ಕೆಳಭಾಗದಲ್ಲಿರುವ ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ಟ್ಯಾಪ್ ಮಾಡಿ.\n\nಫೀಚರ್ಗಳ ನಡುವೆ ಬದಲಾಯಿಸಲು, ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹೋಲ್ಡ್ ಮಾಡಿ."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ಈ ಫೀಚರ್ ಬಳಸಲು, ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲಿನ ಪ್ರವೇಶಿಸುವಿಕೆ ಬಟನ್ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ಈ ಫೀಚರ್ ಬಳಸಲು, ಎರಡೂ ವಾಲ್ಯೂಮ್ ಕೀಗಳನ್ನು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> ಗೆ ಸಂಪರ್ಕಿಸಿ"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ಈ VPN ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸುವುದೇ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ"</string>
- <string name="vpn_version" msgid="41856553718304367">"<xliff:g id="VERSION">%s</xliff:g> ಆವೃತ್ತಿ"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ಮರೆತುಬಿಡು"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ VPN ಸ್ಥಾನಾಂತರಿಸುವುದೇ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN ಯಾವಾಗಲೂ ಆನ್ ಆಗಿರುವಂತೆ ಹೊಂದಿಸುವುದೇ?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ದೀರ್ಘ"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"ವಾಲೆಟ್ ತೋರಿಸಿ"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ ಮತ್ತು ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳ ಮೂಲಕ ವಾಲೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಅನುಮತಿಸಿ."</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR ಕೋಡ್ ಸ್ಕ್ಯಾನರ್ ಅನ್ನು ತೋರಿಸಿ"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ಲಾಕ್ ಸ್ಕ್ರೀನ್ನಿಂದ QR ಕೋಡ್ ಸ್ಕ್ಯಾನರ್ಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಿ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸಿ"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ಲಾಕ್ ಮಾಡಿರುವಾಗ ನಿಯಂತ್ರಣಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ಲಭ್ಯವಿದ್ದಾಗ ಡಬಲ್ ಲೈನ್ ಗಡಿಯಾರವನ್ನು ತೋರಿಸಿ"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ಡಬಲ್ ಲೈನ್ ಗಡಿಯಾರ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ಆಫ್ ಆಗಿದೆ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ಇಂಟರ್ನೆಟ್"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ಸಿಮ್ಗಳು"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ವೈಫೈ ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಹುಡುಕಿ ಹಾಗೂ ಅವುಗಳಿಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿ"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ಏರ್ಪ್ಲೇನ್, ಏರ್ಪ್ಲೇನ್-ಸುರಕ್ಷತಾ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ಕರೆಗಳು & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 93e9299..381ce27 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi를 통해 통화합니다. Wi‑Fi 연결이 끊기면 통화가 종료됩니다."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi 통화가 켜져 있으면 휴대전화에서 환경설정과 신호 강도에 따라 Wi-Fi 네트워크나 이동통신사 네트워크를 통해 통화를 연결할 수 있습니다. 이 기능을 사용하기 전에 이동통신사에 문의하여 요금과 기타 세부정보를 알아보세요.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"긴급 주소"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi를 통해 긴급 전화를 걸 때 내 위치로 사용됨"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"비공개 DNS 기능에 관해 "<annotation id="url">"자세히 알아보기"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"사용"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"볼륨 키를 길게 눌러 열기"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"화면을 세 번 탭하여 열기"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"동작을 사용해 열기"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"새로운 접근성 동작 사용"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"접근성 동작 사용"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"이 기능을 사용하려면 화면 하단의 접근성 버튼 <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>을 탭하세요.\n\n기능 간에 전환하려면 접근성 버튼을 길게 터치하세요."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"이 기능을 사용하려면 화면에서 접근성 버튼을 탭하세요."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"이 기능을 사용하려면 볼륨 키 2개를 동시에 길게 누르세요."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g>에 연결"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"이 VPN을 연결 해제하시겠습니까?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"연결 해제"</string>
- <string name="vpn_version" msgid="41856553718304367">"버전 <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN 삭제"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"기존 VPN을 교체하시겠습니까?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"연결 유지 VPN을 설정하시겠습니까?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"길게"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"월렛 표시"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"잠금 화면 및 빠른 설정에서 월렛 액세스 허용"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR 코드 스캐너 표시"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"잠금 화면에서 QR 코드 스캐너에 액세스할 수 있도록 허용하세요."</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"기기 제어 표시"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"잠금 상태일 때 제어 기능에 액세스"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"사용 가능한 경우 두 줄 시계 표시"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"두 줄 시계"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"사용 안함"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"인터넷"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi 네트워크 찾기 및 연결"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"항공, 항공 안전"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"통화 및 SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi 통화"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index e7dd544..7262f10 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi-Fi аркылуу чалуу. Wi‑Fi жоголуп кетсе, чалуу үзүлөт."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi аркылуу чалуу күйгүзүлгөндө, телефонуңуз, жеке жөндөөлөрүңүзгө жана сигналдын күчтүүлүгүнө жараша, чалууларды Wi-Fi тармактары же операторуңуздун тармагы аркылуу багыттай алат. Бул функцияны күйгүзүүдөн мурда, төлөмдөрү жана башка маалымат боюнча операторуңузга кайрылыңыз.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Кырсыктаганда кайрыла турган дарек"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"WiFi аркылуу өзгөчө кырдаалдар кызматынын номерине чалганыңызда куткаруучуларга жайгашкан жериңиз катары көрүнөт"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Жеке DNS функциялары жөнүндө "<annotation id="url">"кененирээк маалымат"</annotation>" алыңыз"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Күйүк"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Ачуу үчүн үн баскычтарын коё бербей басып туруңуз"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ачуу үчүн экранды үч жолу таптаңыз"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Ачуу үчүн жаңсаңыз"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Жаңы атайын мүмкүнчүлүктөр жаңсоосун колдонуңуз"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Атайын мүмкүнчүлүктөр жаңсоосун колдонуу"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Бул функцияны колдонуу үчүн экрандын ылдый жагындагы атайын мүмкүнчүлүктөр баскычын <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> таптап коюңуз.\n\nБашка функцияга өтүү үчүн, Атайын мүмкүнчүлүктөр баскычын басып, кармап туруңуз."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Бул функцияны колдонуу үчүн экрандагы атайын мүмкүнчүлүктөр баскычын басыңыз."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Бул функцияны колдонуу үчүн үндү чоңойтуп/кичирейтүү баскычтарын коё бербей басып туруңуз."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> менен байланышуу"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Бул VPN ажыратылсынбы?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ажыратуу"</string>
- <string name="vpn_version" msgid="41856553718304367">"<xliff:g id="VERSION">%s</xliff:g> версиясы"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN профили унутулсун"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Учурдагы VPN алмаштырылсынбы?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Туруктуу VPN\'ди жөндөйсүзбү?"</string>
@@ -5091,7 +5093,7 @@
<string name="angle_enabled_app_set" msgid="7811829383833353021">"ANGLE иштетилген колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="graphics_driver_dashboard_title" msgid="5661084817492587796">"Графикалык драйвердин параметрлери"</string>
<string name="graphics_driver_dashboard_summary" msgid="6348759885315793654">"Графикалык драйвердин жөндөөлөрү өзгөрүлөт"</string>
- <string name="graphics_driver_footer_text" msgid="5123754522284046790">"Бир нече графикалык драйвер болгондо, түзмөктө орнотулган колдонмолор үчүн жаңыртылган графикалык драйверди колдонууну тандасаңыз болот."</string>
+ <string name="graphics_driver_footer_text" msgid="5123754522284046790">"Бир нече графикалык драйвер болгондо, түзмөктө орнотулган колдонмолор үчүн жаңырган графикалык драйверди колдонууну тандасаңыз болот."</string>
<string name="graphics_driver_all_apps_preference_title" msgid="1343065382898127360">"Бардык колдонмолор үчүн иштетүү"</string>
<string name="graphics_driver_app_preference_title" msgid="3133255818657706857">"Графикалык драйвер тандоо"</string>
<string name="graphics_driver_app_preference_default" msgid="764432460281859855">"Демейки"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Узун"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Капчыкты көрсөтүү"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Капчыкка кулпуланган экрандан жана ыкчам жөндөөлөрдөн өтөсүз"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR кодунун сканерин көрсөтүү"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"QR кодунун сканерине кулпуланган экрандан өтүүгө уруксат берүү"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Түзмөктү башкаруу элементтерин көрсөтүү"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Экран кулпуланып турганда түзмөктү башкарган виджеттерди колдоносуз"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Кош саптуу саат жеткиликтүү болгондо көрсөтүү"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Кош саптуу саат"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Өчүк"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM карталар"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi‑Fi тармактарын таап, туташуу"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"учак, учак режимине ылайыктуу"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Телефон чалуу жана SMS жөнөтүү"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi аркылуу чалуу"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 76842f1..72213ae 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ໂທຜ່ານ Wi‑Fi. ຫາກໃຊ້ Wi‑Fi ບໍ່ໄດ້, ການໂທຈະສິ້ນສຸດລົງ."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"ເມື່ອເປີດໃຊ້ການໂທ Wi-Fi, ໂທລະສັບຂອງທ່ານຈະສາມາດໂທຜ່ານເຄືອຂ່າຍ Wi-Fi ຫຼື ເຄືອຂ່າຍຜູ້ໃຫ້ບໍລິການຂອງທ່ານກໍໄດ້, ຂຶ້ນກັບການຕັ້ງຄ່າຂອງທ່ານ ແລະ ຂຶ້ນກັບວ່າສັນຍານເຄືອຂ່າຍໃດແຮງກວ່າ. ກ່ອນການເປີດໃຊ້ຄຸນສົມບັດນີ້, ກະລຸນາກວດສອບກັບຜູ້ໃຫ້ບໍລິການຂອງທ່ານກ່ຽວກັບຄ່າທຳນຽມ ແລະ ລາຍລະອຽດອື່ນໆ.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ທີ່ຢູ່ສຸກເສີນ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ໃຊ້ເປັນສະຖານທີ່ຂອງທ່ານເມື່ອທ່ານໂທສຸກເສີນຜ່ານທາງ Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"ສຶກສາເພີ່ມເຕີມ"</annotation>" ກ່ຽວກັບຄຸນສົມບັດ DNS ສ່ວນຕົວ"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ເປີດ"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ກົດປຸ່ມລະດັບສຽງຄ້າງໄວ້ເພື່ອເປີດ"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ແຕະໜ້າຈໍສາມເທື່ອເພື່ອເປີດ"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ໃຊ້ທ່າທາງເພື່ອເປີດ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ໃຊ້ທ່າທາງການຊ່ວຍເຂົ້າເຖິງໃໝ່"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ໃຊ້ທ່າທາງການຊ່ວຍເຂົ້າເຖິງ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ເພື່ອໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະໃສ່ປຸ່ມການຊ່ວຍເຂົ້າເຖິງ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ຢູ່ລຸ່ມສຸດຂອງໜ້າຈໍທ່ານ.\n\nເພື່ອສະຫຼັບລະຫວ່າງຄຸນສົມບັດ, ໃຫ້ແຕະໃສ່ປຸ່ມການຊ່ວຍເຂົ້າເຖິງຄ້າງໄວ້."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ເພື່ອໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະປຸ່ມການຊ່ວຍເຂົ້າເຖິງຢູ່ໜ້າຈໍທ່ານ."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ເພື່ອໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ກົດປຸ່ມລະດັບສຽງທັງສອງຄ້າງໄວ້."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"ເຊື່ອມຕໍ່ຫາ <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ຕັດການເຊື່ອມຕໍ່ VPN ນີ້ບໍ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ຕັດການເຊື່ອມຕໍ່"</string>
- <string name="vpn_version" msgid="41856553718304367">"ເວີຊັນ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"ລືມ VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ຂຽນທັບ VPN ທີ່ມີຢູ່ກ່ອນແລ້ວຂອງທ່ານບໍ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3948,22 +3950,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"ອະນຸຍາດໃຫ້ເຂົ້າເຖິງການແຈ້ງເຕືອນສຳລັບ <xliff:g id="SERVICE">%1$s</xliff:g> ບໍ?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"ການແຈ້ງເຕືອນແບບປັບຕົວໄດ້ຂອງ Android ຖືກແທນທີ່ດ້ວຍການແຈ້ງເຕືອນທີ່ປັບປຸງໃຫ້ດີຂຶ້ນໃນ Android 12 ແລ້ວ. ຄຸນສົມບັດນີ້ສະແດງຄຳສັ່ງ ແລະ ການຕອບກັບທີ່ແນະນຳ ແລະ ຈັດລະບຽບການແຈ້ງເຕືອນຂອງທ່ານ. \n\nການແຈ້ງເຕືອນທີ່ປັບປຸງໃຫ້ດີຂຶ້ນສາມາດເຂົ້າເຖິງເນື້ອຫາການແຈ້ງເຕືອນໄດ້, ຮວມທັງຂໍ້ມູນສ່ວນຕົວ ເຊັ່ນ: ຊື່ຜູ້ຕິດຕໍ່ ແລະ ຂໍ້ຄວາມ. ຄຸນສົມບັດນີ້ສາມາດປິດ ຫຼື ຕອບກັບຫາການແຈ້ງເຕືອນໄດ້ນຳ ເຊັ່ນ: ການຮັບສາຍໂທລະສັບ ແລະ ຄວບຄຸມໂໝດຫ້າມລົບກວນ."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"ອະນຸຍາດການເຂົ້າເຖິງການແຈ້ງເຕືອນສຳລັບ <xliff:g id="SERVICE">%1$s</xliff:g> ບໍ?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> ຈະສາມາດອ່ານການແຈ້ງເຕືອນທັງໝົດ, ຮວມທັງຂໍ້ມູນສ່ວນຕົວ ເຊັ່ນ: ຊື່ຜູ້ຕິດຕໍ່, ຮູບພາບ ແລະ ຂໍ້ຄວາມທີ່ທ່ານໄດ້ຮັບ. ນອກຈາກນັ້ນ, ແອັບນີ້ຍັງຈະສາມາດເລື່ອນ ຫຼື ປິດການແຈ້ງເຕືອນ ຫຼື ໃຊ້ຄຳສັ່ງຢູ່ປຸ່ມຕ່າງໆໃນການແຈ້ງເຕືອນໄດ້, ຮວມທັງການຮັບສາຍໂທລະສັບນຳ. \n\nນີ້ຈະເປັນການເຮັດໃຫ້ແອັບສາມາດເປີດ ຫຼື ປິດໂໝດຫ້າມລົບກວນ ແລະ ປ່ຽນການຕັ້ງຄ່າທີ່ກ່ຽວຂ້ອງໄດ້."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> ຈະສາມາດ:"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"ອ່ານການແຈ້ງເຕືອນຂອງທ່ານ"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"ມັນສາມາດອ່ານການແຈ້ງເຕືອນຂອງທ່ານ, ຮວມທັງຂໍ້ມູນສ່ວນຕົວ ເຊັ່ນ: ລາຍຊື່ຜູ້ຕິດຕໍ່, ຂໍ້ຄວາມ ແລະ ຮູບພາບ."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"ຕອບກັບຫາຂໍ້ຄວາມ"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"ມັນສາມາດຕອບກັບຫາຂໍ້ຄວາມ ແລະ ໃຊ້ຄຳສັ່ງຢູ່ປຸ່ມຕ່າງໆໃນການແຈ້ງເຕືອນໄດ້, ຮວມທັງການເລື່ອນໄປກ່ອນ ຫຼື ການປິດການແຈ້ງເຕືອນ ແລະ ການຮັບສາຍໂທລະສັບ."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"ບັນທຶກການຕັ້ງຄ່າ"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"ມັນສາມາດເປີດ ຫຼື ປິດໂໝດຫ້າມລົບກວນ ແລະ ປ່ຽນການຕັ້ງຄ່າທີ່ກ່ຽວຂ້ອງໄດ້."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"ຫາກທ່ານປິດການເຂົ້າເຖິງການແຈ້ງເຕືອນສຳລັບ <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, ການເຂົ້າເຖິງ ຫ້າມລົບກວນ ອາດຖືກປິດໄປນຳ."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"ປິດໄວ້"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"ຍົກເລີກ"</string>
@@ -5460,6 +5454,8 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ອະນຸຍາດການເຂົ້າເຖິງຕົວສະແກນລະຫັດ QR ຈາກໜ້າຈໍລັອກ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ສະແດງການຄວບຄຸມອຸປະກອນ"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ເຂົ້າເຖິງການຄວບຄຸມເມື່ອລັອກໄວ້"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ສະແດງໂມງສອງແຖວເມື່ອສາມາດໃຊ້ໄດ້"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ໂມງສອງແຖວ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5488,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ປິດ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ອິນເຕີເນັດ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ຊອກ ແລະ ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ຍົນ, ປອດໄພກັບຍົນ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ການໂທ ແລະ SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"ການໂທ Wi-Fi"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index f0f6c0e..365de4c 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -1273,7 +1273,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Skambinimas naudojant „Wi-Fi“. Nutrūkus „Wi‑Fi“ skambutis bus baigtas."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kai „Wi-Fi“ skambinimas įjungtas, telefonas gali nukreipti skambučius per „Wi-Fi“ tinklus arba operatoriaus tinklą, atsižvelgiant į jūsų nuostatas ir stipresnį signalą. Prieš įjungdami šią funkciją, pasikonsultuokite su operatoriumi dėl mokesčių ir kitos išsamios informacijos.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresas prireikus pagalbos"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Naudojama kaip vietos informacija, kai skambinate pagalbos numeriu naudodami „Wi-Fi“"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Sužinokite daugiau"</annotation>" apie privataus DNS funkcijas"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Įjungta"</string>
@@ -2370,7 +2371,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Norėdami atidaryti, palaikykite garsumo klavišus"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Norėdami atidaryti, triskart palieskite ekraną"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Naudokite gestą, kad atidarytumėte"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Naudokite naują pritaikomumo gestą"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Pritaikomumo gesto naudojimas"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Norėdami naudoti šią funkciją, ekrano apačioje palieskite pritaikomumo mygtuką <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nJei norite perjungti funkcijas, palieskite ir palaikykite pritaikomumo mygtuką."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Jei norite naudoti šią funkciją, palieskite pritaikomumo mygtuką ekrane."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Norėdami naudoti šią funkciją, paspauskite ir palaikykite abu garsumo klavišus."</string>
@@ -3327,7 +3328,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Prisijungti prie <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Atsijungti nuo šio VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Atsijungti"</string>
- <string name="vpn_version" msgid="41856553718304367">"<xliff:g id="VERSION">%s</xliff:g> versija"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Pamiršti VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Pakeisti esamą VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nustatyti visada įjungtą VPN?"</string>
@@ -5626,12 +5628,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Ilgai"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Rodyti piniginę"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Leiskite pasiekti piniginę iš užrakinimo ekrano ir sparčiųjų nustatymų"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Rodyti QR kodų skaitytuvą"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Leisti prieigą prie QR kodų skaitytuvo iš užrakinimo ekrano"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Rodyti įrenginio valdiklius"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Pasiekite valdiklius, kai užrakinta"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Rodyti vertikalųjį laikrodį, kai jis pasiekiamas"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Vertikalusis laikrodis"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5660,7 +5662,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Išjungta"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internetas"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Raskite „Wi‑Fi“ tinklus ir prisijunkite prie jų"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"lėktuvas, saugu naudoti lėktuvuose"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Skambučiai ir SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"„Wi-Fi“ skambinimas"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 874625b..dac6102 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -1253,7 +1253,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Zvans Wi-Fi tīklā. Ja Wi-Fi savienojums tiks zaudēts, zvans beigsies."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kad ir ieslēgti Wi-Fi zvani, tālrunis var novirzīt zvanus, izmantojot Wi-Fi tīklus vai mobilo sakaru operatora tīklu (atkarībā no jūsu iestatījumiem un tā, kurš signāls ir stiprāks). Pirms šīs funkcijas ieslēgšanas noskaidrojiet pie mobilo sakaru operatora par tarifiem un citu informāciju.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Ārkārtas adrese"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Tiks izmantota kā jūsu atrašanās vieta, ja zvanīsiet uz ārkārtas numuru, lietojot Wi‑Fi."</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Uzziniet vairāk"</annotation>" par privātām DNS funkcijām"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Ieslēgts"</string>
@@ -2346,7 +2347,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Lai atvērtu, turiet nospiestus skaļuma taustiņus"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Lai atvērtu, trīsreiz pieskarieties ekrānam"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Žesta izmantošana atvēršanai"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Jaunā pieejamības žesta izmantošana"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Pieejamības žesta izmantošana"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Lai izmantotu šo funkciju, ekrāna apakšdaļā pieskarieties pieejamības pogai <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nLai pārslēgtu funkcijas, pieskarieties pieejamības pogai un turiet to."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Lai izmantotu šo funkciju, pieskarieties ekrānā esošajai pieejamības pogai."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Lai izmantotu šo funkciju, nospiediet un turiet abus skaļuma taustiņus."</string>
@@ -2808,8 +2809,7 @@
<string name="power_camera" msgid="4778315081581293923">"Kamera"</string>
<string name="power_wifi" msgid="4614007837288250325">"Wi-Fi"</string>
<string name="power_bluetooth" msgid="5085900180846238196">"Bluetooth"</string>
- <!-- no translation found for power_cell (7793805106954398186) -->
- <skip />
+ <string name="power_cell" msgid="7793805106954398186">"Mobilais tīkls"</string>
<string name="power_phone" msgid="2768396619208561670">"Balss zvani"</string>
<string name="power_idle" product="tablet" msgid="4689321599298911021">"Planšetdators ir gaidstāvē"</string>
<string name="power_idle" product="default" msgid="9132502722499465252">"Tālrunis dīkstāvē"</string>
@@ -3288,7 +3288,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Savienojuma izveide ar <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vai pārtraukt šo VPN savienojumu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Pārtraukt savienojumu"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versija <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Aizmirst VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vai aizstāt esošo VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vai iestatīt vienmēr ieslēgtu VPN?"</string>
@@ -5538,12 +5539,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Ilgi"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Rādīt maku"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Atļaut piekļuvi makam no bloķēšanas ekrāna un ātrajiem iestatījumiem"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Rādīt ātrās atbildes koda skeneri"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Atļaut piekļuvi ātrās atbildes koda skenerim no bloķēšanas ekrāna"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Rādīt ierīču vadīklas"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Piekļūt vadīklām, kad ekrāns ir bloķēts"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Rādīt pulksteni divās rindās, ja tas ir pieejams"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Pulkstenis divās rindās"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5572,7 +5573,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Izslēgta"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internets"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM kartes"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Atrast Wi-Fi tīklus un veidot savienojumus ar tiem"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"lidojuma režīms, var izmantot lidojuma režīmu"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Zvani un īsziņas"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi zvani"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index ca8c324..765be09 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Повикувај преку Wi-Fi. Ако Wi‑Fi врската се загуби, повикот ќе заврши."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Кога е вклучена „Повици преку Wi-Fi“, телефонот може да пренасочува повици преку Wi-Fi мрежи или преку мрежата на вашиот оператор, во зависност од вашата поставка и од тоа кој сигнал е посилен. Пред да ја вклучите функцијата, распрашајте се кај операторот за трошоците и другите детали.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Адреса за итни случаи"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Се користи како ваша локација кога остварувате итен повик преку Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Дознајте повеќе"</annotation>" за функциите на приватен DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Вклучено"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Држете ги копчињата за јачина на звук за отворање"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Допрете го екранот трипати за отворање"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Користете движење за да отворите"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Користете го новото движење за пристапност"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Користете го движењето за пристапност"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"За да ја користите функцијава, допрете го копчето за пристапност <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> на дното на екранот.\n\nЗа префрлање помеѓу функциите, допрете и задржете го копчето за пристапност."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"За да ја користите функцијава, допрете го копчето за пристапност на екранот."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"За да ја користите функцијава, притиснете и задржете ги двете копчиња за јачина на звук."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Поврзи се со <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Да се исклучи оваа VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекини врска"</string>
- <string name="vpn_version" msgid="41856553718304367">"Верзија <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Заборави VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Да се замени постојната VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Да се постави „секогаш вклучена“ VPN?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Долго"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Прикажувај паричник"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Овозможете пристап до паричникот од заклучен екран и „Брзи поставки“"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Прикажувај го скенерот на QR-кодови"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Дозволи пристап до скенерот на QR-кодови од заклучен екран"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Прикажувај контроли за уреди"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Пристапувајте до контролите кога екранот е заклучен"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Прикажувај часовник со двојна линија кога е достапен"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Часовник со двојна линија"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Исклучен"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-картички"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Наоѓај и поврзувај се на Wi‑Fi мрежи"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"авион, безбедно за во авион"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Повици и SMS-пораки"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Повикување преку Wi-Fi"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 5b7a4b9..ea26d13 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"വൈഫൈ മുഖേനയുള്ള കോൾ. വൈഫൈ നഷ്ടപ്പെട്ടാൽ, കോൾ അവസാനിക്കും."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi കോളിംഗ് ഓണായിരിക്കുമ്പോൾ, നിങ്ങളുടെ മുൻഗണനയും ഏത് സിഗ്നലാണ് ശക്തമെന്നതും അടിസ്ഥാനമാക്കി ഫോണിന് Wi-Fi നെറ്റ്വർക്കോ കാരിയർ നെറ്റ്വർക്കോ വഴി കോളുകൾ റൂട്ട് ചെയ്യാനാകും. ഈ ഫീച്ചർ ഓണാക്കുന്നതിനുമുമ്പ്, നിരക്കുകളും മറ്റ് വിശദാംശങ്ങളും അറിയുന്നതിന് നിങ്ങളുടെ കാരിയറെ ബന്ധപ്പെടുക.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"അടിയന്തര വിലാസം"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"വൈഫൈ ഉപയോഗിച്ച് നിങ്ങളൊരു അടിയന്തര കോൾ ചെയ്യുമ്പോൾ, നിങ്ങളുടെ ലൊക്കേഷനായി ഉപയോഗിക്കപ്പെടും"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"സ്വകാര്യ DNS ഫീച്ചറുകളെ കുറിച്ച് "<annotation id="url">"കൂടുതലറിയുക"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ഓൺ ആണ്"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"തുറക്കുന്നതിന് വോളിയം കീകൾ അമർത്തിപ്പിടിക്കുക"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"തുറക്കുന്നതിന് സ്ക്രീൻ മൂന്ന് തവണ ടാപ്പ് ചെയ്യുക"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"തുറക്കാൻ വിരൽചലനം ഉപയോഗിക്കുക"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"പുതിയ ഉപയോഗസഹായി വിരൽചലനം ഉപയോഗിക്കുക"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ഉപയോഗസഹായി ജെസ്ച്ചർ ഉപയോഗിക്കുക"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ, നിങ്ങളുടെ സ്ക്രീനിന്റെ ചുവടെയുള്ള ഉപയോഗസഹായി ബട്ടൺ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ടാപ്പ് ചെയ്യുക.\n\nഫീച്ചറുകൾക്കിടയിൽ മാറാൻ, ഉപയോഗസഹായി ബട്ടൺ സ്പർശിച്ച് പിടിക്കുക."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ, നിങ്ങളുടെ സ്ക്രീനിലുള്ള ഉപയോഗസഹായി ബട്ടൺ ഉപയോഗിക്കുക."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ഈ ഫീച്ചർ ഉപയോഗിക്കാൻ, രണ്ട് വോളിയം കീകളും അമർത്തിപ്പിടിക്കുക."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്യുക"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ഈ VPN വിച്ഛേദിക്കണോ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"വിച്ഛേദിക്കുക"</string>
- <string name="vpn_version" msgid="41856553718304367">"പതിപ്പ് <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN മറക്കുക"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"നിലവിലുള്ള VPN-ന് പകരം പുതിയതാക്കണോ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"\'എല്ലായ്പ്പോഴും ഓൺ\' VPN സജ്ജമാക്കണോ?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ദൈർഘ്യമേറിയത്"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Wallet കാണിക്കുക"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"ലോക്ക് സ്ക്രീനിൽ നിന്നും ദ്രുത ക്രമീകരണത്തിൽ നിന്നും Wallet-ലേക്ക് ആക്സസ് അനുവദിക്കുക"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR കോഡ് സ്കാനർ കാണിക്കുക"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ലോക്ക് സ്ക്രീനിൽ നിന്ന് QR കോഡ് സ്കാനറിലേക്കുള്ള ആക്സസ് അനുവദിക്കുക"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ഉപകരണ നിയന്ത്രണങ്ങൾ കാണിക്കുക"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ലോക്ക് ചെയ്തിരിക്കുമ്പോൾ നിയന്ത്രണങ്ങൾ ആക്സസ് ചെയ്യുക"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ലഭ്യമാകുമ്പോൾ ഡബിൾലൈൻ ക്ലോക്ക് കാണിക്കുക"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ഡബിൾലൈൻ ക്ലോക്ക്"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ഓഫാണ്"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ഇന്റർനെറ്റ്"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"സിമ്മുകൾ"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"വൈഫൈ നെറ്റ്വർക്കുകൾ കണ്ടെത്തി അവയിലേക്ക് കണക്റ്റ് ചെയ്യുക"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"വിമാനം, വിമാന-സുരക്ഷിതം"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"കോളുകളും SMS-ഉം"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"വൈഫൈ കോളിംഗ്"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 7240bca..f44d304 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi-р залгана. Wi‑Fi салсан тохиолдолд залгахаа болино."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Таны утас Wi-Fi дуудлагыг асаалттай үед таны сонголт болон аль дохио илүү хүчтэй байгаагаас шалтгаалан Wi-Fi сүлжээ эсвэл таны оператор компанийн сүлжээгээр дуудлага хийх боломжтой. Энэ онцлогийг асаахаасаа өмнө оператор компанийнхаа төлбөр болон бусад дэлгэрэнгүйг шалгаж үзээрэй.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Яаралтай тусламжийн хаяг"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Та Wi‑Fi-р яаралтай дуудлага хийх үед таны байршил болгон ашиглана"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Хувийн DNS онцлогийн талаар "<annotation id="url">"дэлгэрэнгүй үзнэ үү"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Асаалттай"</string>
@@ -2322,7 +2323,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Нээхийн тулд дууны түвшний түлхүүрүүдийг удаан дар"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Нээхийн тулд дэлгэцийг гурав товшино уу"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Нээхийн тулд зангааг ашиглах"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Хандалтын шинэ зангаа ашиглах"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Энэ онцлогийг ашиглахын тулд дэлгэцийнхээ доод хэсэгт байрлах хандалтын товчлуур <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> дээр товшино уу.\n\nОнцлогуудын хооронд сэлгэхийн тулд хандалтын товчлуур дээр удаан дарна уу."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Энэ онцлогийг ашиглахын тулд дэлгэц дээрх хандалтын товчлуурыг товшино уу."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Энэ онцлогийг ашиглахын тулд дууны түвшний түлхүүрүүдийг зэрэг удаан дарна уу."</string>
@@ -3247,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> руу холбогдох"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Энэ VPN-г салгах уу?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Салгах"</string>
- <string name="vpn_version" msgid="41856553718304367">"Хувилбар <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN-г мартах"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Энэ VPN-г солих уу?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN-г тогтмол асаалттайгаар тохируулах уу?"</string>
@@ -3948,22 +3951,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"<xliff:g id="SERVICE">%1$s</xliff:g>-н мэдэгдлийн хандалтыг зөвшөөрөх үү?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"Сайжруулсан мэдэгдэл нь Android 12-н Орчинтой тохирсон мэдэгдлийг орлоно. Энэ онцлог нь санал болгосон үйлдэл, хариунуудыг харуулж, таны мэдэгдлийг цэгцэлнэ. \n\nСайжруулсан мэдэгдэл нь харилцагчийн нэр, мессеж зэрэг хувийн мэдээллийг оруулаад мэдэгдлийн контентод хандах боломжтой. Энэ онцлог мөн утасны дуудлагад хариулах болон Бүү саад бол горимыг хянах зэргээр мэдэгдлийг хаах эсвэл түүнд хариулах боломжтой."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"<xliff:g id="SERVICE">%1$s</xliff:g>-д мэдэгдлийн хандалтыг зөвшөөрөх үү?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> нь харилцагчийн нэр, зураг болон таны хүлээн авах мессежийн текст зэрэг таны хувийн мэдээллийг оруулаад бүх мэдэгдлийг унших боломжтой болно. Энэ апп мөн мэдэгдлүүдийг түр хойшлуулах, хаах эсвэл утасны дуудлагад хариулах зэргээр мэдэгдэл дэх товчлуурууд дээр үйлдэл хийх боломжтой. \n\nЭнэ нь мөн аппад Бүү саад бол горимыг асаах эсвэл унтраах, түүнчлэн холбоотой тохиргоог өөрчлөх чадамжийг өгнө."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> дараахыг хийх боломжтой болно:"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"Таны мэдэгдлийг унших"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"Энэ нь таны харилцагчид, мессеж болон зураг зэрэг хувийн мэдээллийг оруулаад мэдэгдлийг тань унших боломжтой."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"Мессежид хариу бичих"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"Энэ нь мэдэгдлийг түр хойшлуулах, хаах болон дуудлагад хариулах зэргийг оруулаад мессежид хариу бичих, мэдэгдэл дэх товчлуурууд дээр үйлдэл хийх боломжтой."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"Тохиргоог өөрчлөх"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"Энэ нь Бүү саад бол горимыг асаах, унтраах болон холбоотой тохиргоог өөрчлөх боломжтой."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Хэрэв та <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>-н мэдэгдлийн хандалтыг унтраавал Бүү саад бол хандалт мөн адил унтрах болно."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"Унтраах"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"Цуцлах"</string>
@@ -5456,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Удаан"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Түрийвч харуулах"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Түгжигдсэн дэлгэц болон шуурхай тохиргооноос түрийвчид хандахыг зөвшөөрнө"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR код сканнерыг харуулах"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Түгжигдсэн дэлгэцээс QR код сканнерт хандахыг зөвшөөрнө үү"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Төхөөрөмжийн хяналтыг харуулах"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Түгжсэн үед хяналтад хандана"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Боломжтой үед нь хоёр зураастай цаг харуулах"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Хоёр зураастай цаг"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5490,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Унтраалттай"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернэт"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi сүлжээг олж, холбогдоно уу"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"нислэг, нислэг аюулгүй"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Дуудлага, SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi дуудлага"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index b8c927d..143ec63 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"वाय-फायवरून कॉल करा. वाय-फाय गमावल्यास, कॉल संपेल."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"वाय-फाय कॉलिंग सुरू असताना, तुमचा फोन तुमच्या प्राधान्यावर आणि कोणता सिग्नल मजबूत आहे याच्या आधारावर, वाय-फाय नेटवर्क किंवा तुमच्या वाहकाच्या नेटवर्कद्वारे कॉल राउट करू शकतो. हे वैशिष्ट्य सुरू करण्यापूर्वी, फी आणि इतर तपशीलांच्या संबंधात तुमच्या वाहकास विचारा. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"संकटकालीन पत्ता"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"तुम्ही वाय-फाय वरून आणीबाणी कॉल केल्यावर हे तुमचे स्थान असल्याचे दाखवले जाते"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"खाजगी DNS वैशिष्ट्यांबद्दल "<annotation id="url">"अधिक जाणून घ्या"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"सुरू करा"</string>
@@ -2323,7 +2324,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"उघडण्यासाठी व्हॉल्यूम की धरून ठेवा"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"उघडण्यासाठी स्क्रीनवर तीनदा टॅप करा"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"उघडण्यासाठी जेश्चर वापरा"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"नवीन अॅक्सेसिबिलिटी जेश्चर वापरा"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ॲक्सेसिबिलिटी जेश्चर वापरा"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"हे वैशिष्ट्य वापरण्यासाठी, तुमच्या स्क्रीनच्या तळाशी असलेले ॲक्सेसिबिलिटी बटणावर <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> टॅप करा.\n\nवैशिष्टयांदरम्यान स्विच करण्यासाठी ॲक्सेसिबिलिटी बटणाला स्पर्श करा आणि धरून ठेवा."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"हे वैशिष्ट्य वापरण्यासाठी, तुमच्या स्क्रीनवरील अॅक्सेसिबिलिटी बटणावर टॅप करा."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"हे वैशिष्ट्य वापरण्यासाठी, दोन्ही व्हॉल्यूम की दाबा आणि धरून ठेवा."</string>
@@ -3030,7 +3031,7 @@
<string name="backup_erase_dialog_title" msgid="5892431263348766484"></string>
<string name="backup_erase_dialog_message" msgid="2250872501409574331">"Google सर्व्हरवरील आपल्या वाय-फाय पासवर्ड, बुकमार्क, इतर सेटिंग्ज आणि अॅप डेटाचा बॅक अप घेणे थांबवायचे तसेच सर्व प्रती मिटवायच्या?"</string>
<string name="fullbackup_erase_dialog_message" msgid="2379053988557486162">"डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि (अॅप्सद्वारे स्टोअर केलेल्या सेटिंग्ज आणि फाइल यासारख्या) अॅप डेटाचा बॅकअप घेणे थांबवायचे, तसेच दूरस्थ सर्व्हर वरील सर्व प्रती मिटवायच्या?"</string>
- <string name="fullbackup_data_summary" msgid="971587401251601473">"आपोआप डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि अॅप डेटाचा (जसे की अॅप्स द्वारे स्टोअर केलेल्या सेटिंग्ज आणि फाइल) दूरस्थपणे बॅकअप घ्या.\n\nतुम्ही स्वयंचलित बॅकअप सुरू करता तेव्हा, डिव्हाइस आणि अॅप डेटा ठराविक कालावधीने दूरस्थपणे सेव्ह केला जातो. अॅप डेटा हा संपर्क, मेसेज आणि फोटो यासारख्या संभाव्य संवेदनशील डेटासह अॅपने सेव्ह केलेला (डेव्हलपरच्या सेटिंग्जवर आधारित) कोणताही डेटा असू शकतो."</string>
+ <string name="fullbackup_data_summary" msgid="971587401251601473">"आपोआप डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि अॅप डेटाचा (जसे की अॅप्स द्वारे स्टोअर केलेल्या सेटिंग्ज आणि फाइल) दूरस्थपणे बॅकअप घ्या.\n\nतुम्ही स्वयंचलित बॅकअप सुरू करता तेव्हा, डिव्हाइस आणि अॅप डेटा ठरावीक कालावधीने दूरस्थपणे सेव्ह केला जातो. अॅप डेटा हा संपर्क, मेसेज आणि फोटो यासारख्या संभाव्य संवेदनशील डेटासह अॅपने सेव्ह केलेला (डेव्हलपरच्या सेटिंग्जवर आधारित) कोणताही डेटा असू शकतो."</string>
<string name="device_admin_settings_title" msgid="31392408594557070">"डिव्हाइस प्रशासक सेटिंग्ज"</string>
<string name="active_device_admin_msg" msgid="7744106305636543184">"डिव्हाइस अॅडमिन अॅप"</string>
<string name="remove_device_admin" msgid="3143059558744287259">"हे डिव्हाइस अॅडमिन अॅप निष्क्रिय करा"</string>
@@ -3248,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> शी कनेक्ट करा"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"हे VPN डिस्कनेक्ट करायचे?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिस्कनेक्ट करा"</string>
- <string name="vpn_version" msgid="41856553718304367">"आवृत्ती <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN विसरा"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"विद्यमान VPN पुनर्स्थित करायचे?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"नेहमी-सुरू VPN सेट करायचे?"</string>
@@ -5449,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"जास्त वेळासाठी"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"वॉलेट दाखवा"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"लॉक स्क्रीन आणि क्विक सेटिंग्जमधून वॉलेट ॲक्सेस करण्याची अनुमती द्या"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR कोड स्कॅनर दाखवा"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"लॉक स्क्रीनवरून QR कोड स्कॅनरच्या अॅक्सेसला अनुमती द्या"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"डिव्हाइस नियंत्रणे दाखवा"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"लॉक केलेली असताना नियंत्रणे अॅक्सेस करा"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"उपलब्ध असताना, ड्युअल क्लॉक दाखवा"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ड्युअल क्लॉक"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5483,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"बंद करा"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"इंटरनेट"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"सिम"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"वाय-फाय नेटवर्क शोधा आणि कनेक्ट करा"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"विमान, विमान सुरक्षित"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"कॉल आणि एसएमएस"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"वाय-फाय कॉलिंग"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 6bfe818..cd94f23 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Panggil melalui Wi‑Fi. Jika Wi-Fi terputus, panggilan akan ditamatkan."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Apabila panggilan Wi-Fi dihidupkan, telefon anda boleh menghalakan panggilan melalui rangkaian Wi-Fi atau rangkaian pembawa anda, bergantung pada pilihan anda dan isyarat yang lebih kuat. Sebelum menghidupkan ciri ini, semak dengan pembawa anda berkenaan bayaran dan butiran lain.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Alamat Kecemasan"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Digunakan sebagai lokasi anda apabila anda membuat panggilan kecemasan melalui Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Ketahui lebih lanjut"</annotation>" tentang ciri DNS Peribadi"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Hidup"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Tahan kekunci kelantangan untuk buka"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ketik skrin tiga kali untuk buka"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Gunakan gerak isyarat untuk buka"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Gunakan gerak isyarat kebolehaksesan baharu"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Gunakan gerak isyarat kebolehaksesan"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Untuk menggunakan ciri ini, ketik butang kebolehaksesan <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> di bahagian bawah skrin anda.\n\nUntuk menukar antara ciri, sentuh & tahan butang kebolehaksesan."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Untuk menggunakan ciri ini, ketik butang kebolehaksesan pada skrin anda."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Untuk menggunakan ciri ini, tekan & tahan kedua-dua kekunci kelantangan."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Sambung ke <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putuskan sambungan VPN ini?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putuskan sambungan"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versi <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Lupakan VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Gantikan VPN yang sedia ada?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Tetapkan VPN sentiasa hidup?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Panjang"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Tunjukkan wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Benarkan akses kepada wallet daripada skrin kunci dan tetapan pantas"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Tunjukkan Pengimbas Kod QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Benarkan akses kepada pengimbas kod QR daripada skrin kunci"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Tunjukkan kawalan peranti"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Akses kawalan apabila dikunci"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Tunjukkan jam dua baris apabila tersedia"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Jam dua baris"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Mati"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Cari dan sambung kepada rangkaian Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"pesawat, selamat pesawat"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Panggilan & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Panggilan Wi-Fi"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 1c54a3a..1f822b1 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi-Fi သုံး၍ ခေါ်ဆိုသည်။ Wi‑Fi မရတော့လျှင် ခေါ်ဆိုမှု ပြီးသွားပါမည်။"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi ခေါ်ဆိုမှု ဖွင့်ထားသည့်အခါ သင်၏ရွေးချယ်မှုနှင့် လိုင်းပိုမိမှုအပေါ် မူတည်၍ သင့်ဖုန်းသည် Wi-Fi ကွန်ရက်များ သို့မဟုတ် သင့် ဝန်ဆောင်မှုပေးသူ၏ ကွန်ရက်မှတစ်ဆင့် ခေါ်ဆိုမှုများ ထပ်ဆင့်ပို့နိုင်ပါသည်။ ဤဝန်ဆောင်မှုမဖွင့်မီ ကျသင့်ငွေနှင့် အခြားအသေးစိတ် အချက်များအတွက် သင့်ဝန်ဆောင်မှုပေးသူကို မေးမြန်းကြည့်ပါ။<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"အရေးပေါ်လိပ်စာ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi သုံး၍ အရေးပေါ်ဖုန်းခေါ်သောအခါ အသုံးပြုသည့် သင့်တည်နေရာ"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"သီးသန့် DNS ဝန်ဆောင်မှုများအကြောင်း "<annotation id="url">"ပိုမိုလေ့လာရန်"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ဖွင့်"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ဖွင့်ရန် အသံခလုတ်များကို နှိပ်ထားခြင်း"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ဖွင့်ရန် သုံးချက်တို့ခြင်း"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ဖွင့်ရန် လက်ဟန်ကို အသုံးပြုပါ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"အများသုံးစွဲနိုင်မှု လက်ဟန်အသစ်ကို အသုံးပြုရန်"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"အများသုံးစွဲနိုင်မှု လက်ဟန်ကို သုံးပါ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ဤဝန်ဆောင်မှု အသုံးပြုရန် သင့်ဖန်သားပြင် အောက်ခြေရှိ အများသုံးစွဲနိုင်မှု ခလုတ် <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ကို တို့ပါ။\n\nဝန်ဆောင်မှုများအကြား ပြောင်းရန် အများသုံးစွဲနိုင်မှုခလုတ်ကို ထိပြီး နှိပ်ထားပါ။"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ဤဝန်ဆောင်မှုကိုသုံးရန် သင့်ဖန်သားပြင်ပေါ်ရှိ အများသုံးစွဲနိုင်မှုခလုတ်ကို တို့ပါ။"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ဤဝန်ဆောင်မှု အသုံးပြုရန် အသံခလုတ် နှစ်ခုလုံးကို နှိပ်ထားပါ။"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> နှင့် ချိတ်ဆက်ခြင်း"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ဤ VPN အား ချိတ်ဆက်မှု ဖြုတ်လိုပါသလား။"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ဆက်သွယ်မှု ဖြတ်ရန်"</string>
- <string name="vpn_version" msgid="41856553718304367">"ဗားရှင်း <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ကိုမေ့လိုက်ပါ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ရှိပြီးသား VPN ကိုအစားထိုးမလား။"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN ကို အမြဲတမ်းဖွင့်ထားရန် သတ်မှတ်မလား။"</string>
@@ -3846,8 +3848,7 @@
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"လော့ခ်မျက်နှာပြင်၊ လော့ခ်ချမျက်နှာပြင်၊ ကျော်ရန်"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"အလုပ်ပရိုဖိုင်လော့ခ်ချထားချိန်"</string>
<string name="lock_screen_notifs_title" msgid="3412042692317304449">"လော့ခ်ဖန်သားပြင်ရှိ အကြောင်းကြားချက်များ"</string>
- <!-- no translation found for lock_screen_notifs_show_all_summary (4226586018375762117) -->
- <skip />
+ <string name="lock_screen_notifs_show_all_summary" msgid="4226586018375762117">"စကားဝိုင်း၊ မူရင်းနှင့် အသံတိတ် အကြောင်းကြားချက်များ ပြသည်"</string>
<string name="lock_screen_notifs_show_all" msgid="1300418674456749664">"စကားဝိုင်း၊ မူရင်း၊ အသံတိတ် အကြောင်းကြားချက်အားလုံး ပြရန်"</string>
<string name="lock_screen_notifs_show_alerting" msgid="6584682657382684566">"အရေးကြီးသော အကြောင်းကြားချက်များ ပြရန်"</string>
<string name="lock_screen_notifs_show_none" msgid="1941044980403067101">"အကြောင်းကြားချက်များ မပြပါနှင့်"</string>
@@ -5449,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"အရှည်"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Wallet ပြရန်"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"လော့ခ်မျက်နှာပြင်နှင့် အမြန် ဆက်တင်များမှ Wallet သို့ ဝင်သုံးခွင့်ပြုသည်"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR ကုဒ် စကင်ဖတ်စနစ် ပြသမှု"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"လော့ခ်မျက်နှာပြင်တွင် QR ကုဒ် စကင်ဖတ်စနစ် သုံးခွင့်ပြုနိုင်သည်"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"စက်ထိန်းစနစ် ပြရန်"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"လော့ခ်ချထားသည့်အခါ ထိန်းချုပ်မှုများကို ဝင်သုံးသည်"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"နှစ်တန်းပြေး နာရီကို ရနိုင်ပါက ပြပါ"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"နှစ်တန်းပြေး နာရီ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5483,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ပိတ်"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"အင်တာနက်"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ဆင်းမ်များ"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi ကွန်ရက်များကို ရှာဖွေပြီး ချိတ်ဆက်ရန်"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"လေယာဉ်ပျံ၊ လေယာဉ်ပျံမုဒ်တွင် လုံခြုံခြင်း"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ခေါ်ဆိုမှုများနှင့် SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi ခေါ်ဆိုမှု"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f47e80e..4e87f01 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Ring via Wi‑Fi. Samtalen avsluttes hvis du mister Wi‑Fi-tilkoblingen."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Når Wi-Fi-anrop er slått på, kan telefonen din dirigere telefonsamtaler via Wi-Fi-nettverk eller operatørens nettverk, avhengig av hva du har angitt i innstillingene og hvilket signal som er sterkest. Før du slår på denne funksjonen, er det viktig å sjekke gebyrer og andre detaljer med operatøren din.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresse for nødssituasjoner"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Brukes som posisjonen din når du gjør et nødanrop over Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Finn ut mer"</annotation>" om funksjoner for privat DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"På"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Hold inne volumtastene for å åpne"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Trippeltrykk på skjermen for å åpne"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Bruk bevegelse for å åpne"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Bruk den nye tilgjengelighetsbevegelsen"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Bruk tilgjengelighetsbevegelse"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"For å bruke denne funksjonen må du trykke på Tilgjengelighet-knappen <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> nederst på skjermen.\n\nFor å bytte mellom funksjoner, trykk og hold på Tilgjengelighet-knappen."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"For å bruke denne funksjonen, trykk på Tilgjengelighet-knappen på skjermen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"For å bruke denne funksjonen, trykk og hold inne begge volumtastene."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Koble til <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vil du koble fra dette VPN-et?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Koble fra"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versjon <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Glem VPN-profilen"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vil du erstatte det nåværende VPN-et?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vil du angi alltid på-VPN?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lang"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Vis Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Gi tilgang til Wallet fra låseskjermen og hurtiginnstillingene"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Vis QR-kodeskanneren"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Gi tilgang til QR-kodeskanneren fra låseskjermen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Vis enhetsstyring"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Få tilgang til kontroller når enheten er låst"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Vis klokken på to linjer når det er tilgjengelig"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Klokke på to linjer"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Av"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internett"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kort"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Finn og koble til Wi-Fi-nettverk"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"fly, trygg på fly"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Anrop og SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-anrop"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index ae4ef22..c389543 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi मार्फत कल गर्नुहोस्। Wi‑Fi नेटवर्कले काम गरेन भने सम्पर्क विच्छेद हुने छ।"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi कलिङ सक्रिय पारिएका बेला तपाईंको फोनले तपाईंको प्राथमिकता र सङ्केतको बलियोपनाका आधारमा कलहरूलाई Wi-Fi नेटवर्कहरू वा तपाईंको सेवा प्रदायकको नेटवर्कमार्फत पठाउन सक्छ। यो सुविधा सक्रिय गर्नुअघि लाग्ने शुल्क र अन्य विवरणहरूबारे बुझ्न आफ्नो सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"आपत्कालीन ठेगाना"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"तपाईंले Wi‑Fi मार्फत आपत्कालीन कल गर्दा उक्त ठेगानालाई तपाईंको स्थानको रूपमा प्रयोग गरिन्छ"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"DNS का सुविधाहरूबारे "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"सक्रिय गर्नुहोस्"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"खोल्नका लागि भोल्युम कीहरू थिचिराख्नुहोस्"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"यसलाई खोल्न स्क्रिनमा तीन पटक ट्याप गर्नुहोस्"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"खोल्नका लागि इसाराको प्रयोग गर्नुहोस्"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"पहुँचसम्बन्धी नयाँ इसारा प्रयोग गर्नुहोस्"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"एक्सेसिबिलिटी जेस्चर प्रयोग गर्नुहोस्"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"यो सुविधा प्रयोग गर्न आफ्नो स्क्रिनको पुछारमा रहेको पहुँचसम्बन्धी बटन <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> मा ट्याप गर्नुहोस्।\n\n एउटा सुविधाबाट अर्को सुविधामा जान पहुँचसम्बन्धी बटनमा थिचिराख्नुहोस्।"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"यो सुविधा प्रयोग गर्न स्क्रिनमा भएको एक्सेसिबिलिटी बटनमा ट्याप गर्नुहोस्।"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"यो सुविधा प्रयोग गर्न दुवै भोल्युम कुञ्जी थिचिराख्नुहोस्।"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> मा जोड्नुहोस्"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"यो VPN को जडान विच्छेद गर्ने हो?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिस्कनेक्ट गर्नुहोस्"</string>
- <string name="vpn_version" msgid="41856553718304367">"संस्करण <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN लाई बिर्सनुहोस्"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"विद्यमान VPN लाई बदल्ने हो?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"सधैँ-सक्रिय VPN लाई सेट गर्ने हो?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"लामो"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"वालेट देखाइयोस्"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"लक स्क्रिन र द्रुत सेटिङमार्फत वालेट प्रयोग गर्ने अनुमति दिनुहोस्"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR कोड स्क्यानर देखाइयोस्"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"लक स्क्रिनबाटै QR कोड स्क्यानर खोल्न दिइयोस्"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"डिभाइस नियन्त्रण गर्ने विजेटहरू देखाइयोस्"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"डिभाइस लक हुँदा डिभाइस नियन्त्रण गर्ने विजेटहरू देखाइयोस्"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"उपलब्ध भएका बेला दुई हरफको घडी देखाइयोस्"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"दुई हरफको घडी"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"अफ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"इन्टरनेट"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi नेटवर्कहरू खोजियोस् र कनेक्ट गरियोस्"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"हवाइजहाज, हवाइजहाजका सुरक्षित नेटवर्क"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"कल तथा SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi कलिङ"</string>
diff --git a/res/values-night/styles.xml b/res/values-night/styles.xml
index 87159b8..a388855 100644
--- a/res/values-night/styles.xml
+++ b/res/values-night/styles.xml
@@ -16,9 +16,18 @@
-->
<resources>
+ <style name="Widget.ActionBar.Base" parent="@android:style/Widget.DeviceDefault.ActionBar.Solid">
+ <item name="android:background">?android:attr/colorPrimaryDark</item>
+ </style>
-<style name="Widget.ActionBar.Base" parent="@android:style/Widget.DeviceDefault.ActionBar.Solid">
- <item name="android:background">?android:attr/colorPrimaryDark</item>
-</style>
+ <style name="TextAppearance.SimConfirmDialogList" parent="@style/TextAppearance.DialogMessage">
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ </style>
+ <style name="TextAppearance.SimConfirmDialogList.Summary">
+ <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+ <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
+ </style>
</resources>
\ No newline at end of file
diff --git a/res/values-night/themes.xml b/res/values-night/themes.xml
index 946cd91..4564827 100644
--- a/res/values-night/themes.xml
+++ b/res/values-night/themes.xml
@@ -34,6 +34,12 @@
<item name="android:colorBackground">@*android:color/surface_dark</item>
</style>
+ <style name="Theme.AlertDialog.Base.Material3" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
+ <item name="colorPrimary">@*android:color/primary_device_default_settings</item>
+ <item name="colorAccent">@*android:color/accent_device_default_dark</item>
+ <item name="android:colorBackground">@*android:color/surface_dark</item>
+ </style>
+
<!-- Material theme for the pages containing TabLayout and ViewPager -->
<style name="Theme.TabTheme" parent="@style/Theme.MaterialComponents.DayNight">
<item name="colorPrimary">@*android:color/edge_effect_device_default_dark</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 18a633b..00f26d7 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Bellen via wifi. Zonder wifi-signaal wordt het gesprek beëindigd."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Als bellen via wifi aanstaat, kan je telefoon gesprekken doorschakelen via wifi-netwerken of het netwerk van je provider, afhankelijk van je voorkeur en welk signaal sterker is. Voordat je deze functie aanzet, neem je contact met je provider op over de kosten en andere details.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adres bij noodgevallen"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Dit adres wordt gebruikt als je locatie wanneer je het noodnummer belt via wifi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Meer informatie"</annotation>" over privé-DNS-functies"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aan"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Volumetoetsen ingedrukt houden om te openen"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Tik drie keer op het scherm om te openen"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Gebaar gebruiken om te openen"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Nieuw toegankelijkheidsgebaar gebruiken"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Toegankelijkheidsgebaar gebruiken"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Als je deze functie wilt gebruiken, tik je onderaan het scherm op de knop Toegankelijkheid <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nTik op de knop Toegankelijkheid en houd deze vast om tussen functies te schakelen."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Als je deze functie wilt gebruiken, tik je op de knop Toegankelijkheid op het scherm."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Als je deze functie wilt gebruiken, houd je beide volumetoetsen ingedrukt."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Verbinding maken met <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Verbinding met dit VPN verbreken?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Verbinding verbreken"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versie <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN vergeten"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Bestaande VPN vervangen?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Always-on VPN instellen?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lang"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Portemonnee tonen"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Toegang tot portemonnee toestaan via vergrendelscherm en snelle instellingen"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR-codescanner tonen"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Toegang tot QR-codescanner toestaan vanaf vergrendelscherm"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Apparaatbediening tonen"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Toegangsbeheer indien vergrendeld"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Klok met 2 regels laten zien als die beschikbaar is"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Klok met 2 regels"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Uit"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Simkaarten"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Zoek en maak verbinding met wifi-netwerken"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"vliegtuig, geschikt voor vliegtuigen"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Gesprekken en sms\'jes"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Bellen via wifi"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 4d2d290..8edf39e 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ କଲ୍ କରନ୍ତୁ ଯଦି ୱାଇ-ଫାଇ ରହିବ ନାହିଁ, ତେବେ କଲ୍ ସମାପ୍ତ ହୋଇଯିବ।"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"ୱାଇ-ଫାଇ କଲିଂ ଚାଲୁ ଥିବା ବେଳେ, ଆପଣଙ୍କ ଫୋନ୍ ଆପଣଙ୍କ ପସନ୍ଦ ଉପରେ ନିର୍ଭର କରି ତଥା ୱାଇ-ଫାଇ ନେଟ୍ୱର୍କ କିମ୍ବା ଆପଣଙ୍କ ବାହକର ନେଟ୍ୱର୍କ ମଧ୍ୟରେ ଦୃଢ଼ ଥିବା ସିଗ୍ନାଲ୍ ମାଧ୍ୟମରେ କଲ୍ଗୁଡ଼ିକ ରୁଟ୍ କରିପାରେ। ଏହି ବୈଶିଷ୍ଟ୍ୟ ଚାଲୁ କରିବା ପୂର୍ବରୁ, ଶୁଳ୍କ ତଥା ଅନ୍ୟାନ୍ୟ ବିବରଣୀ ପାଇଁ ଆପଣଙ୍କ ବାହକଙ୍କ ସହ ସମ୍ପର୍କ କରନ୍ତୁ।<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ଜରୁରୀକାଳୀନ ଠିକଣା"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ ଆପଣ କୌଣସି ଆପାତକାଳୀନ କଲ୍ କରିବା ବେଳେ ଆପଣଙ୍କ ଲୋକେସନ୍ ରୂପେ ବ୍ୟବହୃତ ହୋଇଥାଏ"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"ବ୍ୟକ୍ତିଗତ DNS ଫିଚର୍ ବିଷୟରେ"</annotation>" ଅଧିକ ଜାଣନ୍ତୁ"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ଚାଲୁ ଅଛି"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ଖୋଲିବାକୁ ଭଲ୍ୟୁମ୍ କୀ\'ଗୁଡ଼ିକୁ ଧରି ରଖନ୍ତୁ"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ଖୋଲିବାକୁ ସ୍କ୍ରିନରେ ତିନି ଥର ଟାପ୍ କରନ୍ତୁ"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ଖୋଲିବା ପାଇଁ ଜେଶ୍ଚର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ନୂଆ ଆକ୍ସେସିବିଲିଟୀ ଜେଶ୍ଚର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ଆକ୍ସେସିବିଲିଟୀ ଜେଶ୍ଚର ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କ ସ୍କ୍ରିନର ନିମ୍ନରେ ଥିବା ଆକ୍ସେସିବିଲିଟୀ ବଟନ୍ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>ରେ ଟାପ୍ କରନ୍ତୁ। \n\n ଫିଚରଗୁଡ଼ିକ ମଧ୍ୟରେ ସ୍ୱିଚ୍ କରିବାକୁ ଆକ୍ସେସିବିଲିଟୀ ବଟନକୁ ଦାବି ଧରନ୍ତୁ।"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ଏହି ଫିଚରକୁ ବ୍ୟବହାର କରିବା ପାଇଁ, ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଆକ୍ସେସିବିଲିଟୀ ବଟନକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିବାକୁ, ଉଭୟ ଭଲ୍ୟୁମ୍ କୀ’କୁ ଦବାଇ ଧରନ୍ତୁ।"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> ସହ ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ଏହି VPNକୁ ବିଚ୍ଛିନ୍ନ କରିବେ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ"</string>
- <string name="vpn_version" msgid="41856553718304367">"ସଂସ୍କରଣ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPNକୁ ଭୁଲିଯାଅ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ପୂର୍ବରୁ ଥିବା VPNକୁ ବଦଳାଇବେ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ସର୍ବଦା-ଅନ୍ ଥିବା VPN ସେଟ୍ କରିବେ?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ଅଧିକ ସମୟ"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"ୱାଲେଟ୍ ଦେଖାନ୍ତୁ"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"ଲକ୍ ସ୍କ୍ରିନ୍ ଏବଂ କ୍ୱିକ୍ ସେଟିଂସରୁ ୱାଲେଟକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR କୋଡ ସ୍କାନର ଦେଖାନ୍ତୁ"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ଲକ ସ୍କ୍ରିନରୁ QR କୋଡ ସ୍କାନରକୁ ଆକ୍ସେସ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ଲକ୍ ଥିବା ସମୟରେ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ଉପଲବ୍ଧ ହେଲେ ଡବଲ-ଲାଇନ ଘଣ୍ଟା ଦେଖାନ୍ତୁ"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ଡବଲ-ଲାଇନ ଘଣ୍ଟା"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ବନ୍ଦ ଅଛି"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ଇଣ୍ଟରନେଟ୍"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMଗୁଡ଼ିକ"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ୱାଇ-ଫାଇ ନେଟୱାର୍କ ଖୋଜି ସେଥିରେ ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ଏୟାରପ୍ଲେନ୍, ଏୟାରପ୍ଲେନ୍-ସେଫ୍"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"କଲ୍ ଓ SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"ୱାଇ‑ଫାଇ କଲିଂ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 7d93c02..eaee1f9 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"ਵਾਈ-ਫਾਈ \'ਤੇ ਕਾਲ ਕਰੋ। ਵਾਈ-ਫਾਈ ਕਨੈਕਸ਼ਨ ਟੁੱਟਣ \'ਤੇ ਕਾਲ ਸਮਾਪਤ ਹੋ ਜਾਵੇਗੀ।"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"ਜਦੋਂ ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ ਚਾਲੂ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੀ ਤਰਜੀਹ ਅਤੇ ਕਿਹੜਾ ਸਿਗਨਲ ਵੱਧ ਮਜ਼ਬੂਤ ਹੈ, ਦੇ ਆਧਾਰ \'ਤੇ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਜਾਂ ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਦੇ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕਾਲਾਂ ਰੂਟ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਚਾਲੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਫੀਸ ਅਤੇ ਹੋਰ ਵੇਰਵਿਆਂ ਲਈ ਆਪਣੇ ਕੈਰੀਅਰ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ਸੰਕਟਕਾਲੀਨ ਪਤਾ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ਤੁਹਾਡੇ ਵੱਲੋਂ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਕਿਸੇ ਸੰਕਟਕਾਲੀਨ ਕਾਲ ਵੇਲੇ ਇਹ ਪਤਾ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ਨਿੱਜੀ DNS ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਬਾਰੇ "<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ਚਾਲੂ"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"ਖੋਲ੍ਹਣ ਲਈ ਅਵਾਜ਼ ਕੁੰਜੀਆਂ ਦਬਾਈ ਰੱਖੋ"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"ਖੋਲ੍ਹਣ ਲਈ ਸਕ੍ਰੀਨ \'ਤੇ ਟ੍ਰਿਪਲ ਟੈਪ ਕਰੋ"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ਖੋਲ੍ਹਣ ਲਈ ਸੰਕੇਤ ਵਰਤੋ"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ਨਵਾਂ ਪਹੁੰਚਯੋਗਤਾ ਸੰਕੇਤ ਵਰਤੋ"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ਪਹੁੰਚਯੋਗਤਾ ਸੰਬੰਧੀ ਇਸ਼ਾਰਾ ਵਰਤੋ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਵਰਤਣ ਲਈ, ਆਪਣੀ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਾਂ ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> \'ਤੇ ਟੈਪ ਕਰੋ।\n\nਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰਨ ਲਈ, ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ ਨੂੰ ਦਬਾ ਕੇ ਰੱਖੋ।"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਵਰਤਣ ਲਈ, ਆਪਣੀ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿੱਤੇ ਪਹੁੰਚਯੋਗਤਾ ਬਟਨ \'ਤੇ ਟੈਪ ਕਰੋ।"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਵਰਤਣ ਲਈ, ਦੋਵੇਂ ਅਵਾਜ਼ੀ ਕੁੰਜੀਆਂ ਨੂੰ ਦਬਾਈ ਰੱਖੋ।"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ਇਹ VPN ਡਿਸਕਨੈਕਟ ਕਰੀਏ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
- <string name="vpn_version" msgid="41856553718304367">"ਵਰਜਨ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ਨੂੰ ਭੁੱਲ ਜਾਓ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ਕੀ ਮੌਜੂਦਾ VPN ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ ਹੈ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ਕੀ ਹਮੇਸ਼ਾ-ਚਾਲੂ VPN ਨੂੰ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ਲੰਮਾ"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"ਵਾਲੇਟ ਦਿਖਾਓ"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"ਲਾਕ ਸਕ੍ਰੀਨ ਅਤੇ ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਤੋਂ ਵਾਲੇਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿਓ"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR ਕੋਡ ਸਕੈਨਰ ਦਿਖਾਓ"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"ਲਾਕ ਸਕ੍ਰੀਨ ਤੋਂ QR ਕੋਡ ਸਕੈਨਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ ਦਿਖਾਓ"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"ਲਾਕ ਹੋਣ \'ਤੇ ਕੰਟਰੋਲਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ਉਪਲਬਧ ਹੋਣ \'ਤੇ ਡਬਲ-ਲਾਈਨ ਘੜੀ ਦਿਖਾਓ"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ਡਬਲ-ਲਾਈਨ ਘੜੀ"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ਬੰਦ"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ਇੰਟਰਨੈੱਟ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ਸਿਮ"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਲੱਭ ਕੇ ਉਹਨਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ, ਹਵਾਈ-ਜਹਾਜ਼ ਸੁਰੱਖਿਅਤ ਮੋਡ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ਕਾਲਾਂ ਅਤੇ SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi ਕਾਲਿੰਗ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e359929..104fc86 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -1273,7 +1273,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Rozmowa przez Wi-Fi. Po utracie połączenia z Wi-Fi zostanie przerwana."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Po włączeniu opcji Połączenia przez Wi-Fi telefon może kierować połączenia przez sieci Wi-Fi lub sieć operatora w zależności od ustawień i siły sygnału. Zanim włączysz tę funkcję, sprawdź, jakie opłaty pobiera operator, i zapoznaj się z innymi warunkami usługi.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adres alarmowy"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Traktowany jako Twoja lokalizacja, gdy dzwonisz pod numer alarmowy przez Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Więcej informacji"</annotation>" o funkcjach prywatnego DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Włączony"</string>
@@ -2370,7 +2371,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Przytrzymaj przyciski głośności, aby otworzyć"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Kliknij ekran trzykrotnie, aby otworzyć"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otwieranie gestem"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Użyj nowego gestu ułatwień dostępu"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Aby użyć tej funkcji, kliknij przycisk ułatwień dostępu <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> u dołu ekranu.\n\nAby przełączać się między funkcjami, naciśnij i przytrzymaj przycisk ułatwień dostępu."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Aby użyć tej funkcji, kliknij przycisk ułatwień dostępu na ekranie."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Aby użyć tej funkcji, naciśnij i przytrzymaj oba przyciski głośności."</string>
@@ -3327,7 +3329,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Połącz z: <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odłączyć tę sieć VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odłącz"</string>
- <string name="vpn_version" msgid="41856553718304367">"Wersja <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zapomnij VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Zastąpić obecną sieć VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ustawić stały VPN?"</string>
@@ -5626,12 +5629,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Długo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Pokazuj portfel"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Zezwalaj na dostęp do portfela na ekranie blokady i w szybkich ustawieniach"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Pokaż Skaner kodów QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Zezwól na dostęp do skanera kodów QR na ekranie blokady"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Pokazuj sterowanie urządzeniami"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Kontrola dostępu po zablokowaniu"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Pokazuj zegar dwuwierszowy, jeśli jest dostępny"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Zegar dwuwierszowy"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5660,7 +5663,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Wyłączony"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Karty SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Znajduj sieci Wi‑Fi i łącz się z nimi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"samolot, bezpieczny w trybie samolotowym"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Połączenia i SMS-y"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Połączenia przez Wi-Fi"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 4543b93..4b7dab0 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Chamar via Wi-Fi. Sem sinal do Wi‑Fi, a chamada será encerrada."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Quando a \"chamada no Wi-Fi\" estiver ativada, seu smartphone poderá encaminhar chamadas por redes Wi-Fi ou pela rede da sua operadora, dependendo da sua preferência e de qual sinal estiver mais forte. Antes de ativar esse recurso, verifique as taxas e outros detalhes com sua operadora.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Endereço de emergência"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Usado como seu local quando você faz uma chamada de emergência usando o Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saiba mais"</annotation>" sobre recursos de DNS particular"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Ativado"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantenha as teclas de volume pression. para abrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Toque três vezes na tela para abrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Usar gesto para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usar o novo gesto de acessibilidade"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usar o gesto de acessibilidade"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para usar esse recurso, toque no botão de acessibilidade <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> na parte inferior da tela.\n\nPara alternar entre os recursos, toque no botão de acessibilidade e o mantenha pressionado."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para usar esse recurso, toque no botão de acessibilidade na sua tela."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para usar esse recurso, toque nas duas teclas de volume e as mantenha pressionadas."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Substituir VPN já existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Configurar VPN sempre ativa?"</string>
@@ -3950,22 +3952,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Permitir que o app <xliff:g id="SERVICE">%1$s</xliff:g> acesse as notificações?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"No Android 12, as notificações aprimoradas substituíram as notificações adaptáveis. Esse recurso exibe ações e respostas sugeridas, além de organizar suas notificações. \n\nAs notificações aprimoradas podem acessar o conteúdo das notificações, incluindo informações pessoais como nomes de contatos e mensagens. Elas também podem dispensar ou responder às notificações, como atender chamadas telefônicas e controlar o Não perturbe."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Permitir que <xliff:g id="SERVICE">%1$s</xliff:g> acesse as notificações?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"O app <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> poderá ler todas as notificações, incluindo informações pessoais como nomes de contatos, fotos e o texto das mensagens que você recebe. Ele também poderá adiar ou dispensar notificações ou acionar botões que elas contenham, inclusive para atender chamadas telefônicas. \n\nIsso também autoriza o app a ativar ou desativar o modo Não perturbe e mudar as configurações relacionadas."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"O app <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> poderá fazer o seguinte:"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"Ler suas notificações"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"Ele pode ler suas notificações, incluindo informações pessoais como contatos, mensagens e fotos."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"Responder a mensagens"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"Ele pode responder a mensagens e acionar botões nas notificações, como ativar a soneca, dispensar notificações ou atender chamadas."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"Mudar configurações"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"Ele pode ativar ou ativar o modo Não perturbe e mudar as configurações relacionadas a ele."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Se você desativar o acesso a notificações para <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, é possível que o acesso ao Não perturbe também seja desativado."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"Desativar"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"Cancelar"</string>
@@ -5458,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Longo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar carteira"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permitir acesso à carteira pela tela de bloqueio e pelas Configurações rápidas"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar leitor de código QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permitir acesso ao leitor de código QR na tela de bloqueio"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles do dispositivo"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Acessar controles quando bloqueado"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostrar o relógio de duas linhas quando disponível"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Relógio de duas linhas"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5492,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desativar"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Chips"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Encontrar redes Wi-Fi e se conectar a elas"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avião, segura para aviões"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chamadas e SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Chamada no Wi-Fi"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 35fd1d8..833fd25 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Chamada por Wi‑Fi. Se o Wi‑Fi for perdido, a chamada é terminada."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Se as chamadas Wi-Fi estiverem ativadas, o telemóvel pode encaminhar as chamadas através de redes Wi-Fi ou da rede do seu operador, consoante as suas preferências e do sinal que for mais forte. Antes de ativar esta funcionalidade, verifique junto do seu operador questões como tarifas, entre outras.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Endereço de emergência"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Utilizado como a sua localização quando efetuar chamadas de emergência através de Wi‑Fi."</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saiba mais"</annotation>" acerca das funcionalidades de DNS privado"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Ativado"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantenha premidas as teclas de volume para abrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Toque três vezes no ecrã para abrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Utilize gestos para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Utilize o novo gesto de acessibilidade"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Utilize o gesto de acessibilidade"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para utilizar esta funcionalidade, toque no botão Acessibilidade <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> na parte inferior do seu ecrã.\n\nPara alternar entre funcionalidades, toque sem soltar no botão Acessibilidade."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para utilizar esta funcionalidade, toque no botão Acessibilidade no seu ecrã."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para utilizar esta funcionalidade, prima sem soltar as teclas de volume."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Ligar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Pretende desligar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desligar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Pretende substituir a VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Pretende definir a VPN como sempre ativa?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Longa"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar carteira"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permita o acesso à carteira a partir do ecrã de bloqueio e das Definições rápidas"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar o Leitor de códigos QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permita o acesso ao Leitor de códigos QR a partir do ecrã de bloqueio"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controlos de dispositivos"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Aceda aos controlos quando o ecrã está bloqueado"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Apresente o relógio de duas linhas quando estiver disponível"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Relógio de duas linhas"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desligado"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Encontrar e ligar a redes Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avião, seguro para aviões"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chamadas e SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Chamadas Wi-Fi"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 4543b93..4b7dab0 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Chamar via Wi-Fi. Sem sinal do Wi‑Fi, a chamada será encerrada."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Quando a \"chamada no Wi-Fi\" estiver ativada, seu smartphone poderá encaminhar chamadas por redes Wi-Fi ou pela rede da sua operadora, dependendo da sua preferência e de qual sinal estiver mais forte. Antes de ativar esse recurso, verifique as taxas e outros detalhes com sua operadora.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Endereço de emergência"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Usado como seu local quando você faz uma chamada de emergência usando o Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Saiba mais"</annotation>" sobre recursos de DNS particular"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Ativado"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mantenha as teclas de volume pression. para abrir"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Toque três vezes na tela para abrir"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Usar gesto para abrir"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Usar o novo gesto de acessibilidade"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usar o gesto de acessibilidade"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para usar esse recurso, toque no botão de acessibilidade <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> na parte inferior da tela.\n\nPara alternar entre os recursos, toque no botão de acessibilidade e o mantenha pressionado."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para usar esse recurso, toque no botão de acessibilidade na sua tela."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para usar esse recurso, toque nas duas teclas de volume e as mantenha pressionadas."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Substituir VPN já existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Configurar VPN sempre ativa?"</string>
@@ -3950,22 +3952,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Permitir que o app <xliff:g id="SERVICE">%1$s</xliff:g> acesse as notificações?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"No Android 12, as notificações aprimoradas substituíram as notificações adaptáveis. Esse recurso exibe ações e respostas sugeridas, além de organizar suas notificações. \n\nAs notificações aprimoradas podem acessar o conteúdo das notificações, incluindo informações pessoais como nomes de contatos e mensagens. Elas também podem dispensar ou responder às notificações, como atender chamadas telefônicas e controlar o Não perturbe."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Permitir que <xliff:g id="SERVICE">%1$s</xliff:g> acesse as notificações?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"O app <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> poderá ler todas as notificações, incluindo informações pessoais como nomes de contatos, fotos e o texto das mensagens que você recebe. Ele também poderá adiar ou dispensar notificações ou acionar botões que elas contenham, inclusive para atender chamadas telefônicas. \n\nIsso também autoriza o app a ativar ou desativar o modo Não perturbe e mudar as configurações relacionadas."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"O app <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> poderá fazer o seguinte:"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"Ler suas notificações"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"Ele pode ler suas notificações, incluindo informações pessoais como contatos, mensagens e fotos."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"Responder a mensagens"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"Ele pode responder a mensagens e acionar botões nas notificações, como ativar a soneca, dispensar notificações ou atender chamadas."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"Mudar configurações"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"Ele pode ativar ou ativar o modo Não perturbe e mudar as configurações relacionadas a ele."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Se você desativar o acesso a notificações para <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, é possível que o acesso ao Não perturbe também seja desativado."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"Desativar"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"Cancelar"</string>
@@ -5458,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Longo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Mostrar carteira"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permitir acesso à carteira pela tela de bloqueio e pelas Configurações rápidas"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Mostrar leitor de código QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permitir acesso ao leitor de código QR na tela de bloqueio"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles do dispositivo"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Acessar controles quando bloqueado"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Mostrar o relógio de duas linhas quando disponível"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Relógio de duas linhas"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5492,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Desativar"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Chips"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Encontrar redes Wi-Fi e se conectar a elas"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avião, segura para aviões"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chamadas e SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Chamada no Wi-Fi"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 116dfc1..24e2c08 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -1255,7 +1255,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Apelați prin Wi‑Fi. Dacă pierdeți conexiunea Wi-Fi, apelul se încheie."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Când este activată Apelarea prin Wi-Fi, telefonul poate să redirecționeze apelurile prin rețelele Wi-Fi sau prin rețeaua operatorului, în funcție de preferință și de semnalul cu cea mai mare intensitate. Înainte să activați această funcție, consultați-vă operatorul în privința taxelor și altor detalii.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresă de urgență"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Folosită ca locație când efectuați un apel de urgență prin Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Aflați mai multe"</annotation>" despre funcțiile DNS-ului privat"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Activat"</string>
@@ -2348,7 +2349,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Apăsați lung tastele de volum pentru a deschide"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Atingeți ecranul de trei ori ca să deschideți"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Folosiți un gest pentru a deschide"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Folosiți noul gest de accesibilitate"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Folosiți gestul de accesibilitate"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Ca să folosiți această funcție, atingeți butonul de accesibilitate <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> din partea de jos a ecranului.\n\nCa să comutați între funcții, atingeți lung butonul de accesibilitate."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ca să folosiți această funcție, atingeți butonul de accesibilitate de pe ecran."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Ca să folosiți această funcție, apăsați lung ambele taste de volum."</string>
@@ -3289,7 +3290,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Conectați-vă la <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Doriți să vă deconectați de la această rețea VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Deconectați-vă"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versiunea <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Eliminați profilul VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Înlocuiți rețeaua VPN existentă?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setați rețeaua VPN ca activată permanent?"</string>
@@ -5539,12 +5541,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lungă"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Afișați Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Permiteți accesul la Wallet din ecranul de blocare și setările rapide"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Afișează aplicația Scanner de coduri QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permiteți accesul la aplicația Scanner de coduri QR de pe ecranul de blocare"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Afișați comenzile dispozitivului"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Accesați comenzile când ecranul este blocat"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Afișați ceasul cu două linii când este disponibil"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Ceas cu două linii"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5573,7 +5575,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Dezactivat"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Carduri SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Găsiți rețele Wi-Fi și conectați-vă"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"avion, sigure pentru avion"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Apeluri și SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Apelare prin Wi-Fi"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 53f0dae..8ee459b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -1273,7 +1273,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Звонки по Wi‑Fi. Если подключение прервется, звонок будет завершен."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Когда функция \"Звонки по Wi-Fi\" включена, для исходящих вызовов может использоваться как Wi-Fi, так и мобильная сеть (в зависимости от ваших предпочтений и уровня сигнала). Прежде чем включать эту функцию, свяжитесь со своим оператором и уточните стоимость и другие детали.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Адрес в чрезвычайных ситуациях"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Ваше местоположение при экстренном вызове по Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Подробнее "<annotation id="url">"о частном DNS-сервере"</annotation>"…"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Включен"</string>
@@ -2370,7 +2371,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Для запуска удерживайте кнопки громкости"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Нажмите трижды на экран, чтобы открыть"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Используйте жесты"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Используйте новый жест"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Используйте жест специальных возможностей"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Чтобы воспользоваться этой функцией, нажмите кнопку специальных возможностей <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> в нижней части экрана.\n\nДля переключения между функциями нажмите и удерживайте эту кнопку."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Чтобы воспользоваться этой функцией, нажмите кнопку специальных возможностей."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Чтобы воспользоваться этой функцией, нажмите и удерживайте обе кнопки регулировки громкости."</string>
@@ -3327,7 +3328,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Подключение к <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Отключиться от VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Да"</string>
- <string name="vpn_version" msgid="41856553718304367">"Версия <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Удалить VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Сменить текущую VPN-сеть?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Настроить постоянную VPN-сеть?"</string>
@@ -5626,12 +5628,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Долго"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Показывать кошелек"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Разрешить доступ к кошельку на заблокированном экране и в быстрых настройках"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Показывать сканер QR-кодов"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Разрешить доступ к сканеру QR-кодов на заблокированном экране"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Показывать виджеты управления устройством"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Разрешить доступ к виджетам управления устройством на заблокированном экране"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Показывать вертикальные часы, если они доступны"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Вертикальные часы"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5660,7 +5662,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Отключено"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-карты"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Находить сети Wi-Fi и подключаться к ним"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"самолет, безопасность для самолета"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Звонки и SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Звонки по Wi‑Fi"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 76dddb5..5993633 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi ඔස්සේ ඇමතුම. Wi‑Fi අහිමි වූයේ නම්, ඇමතුම අවසන් වෙයි."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi ඇමතීම සක්රීය වූ විට, ඔබේ දුරකථනයට ඔබේ මනාපයට සහ සංඥා ප්රබලතාවට අනුව, Wi-Fi ජාල හරහා හෝ ඔබේ වාහකයේ ජාලය හරහා ඇමතුම් ප්රතියොමු කළ හැක. මෙම විශේෂාංගය සක්රීය කිරීමට පෙර, ගාස්තු සහ අනෙකුත් විස්තර පිළිබඳව ඔබේ වාහකය සමඟ පරීක්ෂා කර ගන්න.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"හදිසි අවස්ථා ලිපිනය"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ඔබ Wi-Fi හරහා හදිසි ඇමතුමක් ලබා ගන්නා විට ඔබගේ ස්ථානය ලෙස භාවිතා වේ"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"පුද්ගලික DNS විශේෂාංග ගැන "<annotation id="url">"තව දැන ගන්න"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"සක්රියයි"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"විවෘත කිරීමට හඬ පරිමා යතුරු අල්ලාගෙන සිටින්න"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"විවෘත කිරීමට තිරය තෙවරක් තට්ටු කරන්න"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"විවෘත කිරීමට ඉංගිතය භාවිත කරන්න"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"නව ප්රවේශ්යතා ඉංගිතය භාවිත කරන්න"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ප්රවේශ්යතා ඉංගිතය භාවිත කරන්න"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"මෙම විශේෂාංගය භාවිත කිරීමට, ඔබේ තිරයේ පහළ ඇති <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ප්රවේශ්යතා බොත්තම තට්ටු කරන්න.\n\nවිශේෂාංග අතර මාරු වීමට, ප්රවේශ්යතා බොත්තම ස්පර්ශ කර අල්ලාගෙන සිටින්න."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"මෙම විශේෂාංගය භාවිත කිරීමට, ඔබගේ තිරයේ ඇති ප්රවේශ්යතා බොත්තම තට්ටු කරන්න."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"මෙම විශේෂාංගය භාවිත කිරීමට, හඬ පරිමා යතුරු දෙකම ඔබා අල්ලාගෙන සිටින්න"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> වෙත සම්බන්ධ කරන්න"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"මෙම VPN එක විසන්ධි කරන්නද?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"විසන්ධි කරන්න"</string>
- <string name="vpn_version" msgid="41856553718304367">"අනුවාදය <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN අමතක කරන්න"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"පවතින VPN ප්රතිස්ථාපනය කරන්නද?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"සැම විට ක්රියාත්මක VPN සකසන්නද?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"දිගු"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"පසුම්බිය පෙන්වන්න"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"තිර අගුල සහ ඉක්මන් සැකසීම් වෙතින් පසුම්බිය වෙත ප්රවේශය ඉඩ දෙන්න"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR කේත ස්කෑනරය පෙන්වන්න"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"අගුලු තිරයෙන් QR කේත ස්කෑනරය වෙත ප්රවේශ වීමට ඉඩ දෙන්න"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"උපාංග පාලන පෙන්වන්න"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"අගුලු දැමූ විට ප්රවේශ පාලන"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"ලබා ගත හැකි විට ද්විත්ව රේඛා ඔරලෝසුව පෙන්වන්න"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"ද්විත්ව රේඛා ඔරලෝසුව"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ක්රියාවිරහිතයි"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"අන්තර්ජාලය"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi ජාල සොයා ගෙන සම්බන්ධ වන්න"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ගුවන් යානා, ගුවන් යානා ආරක්ෂිත"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"ඇමතුම් & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi ඇමතීම"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c76f004..02a27e9 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -1275,7 +1275,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Volanie cez Wi‑Fi. Keď sa Wi‑Fi preruší, hovor sa ukončí."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Ak je zapnuté volanie cez Wi‑Fi, váš telefón môže smerovať volania cez siete Wi‑Fi alebo cez sieť vášho operátora. Závisí to od vašich preferencií a od toho, ktorý signál je silnejší. Pred zapnutím tejto funkcie kontaktujte svojho operátora a informujte sa o poplatkoch a ďalších podrobnostiach.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Tiesňová adresa"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Používa sa ako vaša poloha pri tiesňových volaniach cez Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Ďalšie informácie"</annotation>" o funkciách súkromného režimu DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Zapnuté"</string>
@@ -2372,7 +2373,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Otvorte podržaním tlačidiel hlasitosti"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Otvorenie troma klepnutiami na obrazovku"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Otváranie gestom"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Používanie nového gesta dostupnosti"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Použitie gesta dostupnosti"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Ak chcete použiť túto funkciu, klepnite na tlačidlo dostupnosti <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> v dolnej časti obrazovky.\n\nFunkcie prepnete pridržaním tlačidla dostupnosti."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ak chcete túto funkciu použiť, klepnite na tlačidlo dostupnosti na obrazovke."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Túto funkciu použijete tak, že pridržíte obe tlačidlá hlasitosti."</string>
@@ -3329,7 +3330,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Pripojiť k profilu <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odpojiť tento profil VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odpojiť"</string>
- <string name="vpn_version" msgid="41856553718304367">"Verzia <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Zabudnúť profil VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Nahradiť existujúcu sieť VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nastaviť sieť VPN, ktorá je vždy zapnutá?"</string>
@@ -5628,12 +5630,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dlhé"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Zobraziť peňaženku"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Povoľte prístup k peňaženke z uzamknutej obrazovky a rýchlych nastavení"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Zobraziť skener QR kódov"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Povolenie prístupu ku skeneru QR kódov na uzamknutej obrazovke"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Zobraziť ovládanie zariadení"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Prístup k ovládacím prvkom pri uzamknutí"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Zobrazovať hodiny na dva riadky (keď sú k dispozícii)"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Hodiny na dva riadky"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5662,7 +5664,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Vypnuté"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM karty"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Vyhľadať a pripojiť sa k sieťam Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"lietadlo, možné používať v lietadle"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Hovory a SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Volanie cez Wi‑Fi"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 6a74057..cf5ccd2 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -1275,7 +1275,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Klic prek omrežja Wi-Fi. Če izgubite povezavo Wi-Fi, bo klic končan."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Ko je vklopljeno klicanje prek omrežja Wi-Fi, lahko telefon preusmeri klice prek omrežij Wi-Fi ali omrežja operaterja na podlagi vaše nastavitve in moči signala. Pred vklopom te funkcije pri operaterju preverite cene in druge podrobnosti.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Naslov za nujne primere"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Uporabljen je kot vaš naslov, ko opravite klic v sili prek Wi‑Fi-ja"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Preberite več"</annotation>" o funkcijah zasebnega strežnika DNS."</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Vklopljeno"</string>
@@ -2372,7 +2373,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Za odpiranje pridržite tipki za glasnost"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Za odpiranje se trikrat dotaknite zaslona"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Odpiranje s potezo"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Uporaba nove poteze za ljudi s posebnimi potrebami"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Uporaba poteze za funkcije za ljudi s posebnimi potrebami"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Če želite uporabljati to funkcijo, se na dnu zaslona dotaknite gumba za funkcije za ljudi s posebnimi potrebami <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>.\n\nČe želite preklopiti med funkcijami, se dotaknite gumba za funkcije za ljudi s posebnimi potrebami in ga pridržite."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Za uporabo te funkcije se na zaslonu dotaknite gumba za funkcije za ljudi s posebnimi potrebami."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Če želite uporabljati to funkcijo, pritisnite obe tipki za glasnost in ju pridržite."</string>
@@ -3329,7 +3330,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Povezovanje z <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Prekinitev povezave s tem omrežjem VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini povezavo"</string>
- <string name="vpn_version" msgid="41856553718304367">"Različica <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Pozabi omrežje VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite zamenjati obstoječe omrežje VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ali želite, da je omrežje VPN stalno vklopljeno?"</string>
@@ -5628,12 +5630,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dolgo"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Prikaži denarnico"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Dovolite dostop do denarnice prek zaklenjenega zaslona in hitrih nastavitev."</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Prikaži optični bralnik kod QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Dovoli dostop do optičnega bralnika kod QR pri zaklenjenem zaslonu"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Prikaži kontrolnike naprave"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Dostopajte do kontrolnikov pri zaklenjenem zaslonu."</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Prikaz ure v dveh vrsticah, ko je na voljo"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Ura v dveh vrsticah"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5662,7 +5664,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Izklopljeno"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Kartice SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Poišči omrežja Wi-Fi in vzpostavi povezavo z njimi."</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"letalo, varno za uporabo v letalu"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Klici in sporočila SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Klicanje prek Wi-Fi-ja"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index eb8aa29..2346611 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Telefono nëpërmjet Wi-Fi. Nëse humb Wi‑Fi, telefonata do të mbyllet."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kur telefonata me Wi-Fi është e aktivizuar, telefoni mund t\'i kalojë telefonatat nëpërmjet rrjeteve Wi-Fi ose nëpërmjet rrjetit të operatorit celular, në varësi të preferencës dhe se cili sinjal është më i fortë. Para se të aktivizosh këtë funksion, kontakto me operatorin celular në lidhje me tarifat dhe detaje të tjera.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adresa e urgjencës"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Përdoret si vendndodhja jote kur kryen një telefonatë urgjence me Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Mëso më shumë"</annotation>" rreth funksioneve të \"DNS-së private\""</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Aktive"</string>
@@ -2322,7 +2323,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Mbaj shtypur tastet e volumit për ta hapur"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Trokit tri herë në ekran për ta hapur"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Përdor gjestin për të hapur"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Përdor gjestin e ri të qasshmërisë"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Për ta përdorur këtë veçori, trokit te butoni i qasshmërisë <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> në fund të ekranit.\n\nPër të ndërruar mes veçorive, mbaj të shtypur butonin e qasshmërisë."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Për të përdorur këtë veçori, trokit te butoni i qasshmërisë në ekranin tënd."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Për ta përdorur këtë veçori, mbaj shtypur të dyja tastet e volumit."</string>
@@ -2770,8 +2772,7 @@
<string name="power_camera" msgid="4778315081581293923">"Kamera"</string>
<string name="power_wifi" msgid="4614007837288250325">"Wi‑Fi"</string>
<string name="power_bluetooth" msgid="5085900180846238196">"Bluetooth-i"</string>
- <!-- no translation found for power_cell (7793805106954398186) -->
- <skip />
+ <string name="power_cell" msgid="7793805106954398186">"Rrjeti celular"</string>
<string name="power_phone" msgid="2768396619208561670">"Telefonatat zanore"</string>
<string name="power_idle" product="tablet" msgid="4689321599298911021">"Tableti në gjendje joaktive"</string>
<string name="power_idle" product="default" msgid="9132502722499465252">"Telefoni në gjendje joaktive"</string>
@@ -3248,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Lidhu me <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Shkëpute këtë rrjet VPN"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Shkëpute"</string>
- <string name="vpn_version" msgid="41856553718304367">"Versioni <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Harroje rrjetin VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Të zëvendësohet rrjeti ekzistues VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Të caktohet rrjeti VPN gjithmonë aktiv?"</string>
@@ -3847,8 +3849,7 @@
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Ekrani i kyçjes, ekrani i bllokimit, kapërce, anashkalo"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"Kur profili i punës është i kyçur"</string>
<string name="lock_screen_notifs_title" msgid="3412042692317304449">"Njoftimet në ekranin e kyçjes"</string>
- <!-- no translation found for lock_screen_notifs_show_all_summary (4226586018375762117) -->
- <skip />
+ <string name="lock_screen_notifs_show_all_summary" msgid="4226586018375762117">"Shfaq bisedat, të parazgjedhura dhe të heshtura"</string>
<string name="lock_screen_notifs_show_all" msgid="1300418674456749664">"Shfaq bisedat, të parazgjedhura dhe të heshtura"</string>
<string name="lock_screen_notifs_show_alerting" msgid="6584682657382684566">"Fshih bisedat dhe njoftimet e heshtura"</string>
<string name="lock_screen_notifs_show_none" msgid="1941044980403067101">"Mos shfaq asnjë njoftim"</string>
@@ -3950,22 +3951,14 @@
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"Të lejohet qasja te njoftimet për \"<xliff:g id="SERVICE">%1$s</xliff:g>\"?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"Njoftimet e përmirësuara kanë zëvendësuar \"Njoftimet me përshtatje të Android\" në Android 12. Kjo veçori shfaq veprimet dhe përgjigjet e sugjeruara dhe organizon njoftimet e tua. \n\nNjoftimet e përmirësuara mund të kenë qasje te përmbajtja e njoftimeve, duke përfshirë informacionet personale si emrat e kontakteve dhe mesazhet. Kjo veçori mund t\'i heqë ose të përgjigjet po ashtu për njoftimet, si p.sh. t\'u përgjigjet telefonatave, dhe të kontrollojë modalitetin \"Mos shqetëso\"."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"Të lejohet qasja te njoftimet për \"<xliff:g id="SERVICE">%1$s</xliff:g>\"?"</string>
- <!-- no translation found for notification_listener_security_warning_summary (4317764112725749020) -->
- <skip />
- <!-- no translation found for nls_warning_prompt (9143226910825830619) -->
- <skip />
- <!-- no translation found for nls_feature_read_title (7629713268744220437) -->
- <skip />
- <!-- no translation found for nls_feature_read_summary (1064698238110273593) -->
- <skip />
- <!-- no translation found for nls_feature_reply_title (7925455553821362039) -->
- <skip />
- <!-- no translation found for nls_feature_reply_summary (4492543411395565556) -->
- <skip />
- <!-- no translation found for nls_feature_settings_title (8208164329853194414) -->
- <skip />
- <!-- no translation found for nls_feature_settings_summary (3770028705648985689) -->
- <skip />
+ <string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> do të jetë në gjendje të lexojë të gjitha njoftimet, duke përfshirë informacione personale të tilla si emrat e kontakteve, fotografitë dhe tekstin e mesazheve që merr. Ky aplikacion do të jetë gjithashtu në gjendje të shtyjë alarmin, të heqë njoftimet ose të veprojë mbi butonat te njoftimet, duke përfshirë përgjigjen ndaj telefonatave. \n\nKjo do t\'i japë aplikacionit aftësinë për të aktivizuar ose çaktivizuar \"Mos shqetëso\" dhe për të ndryshuar cilësimet përkatëse."</string>
+ <string name="nls_warning_prompt" msgid="9143226910825830619">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> do të jetë në gjendje:"</string>
+ <string name="nls_feature_read_title" msgid="7629713268744220437">"Të lexojë njoftimet e tua"</string>
+ <string name="nls_feature_read_summary" msgid="1064698238110273593">"Mund të lexojë njoftimet e tua, duke përfshirë informacionet personale, si p.sh. kontaktet, mesazhet dhe fotografitë."</string>
+ <string name="nls_feature_reply_title" msgid="7925455553821362039">"T\'u përgjigjet mesazheve"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"Mund t\'u përgjigjet mesazheve dhe të kryejë veprime te butonat në njoftime, duke përfshirë shtyrjen ose heqjen e njoftimeve dhe përgjigjen ndaj telefonatave."</string>
+ <string name="nls_feature_settings_title" msgid="8208164329853194414">"Të ndryshojë cilësimet"</string>
+ <string name="nls_feature_settings_summary" msgid="3770028705648985689">"Mund të aktivizojë ose çaktivizojë modalitetin \"Mos shqetëso\" dhe të ndryshojë cilësimet që lidhen me të."</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Nëse çaktivizon qasjen te njoftimet për \"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>\", mund të çaktivizohet edhe qasja te \"Mos shqetëso\"."</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"Çaktivizo"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"Anulo"</string>
@@ -5458,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"E gjatë"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Shfaq portofolin"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Lejo qasjen te portofoli nga ekrani i kyçjes dhe cilësimet e shpejta"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Shfaq \"Skanerin e kodeve QR\""</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Lejo qasje te \"Skaneri i kodeve QR\" nga ekrani i kyçjes"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Shfaq kontrollet e pajisjes"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Qasu te kontrollet kur kyçet"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Shfaq orën analoge kur ofrohet"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Orë analoge"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5492,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Joaktiv"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Interneti"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Kartat SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Gjej rrjetet Wi‑Fi dhe lidhu me to"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"aeroplan, të sigurta për në aeroplan"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Telefonatat dhe SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Telefonatë me Wi-Fi"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 71d162c..eeda046 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -1253,7 +1253,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Позивање преко WiFi-а. Ако се Wi‑Fi веза изгуби, позив ће се завршити."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Када је позивање преко WiFi-а укључено, телефон може да преусмерава позиве преко WiFi мрежа или мреже мобилног оператера у зависности од тога које сте подешавање изабрали и који сигнал је јачи. Пре него што укључите ову функцију, информишите се код мобилног оператера о накнадама и другим детаљима.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Адреса за хитне случајеве"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Користи се као ваша локација када упутите хитни позив помоћу WiFi-а"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Сазнајте више"</annotation>" о функцијама Приватног DNS-а"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Укључено"</string>
@@ -2346,7 +2347,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Задржите тастере за јачину звука да бисте отворили"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Трипут додирните екран да бисте отворили"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Отварајте помоћу покрета"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Користите нови покрет за приступачност"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Користите покрет за приступачност"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Да бисте користили ову функцију, додирните дугме Приступачност <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> у дну екрана.\n\nДа бисте прелазили са једне функције на другу, додирните и задржите дугме Приступачност."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Да бисте користили ову функцију, додирните дугме Приступачност на екрану."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Да бисте користили ову функцију, притисните и задржите оба тастера за јачину звука."</string>
@@ -3287,7 +3288,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Повезивање на профил <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Желите ли да прекинете везу са овим VPN-ом?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекини везу"</string>
- <string name="vpn_version" msgid="41856553718304367">"Верзија <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Заборави VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Желите ли да замените постојећи VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Желите ли да подесите увек укључени VPN?"</string>
@@ -5537,12 +5539,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Дуго"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Прикажи новчаник"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Дозволите приступ новчанику са закључаног екрана и из брзих подешавања"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Прикажи скенер QR кода"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Дозвољава приступ скенеру QR кода са закључаног екрана"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Прикажи контроле уређаја"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Приступите контролама када је екран закључан"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Приказује дволинијски сат када је доступан"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Дволинијски сат"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5571,7 +5573,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Искључено"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Интернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM картице"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Пронађите WiFi мреже и повежите се са њима"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"авион, безбедно по авион"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Позиви и SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Позивање преко WiFi-а"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 68959b6..9a471a6 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Ring via Wi‑Fi. Samtalet avslutas om wifi-anslutningen wifi bryts."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"När wifi-samtal har aktiverats kan mobilen dirigera samtal via wifi-nätverk eller operatörens nätverk, beroende på dina inställningar och vilken signal som är starkast. Innan du aktiverar funktionen frågar du operatören om eventuella avgifter och annan information.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Adress för nödfall"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Används som din plats om du ringer nödsamtal via Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Läs mer"</annotation>" om privata DNS-funktioner"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"På"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Öppna genom att hålla ned volymknapparna"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Öppna genom att trycka snabbt tre gånger"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Öppna med rörelse"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Använd en ny tillgänglighetsrörelse"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Använda tillgänglighetsrörelser"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Tryck på tillgänglighetsknappen <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> längst ned på skärmen om du vill använda denna funktion.\n\nByt funktion genom att hålla in tillgänglighetsknappen."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Tryck på tillgänglighetsknappen på skärmen om du vill använda den här funktionen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Håll båda volymknapparna nedtryckta om du vill använda den här funktionen."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Anslut till <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vill du koppla från VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Koppla från"</string>
- <string name="vpn_version" msgid="41856553718304367">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Glöm VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vill du byta ut befintligt VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vill du ange Always-on VPN?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Lång"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Visa Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Tillåt åtkomst till Wallet från låsskärmen och snabbinställningar"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Visa QR-skanner"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Ge åtkomst till QR-skanner från låsskärmen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Visa enhetsstyrning"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Få åtkomst till kontroller när skärmen är låst"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Visa klocka på två rader när så är möjligt"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Klocka på två rader"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Av"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kort"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Hitta och anslut till wifi-nätverk"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"flygplan, flygplanssäker"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Samtal och sms"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wifi-samtal"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 498e6af..f760082 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Piga simu kupitia WI-FI. Ikiwa Wi-Fi haipatikani, simu itakatika."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wakati kipengele cha kupiga simu kupitia Wi-Fi kimewashwa, simu yako inaweza kuelekeza simu kupitia mitandao ya Wi-Fi au mtandao wa kampuni inayokupa huduma za simu, kutegemea mapendeleo yako na mawimbi yaliyo thabiti zaidi. Kabla ya kuwasha kipengele hiki, angalia ada na maelezo mengine kutoka kwenye kampuni inayokupa huduma za simu.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Anwani ya Dharura"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Inatumika kama anwani ya mahali ulipo ikiwa utapiga simu ukitumia Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Pata maelezo zaidi"</annotation>" kuhusu vipengele vya DNS ya Faragha"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Imewashwa"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Shikilia vitufe vya sauti ili ufungue"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Gusa skrini mara tatu ili ufungue"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Tumia ishara ili ufungue"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Tumia ishara mpya ya ufikivu"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Tumia ishara ya ufikivu"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Ili utumie kipengele hiki, gusa kitufe cha zana za ufikivu cha <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> katika sehemu ya chini ya skrini yako.\n\nIli ubadilishe kati ya vipengele, gusa na ushikilie kitufe cha zana za ufikivu."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ili utumie kipengele hiki, gusa kitufe cha zana za ufikivu kwenye skrini yako."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Ili utumie kipengele hiki, bonyeza na ushikilie vitufe vyote viwili vya sauti."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Unganisha kwa <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ungependa kuondoa VPN hii?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Kata muungnisho"</string>
- <string name="vpn_version" msgid="41856553718304367">"Toleo la <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Ondoa VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Ungependa kubadilisha VPN iliyopo?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ungependa kuweka VPN iliyowashwa kila mara?"</string>
@@ -5449,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Mrefu"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Onyesha kipochi"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Ruhusu kipochi kifikiwe kwenye skrini iliyofungwa na mipangilio ya haraka"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Onyesha Kichanganuzi cha Msimbo wa QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Ruhusu ufikiaji wa kichanganuzi cha msimbo wa QR kwenye skrini iliyofungwa"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Onyesha vidhibiti vya vifaa"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Fikia vidhibiti wakati skrini imefungwa"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Onyesha saa yenye mistari miwili inapopatikana"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Saa yenye mistari miwili"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5483,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Kimezimwa"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Intaneti"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Tafuta na uunganishe kwenye mitandao ya Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ndegeni, salama ya ndegeni"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Simu na SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Kupiga simu kupitia Wi-Fi"</string>
diff --git a/res/values-sw600dp/config.xml b/res/values-sw600dp/config.xml
index 543dfee..f22d7ba 100644
--- a/res/values-sw600dp/config.xml
+++ b/res/values-sw600dp/config.xml
@@ -19,4 +19,6 @@
<!-- Dashboard number of columns -->
<integer name="dashboard_num_columns">2</integer>
+ <!-- Whether to support large screen -->
+ <bool name="config_supported_large_screen">true</bool>
</resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 45c28dd..b357758 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -63,6 +63,9 @@
<dimen name="confirm_credentials_side_margin">0dp</dimen>
<dimen name="confirm_credentials_top_margin">64dp</dimen>
+ <!-- padding for font size preview in large screen -->
+ <dimen name="font_size_preview_padding_start">32dp</dimen>
+
<!-- Padding for screen pinning -->
<dimen name="screen_pinning_padding_start">40dp</dimen>
<dimen name="screen_pinning_padding_end">40dp</dimen>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 8abf3c0..227cd15 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"வைஃபை மூலம் அழை. வைஃபை இணைப்பை இழந்தால் அழைப்பும் துண்டிக்கப்படும்."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"’வைஃபை அழைப்பு’ இயக்கத்தில் இருக்கும்போது உங்கள் விருப்பத்தேர்வையும் சிக்னல் வலிமையையும் பொறுத்து வைஃபை நெட்வொர்க்குகளுக்கோ மொபைல் நெட்வொர்க்கிற்கோ உங்கள் மொபைல் அழைப்புகளைத் திசைதிருப்பும். இந்த அம்சத்தை இயக்குவதற்கு முன், கட்டணங்களையும் பிற விவரங்களையும் குறித்து உங்கள் மொபைல் நிறுவனத்திடமிருந்து தெரிந்துகொள்ளவும்.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"அவசர முகவரி"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"வைஃபை மூலம் அவசர அழைப்பை மேற்கொள்ளும்போது, உங்களின் அப்போதைய இருப்பிடமே உங்கள் முகவரியாகக் கருதப்படும்"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"தனிப்பட்ட DNS அம்சங்கள் பற்றி "<annotation id="url">"மேலும் அறிக"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ஆன்"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"திறக்க ஒலியளவு விசைகளைப் பிடித்திருக்கவும்"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"திறக்க திரையில் 3 முறை தட்டவும்"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"திறக்க சைகைகளைப் பயன்படுத்துதல்"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"புதிய அணுகல்தன்மை சைகையைப் பயன்படுத்துதல்"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"அணுகல்தன்மை சைகையைப் பயன்படுத்துதல்"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"இந்த அம்சத்தைப் பயன்படுத்த திரையின் கீழ்ப்பகுதியில் உள்ள அணுகல்தன்மை பட்டனை <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> தட்டவும்.\n\nஅம்சங்களுக்கு இடையே மாற, அணுகல்தன்மை பட்டனைத் தொட்டுப் பிடித்திருக்கவும்."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"இந்த அம்சத்தைப் பயன்படுத்த, உங்கள் திரையிலுள்ள அணுகல்தன்மை பட்டனைத் தட்டுங்கள்."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"இந்த அம்சத்தைப் பயன்படுத்த ஒலியளவுக்கான விசைகளை அழுத்திப் பிடித்திருக்கவும்."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> உடன் இணை"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"VPNஐத் துண்டிக்கவா?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"தொடர்பைத் துண்டி"</string>
- <string name="vpn_version" msgid="41856553718304367">"பதிப்பு <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPNஐ நீக்கு"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"தற்போதுள்ள VPNஐ மாற்றியமைக்கவா?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"எப்போதும் இயங்கும் VPNஐ அமைக்கவா?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"அதிகபட்சம்"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"வாலட்டைக் காட்டு"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"பூட்டுத் திரை, விரைவு அமைப்புகள் ஆகியவற்றில் இருந்து வாலட்டை அணுகலாம்"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR குறியீடு ஸ்கேனரைக் காட்டுதல்"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"பூட்டுத் திரையிலிருந்து QR குறியீடு ஸ்கேனருக்கு அணுகலை வழங்குங்கள்"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"சாதனக் கட்டுப்பாடுகளைக் காட்டு"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"சாதனம் பூட்டப்பட்டிருக்கும்போதும் கட்டுப்பாடுகளை அணுகலாம்"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"இயக்கத்தில் இருக்கும்போது இரட்டை-வரிக் கடிகாரத்தைக் காட்டும்"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"இரட்டை-வரிக் கடிகாரம்"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ஆஃப்"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"இணையம்"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"சிம்கள்"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"வைஃபை நெட்வொர்க்குகளைக் கண்டறிந்து அவற்றுடன் இணைக்கும்"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"விமானம், விமானப்-பாதுகாப்பு"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"அழைப்புகள் & மெசேஜ்"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"வைஃபை அழைப்பு"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 5a0bb55..e74e1b3 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -920,7 +920,7 @@
<string name="nfc_quick_toggle_summary" product="tablet" msgid="3622326550467939809">"టాబ్లెట్ NFC పరికరాన్ని తాకినప్పుడు డేటా పరస్పర మార్పిడిని అనుమతించండి"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="1460871052409162980">"ఫోన్ NFC పరికరాన్ని తాకినప్పుడు డేటా పరస్పర మార్పిడిని అనుమతించండి"</string>
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"NFCని ఆన్ చేయండి"</string>
- <string name="nfc_disclaimer_content" msgid="8256675597551036207">"NFC ఈ పరికరం మరియు ఇతర సమీప పరికరాలు లేదా చెల్లింపు టెర్మినల్లు, యాక్సెస్ రీడర్లు మరియు పరస్పర చర్య కలిగి ఉండే ప్రకటనలు లేదా ట్యాగ్ల వంటి లక్ష్యాల మధ్య డేటా మార్పిడి చేస్తుంది."</string>
+ <string name="nfc_disclaimer_content" msgid="8256675597551036207">"NFC ఈ పరికరం, ఇతర సమీప పరికరాలు లేదా పేమెంట్ టెర్మినల్లు, యాక్సెస్ రీడర్లతో పాటు ఇంటరాక్టివ్ యాడ్లు లేదా ట్యాగ్ల వంటి లక్ష్యాల మధ్య డేటా మార్పిడి చేస్తుంది."</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"NFC కోసం పరికరాన్ని అన్లాక్ చేయాలి"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="407654335737959071">"స్క్రీన్ అన్లాక్ అయి ఉన్నప్పుడు మాత్రమే NFC ఉపయోగాన్ని అనుమతించండి"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi ద్వారా కాల్ చేయగలరు. Wi‑Fiని కోల్పోతే, కాల్ ముగిసిపోతుంది."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi కాలింగ్ ఆన్లో ఉన్నప్పుడు, మీ ఫోన్ మీ ప్రాధాన్యత మరియు ఏ సిగ్నల్ సామర్థ్యం ఎక్కువగా ఉంది వంటి అంశాల ఆధారంగా Wi-Fi నెట్వర్క్లు లేదా మీ క్యారియర్ నెట్వర్క్ ద్వారా కాల్స్ వెళ్లేలా చేస్తుంది. ఈ ఫీచర్ను ఆన్ చేయడానికి ముందు, రుసుములు మరియు ఇతర వివరాల గురించి తెలుసుకోవడానికి మీ క్యారియర్ను సంప్రదించండి.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"అత్యవసర అడ్రస్"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi-Fi ద్వారా అత్యవసర కాల్ చేసినప్పుడు మీ లొకేషన్ ఉపయోగించబడుతుంది"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"ప్రైవేట్ DNS ఫీచర్ల గురించి "<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ఆన్"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"తెరవడానికి వాల్యూమ్ కీలను పట్టుకుని అలాగే ఉండండి"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"తెరవడానికి స్క్రీన్పై మూడు సార్లు ట్యాప్ చేయండి"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"తెరవడానికి సంజ్ఞను ఉపయోగించండి"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"కొత్త యాక్సెసిబిలిటీ సంజ్ఞను ఉపయోగించండి"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"యాక్సెసిబిలిటీ సంజ్ఞను ఉపయోగించండి"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"ఈ ఫీచర్ను ఉపయోగించడానికి, మీ స్క్రీన్ దిగువన ఉన్న యాక్సెసిబిలిటీ బటన్ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>ను ట్యాప్ చేయండి.\n\nఫీచర్ల మధ్య స్విచ్ అవడానికి, యాక్సెసిబిలిటీ బటన్ను నొక్కి & పట్టుకోండి."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"ఈ ఫీచర్ను ఉపయోగించడానికి, మీ స్క్రీన్ మీద ఉన్న యాక్సెసిబిలిటీ బటన్ను ట్యాప్ చేయండి."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"ఈ ఫీచర్ను ఉపయోగించడానికి, రెండు వాల్యూమ్ కీలను & నొక్కి పట్టుకోండి."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g>కి కనెక్ట్ చేయండి"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ఈ VPNను డిస్కనెక్ట్ చేయాలా?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"డిస్కనెక్ట్ చేయి"</string>
- <string name="vpn_version" msgid="41856553718304367">"వెర్షన్ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPNని విస్మరించు"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ఇప్పటికే ఉన్న VPNని భర్తీ చేయాలా?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ఎల్లప్పుడూ ఆన్లో ఉండే VPNని సెట్ చేయాలా?"</string>
@@ -3277,7 +3279,7 @@
<string name="vpn_no_network" msgid="7187593680049843763">"నెట్వర్క్ కనెక్షన్ లేదు. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి."</string>
<string name="vpn_disconnected" msgid="7694522069957717501">"VPN నుండి డిస్కనెక్ట్ చేయబడింది"</string>
<string name="vpn_disconnected_summary" msgid="721699709491697712">"దేనికీ కనెక్ట్ కాలేదు"</string>
- <string name="vpn_missing_cert" msgid="5397309964971068272">"ఒక సర్టిఫికెట్ లేదు. ప్రొఫైల్ని సవరించడానికి ప్రయత్నించండి."</string>
+ <string name="vpn_missing_cert" msgid="5397309964971068272">"ఒక సర్టిఫికెట్ లేదు. ప్రొఫైల్ను ఎడిట్ చేయడానికి ప్రయత్నించండి."</string>
<string name="trusted_credentials_system_tab" msgid="675362923690364722">"సిస్టమ్"</string>
<string name="trusted_credentials_user_tab" msgid="4978365619630094339">"యూజర్"</string>
<string name="trusted_credentials_disable_label" msgid="6649583220519447947">"డిజేబుల్"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"ఎక్కువ నిడివి"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"వాలెట్ను చూపించండి"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"లాక్ స్క్రీన్, త్వరిత సెట్టింగ్లు నుండి వాలెట్కు యాక్సెస్ను అనుమతించండి"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR కోడ్ స్కానర్ను చూపించండి"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"లాక్ స్క్రీన్ నుండి QR కోడ్ స్కానర్కు యాక్సెస్ను అనుమతించండి"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"డివైజ్ కంట్రోల్స్ను చూపించండి"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"లాక్ చేసినప్పుడు కంట్రోల్స్ను యాక్సెస్ చేయండి"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"అందుబాటులో ఉన్నప్పుడు, డబుల్ లైన్ గడియారం చూపండి"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"డబుల్ లైన్ గడియారం"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ఆఫ్"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"ఇంటర్నెట్"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMలు"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi నెట్వర్క్లను కనుగొనండి, కనెక్ట్ అవ్వండి"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"విమానం, విమానం-సురక్షిత"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"కాల్స్ & SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi‑Fi కాలింగ్"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 45a486c..7850f2c 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"โทรผ่าน Wi-Fi สายจะตัดหากสัญญาณ Wi‑Fi ขาดหาย"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"เมื่อเปิดการโทรผ่าน Wi-Fi โทรศัพท์จะกำหนดเส้นทางการโทรผ่านเครือข่าย Wi-Fi หรือเครือข่ายของผู้ให้บริการได้ ทั้งนี้ขึ้นอยู่กับค่ากำหนดของคุณและสัญญาณฝั่งที่แรงกว่า โปรดสอบถามค่าธรรมเนียมและรายละเอียดอื่นๆ กับผู้ให้บริการก่อนที่จะเปิดฟีเจอร์นี้<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ที่อยู่ฉุกเฉิน"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"ใช้เป็นตำแหน่งของคุณเมื่อโทรหาหมายเลขฉุกเฉินผ่าน Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation>"เกี่ยวกับฟีเจอร์ของ DNS ส่วนตัว"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"เปิด"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"กดปุ่มปรับระดับเสียงเพื่อเปิด"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"แตะหน้าจอ 3 ครั้งเพื่อเปิด"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"ใช้ท่าทางสัมผัสเพื่อเปิด"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"ใช้ท่าทางสัมผัสการช่วยเหลือพิเศษแบบใหม่"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ใช้ท่าทางสัมผัสการช่วยเหลือพิเศษ"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"หากต้องการใช้ฟีเจอร์นี้ ให้แตะปุ่มการช่วยเหลือพิเศษ <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ที่ด้านล่างของหน้าจอ\n\nหากต้องการสลับระหว่างฟีเจอร์ต่างๆ ให้แตะปุ่มการช่วยเหลือพิเศษค้างไว้"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"หากต้องการใช้ฟีเจอร์นี้ ให้แตะปุ่มการช่วยเหลือพิเศษบนหน้าจอ"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"หากต้องการใช้ฟีเจอร์นี้ ให้กดปุ่มปรับระดับเสียงทั้ง 2 ปุ่มค้างไว้"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"เชื่อมต่อกับ <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ยกเลิกการเชื่อมต่อ VPN นี้ไหม"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ยกเลิกการเชื่อมต่อ"</string>
- <string name="vpn_version" msgid="41856553718304367">"เวอร์ชัน <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"ลืม VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"แทนที่ VPN ที่มีอยู่หรือไม่"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ตั้งค่า VPN แบบเปิดตลอดเวลาหรือไม่"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"นาน"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"แสดง Wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"อนุญาตให้เข้าถึง Wallet จากหน้าจอล็อกและการตั้งค่าด่วน"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"แสดงเครื่องมือสแกนคิวอาร์โค้ด"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"อนุญาตให้เข้าถึงเครื่องมือสแกนคิวอาร์โค้ดจากหน้าจอล็อก"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"แสดงระบบควบคุมอุปกรณ์"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"เข้าถึงระบบควบคุมเมื่อล็อก"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"แสดงนาฬิกาแบบสองบรรทัดเมื่อเป็นไปได้"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"นาฬิกาแบบสองบรรทัด"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"ปิด"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"อินเทอร์เน็ต"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"ซิม"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"ค้นหาและเชื่อมต่อกับเครือข่าย Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"เครื่องบิน, ใช้บนเครื่องบินได้อย่างปลอดภัย"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"การโทรและ SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"การโทรผ่าน Wi-Fi"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 17b0d3d..a2e9a29 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Tumawag gamit ang Wi‑Fi. Kung mawawala ang Wi‑Fi, matatapos ang tawag."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kapag naka-on ang pagtawag gamit ang Wi-Fi, maaaring magruta ng mga tawag ang iyong telepono sa pamamagitan ng mga Wi-Fi network o network ng iyong carrier, depende sa iyong kagustuhan at kung aling signal ang mas malakas. Bago i-on ang feature na ito, sumangguni sa iyong carrier hinggil sa mga bayarin at iba pang detalye.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Pang-emergency na Address"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Ginagamit bilang iyong lokasyon kapag nagsagawa ka ng pang-emergency na tawag sa pamamagitan ng Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Matuto pa"</annotation>" tungkol sa mga feature ng Pribadong DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Naka-on"</string>
@@ -2322,7 +2323,8 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"I-hold ang mga volume key para buksan"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"I-triple tap ang screen para buksan"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Gumamit ng galaw para buksan"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Gamitin ang bagong galaw sa accessibility"</string>
+ <!-- no translation found for accessibility_tutorial_dialog_title_gesture_settings (6800684770875867559) -->
+ <skip />
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Para magamit ang feature na ito, i-tap ang button ng accessibility <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> sa ibaba ng iyong screen.\n\nPara magpalipat-lipat sa mga feature, pindutin nang matagal ang button ng accessibility."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Para gamitin ang feature na ito, i-tap ang button ng accessibility sa iyong screen."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Para magamit ang feature na ito, pindutin nang matagal ang parehong volume key."</string>
@@ -2770,8 +2772,7 @@
<string name="power_camera" msgid="4778315081581293923">"Camera"</string>
<string name="power_wifi" msgid="4614007837288250325">"Wi‑Fi"</string>
<string name="power_bluetooth" msgid="5085900180846238196">"Bluetooth"</string>
- <!-- no translation found for power_cell (7793805106954398186) -->
- <skip />
+ <string name="power_cell" msgid="7793805106954398186">"Mobile network"</string>
<string name="power_phone" msgid="2768396619208561670">"Mga boses ng tawag"</string>
<string name="power_idle" product="tablet" msgid="4689321599298911021">"Idle ang tablet"</string>
<string name="power_idle" product="default" msgid="9132502722499465252">"Idle ang telepono"</string>
@@ -3248,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Kumonekta sa <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putulin ang koneksyon ng VPN na ito?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putulin ang koneksyon"</string>
- <string name="vpn_version" msgid="41856553718304367">"Bersyon <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Kalimutan ang VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Gusto mo bang palitan ang dati nang VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Gusto mo bang itakda ang VPN na palaging naka-on?"</string>
@@ -3847,8 +3849,7 @@
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Lock screen, Lockscreen, Laktawan, I-bypass"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"Kapag naka-lock ang work profile"</string>
<string name="lock_screen_notifs_title" msgid="3412042692317304449">"Mga notification sa lock screen"</string>
- <!-- no translation found for lock_screen_notifs_show_all_summary (4226586018375762117) -->
- <skip />
+ <string name="lock_screen_notifs_show_all_summary" msgid="4226586018375762117">"Ipakita ang mga pag-uusap, default, at naka-silent"</string>
<string name="lock_screen_notifs_show_all" msgid="1300418674456749664">"Ipakita ang mga pag-uusap, default, at naka-silent"</string>
<string name="lock_screen_notifs_show_alerting" msgid="6584682657382684566">"Magtago ng mga naka-silent na pag-uusap at notification"</string>
<string name="lock_screen_notifs_show_none" msgid="1941044980403067101">"Huwag magpakita ng anumang notification"</string>
@@ -5450,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Matagal"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Ipakita ang wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Payagan ang pag-access sa wallet mula sa lock screen at mga mabilisang setting"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Ipakita ang Scanner ng QR code"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Payagan ang access sa scanner ng QR code mula sa lock screen"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Ipakita ang mga kontrol ng device"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"I-access ang mga kontrol kapag naka-lock"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Ipakita ang orasang may dalawang linya kapag available"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Orasang may dalawang linya"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Naka-off"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Mga SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Maghanap ng at kumonekta sa mga Wi‑Fi network"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"eroplano, ligtas gamitin sa eroplano"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Mga Tawag at SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Pagtawag gamit ang Wi‑Fi"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index a1859ba..be7ce71 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Kablosuz ağ üzerinden çağrı. Kablosuz ağ bağlantısı kesilirse çağrı sonlandırılır."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Kablosuz çağrı açık olduğunda, telefonunuz tercihinize ve hangi sinyalin daha güçlü olduğuna bağlı olarak çağrıları kablosuz ağlar veya operatörünüzün ağı üzerinden yönlendirebilir. Bu özelliği açmadan önce, ücretleri ve diğer ayrıntıları öğrenmek için operatörünüze danışın.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Acil Durum Adresi"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Kablosuz bağlantı üzerinden acil durum çağrısı yaptığınızda konumunuz olarak kullanılır"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Gizli DNS özellikleri ile ilgili "<annotation id="url">"daha fazla bilgi edinin"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Açık"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Açmak için ses düğmelerini basılı tutun"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Açmak için ekrana üç kez dokunun"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Açmak için hareketi kullanın"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Yeni erişilebilirlik hareketlerini kullanma"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Erişilebilirlik hareketini kullan"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Bu özelliği kullanmak için ekranınızın alt kısmındaki erişilebilirlik düğmesine <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> dokunun.\n\nÖzellikler arasında geçiş yapmak için erişilebilirlik düğmesine dokunup basılı tutun."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Bu özelliği kullanmak için ekranınızdaki erişilebilirlik düğmesine dokunun."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Bu özelliği kullanmak için ses tuşlarının ikisine birden basın ve basılı tutun."</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> profiline bağlan"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN\'nin bağlantısı kesilsin mi?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Bağlantıyı kes"</string>
- <string name="vpn_version" msgid="41856553718304367">"Sürüm <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN\'yi unut"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mevcut VPN değiştirilsin mi?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Her zaman açık VPN ayarlansın mı?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Uzun"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Cüzdanı göster"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Kilit ekranından ve hızlı ayarlardan cüzdana erişime izin verin"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR kodu tarayıcıyı göster"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Kilit ekranından QR kodu tarayıcıya erişime izin verin"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Cihaz denetimlerini göster"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Ekran kilitliyken kontrollere erişin"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Kullanılabilir olduğunda çift çizgili saati göster"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Çift çizgili saat"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Kapalı"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"İnternet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM\'ler"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Kablosuz ağları bulur ve bağlanır"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"uçak, uçakta kullanımı güvenli"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Aramalar ve SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Kablosuz çağrı"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 5e7ac44..714cd8b 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -1273,7 +1273,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Телефонувати через Wi-Fi. У разі втрати з’єднання з Wi-Fi виклик буде завершено."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Якщо ввімкнути Дзвінки через Wi-Fi, ваш телефон зможе спрямовувати дзвінки через мережі Wi-Fi або мережу оператора, залежно від налаштувань і потужності сигналу. Перш ніж увімкнути цю функцію, уточніть в оператора вартість послуги й інші деталі.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Екстрена адреса"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Використовується як адреса, коли ви телефонуєте в екстрені служби через Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Докладніше"</annotation>" про приватний DNS-сервер"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Увімкнено"</string>
@@ -2370,7 +2371,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Утримуйте клавіші гучності, щоб відкрити"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Тричі торкніться екрана, щоб відкрити"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Використовуйте жест"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Спробуйте новий жест для спеціальних можливостей"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Використовувати жест спеціальних можливостей"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Щоб використовувати цю функцію, натисніть кнопку спеціальних можливостей <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> унизу екрана.\n\nЩоб переключитися між функціями, натисніть і утримуйте кнопку спеціальних можливостей."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Щоб використовувати цю функцію, натисніть кнопку спеціальних можливостей на екрані."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Щоб використовувати цю функцію, натисніть і утримуйте обидві клавіші гучності."</string>
@@ -3327,7 +3328,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Під’єднатися до профілю <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Відключити цю мережу VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Відключити"</string>
- <string name="vpn_version" msgid="41856553718304367">"Версія <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Забути мережу VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Замінити наявну мережу VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Увімкнути постійну мережу VPN?"</string>
@@ -5626,12 +5628,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Довго"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Показати гаманець"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Дозволити доступ до гаманця із заблокованого екрана та швидких налаштувань"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Показати сканер QR-коду"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Дозволити доступ до сканера QR-коду на заблокованому екрані"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Показувати елементи керування пристроями"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Доступ до елементів керування на заблокованому екрані"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Показувати двосторонній годинник за наявності"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Дворядковий годинник"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5660,7 +5662,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Вимкнено"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Інтернет"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-карти"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Шукати мережі Wi‑Fi та підключатися до них"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"літак, безпечний у літаку"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Дзвінки та SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Дзвінки через Wi-Fi"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 2af3023..eeaecfb 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi پر کال کریں۔ اگر Wi‑Fi منقطع ہو جاتا ہے تو کال ختم ہو جائے گی۔"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi کالنگ آن ہونے پر، آپ کا فون آپ کی ترجیح اور زیادہ مضبوط سگنل کی بنیاد پر کالز کو Wi-Fi یا آپ کے کیریئر نیٹ ورک کے ذریعہ روٹ کر سکتا ہے۔ اس خصوصیت کو آن کرنے سے پہلے، فیس اور دیگر تفصیلات کے لیے اپنے کیریئر سے رابطہ کریں۔<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"ہنگامی پتہ"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"جب آپ Wi-Fi سے ہنگامی کال کرتے ہیں، تو آپ کے مقام کے طور پر استعمال ہوتا ہے"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"نجی DNS کی خصوصیات کے بارے میں "<annotation id="url">"مزید جانیں"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"آن"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"کھولنے کے لیے والیوم کی کلیدوں کو دبائیں رکھیں"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"کھولنے کے لیے اسکرین پر تین بار تھپتھپائیں"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"کھولنے کے لیے اشارہ استعمال کریں"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"نیا رسائی اشارہ استعمال کریں"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"ایکسیسبیلٹی اشارے کا استعمال کریں"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"یہ خصوصیت استعمال کرنے کیلئے، اپنی اسکرین کے سب سے نیچے<xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ایکسیسبیلٹی بٹن پر تھپتھپائیں۔\n\nخصوصیات کے درمیان سوئچ کرنے کے لیے ایکسیسبیلٹی بٹن کو ٹچ کریں اور دبائے رکھیں۔"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"اس خصوصیت کا استعمال کرنے کے لیے، اپنی اسکرین پر ایکسیسبیلٹی بٹن پر تھپتھپائیں۔"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"یہ خصوصیت استعمال کرنے کیلئے، والیوم کی دونوں کلیدوں کو دبائے رکھیں۔"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> سے مربوط کریں"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"اس VPN سے غیر منسلک کریں؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"غیر منسلک کریں"</string>
- <string name="vpn_version" msgid="41856553718304367">"ورژن <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPN بھول جائیں"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"موجودہ VPN بدلیں؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ہمیشہ آن VPN سیٹ کریں؟"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"طویل"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"والٹ دکھائیں"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"مقفل اسکرین اور فوری ترتیبات سے بٹوے تک رسائی کی اجازت دیں"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR کوڈ اسکینر دکھائیں"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"مقفل اسکرین سے QR کوڈ اسکینر تک رسائی کی اجازت دیں"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"آلے کے کنٹرولز دکھائیں"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"مقفل ہونے پر کنٹرولز تک رسائی حاصل کریں"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"دستیاب ہونے پر دو لائن والی گھڑی دکھائیں"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"دو لائن والی گھڑی"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"آف"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"انٹرنیٹ"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIMs"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi نیٹ ورکس تلاش کریں اور ان سے منسلک ہوں"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"ہوائی جہاز، ہوائی جہاز کیلئے محفوظ"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"کالز اور SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi کالنگ"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 4f09fe7..06e56f3 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Wi‑Fi orqali chaqiruv. Agar Wi‑Fi oʻchsa, chaqiruv tugatiladi."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Wi-Fi chaqiruv xizmati yoniqligida telefoningiz signal quvvatiga asoslanib Wi-Fi tarmoqlari yoki mobil internet orqali chaqiruvlarni amalga oshiradi. Ushbu xizmatni yoqib qoʻyishdan oldin oʻz mobil operatoringizdan narxlar va tafsilotlarni surishtirib oling.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Favqulodda holatlardagi manzili"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Wi‑Fi orqali favqulodda chaqiruv amalga oshirilganda joylashuvingizdan foydalaniladi"</string>
<string name="private_dns_help_message" msgid="851221502063782306">"Shaxsiy DNS imkoniyatlari haqida "<annotation id="url">"batafsil"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Yoniq"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Ochish uchun ikkala tovush tugmasini bosib turing."</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Ochish uchun ekranga uch marta bosing"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Imo-ishoralardan foydalaning"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Maxsus imkoniyatlarga oid yangi ishora"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Qulaylik ishorasidan foydalanish"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Bu funksiyadan foydalanish uchun ekraningiz pastidagi <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> maxsus imkoniyatlar tugmasi ustiga bosing.\n\nFunksiyalarni almashtirish uchun maxsus imkoniyatlar tugmasini bosib turing."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Bu funksiyadan foydalanish uchun ekrandagi Maxsus imkoniyatlar tugmasini bosing."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Bu funksiyadan foydalanish uchun ikkala tovush tugmasini bosib turing."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> tarmog‘iga ulanish"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN bilan aloqa uzilsinmi?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Aloqani uzish"</string>
- <string name="vpn_version" msgid="41856553718304367">"<xliff:g id="VERSION">%s</xliff:g> versiya"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"VPNni o‘chirish"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mavjud VPN tarmog‘i almashtirilsinmi?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Doimiy VPN o‘rnatilsinmi?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Uzun"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Hamyonni chiqarish"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Ekran qulfi va tezkor sozlamalardan hamyonga kirish uchun ruxsat bering"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"QR kod skanerini koʻrsatish"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Ekran qulfida QR kod skaneridan foydalanishga ruxsat berish"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Qurilma boshqaruv elementlarini chiqarish"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Qulflanganda boshqaruv elementlaridan foydalanish"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Imkon boʻlganda ikki chiziqli soat chiqsin"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Ikki chiziqli soat"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Oʻchiq"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM kartalar"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Wi-Fi tarmoqlarni topish va ularga ulanish"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"samolyot, samolyot uchun xavfsiz"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Chaqiruvlar va SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi chaqiruv"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index e6cabaf..2033c17 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Gọi qua Wi‑Fi. Nếu mất Wi‑Fi, cuộc gọi sẽ kết thúc."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Khi bạn bật tính năng gọi qua Wi-Fi, điện thoại có thể định tuyến cuộc gọi qua mạng Wi-Fi hoặc mạng của nhà mạng, tùy thuộc vào tùy chọn của bạn và tín hiệu nào mạnh hơn. Trước khi bật tính năng này, hãy hỏi nhà mạng của bạn về cước phí và các chi tiết khác.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Địa chỉ khẩn cấp"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Dùng làm vị trí của bạn khi bạn thực hiện cuộc gọi khẩn cấp qua Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Tìm hiểu thêm"</annotation>" về tính năng DNS riêng"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Đang bật"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Giữ các phím âm lượng để mở"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Nhấn 3 lần vào màn hình để mở"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Dùng cử chỉ để mở"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Dùng cử chỉ hỗ trợ tiếp cận mới"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Sử dụng cử chỉ hỗ trợ tiếp cận"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Để sử dụng tính năng này, hãy nhấn vào nút hỗ trợ tiếp cận <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ở cuối màn hình.\n\nĐể chuyển đổi giữa các tính năng, hãy chạm và giữ nút hỗ trợ tiếp cận."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Để sử dụng tính năng này, hãy nhấn vào nút hỗ trợ tiếp cận trên màn hình."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Để sử dụng tính năng này, hãy nhấn và giữ cả hai phím âm lượng."</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Kết nối với <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ngắt kết nối VPN này?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ngắt kết nối"</string>
- <string name="vpn_version" msgid="41856553718304367">"Phiên bản <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Xóa VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Thay thế VPN hiện có?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Đặt VPN luôn bật?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Dài"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Hiện ví"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Cho phép truy cập vào ví từ màn hình khóa và phần cài đặt nhanh"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Hiện Trình quét mã QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Cho phép truy cập vào trình quét mã QR từ màn hình khoá"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Hiện các nút điều khiển thiết bị"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Truy cập vào các nút điều khiển khi thiết bị đang khóa"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Hiện đồng hồ kép khi có"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Đồng hồ kép"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Đang tắt"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"Internet"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Tìm và kết nối với mạng Wi-Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"máy bay, an toàn trên máy bay"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Cuộc gọi và tin nhắn SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Gọi qua Wi-Fi"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1e89b4e..598512c 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"通过 WLAN 进行通话。如果 WLAN 连接中断,通话将会结束。"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"开启“WLAN 通话”功能后,您的手机可根据偏好设置并视信号强弱来选择通过 WLAN 网络或运营商网络来进行通话。开启此功能之前,请先向您的运营商咨询收费情况及其他详情。<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"紧急联系地址"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"当您通过 WLAN 网络拨打紧急呼救电话时,系统会判定您位于这个位置"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"详细了解"</annotation>"私人 DNS 功能"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"已开启"</string>
@@ -2053,7 +2054,7 @@
<string name="install_text" msgid="4558333621516996473">"安装"</string>
<string name="disable_text" msgid="5146002260857428005">"停用"</string>
<string name="enable_text" msgid="8570798764647110430">"启用"</string>
- <string name="clear_user_data_text" msgid="6773186434260397947">"清除存储空间"</string>
+ <string name="clear_user_data_text" msgid="6773186434260397947">"清空存储空间"</string>
<string name="app_factory_reset" msgid="8974044931667015201">"卸载更新"</string>
<string name="auto_launch_enable_text" msgid="8912714475823807798">"您已选择的一些活动默认会在此应用中打开。"</string>
<string name="always_allow_bind_appwidgets_text" msgid="2069415023986858324">"您已选择允许该应用创建微件并查看其数据。"</string>
@@ -2322,7 +2323,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"按住两个音量键即可打开"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"点按屏幕 3 次即可打开"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"使用手势打开"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"使用新的无障碍手势"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"使用无障碍功能启动手势"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"如需使用此功能,请点按屏幕底部的“无障碍”按钮 <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>。\n\n轻触并按住“无障碍”按钮,即可在多项功能之间切换。"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"如需使用此功能,请点按屏幕上的“无障碍”按钮。"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"如需使用此功能,请同时按住两个音量键。"</string>
@@ -3247,7 +3248,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"连接到<xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要断开与此 VPN 的连接吗?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"断开连接"</string>
- <string name="vpn_version" msgid="41856553718304367">"版本 <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"取消保存 VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要替换现有 VPN 吗?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要设置始终开启的 VPN 吗?"</string>
@@ -5448,12 +5450,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"长"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"显示电子钱包"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"允许从锁定屏幕和快捷设置使用电子钱包"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"显示二维码扫描器"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"允许在锁定屏幕的情况下使用二维码扫描器"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"显示设备控制器"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"锁定时访问控制器"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"显示双行时钟(若可用)"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"双行时钟"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5482,7 +5484,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"已关闭"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"互联网"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM 卡"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"查找并连接到 WLAN 网络"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"飞机,可在飞机上安全使用"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"通话和短信"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"WLAN 通话"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 74f7b8c..2f799fb 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"使用 Wi-Fi 通話。如果 Wi‑Fi 斷線,通話便會結束。"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"當開啟 Wi-Fi 通話時,您的手機可根據偏好設定及訊號強弱,選擇使用 Wi-Fi 網絡或流動網絡供應商的網絡安排來電轉駁。開啟此功能前,請向您的流動網絡供應商查詢收費及其他詳情。<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"緊急地址"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"當您使用 Wi-Fi 撥打緊急電話時,緊急服務會將該地址視作您所在位置的地址"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"進一步瞭解"</annotation>"私人 DNS 功能"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"開啟"</string>
@@ -2325,7 +2326,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"㩒住兩個音量鍵就可以打開"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"㩒螢幕 3 下就可以開"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"使用手勢即可開啟"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"使用新的無障礙手勢"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"使用無障礙手勢"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"要使用這項功能,請輕按螢幕底部的無障礙功能按鈕 <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>。\n\n如要切換不同的功能,按住無障礙功能按鈕即可。"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"如果要用呢項功能,請㩒一下畫面上面嘅無障礙功能掣。"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"如果要使用呢項功能,請同時㩒住兩個音量鍵。"</string>
@@ -3250,7 +3251,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"連接「<xliff:g id="PROFILE">%s</xliff:g>」"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要解除連結此 VPN 嗎?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"中斷連線"</string>
- <string name="vpn_version" msgid="41856553718304367">"版本為:<xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"刪除 VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要取代目前的 VPN 嗎?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要設定保持開啟的 VPN 嗎?"</string>
@@ -5451,12 +5453,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"長"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"顯示電子錢包"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"允許在上鎖畫面和快速設定使用電子錢包"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"顯示 QR 碼掃瞄器"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"允許在上鎖畫面存取 QR 碼掃瞄器"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"顯示裝置控制"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"鎖定時存取控制項"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"雙線時鐘 (如有)"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"雙線時鐘"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5485,7 +5487,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"關閉"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"互聯網"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM 卡"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"尋找並連接 Wi-Fi 網絡"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"飛行, 飛行安全"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"通話和短訊"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi 通話"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 905546e..67d1f78 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -1235,7 +1235,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"透過 Wi-Fi 進行通話。如果 Wi‑Fi 連線中斷,通話即會結束。"</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"開啟 Wi-Fi 通話功能之後,你的手機可依據你的偏好設定,透過 Wi-Fi 網路或你電信業者的網路通話 (選擇訊號較強者)。開啟這項功能前,請先與你的電信業者詢問費用與其他細節。<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"緊急地址"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"當你透過 Wi‑Fi 網路撥打緊急電話時,系統會判定你位於這個地址"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"進一步瞭解"</annotation>"私人 DNS 功能"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"已開啟"</string>
@@ -2324,7 +2325,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"按住音量調高鍵和調低鍵即可開啟"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"輕觸螢幕三下即可開啟"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"使用手勢啟用無障礙服務"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"使用全新的無障礙手勢"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"使用無障礙手勢"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"如要使用這項功能,請輕觸螢幕底部的無障礙工具按鈕 <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>。\n\n如要切換不同的功能,請按住無障礙工具按鈕。"</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"如要使用這項功能,請輕觸畫面上的無障礙工具按鈕。"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"如要使用這項功能,請同時按住音量調高鍵和調低鍵。"</string>
@@ -3249,7 +3250,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"連線到「<xliff:g id="PROFILE">%s</xliff:g>」"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要中斷這個 VPN 連線嗎?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"中斷連線"</string>
- <string name="vpn_version" msgid="41856553718304367">"版本 <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"清除 VPN 設定檔"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要取代現有的 VPN 嗎?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要設定永久連線的 VPN 嗎?"</string>
@@ -5450,12 +5452,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"長"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"顯示電子錢包"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"允許從螢幕鎖定畫面和快速設定選單中使用電子錢包"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"顯示 QR 圖碼掃描器"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"允許從螢幕鎖定畫面使用 QR 圖碼掃描器"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"顯示裝置控制"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"在鎖定畫面上顯示控制項"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"顯示雙行時鐘 (如果可用的話)"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"雙行時鐘"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5484,7 +5486,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"關閉"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"網際網路"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM 卡"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"尋找 Wi-Fi 網路並建立連線"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"飛航, 飛航安全"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"通話和簡訊"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi 通話"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 35f9228..ad57fcc 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -1233,7 +1233,8 @@
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Shaya nge-Wi-Fi. Uma i-Wi-Fi ilahleka, ikholi izophela."</string>
<string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Uma kuvulwe ukushaya kwe-Wi-Fi, ifoni yakho ingahambisa amakholi ngamanethiwekhi e-Wi-Fi kunethiwekhi yenkampani yakho yenethiwekhi, ngokuya ngokuncamelayo nokuthi iyiphi isignali eqinile. Ngaphambi kokuthi uvule lesi sici, hlola nenkampani yakho yenethiwekhi ngokuphathelene nezinkokhiso kanye neminye imininingwane. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
- <string name="emergency_address_title" msgid="3490633500025717573">"Ikheli eliphuthumayo"</string>
+ <!-- no translation found for emergency_address_title (8102786488994263815) -->
+ <skip />
<string name="emergency_address_summary" msgid="3022628750270626473">"Isetshenziswa njengendawo yakho uma wenza ikholi ephuthumayo nge-Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Funda kabanzi"</annotation>" mayelana nezici ze-Private DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"Kuvuliwe"</string>
@@ -2323,7 +2324,7 @@
<string name="accessibility_tutorial_dialog_title_volume" msgid="494810949830845234">"Bamba okhiye bevolumu ukuze uvule"</string>
<string name="accessibility_tutorial_dialog_title_triple" msgid="7089562919284464400">"Thepha kathathu isikrini ukuvula"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4965810097646659332">"Sebenzisa ukuthinta ukuze uvule"</string>
- <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="8485448068531147828">"Sebenzisa ukuthinta kokufinyelela okusha"</string>
+ <string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Sebenzisa ukufinyeleleka kokuthinta"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="7002398857479782303">"Ukuze usebenzise lesi sici, thepha inkinobho yokufinyeleleka <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> ngezansi kwesikrini.\n\nUkushintsha phakathi kwezici, thinta futhi ubambe inkinobho yokufinyeleleka."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="2551777208185138391">"Ukuze usebenzise lesi sici, thepha inkinobho yokufinyeleleka kusikrini sakho."</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="5033080515460519183">"Ukuze usebenzise lesi sici, cindezela futhi ubambe bobabili okhiye bevolumu."</string>
@@ -3248,7 +3249,8 @@
<string name="vpn_connect_to" msgid="216709261691085594">"Xhuma ku-<xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Nqamula le-VPN"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Nqamula"</string>
- <string name="vpn_version" msgid="41856553718304367">"Inguqulo engu-<xliff:g id="VERSION">%s</xliff:g>"</string>
+ <!-- no translation found for vpn_version (6344167191984400976) -->
+ <skip />
<string name="vpn_forget_long" msgid="729132269203870205">"Khohlwa i-VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Shintshanisa i-VPN ekhona?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setha i-VPN ehlala ivuliwe?"</string>
@@ -5449,12 +5451,12 @@
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Kude"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Bonisa i-wallet"</string>
<string name="lockscreen_privacy_wallet_summary" msgid="5388868513484652431">"Vumela ukufinyelela ku-wallet kusikrini sokukhiya namasethingi asheshayo"</string>
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_setting_toggle (1314577678356895256) -->
- <skip />
- <!-- no translation found for lockscreen_privacy_qr_code_scanner_summary (4577409244972250235) -->
- <skip />
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1314577678356895256">"Bonisa Iskena sekhodi ye-QR"</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Vumela ukufinyelela kuskena sekhodi ye-QR kusukela ekukhiyeni isikrini"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Bonisa izilawuli zensiza"</string>
<string name="lockscreen_privacy_controls_summary" msgid="6952176547084269909">"Izilawuli zokufinyelela uma kukhiyiwe"</string>
+ <string name="lockscreen_double_line_clock_summary" msgid="2916159550425093703">"Bonisa iwashi lolayini okabili uma litholakala"</string>
+ <string name="lockscreen_double_line_clock_setting_toggle" msgid="3408639316001688529">"Iwashi lolayini okabili"</string>
<string name="rtt_settings_title" msgid="7049259598645966354"></string>
<string name="rtt_settings_no_visible" msgid="7440356831140948382"></string>
<string name="rtt_settings_visible_during_call" msgid="7866181103286073700"></string>
@@ -5483,7 +5485,6 @@
<string name="bluetooth_setting_off" msgid="4965493913199554789">"Valiwe"</string>
<string name="provider_internet_settings" msgid="3831259474776313323">"I-inthanethi"</string>
<string name="provider_network_settings_title" msgid="2624756136016346774">"Ama-SIM"</string>
- <string name="wifi_switch_summary" msgid="3577154777754849024">"Funa futhi uxhume kumanethiwekhi we-Wi‑Fi"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"indiza, kuphephile kwindiza"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Amakholi ne-SMS"</string>
<string name="calls_and_sms_category" msgid="3788238090898237767">"Ukushaya kwe-Wi-Fi"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index d83e10d..48d698c 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -492,6 +492,9 @@
<!-- Whether to show Smooth Display feature in Settings Options -->
<bool name="config_show_smooth_display">false</bool>
+ <!-- Whether to show emergency settings in top-level Settings -->
+ <bool name="config_show_emergency_settings">true</bool>
+
<!-- Whether to show emergency gesture in Settings -->
<bool name="config_show_emergency_gesture_settings">true</bool>
@@ -532,6 +535,9 @@
<!-- Whether suw to support two panes -->
<bool name="config_suw_supported_two_panes">false</bool>
+ <!-- Whether to support large screen -->
+ <bool name="config_supported_large_screen">false</bool>
+
<!-- Display settings screen, Color mode options. Must be the same length and order as
config_color_mode_options_values below. Only the values that also appear in
frameworks/base/core/res/res/values/config.xml's config_availableColorModes are shown. -->
diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml
index e69664a..2841b69 100755
--- a/res/values/menu_keys.xml
+++ b/res/values/menu_keys.xml
@@ -26,6 +26,7 @@
<string name="menu_key_display" translatable="false">top_level_display</string>
<string name="menu_key_wallpaper" translatable="false">top_level_wallpaper</string>
<string name="menu_key_accessibility" translatable="false">top_level_accessibility</string>
+ <string name="menu_key_safety_center" translatable="false">top_level_safety_center</string>
<string name="menu_key_security" translatable="false">top_level_security</string>
<string name="menu_key_privacy" translatable="false">top_level_privacy</string>
<string name="menu_key_location" translatable="false">top_level_location</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 437db19..c6c0599 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -461,7 +461,7 @@
<string name="next_label">Next</string>
<!-- LocalePicker -->
- <!-- Title for the locale picker activity -->
+ <!-- Title for the locale picker activity. [CHAR LIMIT=30]-->
<string name="language_picker_title">Languages</string>
<!-- Menu item in the locale menu. Will remove the selected locales. [CHAR LIMIT=30] -->
@@ -470,6 +470,29 @@
<!-- "Button" that opens a language picker. The selected language gets added to the language list. [CHAR LIMIT=30] -->
<string name="add_a_language">Add a language</string>
+ <!-- Title of preference for the locale picker activity. [CHAR LIMIT=30]-->
+ <string name="app_locale_preference_title">Language</string>
+
+ <!-- Title for the locale picker category. [CHAR LIMIT=50]-->
+ <string name="locale_picker_category_title">Preferred Language</string>
+
+ <!-- Title for the Apps' locale menu entry [CHAR LIMIT=50]-->
+ <string name="app_locales_picker_menu_title">App Languages</string>
+
+ <!-- Summary for the app's locale picker activity. [CHAR LIMIT=50]-->
+ <string name="app_locale_picker_summary">Set the language for each app</string>
+
+ <!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
+ <string name="app_locale_picker_title">App Language</string>
+
+ <!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
+ <string name="suggested_app_locales_title">Suggested languages</string>
+
+ <!-- Category for the app's locale picker activity. [CHAR LIMIT=50]-->
+ <string name="all_supported_app_locales_title">All languages</string>
+
+ <!-- Description for the app without any supported languages. [CHAR LIMIT=NONE]-->
+ <string name="no_multiple_language_supported">The app is set to <xliff:g id="default_language" example="English (United States)">%1$s</xliff:g> by default and doesn\u2019t support multiple languages.</string>
<!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
<plurals name="dlg_remove_locales_title">
<item quantity="one">Remove selected language?</item>
@@ -722,6 +745,12 @@
<string name="security_status_title">Security status</string>
<!-- Summary for Security settings, explaining a few important settings under it [CHAR LIMIT=NONE] -->
<string name="security_dashboard_summary">Screen lock, Find My Device, app security</string>
+ <!-- TODO(b/208624929): Update to an UX approved title and char limit. -->
+ <!-- Main Settings screen setting title for the item that takes you to the safety center [CHAR LIMIT=60] -->
+ <string name="safety_center_title">Security & privacy</string>
+ <!-- TODO(b/208624929): Update to an UX approved summary and char limit. -->
+ <!-- Main Settings screen setting summary for the item that takes you to the safety center [CHAR LIMIT=60] -->
+ <string name="safety_center_summary">Permissions, screen lock, app security</string>
<!-- Face enrollment and settings --><skip />
<!-- Note: Update FaceEnrollParentalConsent.CONSENT_STRING_RESOURCES when any _consent_ strings are added or removed. -->
@@ -871,11 +900,9 @@
<!-- Dialog title shown when the user removes an enrollment [CHAR LIMIT=35] -->
<string name="security_settings_face_settings_remove_dialog_title">Delete face model?</string>
<!-- Dialog contents shown when the user removes an enrollment [CHAR LIMIT=NONE] -->
- <string name="security_settings_face_settings_remove_dialog_details">Your face model will be permanently and securely deleted. After deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
- <!-- Dialog title shown when the user chooses to delete an existing enrolled face model. [CHAR LIMIT=35] -->
- <string name="security_settings_face_settings_remove_model_dialog_title">Delete face model?</string>
- <!-- Dialog contents shown when the user chooses to delete an existing enrolled face model. [CHAR LIMIT=NONE] -->
- <string name="security_settings_face_settings_remove_model_dialog_details">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
+ <string name="security_settings_face_settings_remove_dialog_details">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
+ <!-- Dialog contents shown when the user removes an enrollment when configured as a convenience [CHAR LIMIT=NONE] -->
+ <string name="security_settings_face_settings_remove_dialog_details_convenience">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone.</string>
<!-- Subtitle shown for contextual setting face enrollment [CHAR LIMIT=NONE] -->
<string name="security_settings_face_settings_context_subtitle">Use Face Unlock to unlock your phone</string>
@@ -1057,7 +1084,7 @@
<!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
<string name="security_settings_fingerprint_enroll_start_message">Put your finger on the sensor and lift after you feel a vibration</string>
<!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
- <string name="security_settings_udfps_enroll_start_message">Keep your finger on the sensor until you feel a vibration</string>
+ <string name="security_settings_udfps_enroll_start_message">Keep your fingerprint flat on the sensor until you feel a vibration</string>
<!-- Title shown in fingerprint enrollment [CHAR LIMIT=NONE]-->
<string name="security_settings_fingerprint_enroll_udfps_title">Touch & hold the fingerprint sensor</string>
<!-- Title shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=40] -->
@@ -1073,7 +1100,7 @@
<!-- Title shown during fingerprint enrollment that instructs the user to enroll their fingertip [CHAR LIMIT=80] -->
<string name="security_settings_udfps_enroll_fingertip_title">Place the tip of your finger on the sensor</string>
<!-- Title shown during fingerprint enrollment that instructs the user to enroll the edges of their finger [CHAR LIMIT=80] -->
- <string name="security_settings_udfps_enroll_edge_title">Finally, place the edges of your finger</string>
+ <string name="security_settings_udfps_enroll_edge_title">Finally, use the edges of your finger</string>
<!-- Message shown during fingerprint enrollment that instructs the user to enroll the edges of their finger [CHAR LIMIT=160] -->
<string name="security_settings_udfps_enroll_edge_message">Place the side of your fingerprint on the sensor and hold, then switch to the other side</string>
<!-- Message shown in fingerprint enrollment asking users to repeat touching the fingerprint sensor. [CHAR LIMIT=160] -->
@@ -3222,6 +3249,8 @@
<string name="screensaver_settings_when_to_dream">When to start</string>
<!-- Dream settings screen, action label, current selected screen saver -->
<string name="screensaver_settings_current">Current screen saver</string>
+ <!-- Dream settings screen, button label to start dreaming [CHAR LIMIT=30] -->
+ <string name="screensaver_settings_dream_start">Start now</string>
<!-- Dream settings screen, button label for settings for a specific screensaver -->
<string name="screensaver_settings_button">Settings</string>
<!-- Sound & display settings screen, setting option name to change whether the screen adjusts automatically based on lighting conditions -->
@@ -4386,25 +4415,6 @@
<!-- Header on first screen of choose work profile pattern flow [CHAR LIMIT=40] -->
<string name="lockpassword_choose_your_profile_pattern_header">Set a work pattern</string>
- <!-- Header on first screen of choose device password flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_password_description" product="phone">For added security, set a password to unlock the phone</string>
- <!-- Header on first screen of choose device PIN flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_pin_description" product="phone">For added security, set a PIN to unlock the phone</string>
- <!-- Header on first screen of choose device pattern flow [CHAR LIMIT=NONE] -->
- <string name="lockpattern_choose_pattern_description" product="phone">For added security, set a pattern to unlock the phone</string>
- <!-- Header on first screen of choose device password flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_password_description" product="tablet">For added security, set a password to unlock the tablet</string>
- <!-- Header on first screen of choose device PIN flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_pin_description" product="tablet">For added security, set a PIN to unlock the tablet</string>
- <!-- Header on first screen of choose device pattern flow [CHAR LIMIT=NONE] -->
- <string name="lockpattern_choose_pattern_description" product="tablet">For added security, set a pattern to unlock the tablet</string>
- <!-- Header on first screen of choose device password flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_password_description" product="default">For added security, set a password to unlock the device</string>
- <!-- Header on first screen of choose device PIN flow [CHAR LIMIT=NONE] -->
- <string name="lockpassword_choose_pin_description" product="default">For added security, set a PIN to unlock the device</string>
- <!-- Header on first screen of choose device pattern flow [CHAR LIMIT=NONE] -->
- <string name="lockpattern_choose_pattern_description" product="default">For added security, set a pattern to unlock the device</string>
-
<!-- Header on first screen of choose password/PIN as backup for fingerprint flow. If this string cannot be translated in under 40 characters, please translate "Set fingerprint backup" [CHAR LIMIT=40] -->
<string name="lockpassword_choose_your_password_header_for_fingerprint">To use fingerprint, set password</string>
<!-- Header on first screen of choose pattern as backup for fingerprint flow. If this string cannot be translated in under 40 characters, please translate "Set fingerprint backup" [CHAR LIMIT=40] -->
@@ -5545,11 +5555,17 @@
<!-- Description for the seekbar that adjust auto click time. [CHAR_LIMIT=NONE] -->
<string name="accessibility_autoclick_seekbar_desc">Auto click time</string>
<!-- Title for accessibility preference screen for configuring vibrations. -->
- <string name="accessibility_vibration_settings_title">Vibration & haptic strength</string>
- <!-- Title for accessibility preference for configuring notification vibrations. -->
- <string name="accessibility_notification_vibration_title">Notification vibration</string>
+ <string name="accessibility_vibration_settings_title">Vibration & haptics</string>
+ <!-- Title for the category of preferences to configure device vibrations related to calls. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_call_vibration_category_title">Calls</string>
+ <!-- Title for the category of preferences to configure device vibrations related to notifications and alarms. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_notification_alarm_vibration_category_title">Notifications and alarms</string>
+ <!-- Title for the category of preferences to configure device vibrations triggered by user interaction with the device. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_interactive_haptics_category_title">Interactive haptics</string>
<!-- Title for accessibility preference for configuring ring vibrations. [CHAR LIMIT=NONE] -->
<string name="accessibility_ring_vibration_title">Ring vibration</string>
+ <!-- Title for accessibility preference for configuring notification vibrations. -->
+ <string name="accessibility_notification_vibration_title">Notification vibration</string>
<!-- Title for accessibility preference for configuring touch feedback vibrations. -->
<string name="accessibility_touch_vibration_title">Touch feedback</string>
<!-- Used in the accessibility service settings to control turning on/off the service entirely [CHAR LIMIT=60] -->
@@ -7462,7 +7478,7 @@
<!-- Button label to disconnect from a VPN profile. [CHAR LIMIT=40] -->
<string name="vpn_disconnect">Disconnect</string>
<!-- Field label to show the version number for a VPN app. [CHAR LIMIT=40] -->
- <string name="vpn_version">Version <xliff:g id="version" example="3.3.0">%s</xliff:g></string>
+ <string name="vpn_version">Version</string>
<!-- Button label to forget a VPN profile [CHAR LIMIT=40] -->
<string name="vpn_forget_long">Forget VPN</string>
<!-- Dialog message title to set another VPN app to be always-on [CHAR LIMIT=40] -->
@@ -8122,11 +8138,17 @@
<!-- Checkbox to always use for calls. [CHAR LIMIT=40] -->
<string name="sim_calls_always_use">Always use this for calls</string>
<!-- Message for selecting sim for data in settings. [CHAR LIMIT=40] -->
- <string name="select_sim_for_data">Select a SIM for data</string>
+ <string name="select_sim_for_data">Choose SIM for mobile data</string>
<!-- Message for selecting sim for SMS in settings. [CHAR LIMIT=40] -->
<string name="select_sim_for_sms">Select a SIM for SMS</string>
<!-- Message for switching data SIM; switching takes a while -->
<string name="data_switch_started">Switching data SIM, this may take up to a minute\u2026</string>
+ <!-- Title for selecting specific sim for data in settings. [CHAR LIMIT=40] -->
+ <string name="select_specific_sim_for_data_title">Use <xliff:g id="new_sim" example="carrierA">%1$s</xliff:g> for mobile data?</string>
+ <!-- Message for selecting specific sim for data in settings. [CHAR LIMIT=NONE] -->
+ <string name="select_specific_sim_for_data_msg">If you switch to <xliff:g id="new_sim" example="carrierA">%1$s</xliff:g>, <xliff:g id="old_sim" example="carrierB">%2$s</xliff:g> will no longer be used for mobile data.</string>
+ <!-- Button on a selecting specific sim dialog to confirm data in settings. [CHAR LIMIT=40] -->
+ <string name="select_specific_sim_for_data_button">Use <xliff:g id="new_sim" example="carrierA">%1$s</xliff:g></string>
<!-- Message for selecting sim for call in settings. [CHAR LIMIT=40] -->
<string name="select_sim_for_calls">Call with</string>
<!-- Title for selecting a SIM card. [CHAR LIMIT=40] -->
@@ -8255,8 +8277,6 @@
<string name="keywords_wifi_notify_open_networks">Wi\u2011Fi notification, wifi notification</string>
<!-- Search keyword for "Wi-fi data usage" settings. [CHAR_LIMIT=NONE]-->
<string name="keywords_wifi_data_usage">data usage</string>
- <!-- Search keyword for "Vibrate on touch" settings. [CHAR_LIMIT=NONE]-->
- <string name="keywords_vibrate_on_touch">Stop vibration, tap, keyboard</string>
<!-- Search keyword for "Time format" settings. [CHAR_LIMIT=NONE]-->
<string name="keywords_time_format">Use 24-hour format</string>
<!-- Search keyword for "Files" settings under Settings > Storage. [CHAR_LIMIT=NONE]-->
@@ -8392,11 +8412,12 @@
<!-- List of synonyms for touch vibration setting (where you get a haptic response for touching things on the screen), used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_touch_vibration">haptics, vibrate, screen, sensitivity</string>
-
<!-- List of synonyms for ring vibration setting (changes whether your phone vibrates when it rings), used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_ring_vibration">haptics, vibrate, phone, call, sensitivity, ring</string>
<!-- List of synonyms for notification vibration setting (changes whether your phone vibrates when it shows a notification), used to match in settings search [CHAR LIMIT=NONE] -->
<string name="keywords_notification_vibration">haptics, vibrate, sensitivity</string>
+ <!-- List of synonyms for vibration and haptics setting, used to match in settings search [CHAR LIMIT=NONE] -->
+ <string name="keywords_vibration">haptics, vibrate, vibration</string>
<!-- Battery Saver: Search terms for sticky battery saver preference [CHAR_LIMIT=NONE] -->
<string name="keywords_battery_saver_sticky">battery saver, sticky, persist, power saver, battery</string>
<!-- Battery Saver: Search terms for battery saver schedule preference. Feel free to add additional terms when translating if appropriate [CHAR_LIMIT=NONE] -->
@@ -8508,12 +8529,6 @@
<!-- Sound: Other sounds: Title for the option enabling touch sounds. [CHAR LIMIT=30] -->
<string name="touch_sounds_title">Touch sounds</string>
- <!-- Sound: Other sounds: Title for the option enabling haptic feedback on touch. [CHAR LIMIT=30] -->
- <string name="vibrate_on_touch_title">Touch vibration</string>
-
- <!-- Sound: Other sounds: Preference summary to the option enabling haptic feedback on touch. -->
- <string name="vibrate_on_touch_summary">Haptic feedback for tap, keyboard, and more</string>
-
<!-- Sound: Other sounds: Title for the option enabling dock audio media. [CHAR LIMIT=50] -->
<string name="dock_audio_media_title">Dock speaker plays</string>
@@ -12936,18 +12951,26 @@
<string name="sim_action_switch_sub_dialog_title">Switch to <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g>?</string>
<!-- Title of confirmation dialog asking the user if they want to switch to the SIM card. [CHAR_LIMIT=NONE] -->
<string name="sim_action_switch_psim_dialog_title">Switch to using SIM card?</string>
+ <!-- Title of confirmation dialog asking the user if they want to switch subscription. [CHAR_LIMIT=NONE] -->
+ <string name="sim_action_switch_sub_dialog_mep_title">Use <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g>?</string>
<!-- Body text of confirmation dialog for switching subscription that involves switching SIM slots. Indicates that only one SIM can be active at a time. Also that switching will not cancel the user's mobile service plan. [CHAR_LIMIT=NONE] -->
<string name="sim_action_switch_sub_dialog_text">Only one SIM can be active at a time.\n\nSwitching to <xliff:g id="to_carrier_name" example="Google Fi">%1$s</xliff:g> won\u2019t cancel your <xliff:g id="from_carrier_name" example="Sprint">%2$s</xliff:g> service.</string>
<!-- Body text of confirmation dialog for switching subscription between two eSIM profiles. Indicates that only one downloaded SIM can be active at a time. Also that switching will not cancel the user's mobile service plan. [CHAR_LIMIT=NONE] -->
<string name="sim_action_switch_sub_dialog_text_downloaded">Only one downloaded SIM can be active at a time.\n\nSwitching to <xliff:g id="to_carrier_name" example="Google Fi">%1$s</xliff:g> won\u2019t cancel your <xliff:g id="from_carrier_name" example="Sprint">%2$s</xliff:g> service.</string>
<!-- Body text of confirmation dialog for switching subscription between two eSIM profiles. Indicates that only one SIM can be active at a time. Also that switching will not cancel the user's mobile service plan. [CHAR_LIMIT=NONE] -->
<string name="sim_action_switch_sub_dialog_text_single_sim">Only one SIM can be active at a time.\n\nSwitching won\u2019t cancel your <xliff:g id="to_carrier_name" example="Google Fi">%1$s</xliff:g> service.</string>
+ <!-- Body text of confirmation dialog for switching subscription between two eSIM profiles. Indicates that only one downloaded SIM can be active at a time. Also that switching will not cancel the user's mobile service plan. [CHAR_LIMIT=NONE] -->
+ <string name="sim_action_switch_sub_dialog_mep_text">You can use 2 SIMs at a time. To use <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g>, turn off another SIM.</string>
<!-- Text of confirm button in the confirmation dialog asking the user if they want to switch subscription. [CHAR_LIMIT=NONE] -->
<string name="sim_action_switch_sub_dialog_confirm">Switch to <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g></string>
+ <!-- Text of carrier list item in the mep confirmation dialog asking the user if they want to turn off the carrier. [CHAR_LIMIT=NONE] -->
+ <string name="sim_action_switch_sub_dialog_carrier_list_item_for_turning_off">Turn off <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g></string>
+ <!-- Text of carrier list item in the mep confirmation dialog asking the user if they want to turn off the carrier. [CHAR_LIMIT=NONE] -->
+ <string name="sim_action_switch_sub_dialog_info_outline_for_turning_off">Turning off a SIM won\u2019t cancel your service</string>
<!-- Status message indicating the device is in the process of disconnecting from one mobile network and immediately connecting to another. [CHAR_LIMIT=NONE] -->
<string name="sim_action_enabling_sim_without_carrier_name">Connecting to network…</string>
<!-- Text of progress dialog indicating the subscription switch is in progress. [CHAR_LIMIT=NONE] -->
- <string name="sim_action_switch_sub_dialog_progress">Switching to <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g></string>
+ <string name="sim_action_switch_sub_dialog_progress">Switching to <xliff:g id="carrier_name" example="Google Fi">%1$s</xliff:g> for calls and messages…</string>
<!-- Title of error message indicating that the device could not disconnect from one mobile network and immediately connect to another. [CHAR_LIMIT=NONE] -->
<string name="sim_action_enable_sim_fail_title">Can\u2019t switch carrier</string>
<!-- Body text of error message indicating the device could not disconnect from one mobile network and immediately connect to another, due to an unspecified issue. [CHAR_LIMIT=NONE] -->
@@ -13329,9 +13352,9 @@
<string name="lockscreen_privacy_wallet_summary">Allow access to wallet from lock screen and quick settings</string>
<!-- QR Code Scanner toggle name [CHAR LIMIT=60] -->
- <string name="lockscreen_privacy_qr_code_scanner_setting_toggle">Show QR Code Scanner</string>
+ <string name="lockscreen_privacy_qr_code_scanner_setting_toggle">Show QR Scanner</string>
<!-- QR Code Scanner summary [CHAR LIMIT=NONE] -->
- <string name="lockscreen_privacy_qr_code_scanner_summary">Allow access to QR code scanner from lock screen</string>
+ <string name="lockscreen_privacy_qr_code_scanner_summary">Allow access to QR scanner from lock screen</string>
<!-- Device controls toggle name [CHAR LIMIT=60] -->
<string name="lockscreen_privacy_controls_setting_toggle">Show device controls</string>
@@ -13586,8 +13609,6 @@
<string name="adaptive_brightness_main_switch_title">Use adaptive brightness</string>
<!-- Title for wifi calling main switch preferences. [CHAR LIMIT=50] -->
<string name="wifi_calling_main_switch_title">Use Wi‑Fi calling</string>
- <!-- Title for Screen saver main switch preferences. [CHAR LIMIT=50] -->
- <string name="screen_saver_main_switch_title">Use screen saver</string>
<!-- Default preference title for showing all apps on device [CHAR_LIMIT=50]-->
<string name="default_see_all_apps_title">See all apps</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index eaebd85..395a3bc 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -237,6 +237,16 @@
<item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault.Small</item>
</style>
+ <style name="vpn_app_management_version_title">
+ <item name="android:textAppearance">?android:attr/textAppearanceListItem</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ </style>
+
+ <style name="vpn_app_management_version_summary">
+ <item name="android:textAppearance">?android:attr/textAppearanceListItemSecondary</item>
+ <item name="android:textColor">?android:attr/textColorSecondary</item>
+ </style>
+
<style name="screen_size_imageview_style">
<item name="android:layout_width">48dp</item>
<item name="android:layout_height">48dp</item>
@@ -916,4 +926,25 @@
parent="@*android:style/TextAppearance.DeviceDefault">
<item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
+
+ <style name="TextAppearance.SimConfirmDialogList" parent="@style/TextAppearance.DialogMessage"/>
+
+ <style name="TextAppearance.SimConfirmDialogList.Summary">
+ <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+ </style>
+
+ <style name="SimConfirmDialog.OutlineButton" parent="@android:style/Widget.Material.Button">
+ <item name="android:layout_marginStart">8dp</item>
+ <item name="android:layout_height">36dp</item>
+ <item name="android:minWidth">0dp</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:lineHeight">20sp</item>
+ <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item>
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ <item name="android:background">@drawable/sim_confirm_dialog_btn_outline</item>
+ </style>
+
+ <style name="SimConfirmDialog.ButtonBarStyle" parent="@android:style/Widget.Material.ButtonBar">
+ <item name="android:paddingEnd">8dp</item>
+ </style>
</resources>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 7c5c111..aae158b 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -151,6 +151,13 @@
<item name="buttonBarButtonStyle">@*android:style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
</style>
+
+ <style name="Theme.AlertDialog.SimConfirmDialog">
+ <item name="buttonBarStyle">@style/SimConfirmDialog.ButtonBarStyle</item>
+ <item name="buttonBarButtonStyle">@style/SimConfirmDialog.OutlineButton</item>
+ <item name="android:textAllCaps">false</item>
+ </style>
+
<style name="Theme.ConfirmDeviceCredentials" parent="Theme.SubSettings">
<item name="confirmDeviceCredentialsSideMargin">@dimen/confirm_credentials_side_margin</item>
<item name="confirmDeviceCredentialsTopMargin">@dimen/confirm_credentials_top_margin</item>
@@ -220,6 +227,10 @@
<item name="android:statusBarColor">?attr/colorPrimaryDark</item>
</style>
+ <style name="Theme.Settings.Home.DeepLink">
+ <item name="android:windowAnimationStyle">@null</item>
+ </style>
+
<style name="Theme.Settings.ContextualCard" parent="Theme.Settings.Home">
<item name="android:textAppearanceListItem">@style/TextAppearance.HomepageCardTitle</item>
</style>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 61f527d..8113a9f 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -100,7 +100,8 @@
android:icon="@drawable/ic_vibration"
android:persistent="false"
android:title="@string/accessibility_vibration_settings_title"
- settings:controller="com.android.settings.accessibility.VibrationPreferenceController"/>
+ settings:controller="com.android.settings.accessibility.VibrationPreferenceController"
+ settings:keywords="@string/keywords_vibration"/>
</PreferenceCategory>
diff --git a/res/xml/accessibility_vibration_settings.xml b/res/xml/accessibility_vibration_settings.xml
index 87c2988..ff10611 100644
--- a/res/xml/accessibility_vibration_settings.xml
+++ b/res/xml/accessibility_vibration_settings.xml
@@ -20,24 +20,49 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/accessibility_vibration_settings_title">
- <Preference
- android:fragment="com.android.settings.accessibility.RingVibrationPreferenceFragment"
- android:key="ring_vibration_preference_screen"
- android:title="@string/accessibility_ring_vibration_title"
- settings:keywords="@string/keywords_ring_vibration"
- app:controller="com.android.settings.accessibility.RingVibrationIntensityPreferenceController" />
+ <PreferenceCategory
+ android:key="accessibility_call_vibration_category"
+ android:title="@string/accessibility_call_vibration_category_title">
- <Preference
- android:fragment="com.android.settings.accessibility.NotificationVibrationPreferenceFragment"
- android:key="notification_vibration_preference_screen"
- android:title="@string/accessibility_notification_vibration_title"
- settings:keywords="@string/keywords_notification_vibration"
- app:controller="com.android.settings.accessibility.NotificationVibrationIntensityPreferenceController" />
+ <Preference
+ android:fragment="com.android.settings.accessibility.RingVibrationPreferenceFragment"
+ android:key="ring_vibration_preference_screen"
+ android:title="@string/accessibility_ring_vibration_title"
+ settings:keywords="@string/keywords_ring_vibration"
+ app:controller="com.android.settings.accessibility.RingVibrationIntensityPreferenceController" />
- <Preference
- android:fragment="com.android.settings.accessibility.TouchVibrationPreferenceFragment"
- android:key="touch_vibration_preference_screen"
- android:title="@string/accessibility_touch_vibration_title"
- settings:keywords="@string/keywords_touch_vibration"
- app:controller="com.android.settings.accessibility.HapticFeedbackIntensityPreferenceController" />
+ <Preference
+ android:fragment="com.android.settings.sound.VibrateForCallsPreferenceFragment"
+ android:key="vibrate_for_calls"
+ android:title="@string/vibrate_when_ringing_title"
+ settings:controller="com.android.settings.sound.VibrateForCallsPreferenceController"/>
+
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:key="accessibility_notification_alarm_vibration_category"
+ android:title="@string/accessibility_notification_alarm_vibration_category_title">
+
+ <Preference
+ android:fragment="com.android.settings.accessibility.NotificationVibrationPreferenceFragment"
+ android:key="notification_vibration_preference_screen"
+ android:title="@string/accessibility_notification_vibration_title"
+ settings:keywords="@string/keywords_notification_vibration"
+ app:controller="com.android.settings.accessibility.NotificationVibrationIntensityPreferenceController" />
+
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:key="accessibility_interactive_haptics_category"
+ android:title="@string/accessibility_interactive_haptics_category_title">
+
+ <Preference
+ android:fragment="com.android.settings.accessibility.TouchVibrationPreferenceFragment"
+ android:key="touch_vibration_preference_screen"
+ android:title="@string/accessibility_touch_vibration_title"
+ settings:keywords="@string/keywords_touch_vibration"
+ app:controller="com.android.settings.accessibility.HapticFeedbackIntensityPreferenceController" />
+
+ </PreferenceCategory>
+
</PreferenceScreen>
diff --git a/res/xml/accounts_dashboard_settings_header.xml b/res/xml/accounts_dashboard_settings_header.xml
new file mode 100644
index 0000000..99f0736
--- /dev/null
+++ b/res/xml/accounts_dashboard_settings_header.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/account_dashboard_title"
+ settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml
index 1442960..562c7d1 100644
--- a/res/xml/app_info_settings.xml
+++ b/res/xml/app_info_settings.xml
@@ -89,6 +89,12 @@
android:summary="@string/summary_placeholder" />
<Preference
+ android:key="app_language_setting"
+ android:title="@string/app_locale_preference_title"
+ android:summary="@string/summary_placeholder"
+ settings:controller="com.android.settings.applications.appinfo.AppLocalePreferenceController" />
+
+ <Preference
android:key="preferred_settings"
android:title="@string/launch_by_default"
android:summary="@string/summary_placeholder"
diff --git a/res/xml/app_locale_details.xml b/res/xml/app_locale_details.xml
new file mode 100644
index 0000000..8056cbf
--- /dev/null
+++ b/res/xml/app_locale_details.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/app_locale_picker_title">
+ <com.android.settingslib.widget.LayoutPreference
+ android:key="app_locale_description"
+ android:layout="@layout/app_locale_details_description"
+ android:selectable="false"
+ android:visibility="gone"
+ settings:allowDividerBelow="true"
+ settings:searchable="false"/>
+
+ <PreferenceCategory
+ android:key="category_key_suggested_languages"
+ android:title="@string/suggested_app_locales_title" />
+
+ <PreferenceCategory
+ android:key="category_key_all_languages"
+ android:title="@string/all_supported_app_locales_title" />
+
+</PreferenceScreen>
diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index 6e18a97..42b0334 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -19,11 +19,6 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/screensaver_settings_title">
- <com.android.settingslib.widget.MainSwitchPreference
- android:key="dream_start_now_button_container"
- android:title="@string/screen_saver_main_switch_title"
- settings:controller="com.android.settings.dream.StartNowPreferenceController"/>
-
<com.android.settings.widget.GearPreference
android:key="current_screensaver"
android:title="@string/screensaver_settings_current"
@@ -35,4 +30,12 @@
android:title="@string/screensaver_settings_when_to_dream"
android:fragment="com.android.settings.dream.WhenToDreamPicker" />
+ <PreferenceCategory>
+ <com.android.settingslib.widget.LayoutPreference
+ android:key="dream_start_now_button_container"
+ android:layout="@layout/dream_start_button"
+ android:selectable="false"
+ settings:controller="com.android.settings.dream.StartNowPreferenceController" />
+ </PreferenceCategory>
+
</PreferenceScreen>
diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml
index 2055ab7..f2b6d8a 100644
--- a/res/xml/language_and_input.xml
+++ b/res/xml/language_and_input.xml
@@ -19,12 +19,28 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/language_settings">
+ <PreferenceCategory
+ android:key="languages_category"
+ android:title="@string/locale_picker_category_title">
+ <Preference
+ android:key="phone_language"
+ android:title="@string/phone_language"
+ android:icon="@drawable/ic_translate_24dp"
+ android:fragment="com.android.settings.localepicker.LocaleListEditor" />
- <Preference
- android:key="phone_language"
- android:title="@string/phone_language"
- android:icon="@drawable/ic_translate_24dp"
- android:fragment="com.android.settings.localepicker.LocaleListEditor" />
+ <Preference
+ android:key="apps_language"
+ android:title="@string/app_locales_picker_menu_title"
+ android:summary="@string/app_locale_picker_summary"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
+ settings:controller="com.android.settings.applications.appinfo.ManageAppLocalePreferenceController">
+ <extra
+ android:name="classname"
+ android:value="com.android.settings.applications.appinfo.AppLocaleDetails" />
+ </Preference>
+
+
+ </PreferenceCategory>
<PreferenceCategory
android:key="keyboards_category"
@@ -91,13 +107,6 @@
settings:searchable="false">
<Preference
- android:key="virtual_keyboards_for_work_pref"
- android:title="@string/virtual_keyboards_for_work_title"
- android:fragment="com.android.settings.inputmethod.AvailableVirtualKeyboardFragment"
- settings:forWork="true"
- settings:controller="com.android.settings.inputmethod.VirtualKeyboardForWorkPreferenceController" />
-
- <Preference
android:key="spellcheckers_settings_for_work_pref"
android:title="@string/spellcheckers_settings_for_work_title"
android:fragment="com.android.settings.inputmethod.SpellCheckersSettings"
diff --git a/res/xml/location_recent_requests_header.xml b/res/xml/location_recent_requests_header.xml
new file mode 100644
index 0000000..0e252a5
--- /dev/null
+++ b/res/xml/location_recent_requests_header.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/location_category_recent_location_requests"
+ settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/location_services_header.xml b/res/xml/location_services_header.xml
new file mode 100644
index 0000000..4eaf2c5
--- /dev/null
+++ b/res/xml/location_services_header.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/location_services_preference_title"
+ settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/location_settings_header.xml b/res/xml/location_settings_header.xml
new file mode 100644
index 0000000..4749a2e
--- /dev/null
+++ b/res/xml/location_settings_header.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/location_settings_title"
+ settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 7d1ff09..673994a 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -223,7 +223,6 @@
<Preference
android:key="choose_network_key"
android:title="@string/choose_network_title"
- android:fragment="com.android.phone.NetworkSelectSetting"
settings:controller="com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController"/>
</PreferenceCategory>
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 35082fd..9547318 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -52,7 +52,7 @@
settings:controller="com.android.settings.deviceinfo.BrandedAccountPreferenceController"/>
<!-- Phone number -->
- <Preference
+ <com.android.settings.deviceinfo.PhoneNumberSummaryPreference
android:key="phone_number"
android:order="3"
android:title="@string/status_number"
@@ -113,7 +113,7 @@
settings:controller="com.android.settings.deviceinfo.HardwareInfoPreferenceController"/>
<!-- IMEI -->
- <Preference
+ <com.android.settings.deviceinfo.PhoneNumberSummaryPreference
android:key="imei_info"
android:order="32"
android:title="@string/status_imei"
diff --git a/res/xml/other_sound_settings.xml b/res/xml/other_sound_settings.xml
index 7b3f362..d8396a4 100644
--- a/res/xml/other_sound_settings.xml
+++ b/res/xml/other_sound_settings.xml
@@ -44,12 +44,6 @@
android:key="touch_sounds"
android:title="@string/touch_sounds_title" />
- <!-- Vibrate on touch -->
- <SwitchPreference
- android:key="vibrate_on_touch"
- android:title="@string/vibrate_on_touch_title"
- android:summary="@string/vibrate_on_touch_summary" />
-
<!-- Dock speaker plays -->
<DropDownPreference
android:key="dock_audio_media"
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index a7b63a1..c1298db 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -119,14 +119,14 @@
settings:controller="com.android.settings.sound.MediaControlsParentPreferenceController"
settings:keywords="@string/keywords_media_controls"/>
- <!-- Also vibrate for calls -->
+ <!-- Also vibration -->
<Preference
- android:fragment="com.android.settings.sound.VibrateForCallsPreferenceFragment"
- android:key="vibrate_for_calls"
- android:title="@string/vibrate_when_ringing_title"
+ android:fragment="com.android.settings.accessibility.VibrationSettings"
+ android:key="vibration_and_haptics"
+ android:title="@string/accessibility_vibration_settings_title"
android:order="-90"
- settings:controller="com.android.settings.sound.VibrateForCallsPreferenceController"
- settings:keywords="@string/keywords_vibrate_for_calls"/>
+ settings:controller="com.android.settings.accessibility.VibrationPreferenceController"
+ settings:keywords="@string/keywords_vibration"/>
<com.android.settingslib.PrimarySwitchPreference
android:key="gesture_prevent_ringing_sound"
@@ -191,14 +191,6 @@
android:title="@string/touch_sounds_title"
android:order="-30"/>
- <!-- Vibrate on touch -->
- <SwitchPreference
- android:key="vibrate_on_touch"
- android:title="@string/vibrate_on_touch_title"
- android:summary="@string/vibrate_on_touch_summary"
- settings:keywords="@string/keywords_vibrate_on_touch"
- android:order="-25"/>
-
<!-- Dock speaker plays -->
<DropDownPreference
android:key="dock_audio_media"
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index 042ce43..c9e6017 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -117,6 +117,15 @@
settings:controller="com.android.settings.accessibility.TopLevelAccessibilityPreferenceController"/>
<com.android.settings.widget.HomepagePreference
+ android:icon="@drawable/ic_settings_safety_center"
+ android:key="top_level_safety_center"
+ android:order="-55"
+ android:title="@string/safety_center_title"
+ android:summary="@string/safety_center_summary"
+ settings:highlightableMenuKey="@string/menu_key_safety_center"
+ settings:controller="com.android.settings.safetycenter.TopLevelSafetyCenterEntryPreferenceController"/>
+
+ <com.android.settings.widget.HomepagePreference
android:fragment="com.android.settings.security.SecuritySettings"
android:icon="@drawable/ic_settings_security_white"
android:key="top_level_security"
@@ -133,7 +142,8 @@
android:order="-40"
android:title="@string/privacy_dashboard_title"
android:summary="@string/privacy_dashboard_summary"
- settings:highlightableMenuKey="@string/menu_key_privacy"/>
+ settings:highlightableMenuKey="@string/menu_key_privacy"
+ settings:controller="com.android.settings.privacy.TopLevelPrivacyEntryPreferenceController"/>
<com.android.settings.widget.HomepagePreference
android:fragment="com.android.settings.location.LocationSettings"
@@ -152,6 +162,7 @@
android:icon="@drawable/ic_settings_emergency"
android:order="-20"
android:fragment="com.android.settings.emergency.EmergencyDashboardFragment"
+ settings:isPreferenceVisible="@bool/config_show_emergency_settings"
settings:highlightableMenuKey="@string/menu_key_emergency"/>
<com.android.settings.widget.HomepagePreference
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 5cafa1a..b3dc2ea 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -43,6 +43,12 @@
android:icon="@drawable/ic_add_40dp"
android:order="20"/>
+ <com.android.settingslib.RestrictedPreference
+ android:key="supervised_user_add"
+ android:title="@*android:string/supervised_user_creation_label"
+ android:icon="@*android:drawable/ic_add_supervised_user"
+ android:order="25"/>
+
<com.android.settingslib.RestrictedSwitchPreference
android:key="user_settings_add_users_when_locked"
android:title="@string/user_add_on_lockscreen_menu"
diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml
index bcaa6b0..adc441d 100644
--- a/res/xml/vpn_app_management.xml
+++ b/res/xml/vpn_app_management.xml
@@ -15,14 +15,24 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto">
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ orderingFromXml="false"
+ >
+
+ <!-- To limit the size (in height) of version Preference displayed here,
+ maximum height of TextView need to be set programmingly.
+ Therefore, this Preference got removed from here and will be added
+ dynamically through source code.
<Preference
+ android:order="0"
android:key="version"
android:textColor="?android:attr/textColorSecondary"
android:selectable="false"/>
+ -->
<com.android.settingslib.RestrictedSwitchPreference
+ android:order="10"
android:key="always_on_vpn"
android:title="@string/vpn_menu_lockdown"
android:defaultValue="false"
@@ -32,6 +42,7 @@
settings:restrictedSwitchSummary="@string/disabled_by_admin_summary_text" />
<com.android.settingslib.RestrictedSwitchPreference
+ android:order="20"
android:key="lockdown_vpn"
android:title="@string/vpn_require_connection"
android:defaultValue="false"
@@ -41,6 +52,7 @@
settings:restrictedSwitchSummary="@string/disabled_by_admin_summary_text" />
<com.android.settingslib.RestrictedPreference
+ android:order="30"
android:key="forget_vpn"
android:title="@string/vpn_forget_long"
android:icon="@drawable/ic_delete"
diff --git a/res/xml/wifi_calling_settings.xml b/res/xml/wifi_calling_settings.xml
index 0276bdb..902ff1a 100644
--- a/res/xml/wifi_calling_settings.xml
+++ b/res/xml/wifi_calling_settings.xml
@@ -21,6 +21,7 @@
<com.android.settings.wifi.calling.ListWithEntrySummaryPreference
android:key="wifi_calling_mode"
+ isPreferenceVisible="false"
android:title="@string/wifi_calling_mode_title"
android:summary="@string/wifi_calling_mode_title"
android:entries="@array/wifi_calling_mode_choices"
@@ -30,6 +31,7 @@
<com.android.settings.wifi.calling.ListWithEntrySummaryPreference
android:key="wifi_calling_roaming_mode"
+ isPreferenceVisible="false"
android:title="@string/wifi_calling_roaming_mode_title"
android:summary="@string/wifi_calling_roaming_mode_summary"
android:entries="@array/wifi_calling_mode_choices_v2"
@@ -39,7 +41,12 @@
<Preference
android:key="emergency_address_key"
+ isPreferenceVisible="false"
android:title="@string/emergency_address_title"
android:summary="@string/emergency_address_summary" />
+ <com.android.settings.wifi.calling.LinkifyDescriptionPreference
+ android:key="no_options_description"
+ isPreferenceVisible="false" />
+
</PreferenceScreen>
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index e89e84b..71eb0f2 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -587,6 +587,7 @@
.inflate(com.android.internal.R.layout.transient_notification, null);
final TextView tv = (TextView) v.findViewById(com.android.internal.R.id.message);
tv.setText(errorMessage);
+ tv.setSingleLine(false);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams();
final Configuration config = v.getContext().getResources().getConfiguration();
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 9e3d7e6..96f362c 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -16,16 +16,24 @@
package com.android.settings;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.ims.ImsRcsManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
+import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.core.FeatureFlags;
import com.android.settings.enterprise.EnterprisePrivacySettings;
+import com.android.settings.network.SubscriptionUtil;
+import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.safetycenter.SafetyCenterStatus;
import com.android.settings.security.SecuritySettingsFeatureProvider;
import com.google.android.setupdesign.util.ThemeHelper;
@@ -90,6 +98,7 @@
public static class PublicVolumeSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
public static class NetworkProviderSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class NetworkSelectActivity extends SettingsActivity { /* empty */ }
/** Activity for the Wi-Fi network details settings. */
public static class WifiDetailsSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
@@ -123,11 +132,34 @@
public static class AccessibilityDaltonizerSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for lockscreen settings. */
public static class LockScreenSettingsActivity extends SettingsActivity { /* empty */ }
+ /** Activity for bluetooth pairing settings. */
+ public static class BlueToothPairingActivity extends SettingsActivity { /* empty */ }
/** Activity for Reduce Bright Colors. */
public static class ReduceBrightColorsSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for the security dashboard. */
public static class SecurityDashboardActivity extends SettingsActivity {
+ private static final String TAG = "SecurityDashboardActivity";
+
+ @Override
+ protected void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+ handleSafetyCenterRedirection();
+ }
+
+ /** Redirects to SafetyCenter if enabled. */
+ @VisibleForTesting
+ public void handleSafetyCenterRedirection() {
+ if (SafetyCenterStatus.isEnabled()) {
+ try {
+ startActivity(new Intent(Intent.ACTION_SAFETY_CENTER));
+ finish();
+ } catch (ActivityNotFoundException e) {
+ Log.e(TAG, "Unable to open safety center", e);
+ }
+ }
+ }
+
/** Whether the given fragment is allowed. */
@VisibleForTesting
@Override
@@ -163,7 +195,30 @@
public static class LocationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ScanningSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiScanningSettingsActivity extends SettingsActivity { /* empty */ }
- public static class PrivacyDashboardActivity extends SettingsActivity { /* empty */ }
+ /** Activity for the privacy dashboard. */
+ public static class PrivacyDashboardActivity extends SettingsActivity {
+
+ private static final String TAG = "PrivacyDashboardActivity";
+
+ @Override
+ protected void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+ handleSafetyCenterRedirection();
+ }
+
+ /** Redirects to SafetyCenter if enabled. */
+ @VisibleForTesting
+ public void handleSafetyCenterRedirection() {
+ if (SafetyCenterStatus.isEnabled()) {
+ try {
+ startActivity(new Intent(Intent.ACTION_SAFETY_CENTER));
+ finish();
+ } catch (ActivityNotFoundException e) {
+ Log.e(TAG, "Unable to open safety center", e);
+ }
+ }
+ }
+ }
public static class PrivacySettingsActivity extends SettingsActivity { /* empty */ }
public static class FactoryResetActivity extends SettingsActivity {
@Override
@@ -301,6 +356,52 @@
public static class WifiCallingDisclaimerActivity extends SettingsActivity { /* empty */ }
public static class MobileNetworkListActivity extends SettingsActivity {}
public static class PowerMenuSettingsActivity extends SettingsActivity {}
+ public static class MobileNetworkActivity extends SettingsActivity {
+
+ public static final String EXTRA_MMS_MESSAGE = "mms_message";
+ public static final String EXTRA_SHOW_CAPABILITY_DISCOVERY_OPT_IN =
+ "show_capability_discovery_opt_in";
+
+ @Override
+ public Intent getIntent() {
+ final Intent intent = new Intent(super.getIntent());
+ int subId = intent.getIntExtra(android.provider.Settings.EXTRA_SUB_ID,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ SubscriptionInfo subInfo = SubscriptionUtil.getSubscriptionOrDefault(
+ getApplicationContext(), subId);
+ CharSequence title = SubscriptionUtil.getUniqueSubscriptionDisplayName(
+ subInfo, getApplicationContext());
+ intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
+ intent.putExtra(android.provider.Settings.EXTRA_SUB_ID, subId);
+ if (android.provider.Settings.ACTION_MMS_MESSAGE_SETTING.equals(intent.getAction())) {
+ // highlight "mms_message" preference.
+ intent.putExtra(EXTRA_FRAGMENT_ARG_KEY, EXTRA_MMS_MESSAGE);
+ }
+
+ if (doesIntentContainOptInAction(intent)) {
+ intent.putExtra(EXTRA_SHOW_CAPABILITY_DISCOVERY_OPT_IN,
+ maybeShowContactDiscoveryDialog(subId));
+ }
+
+ return intent;
+ }
+
+ private boolean maybeShowContactDiscoveryDialog(int subId) {
+ // If this activity was launched using ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN, show the
+ // associated dialog only if the opt-in has not been granted yet.
+ return MobileNetworkUtils.isContactDiscoveryVisible(getApplicationContext(), subId)
+ // has the user already enabled this configuration?
+ && !MobileNetworkUtils.isContactDiscoveryEnabled(
+ getApplicationContext(), subId);
+ }
+
+ public static boolean doesIntentContainOptInAction(Intent intent) {
+ String intentAction = (intent != null ? intent.getAction() : null);
+ return TextUtils.equals(intentAction,
+ ImsRcsManager.ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN);
+ }
+ }
+
/**
* Activity for BugReportHandlerPicker.
*/
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 2b5f695..d3d3604 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -377,8 +377,9 @@
public static Intent getTrampolineIntent(Intent intent, String highlightMenuKey) {
final Intent detailIntent = new Intent(intent);
// It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it.
- final Intent trampolineIntent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
- trampolineIntent.replaceExtras(detailIntent);
+ final Intent trampolineIntent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)
+ .setPackage(Utils.SETTINGS_PACKAGE_NAME)
+ .replaceExtras(detailIntent);
// Relay detail intent data to prevent failure of Intent#ParseUri.
// If Intent#getData() is not null, Intent#toUri will return an Uri which has the scheme of
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 42a6068..2988ddc 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1230,8 +1230,4 @@
public static int getHomepageIconColorHighlight(Context context) {
return getColorAttrDefaultColor(context, android.R.attr.textColorSecondaryInverse);
}
-
- public static boolean isProviderModelEnabled(Context context) {
- return FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
- }
}
diff --git a/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java
index 10a0bce..7c8076f 100644
--- a/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java
@@ -120,8 +120,8 @@
: R.string.screen_zoom_title);
((TextView) findViewById(R.id.sud_layout_subtitle)).setText(
getFragmentType(getIntent()) == FragmentType.FONT_SIZE
- ? R.string.short_summary_font_size
- : R.string.screen_zoom_short_summary);
+ ? R.string.font_size_summary
+ : R.string.screen_zoom_summary);
}
private boolean isSuwSupportedTwoPanes() {
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 56f3e9f..4030e0d 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -295,8 +295,8 @@
}
static boolean isRampingRingerEnabled(final Context context) {
- return Settings.Global.getInt(
- context.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, 0) == 1;
+ return Settings.System.getInt(
+ context.getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, 0) == 1;
}
@VisibleForTesting
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index 3a6bea9..7a28e39 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -38,7 +38,6 @@
import com.android.settings.support.actionbar.HelpResourceProvider;
import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.transition.SettingsTransitionHelper;
-import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.util.ThemeHelper;
@@ -130,7 +129,6 @@
final Intent intent = new Intent(this,
AccessibilityScreenSizeForSetupWizardActivity.class);
intent.putExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE);
- intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE);
startActivity(intent);
Log.d(LOG_TAG, "Launch font size settings");
finish();
diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
index 3b15830..9666fe9 100644
--- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
@@ -150,6 +150,7 @@
private void initLaunchPreference() {
final Preference launchPreference = new Preference(getPrefContext());
+ launchPreference.setLayoutResource(R.layout.accessibility_launch_activity_preference);
launchPreference.setKey(KEY_LAUNCH_PREFERENCE);
final AccessibilityShortcutInfo info = getAccessibilityShortcutInfo();
diff --git a/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
index babfb9a..5d19a9b 100644
--- a/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/RingVibrationPreferenceFragment.java
@@ -47,7 +47,7 @@
@Override
protected String getVibrationEnabledSetting() {
if (AccessibilitySettings.isRampingRingerEnabled(getContext())) {
- return Settings.Global.APPLY_RAMPING_RINGER;
+ return Settings.System.APPLY_RAMPING_RINGER;
} else {
return Settings.System.VIBRATE_WHEN_RINGING;
}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index c25abf3..233b7ee 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -143,9 +143,7 @@
setPreferenceScreen(preferenceScreen);
}
- final List<String> shortcutFeatureKeys = new ArrayList<>();
- shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
- shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
+ final List<String> shortcutFeatureKeys = getFeatureSettingsKeys();
mSettingsContentObserver = new SettingsContentObserver(new Handler(), shortcutFeatureKeys) {
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -155,6 +153,13 @@
};
}
+ protected List<String> getFeatureSettingsKeys() {
+ final List<String> shortcutFeatureKeys = new ArrayList<>();
+ shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
+ shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
+ return shortcutFeatureKeys;
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 6b4a5f2..1586c5a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -276,6 +276,13 @@
}
@Override
+ protected List<String> getFeatureSettingsKeys() {
+ final List<String> shortcutKeys = super.getFeatureSettingsKeys();
+ shortcutKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
+ return shortcutKeys;
+ }
+
+ @Override
protected CharSequence getShortcutTypeSummary(Context context) {
if (!mShortcutPreference.isChecked()) {
return context.getText(R.string.switch_off_text);
diff --git a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
index 1803a8b..2ef8f66 100644
--- a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java
@@ -116,12 +116,12 @@
// Update vibration enabled setting
final String vibrationEnabledSetting = getVibrationEnabledSetting();
final boolean wasEnabled = TextUtils.equals(
- vibrationEnabledSetting, Settings.Global.APPLY_RAMPING_RINGER)
+ vibrationEnabledSetting, Settings.System.APPLY_RAMPING_RINGER)
? true
: (Settings.System.getInt(
getContext().getContentResolver(), vibrationEnabledSetting, 1) == 1);
if (vibrationEnabled != wasEnabled) {
- if (vibrationEnabledSetting.equals(Settings.Global.APPLY_RAMPING_RINGER)) {
+ if (vibrationEnabledSetting.equals(Settings.System.APPLY_RAMPING_RINGER)) {
Settings.Global.putInt(getContext().getContentResolver(),
vibrationEnabledSetting, 0);
} else {
@@ -212,7 +212,7 @@
getVibrationIntensitySetting(), getDefaultVibrationIntensity());
final String vibrationEnabledSetting = getVibrationEnabledSetting();
final boolean vibrationEnabled = TextUtils.equals(
- vibrationEnabledSetting, Settings.Global.APPLY_RAMPING_RINGER)
+ vibrationEnabledSetting, Settings.System.APPLY_RAMPING_RINGER)
? true
: (Settings.System.getInt(
getContext().getContentResolver(), vibrationEnabledSetting, 1) == 1);
diff --git a/src/com/android/settings/accounts/AvatarViewMixin.java b/src/com/android/settings/accounts/AvatarViewMixin.java
index 7a2565c..6b04e97 100644
--- a/src/com/android/settings/accounts/AvatarViewMixin.java
+++ b/src/com/android/settings/accounts/AvatarViewMixin.java
@@ -37,6 +37,7 @@
import androidx.lifecycle.OnLifecycleEvent;
import com.android.settings.R;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.utils.ThreadUtils;
@@ -105,6 +106,17 @@
return;
}
+ // Set a component name since activity embedding requires a component name for
+ // registering a rule.
+ intent.setComponent(matchedIntents.get(0).getComponentInfo().getComponentName());
+ ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+ mContext,
+ intent.getComponent(),
+ intent.getAction(),
+ false /* finishPrimaryWithSecondary */,
+ true /* finishSecondaryWithPrimary */,
+ false /* clearTop */);
+
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
.logSettingsTileClick(KEY_AVATAR_ICON, SettingsEnums.SETTINGS_HOMEPAGE);
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 037f584..2ce2206 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -53,6 +53,7 @@
public class RemoveAccountPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, OnClickListener {
+ private static final String TAG = "RemoveAccountPrefController";
private static final String KEY_REMOVE_ACCOUNT = "remove_account";
private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -175,10 +176,11 @@
| IOException
| AuthenticatorException e) {
// handled below
- }
- if (failed) {
+ Log.w(TAG, "Remove account error: " + e);
RemoveAccountFailureDialog.show(getTargetFragment());
- } else {
+ }
+ Log.i(TAG, "failed: " + failed);
+ if (!failed) {
targetActivity.finish();
}
}, null, mUserHandle);
@@ -210,7 +212,7 @@
final Context context = getActivity();
return new AlertDialog.Builder(context)
- .setTitle(R.string.really_remove_account_title)
+ .setTitle(R.string.remove_account_label)
.setMessage(R.string.remove_account_failed)
.setPositiveButton(android.R.string.ok, null)
.create();
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index fb13a99..8484324 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -23,7 +23,6 @@
import android.util.LayoutDirection;
import android.util.Log;
-import androidx.annotation.NonNull;
import androidx.window.embedding.ActivityFilter;
import androidx.window.embedding.ActivityRule;
import androidx.window.embedding.SplitController;
@@ -77,8 +76,8 @@
ComponentName primaryComponent,
ComponentName secondaryComponent,
String secondaryIntentAction,
- boolean finishPrimaryWithSecondary,
- boolean finishSecondaryWithPrimary,
+ int finishPrimaryWithSecondary,
+ int finishSecondaryWithPrimary,
boolean clearTop) {
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
return;
@@ -88,8 +87,8 @@
secondaryIntentAction));
SplitController.getInstance().registerRule(new SplitPairRule(filters,
- finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
- finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishPrimaryWithSecondary,
+ finishSecondaryWithPrimary,
clearTop,
ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
@@ -114,38 +113,40 @@
registerTwoPanePairRule(
context,
- getComponentName(context, Settings.class),
+ new ComponentName(context, Settings.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
clearTop);
registerTwoPanePairRule(
context,
+ new ComponentName(context, SettingsHomepageActivity.class),
+ secondaryComponent,
+ secondaryIntentAction,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+ clearTop);
+
+ // We should finish HomePageActivity altogether even if it shows in single pane for all deep
+ // link cases.
+ registerTwoPanePairRule(
+ context,
new ComponentName(context, DeepLinkHomepageActivity.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
clearTop);
registerTwoPanePairRule(
context,
- getComponentName(context, SettingsHomepageActivity.class),
+ new ComponentName(context, SliceDeepLinkHomepageActivity.class),
secondaryComponent,
secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
- clearTop);
-
- registerTwoPanePairRule(
- context,
- getComponentName(context, SliceDeepLinkHomepageActivity.class),
- secondaryComponent,
- secondaryIntentAction,
- finishPrimaryWithSecondary,
- finishSecondaryWithPrimary,
+ finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+ finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
clearTop);
}
@@ -177,7 +178,7 @@
registerTwoPanePairRuleForSettingsHome(
context,
- getComponentName(context, SubSettings.class),
+ new ComponentName(context, SubSettings.class),
null /* secondaryIntentAction */,
clearTop);
}
@@ -189,8 +190,7 @@
addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class);
addActivityFilter(activityFilters, Settings.class);
- final Intent intent = new Intent();
- intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class));
+ final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class);
final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule(
activityFilters,
intent,
@@ -213,23 +213,7 @@
private void addActivityFilter(Set<ActivityFilter> activityFilters,
Class<? extends Activity> activityClass) {
- activityFilters.add(new ActivityFilter(getComponentName(activityClass),
+ activityFilters.add(new ActivityFilter(new ComponentName(mContext, activityClass),
null /* intentAction */));
}
-
- private void addActivityFilter(Set<ActivityFilter> activityFilters,
- ComponentName componentName) {
- activityFilters.add(new ActivityFilter(componentName, null /* intentAction */));
- }
-
- @NonNull
- private ComponentName getComponentName(Class<? extends Activity> activityClass) {
- return getComponentName(mContext, activityClass);
- }
-
- @NonNull
- private static ComponentName getComponentName(Context context,
- Class<? extends Activity> activityClass) {
- return new ComponentName(context.getPackageName(), activityClass.getName());
- }
}
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index e1ea8e4..159eec6 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -205,6 +205,10 @@
use(AdvancedAppInfoPreferenceCategoryController.class).setChildren(Arrays.asList(
writeSystemSettings, drawOverlay, pip, externalSource, acrossProfiles,
alarmsAndReminders));
+
+ final AppLocalePreferenceController appLocale =
+ use(AppLocalePreferenceController.class);
+ appLocale.setParentFragment(this);
}
@Override
diff --git a/src/com/android/settings/applications/appinfo/AppLocaleDetails.java b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
new file mode 100644
index 0000000..966f02d
--- /dev/null
+++ b/src/com/android/settings/applications/appinfo/AppLocaleDetails.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.applications.appinfo;
+
+import static com.android.settings.widget.EntityHeaderController.ActionType;
+
+import android.app.Activity;
+import android.app.LocaleManager;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.LocaleList;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.applications.AppInfoBase;
+import com.android.settings.widget.EntityHeaderController;
+import com.android.settingslib.applications.AppUtils;
+import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.widget.RadioButtonPreference;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Locale;
+
+/**
+ * A fragment to show the current app locale info and help the user to select the expected locale.
+ */
+public class AppLocaleDetails extends AppInfoBase implements RadioButtonPreference.OnClickListener {
+ private static final String TAG = "AppLocaleDetails";
+
+ private static final String CATEGORY_KEY_SUGGESTED_LANGUAGES =
+ "category_key_suggested_languages";
+ private static final String CATEGORY_KEY_ALL_LANGUAGES =
+ "category_key_all_languages";
+ private static final String KEY_APP_DESCRIPTION = "app_locale_description";
+
+ private boolean mCreated = false;
+ private AppLocaleDetailsHelper mAppLocaleDetailsHelper;
+
+ private PreferenceGroup mGroupOfSuggestedLocales;
+ private PreferenceGroup mGroupOfSupportedLocales;
+ private LayoutPreference mPrefOfDescription;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.app_locale_details);
+ mAppLocaleDetailsHelper = new AppLocaleDetailsHelper(getContext(), mPackageName);
+
+ mGroupOfSuggestedLocales =
+ getPreferenceScreen().findPreference(CATEGORY_KEY_SUGGESTED_LANGUAGES);
+ mGroupOfSupportedLocales =
+ getPreferenceScreen().findPreference(CATEGORY_KEY_ALL_LANGUAGES);
+ mPrefOfDescription = getPreferenceScreen().findPreference(KEY_APP_DESCRIPTION);
+ }
+
+ // Override here so we don't have an empty screen
+ @Override
+ public View onCreateView(LayoutInflater inflater,
+ ViewGroup container,
+ Bundle savedInstanceState) {
+ // if we don't have a package info, show a page saying this is unsupported
+ if (mPackageInfo == null) {
+ return inflater.inflate(R.layout.manage_applications_apps_unsupported, null);
+ }
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onResume() {
+ // Update Locales first, before refresh ui.
+ mAppLocaleDetailsHelper.handleAllLocalesData();
+ super.onResume();
+ }
+
+ @Override
+ protected boolean refreshUi() {
+ if (mAppLocaleDetailsHelper.getSupportedLocales().isEmpty()) {
+ Log.d(TAG, "No supported language.");
+ mGroupOfSuggestedLocales.setVisible(false);
+ mGroupOfSupportedLocales.setVisible(false);
+ mPrefOfDescription.setVisible(true);
+ TextView description = (TextView) mPrefOfDescription.findViewById(R.id.description);
+ Locale locale = mAppLocaleDetailsHelper.getCurrentSystemLocales().get(0);
+ description.setText(getContext().getString(R.string.no_multiple_language_supported,
+ locale.getDisplayName(locale)));
+ return true;
+ }
+
+ mGroupOfSuggestedLocales.removeAll();
+ mGroupOfSupportedLocales.removeAll();
+ Locale appLocale = AppLocaleDetailsHelper.getAppDefaultLocale(getContext(), mPackageName);
+ setLanguagesPreference(mGroupOfSuggestedLocales,
+ mAppLocaleDetailsHelper.getSuggestedLocales(), appLocale);
+ setLanguagesPreference(mGroupOfSupportedLocales,
+ mAppLocaleDetailsHelper.getSupportedLocales(), appLocale);
+ return true;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.APPS_LOCALE_LIST;
+ }
+
+ @Override
+ protected AlertDialog createDialog(int id, int errorCode) {
+ return null;
+ }
+
+ @Override
+ public void onRadioButtonClicked(RadioButtonPreference pref) {
+ mAppLocaleDetailsHelper.setAppDefaultLocale(pref.getKey());
+ refreshUi();
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ if (mCreated) {
+ Log.w(TAG, "onActivityCreated: ignoring duplicate call");
+ return;
+ }
+ mCreated = true;
+ if (mPackageInfo == null) {
+ return;
+ }
+ // Creates a head icon button of app on this page.
+ final Activity activity = getActivity();
+ final Preference pref = EntityHeaderController
+ .newInstance(activity, this, null /* header */)
+ .setRecyclerView(getListView(), getSettingsLifecycle())
+ .setIcon(Utils.getBadgedIcon(getContext(), mPackageInfo.applicationInfo))
+ .setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
+ .setIsInstantApp(AppUtils.isInstant(mPackageInfo.applicationInfo))
+ .setPackageName(mPackageName)
+ .setUid(mPackageInfo.applicationInfo.uid)
+ .setHasAppInfoLink(true)
+ .setButtonActions(ActionType.ACTION_NONE, ActionType.ACTION_NONE)
+ .done(activity, getPrefContext());
+ getPreferenceScreen().addPreference(pref);
+ }
+
+ /**
+ * TODO (b209962418) Do a performance test to low end device.
+ * @return Return the summary to show the current app's language.
+ */
+ public static CharSequence getSummary(Context context, String packageName) {
+ Locale appLocale =
+ AppLocaleDetailsHelper.getAppDefaultLocale(context, packageName);
+ return appLocale == null ? "" : appLocale.getDisplayName(appLocale);
+ }
+
+ private void setLanguagesPreference(PreferenceGroup group,
+ Collection<Locale> locales, Locale appLocale) {
+ if (locales == null) {
+ return;
+ }
+
+ for (Locale locale : locales) {
+ RadioButtonPreference pref = new RadioButtonPreference(getContext());
+ pref.setTitle(locale.getDisplayName(locale));
+ pref.setKey(locale.toLanguageTag());
+ pref.setChecked(locale.equals(appLocale));
+ pref.setOnClickListener(this);
+ group.addPreference(pref);
+ }
+ }
+
+ @VisibleForTesting
+ static class AppLocaleDetailsHelper {
+ private String mPackageName;
+ private Context mContext;
+ private TelephonyManager mTelephonyManager;
+ private LocaleManager mLocaleManager;
+
+ private Collection<Locale> mSuggestedLocales = new ArrayList<>();;
+ private Collection<Locale> mSupportedLocales = new ArrayList<>();;
+
+ AppLocaleDetailsHelper(Context context, String packageName) {
+ mContext = context;
+ mPackageName = packageName;
+ mTelephonyManager = context.getSystemService(TelephonyManager.class);
+ mLocaleManager = context.getSystemService(LocaleManager.class);
+ }
+
+ /** Handle suggested and supported locales for UI display. */
+ public void handleAllLocalesData() {
+ clearLocalesData();
+ handleSuggestedLocales();
+ handleSupportedLocales();
+ }
+
+ /** Gets suggested locales in the app. */
+ public Collection<Locale> getSuggestedLocales() {
+ return mSuggestedLocales;
+ }
+
+ /** Gets supported locales in the app. */
+ public Collection<Locale> getSupportedLocales() {
+ return mSupportedLocales;
+ }
+
+ @VisibleForTesting
+ void handleSuggestedLocales() {
+ LocaleList currentSystemLocales = getCurrentSystemLocales();
+ Locale simLocale = mTelephonyManager.getSimLocale();
+ Locale appLocale = getAppDefaultLocale(mContext, mPackageName);
+ // 1st locale in suggested languages group.
+ if (appLocale != null) {
+ mSuggestedLocales.add(appLocale);
+ }
+ // 2nd locale in suggested languages group.
+ if (simLocale != null && !simLocale.equals(appLocale)) {
+ mSuggestedLocales.add(simLocale);
+ }
+ // Other locales in suggested languages group.
+ for (int i = 0; i < currentSystemLocales.size(); i++) {
+ Locale locale = currentSystemLocales.get(i);
+ if (!locale.equals(appLocale) && !locale.equals(simLocale)) {
+ mSuggestedLocales.add(locale);
+ }
+ }
+ }
+
+ @VisibleForTesting
+ void handleSupportedLocales() {
+ //TODO Waiting for PackageManager api
+ String[] languages = getAssetSystemLocales();
+
+ for (String language : languages) {
+ mSupportedLocales.add(Locale.forLanguageTag(language));
+ }
+ if (mSuggestedLocales != null || !mSuggestedLocales.isEmpty()) {
+ mSupportedLocales.removeAll(mSuggestedLocales);
+ }
+ }
+
+ private void clearLocalesData() {
+ mSuggestedLocales.clear();
+ mSupportedLocales.clear();
+ }
+
+ /** Gets per app's default locale */
+ public static Locale getAppDefaultLocale(Context context, String packageName) {
+ LocaleManager localeManager = context.getSystemService(LocaleManager.class);
+ try {
+ LocaleList localeList = (localeManager == null)
+ ? new LocaleList() : localeManager.getApplicationLocales(packageName);
+ return localeList.isEmpty() ? null : localeList.get(0);
+ } catch (IllegalArgumentException e) {
+ Log.w(TAG, "package name : " + packageName + " is not correct. " + e);
+ }
+ return null;
+ }
+
+ /** Sets per app's default language to system. */
+ public void setAppDefaultLocale(String languageTag) {
+ if (languageTag.isEmpty()) {
+ Log.w(TAG, "[setAppDefaultLocale] No language tag.");
+ return;
+ }
+ setAppDefaultLocale(LocaleList.forLanguageTags(languageTag));
+ }
+
+ /** Sets per app's default language to system. */
+ public void setAppDefaultLocale(LocaleList localeList) {
+ if (mLocaleManager == null) {
+ Log.w(TAG, "LocaleManager is null, and cannot set the app locale up.");
+ return;
+ }
+ mLocaleManager.setApplicationLocales(mPackageName, localeList);
+ }
+
+ @VisibleForTesting
+ LocaleList getCurrentSystemLocales() {
+ return Resources.getSystem().getConfiguration().getLocales();
+ }
+
+ @VisibleForTesting
+ String[] getAssetSystemLocales() {
+ try {
+ PackageManager packageManager = mContext.getPackageManager();
+ return packageManager.getResourcesForApplication(
+ packageManager.getPackageInfo(mPackageName, PackageManager.MATCH_ALL)
+ .applicationInfo).getAssets().getNonSystemLocales();
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.w(TAG, "Can not found the package name : " + e);
+ }
+ return new String[0];
+ }
+ }
+}
diff --git a/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java b/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java
new file mode 100644
index 0000000..ce833ed
--- /dev/null
+++ b/src/com/android/settings/applications/appinfo/AppLocalePickerActivity.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.applications.appinfo;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.applications.AppInfoBase;
+
+/** Activity for the entry of {@link #AppLocaleDetails} from outside Settings app. */
+public class AppLocalePickerActivity extends SettingsActivity {
+ private static final String TAG = "AppLocalePickerActivity";
+
+ @Override
+ protected void onCreate(Bundle savedState) {
+ Intent intent = getEntryIntent(getIntent());
+ if (intent == null) {
+ finish();
+ return;
+ }
+ setIntent(intent);
+ super.onCreate(savedState);
+ }
+
+ @VisibleForTesting
+ Intent getEntryIntent(Intent intent) {
+ String callingPackage = getCallingPackage();
+ if (callingPackage == null || callingPackage.isEmpty()) {
+ Log.d(TAG, "No calling package name is found.");
+ return null;
+ }
+ final Bundle fragmentArgs = new Bundle();
+ fragmentArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, callingPackage);
+ return intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs);
+ }
+}
diff --git a/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
new file mode 100644
index 0000000..f1e43ad
--- /dev/null
+++ b/src/com/android/settings/applications/appinfo/AppLocalePreferenceController.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import android.content.Context;
+import android.util.FeatureFlagUtils;
+
+import com.android.settings.SettingsPreferenceFragment;
+
+/**
+ * A controller to update current locale information of application.
+ */
+public class AppLocalePreferenceController extends AppInfoPreferenceControllerBase {
+ public AppLocalePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return FeatureFlagUtils
+ .isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION)
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ protected Class<? extends SettingsPreferenceFragment> getDetailFragmentClass() {
+ return AppLocaleDetails.class;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ return AppLocaleDetails.getSummary(mContext, mParent.getAppEntry().info.packageName);
+ }
+}
diff --git a/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java b/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java
new file mode 100644
index 0000000..aa12b62
--- /dev/null
+++ b/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceController.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import android.content.Context;
+import android.util.FeatureFlagUtils;
+
+import com.android.settings.core.BasePreferenceController;
+
+/**
+ * A controller to update current locale information of application
+ * and a entry to launch {@link ManageApplications}.
+ * TODO(209775925) After feature release, this class may be removed.
+ */
+public class ManageAppLocalePreferenceController extends BasePreferenceController {
+ public ManageAppLocalePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return FeatureFlagUtils
+ .isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION)
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index c1f4574..d985482 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -108,6 +108,7 @@
import com.android.settings.applications.UsageAccessDetails;
import com.android.settings.applications.appinfo.AlarmsAndRemindersDetails;
import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppLocaleDetails;
import com.android.settings.applications.appinfo.DrawOverlayDetails;
import com.android.settings.applications.appinfo.ExternalSourcesDetails;
import com.android.settings.applications.appinfo.ManageExternalStorageDetails;
@@ -231,6 +232,7 @@
public static final int LIST_MANAGE_EXTERNAL_STORAGE = 11;
public static final int LIST_TYPE_ALARMS_AND_REMINDERS = 12;
public static final int LIST_TYPE_MEDIA_MANAGEMENT_APPS = 13;
+ public static final int LIST_TYPE_APPS_LOCAL = 14;
// List types that should show instant apps.
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
@@ -272,8 +274,7 @@
Intent intent = activity.getIntent();
Bundle args = getArguments();
- int screenTitle = intent.getIntExtra(
- SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.all_apps);
+ final int screenTitle = getTitleResId(intent, args);
String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
if (className == null) {
className = intent.getComponent().getClassName();
@@ -290,49 +291,38 @@
mSortOrder = R.id.sort_order_size;
} else if (className.equals(UsageAccessSettingsActivity.class.getName())) {
mListType = LIST_TYPE_USAGE_ACCESS;
- screenTitle = R.string.usage_access;
} else if (className.equals(HighPowerApplicationsActivity.class.getName())) {
mListType = LIST_TYPE_HIGH_POWER;
// Default to showing system.
mShowSystem = true;
- screenTitle = R.string.high_power_apps;
} else if (className.equals(OverlaySettingsActivity.class.getName())) {
mListType = LIST_TYPE_OVERLAY;
- screenTitle = R.string.system_alert_window_settings;
reportIfRestrictedSawIntent(intent);
} else if (className.equals(WriteSettingsActivity.class.getName())) {
mListType = LIST_TYPE_WRITE_SETTINGS;
- screenTitle = R.string.write_settings;
} else if (className.equals(ManageExternalSourcesActivity.class.getName())) {
mListType = LIST_TYPE_MANAGE_SOURCES;
- screenTitle = R.string.install_other_apps;
} else if (className.equals(GamesStorageActivity.class.getName())) {
mListType = LIST_TYPE_GAMES;
mSortOrder = R.id.sort_order_size;
} else if (className.equals(Settings.ChangeWifiStateActivity.class.getName())) {
mListType = LIST_TYPE_WIFI_ACCESS;
- screenTitle = R.string.change_wifi_state_title;
} else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
mListType = LIST_MANAGE_EXTERNAL_STORAGE;
- screenTitle = R.string.manage_external_storage_title;
} else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
mListType = LIST_TYPE_MEDIA_MANAGEMENT_APPS;
- screenTitle = R.string.media_management_apps_title;
} else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
mListType = LIST_TYPE_ALARMS_AND_REMINDERS;
- screenTitle = R.string.alarms_and_reminders_title;
} else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
mListType = LIST_TYPE_NOTIFICATION;
mUsageStatsManager = IUsageStatsManager.Stub.asInterface(
ServiceManager.getService(Context.USAGE_STATS_SERVICE));
mNotificationBackend = new NotificationBackend();
mSortOrder = R.id.sort_order_recent_notification;
- screenTitle = R.string.app_notifications_title;
+ } else if (className.equals(AppLocaleDetails.class.getName())) {
+ mListType = LIST_TYPE_APPS_LOCAL;
} else {
- if (screenTitle == -1) {
- screenTitle = R.string.all_apps;
- }
mListType = LIST_TYPE_MAIN;
}
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
@@ -514,6 +504,8 @@
return SettingsEnums.ALARMS_AND_REMINDERS;
case LIST_TYPE_MEDIA_MANAGEMENT_APPS:
return SettingsEnums.MEDIA_MANAGEMENT_APPS;
+ case LIST_TYPE_APPS_LOCAL:
+ return SettingsEnums.APPS_LOCALE_LIST;
default:
return SettingsEnums.PAGE_UNKNOWN;
}
@@ -637,6 +629,10 @@
startAppInfoFragment(MediaManagementAppsDetails.class,
R.string.media_management_apps_title);
break;
+ case LIST_TYPE_APPS_LOCAL:
+ startAppInfoFragment(AppLocaleDetails.class,
+ R.string.app_locale_picker_title);
+ break;
// TODO: Figure out if there is a way where we can spin up the profile's settings
// process ahead of time, to avoid a long load of data when user clicks on a managed
// app. Maybe when they load the list of apps that contains managed profile apps.
@@ -881,6 +877,48 @@
params.setBehavior(behavior);
}
+ /**
+ * Returns a resource ID of title based on what type of app list is
+ * @param intent the intent of the activity that might include a specified title
+ * @param args the args that includes a class name of app list
+ */
+ public static int getTitleResId(@NonNull Intent intent, Bundle args) {
+ int screenTitle = intent.getIntExtra(
+ SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.all_apps);
+ String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
+ if (className == null) {
+ className = intent.getComponent().getClassName();
+ }
+ if (className.equals(Settings.UsageAccessSettingsActivity.class.getName())) {
+ screenTitle = R.string.usage_access;
+ } else if (className.equals(Settings.HighPowerApplicationsActivity.class.getName())) {
+ screenTitle = R.string.high_power_apps;
+ } else if (className.equals(Settings.OverlaySettingsActivity.class.getName())) {
+ screenTitle = R.string.system_alert_window_settings;
+ } else if (className.equals(Settings.WriteSettingsActivity.class.getName())) {
+ screenTitle = R.string.write_settings;
+ } else if (className.equals(Settings.ManageExternalSourcesActivity.class.getName())) {
+ screenTitle = R.string.install_other_apps;
+ } else if (className.equals(Settings.ChangeWifiStateActivity.class.getName())) {
+ screenTitle = R.string.change_wifi_state_title;
+ } else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
+ screenTitle = R.string.manage_external_storage_title;
+ } else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
+ screenTitle = R.string.media_management_apps_title;
+ } else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
+ screenTitle = R.string.alarms_and_reminders_title;
+ } else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
+ screenTitle = R.string.app_notifications_title;
+ } else if (className.equals(AppLocaleDetails.class.getName())) {
+ screenTitle = R.string.app_locales_picker_menu_title;
+ } else {
+ if (screenTitle == -1) {
+ screenTitle = R.string.all_apps;
+ }
+ }
+ return screenTitle;
+ }
+
static class FilterSpinnerAdapter extends SettingsSpinnerAdapter<CharSequence> {
private final ManageApplications mManageApplications;
@@ -1495,6 +1533,10 @@
case LIST_TYPE_MEDIA_MANAGEMENT_APPS:
holder.setSummary(MediaManagementAppsDetails.getSummary(mContext, entry));
break;
+ case LIST_TYPE_APPS_LOCAL:
+ holder.setSummary(AppLocaleDetails
+ .getSummary(mContext, entry.info.packageName));
+ break;
default:
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
break;
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index 690ef13..c74e85e 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -32,6 +32,7 @@
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricManager.Authenticators;
import android.hardware.biometrics.BiometricManager.BiometricError;
+import android.hardware.biometrics.SensorProperties;
import android.hardware.face.FaceManager;
import android.hardware.face.FaceSensorPropertiesInternal;
import android.hardware.fingerprint.FingerprintManager;
@@ -175,8 +176,22 @@
mHasFeatureFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
mHasFeatureFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
+ // Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
+ final int authenticators = getIntent().getIntExtra(
+ EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
+ Log.d(TAG, "Authenticators: " + authenticators);
+
+ mParentalOptionsRequired = intent.getBooleanExtra(EXTRA_REQUIRE_PARENTAL_CONSENT, false);
+ mSkipReturnToParent = intent.getBooleanExtra(EXTRA_SKIP_RETURN_TO_PARENT, false);
+
// determine what can be enrolled
final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+ final boolean isMultiSensor = mHasFeatureFace && mHasFeatureFingerprint;
+
+ Log.d(TAG, "parentalOptionsRequired: " + mParentalOptionsRequired
+ + ", skipReturnToParent: " + mSkipReturnToParent
+ + ", isSetupWizard: " + isSetupWizard
+ + ", isMultiSensor: " + isMultiSensor);
if (mHasFeatureFace) {
final FaceManager faceManager = getSystemService(FaceManager.class);
@@ -185,11 +200,23 @@
final int maxFacesEnrollableIfSUW = getApplicationContext().getResources()
.getInteger(R.integer.suw_max_faces_enrollable);
if (!faceProperties.isEmpty()) {
+ final FaceSensorPropertiesInternal props = faceProperties.get(0);
final int maxEnrolls =
- isSetupWizard ? maxFacesEnrollableIfSUW
- : faceProperties.get(0).maxEnrollmentsPerUser;
+ isSetupWizard ? maxFacesEnrollableIfSUW : props.maxEnrollmentsPerUser;
mIsFaceEnrollable =
faceManager.getEnrolledFaces(mUserId).size() < maxEnrolls;
+
+ // exclude face enrollment from setup wizard if configured as a convenience
+ // isSetupWizard is always false for unicorn enrollment, so if consent is
+ // required check if setup has completed instead.
+ final boolean isSettingUp = isSetupWizard || (mParentalOptionsRequired
+ && !WizardManagerHelper.isUserSetupComplete(this));
+ if (isSettingUp && isMultiSensor && mIsFaceEnrollable) {
+ if (props.sensorStrength == SensorProperties.STRENGTH_CONVENIENCE) {
+ Log.i(TAG, "Excluding face from SuW enrollment (STRENGTH_CONVENIENCE)");
+ mIsFaceEnrollable = false;
+ }
+ }
}
}
if (mHasFeatureFingerprint) {
@@ -207,13 +234,6 @@
}
}
- mParentalOptionsRequired = intent.getBooleanExtra(EXTRA_REQUIRE_PARENTAL_CONSENT, false);
- mSkipReturnToParent = intent.getBooleanExtra(EXTRA_SKIP_RETURN_TO_PARENT, false);
-
- Log.d(TAG, "parentalOptionsRequired: " + mParentalOptionsRequired
- + ", skipReturnToParent: " + mSkipReturnToParent
- + ", isSetupWizard: " + isSetupWizard);
-
// TODO(b/195128094): remove this restriction
// Consent can only be recorded when this activity is launched directly from the kids
// module. This can be removed when there is a way to notify consent status out of band.
@@ -247,19 +267,10 @@
setOrConfirmCredentialsNow();
} else {
// Start enrollment process if we haven't bailed out yet
- startEnroll();
+ startEnrollWith(authenticators, isSetupWizard);
}
}
- private void startEnroll() {
- // Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
- final int authenticators = getIntent().getIntExtra(
- EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
- Log.d(TAG, "Authenticators: " + authenticators);
-
- startEnrollWith(authenticators, WizardManagerHelper.isAnySetupWizard(getIntent()));
- }
-
private void startEnrollWith(@Authenticators.Types int authenticators, boolean setupWizard) {
// If the caller is not setup wizard, and the user has something enrolled, finish.
// Allow parental consent flow to skip this check, since one modality could be consented
@@ -339,7 +350,9 @@
final boolean fpConsentRequired = ParentalControlsUtils
.parentConsentRequired(this, BiometricAuthenticator.TYPE_FINGERPRINT) != null;
- final boolean requestFaceConsent = faceConsentRequired && mHasFeatureFace;
+ final boolean requestFaceConsent = faceConsentRequired
+ && mHasFeatureFace
+ && mIsFaceEnrollable;
final boolean requestFpConsent = fpConsentRequired && mHasFeatureFingerprint;
Log.d(TAG, "faceConsentRequired: " + faceConsentRequired
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index f80b01f..7f3bc87 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -203,11 +203,15 @@
getMoreButtonTextRes(), this::onNextButtonClick);
requireScrollMixin.setOnRequireScrollStateChangedListener(
scrollNeeded -> {
- // Update text of primary button from "More" to "Agree".
- final int primaryButtonTextRes = scrollNeeded
- ? getMoreButtonTextRes()
- : getAgreeButtonTextRes();
- getPrimaryFooterButton().setText(this, primaryButtonTextRes);
+
+ boolean enrollmentCompleted = checkMaxEnrolled() != 0;
+ if (!enrollmentCompleted) {
+ // Update text of primary button from "More" to "Agree".
+ final int primaryButtonTextRes = scrollNeeded
+ ? getMoreButtonTextRes()
+ : getAgreeButtonTextRes();
+ getPrimaryFooterButton().setText(this, primaryButtonTextRes);
+ }
// Show secondary button once scroll is completed.
if (!scrollNeeded) {
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index 7dd6385..5ee7880 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -22,6 +22,9 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
+import android.hardware.biometrics.SensorProperties;
+import android.hardware.face.FaceManager;
+import android.hardware.face.FaceSensorPropertiesInternal;
import android.os.storage.StorageManager;
import android.util.Log;
import android.view.Surface;
@@ -273,4 +276,17 @@
public static boolean isReverseLandscape(@NonNull Context context) {
return context.getDisplay().getRotation() == Surface.ROTATION_270;
}
+
+ /**
+ * @param faceManager
+ * @return True if at least one sensor is set as a convenience.
+ */
+ public static boolean isConvenience(@NonNull FaceManager faceManager) {
+ for (FaceSensorPropertiesInternal props : faceManager.getSensorPropertiesInternal()) {
+ if (props.sensorStrength == SensorProperties.STRENGTH_CONVENIENCE) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/com/android/settings/biometrics/OWNERS b/src/com/android/settings/biometrics/OWNERS
index 23eaf7e..99dd654 100644
--- a/src/com/android/settings/biometrics/OWNERS
+++ b/src/com/android/settings/biometrics/OWNERS
@@ -1,5 +1,6 @@
# Default reviewers for this and subdirectories.
curtislb@google.com
+graciecheng@google.com
ilyamaty@google.com
jaggies@google.com
jbolinger@google.com
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index 74ea27b..eadb5b8 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -19,10 +19,12 @@
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.Intent;
+import android.hardware.SensorPrivacyManager;
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.face.FaceManager;
import android.hardware.face.FaceSensorPropertiesInternal;
import android.os.Bundle;
+import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -34,10 +36,12 @@
import com.android.settings.R;
import com.android.settings.Utils;
+import com.android.settings.biometrics.BiometricEnrollActivity;
import com.android.settings.biometrics.BiometricEnrollIntroduction;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.utils.SensorPrivacyManagerHelper;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.template.FooterButton;
@@ -57,6 +61,7 @@
private FaceFeatureProvider mFaceFeatureProvider;
@Nullable private FooterButton mPrimaryFooterButton;
@Nullable private FooterButton mSecondaryFooterButton;
+ @Nullable private SensorPrivacyManager mSensorPrivacyManager;
@Override
protected void onCancelButtonClick(View view) {
@@ -150,6 +155,14 @@
});
}
}
+
+ mSensorPrivacyManager = getApplicationContext()
+ .getSystemService(SensorPrivacyManager.class);
+ final SensorPrivacyManagerHelper helper = SensorPrivacyManagerHelper
+ .getInstance(getApplicationContext());
+ final boolean cameraPrivacyEnabled = helper
+ .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+ Log.v(TAG, "cameraPrivacyEnabled : " + cameraPrivacyEnabled);
}
protected boolean generateChallengeOnCreate() {
@@ -309,6 +322,28 @@
}
@Override
+ protected void onNextButtonClick(View view) {
+ final boolean parentelConsentRequired =
+ getIntent()
+ .getBooleanExtra(BiometricEnrollActivity.EXTRA_REQUIRE_PARENTAL_CONSENT, false);
+ final boolean cameraPrivacyEnabled = SensorPrivacyManagerHelper
+ .getInstance(getApplicationContext())
+ .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+ final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+ final boolean isSettingUp = isSetupWizard || (parentelConsentRequired
+ && !WizardManagerHelper.isUserSetupComplete(this));
+ if (cameraPrivacyEnabled && !isSettingUp) {
+ if (mSensorPrivacyManager == null) {
+ mSensorPrivacyManager = getApplicationContext()
+ .getSystemService(SensorPrivacyManager.class);
+ }
+ mSensorPrivacyManager.showSensorUseDialog(SensorPrivacyManager.Sensors.CAMERA);
+ } else {
+ super.onNextButtonClick(view);
+ }
+ }
+
+ @Override
@NonNull
protected FooterButton getPrimaryFooterButton() {
if (mPrimaryFooterButton == null) {
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
index c515742..60f8b21 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
@@ -19,13 +19,17 @@
import static android.provider.Settings.Secure.FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION;
import android.content.Context;
+import android.hardware.biometrics.SensorProperties;
import android.hardware.face.FaceManager;
+import android.hardware.face.FaceSensorProperties;
import android.provider.Settings;
import androidx.preference.Preference;
import com.android.settings.Utils;
+import java.util.List;
+
/**
* Preference controller giving the user an option to always require confirmation.
*/
@@ -75,6 +79,14 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ List<FaceSensorProperties> properties = mFaceManager.getSensorProperties();
+ // If a sensor is convenience, it is possible that it becomes weak or strong with
+ // an update. For this reason, the sensor is conditionally unavailable.
+ if (!properties.isEmpty()
+ && properties.get(0).getSensorStrength() == SensorProperties.STRENGTH_CONVENIENCE) {
+ return CONDITIONALLY_UNAVAILABLE;
+ } else {
+ return AVAILABLE;
+ }
}
}
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
index d8ff482..616b736 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
@@ -33,6 +33,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
@@ -56,6 +57,7 @@
public static class ConfirmRemoveDialog extends InstrumentedDialogFragment {
+ private boolean mIsConvenience;
private DialogInterface.OnClickListener mOnClickListener;
@Override
@@ -68,7 +70,9 @@
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.security_settings_face_settings_remove_dialog_title)
- .setMessage(R.string.security_settings_face_settings_remove_dialog_details)
+ .setMessage(mIsConvenience
+ ? R.string.security_settings_face_settings_remove_dialog_details_convenience
+ : R.string.security_settings_face_settings_remove_dialog_details)
.setPositiveButton(R.string.delete, mOnClickListener)
.setNegativeButton(R.string.cancel, mOnClickListener);
AlertDialog dialog = builder.create();
@@ -76,6 +80,10 @@
return dialog;
}
+ public void setIsConvenience(boolean isConvenience) {
+ mIsConvenience = isConvenience;
+ }
+
public void setOnClickListener(DialogInterface.OnClickListener listener) {
mOnClickListener = listener;
}
@@ -197,6 +205,7 @@
mRemoving = true;
ConfirmRemoveDialog dialog = new ConfirmRemoveDialog();
dialog.setOnClickListener(mOnClickListener);
+ dialog.setIsConvenience(BiometricUtils.isConvenience(mFaceManager));
dialog.show(mActivity.getSupportFragmentManager(), ConfirmRemoveDialog.class.getName());
}
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
index 73360f1..272d142 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsController.java
@@ -29,6 +29,7 @@
import android.net.Uri;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.text.TextUtils;
import android.util.Log;
@@ -126,8 +127,8 @@
try {
java.util.Objects.requireNonNull(ICompanionDeviceManager.Stub.asInterface(
ServiceManager.getService(
- Context.COMPANION_DEVICE_SERVICE))).disassociate(
- address, packageName);
+ Context.COMPANION_DEVICE_SERVICE))).legacyDisassociate(
+ address, packageName, UserHandle.myUserId());
} catch (RemoteException e) {
throw new RuntimeException(e);
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java b/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
index c5f8453..ec3e11f 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java
@@ -52,12 +52,12 @@
@Override
protected void refresh() {
if (mCachedDevice.getGroupId() != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
- StringBuilder mTitle = new StringBuilder(mContext.getString(
+ StringBuilder title = new StringBuilder(mContext.getString(
R.string.bluetooth_multuple_devices_mac_address, mCachedDevice.getAddress()));
for (CachedBluetoothDevice member: mCachedDevice.getMemberDevice()) {
- mTitle.append("\n").append(member.getAddress());
+ title.append("\n").append(member.getAddress());
}
- mFooterPreference.setTitle(mTitle);
+ mFooterPreference.setTitle(title);
} else {
mFooterPreference.setTitle(mContext.getString(
R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
index 0a9003d..55c76e3 100755
--- a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
@@ -31,6 +31,8 @@
import com.android.settings.R;
import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
+import java.time.Duration;
+
/**
* BluetoothDiscoverableEnabler is a helper to manage the "Discoverable"
* checkbox. It sets/unsets discoverability and keeps track of how much time
@@ -136,9 +138,8 @@
int timeout = getDiscoverableTimeout();
long endTimestamp = System.currentTimeMillis() + timeout * 1000L;
LocalBluetoothPreferences.persistDiscoverableEndTimestamp(mContext, endTimestamp);
-
- mBluetoothAdapter
- .setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, timeout);
+ mBluetoothAdapter.setDiscoverableTimeout(Duration.ofSeconds(timeout));
+ mBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
updateCountdownSummary();
Log.d(TAG, "setEnabled(): enabled = " + enable + "timeout = " + timeout);
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index ec5c8dd..b75e02a 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -94,7 +94,7 @@
mPasskeyFormatted = formatKey(mPasskey);
final CachedBluetoothDevice cachedDevice =
mBluetoothManager.getCachedDeviceManager().findDevice(mDevice);
- mIsCoordinatedSetMember = (cachedDevice != null)
+ mIsCoordinatedSetMember = cachedDevice != null
? cachedDevice.isCoordinatedSetMemberDevice() : false;
}
diff --git a/src/com/android/settings/bluetooth/RequestPermissionActivity.java b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
index 362849d..588bc73 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
@@ -16,10 +16,13 @@
package com.android.settings.bluetooth;
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
import android.annotation.NonNull;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothStatusCodes;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -39,7 +42,7 @@
import com.android.settings.R;
import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
-import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+import java.time.Duration;
/**
* RequestPermissionActivity asks the user whether to enable discovery. This is
@@ -261,22 +264,26 @@
if (mRequest == REQUEST_ENABLE || mRequest == REQUEST_DISABLE) {
// BT toggled. Done
returnCode = RESULT_OK;
- } else if (mBluetoothAdapter.setScanMode(
- BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, mTimeout)) {
- // If already in discoverable mode, this will extend the timeout.
- long endTime = System.currentTimeMillis() + (long) mTimeout * 1000;
- LocalBluetoothPreferences.persistDiscoverableEndTimestamp(
- this, endTime);
- if (0 < mTimeout) {
- BluetoothDiscoverableTimeoutReceiver.setDiscoverableAlarm(this, endTime);
- }
- returnCode = mTimeout;
- // Activity.RESULT_FIRST_USER should be 1
- if (returnCode < RESULT_FIRST_USER) {
- returnCode = RESULT_FIRST_USER;
- }
} else {
- returnCode = RESULT_CANCELED;
+ mBluetoothAdapter.setDiscoverableTimeout(Duration.ofSeconds(mTimeout));
+ if (mBluetoothAdapter.setScanMode(
+ BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE)
+ == BluetoothStatusCodes.SUCCESS) {
+ // If already in discoverable mode, this will extend the timeout.
+ long endTime = System.currentTimeMillis() + (long) mTimeout * 1000;
+ LocalBluetoothPreferences.persistDiscoverableEndTimestamp(
+ this, endTime);
+ if (0 < mTimeout) {
+ BluetoothDiscoverableTimeoutReceiver.setDiscoverableAlarm(this, endTime);
+ }
+ returnCode = mTimeout;
+ // Activity.RESULT_FIRST_USER should be 1
+ if (returnCode < RESULT_FIRST_USER) {
+ returnCode = RESULT_FIRST_USER;
+ }
+ } else {
+ returnCode = RESULT_CANCELED;
+ }
}
if (mDialog != null) {
diff --git a/src/com/android/settings/connecteddevice/usb/UsbBackend.java b/src/com/android/settings/connecteddevice/usb/UsbBackend.java
index 244818f..7f3a598 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbBackend.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbBackend.java
@@ -41,7 +41,10 @@
*/
public class UsbBackend {
- static final int PD_ROLE_SWAP_TIMEOUT_MS = 3000;
+ // extend this value from 3s to 4s because of switching data role
+ // in USB driver side takes about 3s in some devices, plus the usb
+ // port change event dispatching time, 3s is not enough.
+ static final int PD_ROLE_SWAP_TIMEOUT_MS = 4000;
static final int NONPD_ROLE_SWAP_TIMEOUT_MS = 15000;
private final boolean mFileTransferRestricted;
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index f8efcee..c88fe46 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -42,6 +42,7 @@
import com.android.settings.applications.UsageAccessDetails;
import com.android.settings.applications.appinfo.AlarmsAndRemindersDetails;
import com.android.settings.applications.appinfo.AppInfoDashboardFragment;
+import com.android.settings.applications.appinfo.AppLocaleDetails;
import com.android.settings.applications.appinfo.DrawOverlayDetails;
import com.android.settings.applications.appinfo.ExternalSourcesDetails;
import com.android.settings.applications.appinfo.ManageExternalStorageDetails;
@@ -68,6 +69,7 @@
import com.android.settings.biometrics.face.FaceSettings;
import com.android.settings.biometrics.fingerprint.FingerprintSettings;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
+import com.android.settings.bluetooth.BluetoothPairingDetail;
import com.android.settings.bugreporthandler.BugReportHandlerPicker;
import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
@@ -122,6 +124,8 @@
import com.android.settings.network.NetworkProviderSettings;
import com.android.settings.network.apn.ApnEditor;
import com.android.settings.network.apn.ApnSettings;
+import com.android.settings.network.telephony.MobileNetworkSettings;
+import com.android.settings.network.telephony.NetworkSelectSettings;
import com.android.settings.nfc.AndroidBeam;
import com.android.settings.nfc.PaymentSettings;
import com.android.settings.notification.ConfigureNotificationSettings;
@@ -178,6 +182,7 @@
public static final String[] ENTRY_FRAGMENTS = {
AdvancedConnectedDeviceDashboardFragment.class.getName(),
CreateShortcut.class.getName(),
+ BluetoothPairingDetail.class.getName(),
WifiSettings.class.getName(),
WifiNetworkDetailsFragment.class.getName(),
ConfigureWifiSettings.class.getName(),
@@ -322,10 +327,13 @@
InteractAcrossProfilesDetails.class.getName(),
MediaControlsSettings.class.getName(),
NetworkProviderSettings.class.getName(),
+ NetworkSelectSettings.class.getName(),
AlarmsAndRemindersDetails.class.getName(),
MediaManagementAppsDetails.class.getName(),
AutoBrightnessSettings.class.getName(),
- OneHandedSettings.class.getName()
+ OneHandedSettings.class.getName(),
+ MobileNetworkSettings.class.getName(),
+ AppLocaleDetails.class.getName()
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
@@ -347,6 +355,7 @@
Settings.WifiSettingsActivity.class.getName(),
Settings.DataUsageSummaryActivity.class.getName(),
Settings.NetworkProviderSettingsActivity.class.getName(),
+ Settings.NetworkSelectActivity.class.getName(),
// Home page > Connected devices
Settings.BluetoothSettingsActivity.class.getName(),
Settings.WifiDisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 91d703d..cdac3b9 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -36,7 +36,6 @@
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
-import android.content.DialogInterface.OnCancelListener;
import android.content.IContentProvider;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -63,6 +62,7 @@
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
+import com.android.settings.homepage.TopLevelHighlightMixin;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.PrimarySwitchPreference;
@@ -170,27 +170,23 @@
if (action != null) {
intent.setAction(action);
}
+ // Register the rule for injected apps.
+ ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+ mContext,
+ new ComponentName(tile.getPackageName(), tile.getComponentName()),
+ action,
+ true /* clearTop */);
pref.setOnPreferenceClickListener(preference -> {
- OnCancelListener listener = null;
+ TopLevelHighlightMixin highlightMixin = null;
if (fragment instanceof TopLevelSettings
&& ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) {
- // Register the rule for injected apps.
- ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
- mContext,
- new ComponentName(tile.getPackageName(), tile.getComponentName()),
- null /* secondaryIntentAction */,
- true /* clearTop */);
-
- // Highlight preference ui.
+ // Highlight the preference whenever it's clicked
final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment;
- // Highlight the tile immediately whenever it's clicked
topLevelSettings.setHighlightPreferenceKey(key);
- // If the tile allows users to select profile, the pop-op dialog may be
- // cancelled and then the previous highlight entry should be restored.
- listener = dialog -> topLevelSettings.restorePreviousHighlight();
+ highlightMixin = topLevelSettings.getHighlightMixin();
}
launchIntentOrSelectProfile(activity, tile, intent, sourceMetricsCategory,
- listener);
+ highlightMixin);
return true;
});
}
@@ -223,7 +219,7 @@
SettingsEnums.DASHBOARD_SUMMARY)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
launchIntentOrSelectProfile(activity, tile, intent, SettingsEnums.DASHBOARD_SUMMARY,
- /* listener= */ null);
+ /* highlightMixin= */ null);
}
private DynamicDataObserver createDynamicDataObserver(String method, Uri uri, Preference pref) {
@@ -438,7 +434,7 @@
}
private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent,
- int sourceMetricCategory, OnCancelListener listener) {
+ int sourceMetricCategory, TopLevelHighlightMixin highlightMixin) {
if (!isIntentResolvable(intent)) {
Log.w(TAG, "Cannot resolve intent, skipping. " + intent);
return;
@@ -469,7 +465,9 @@
}
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile,
- sourceMetricCategory, listener);
+ sourceMetricCategory, /* onShowListener= */ highlightMixin,
+ /* onDismissListener= */ highlightMixin,
+ /* onCancelListener= */ highlightMixin);
}
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
index 402982f..2bcc02e 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
@@ -21,6 +21,7 @@
import com.android.settings.accounts.AccountDashboardFragment;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.deviceinfo.StorageDashboardFragment;
+import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
import com.android.settings.location.LocationServices;
import java.util.Map;
@@ -46,5 +47,7 @@
ProfileSelectLocationServicesFragment.class.getName());
FRAGMENT_MAP.put(StorageDashboardFragment.class.getName(),
ProfileSelectStorageFragment.class.getName());
+ FRAGMENT_MAP.put(AvailableVirtualKeyboardFragment.class.getName(),
+ ProfileSelectKeyboardFragment.class.getName());
}
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
index ac67b58..cf91031 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
@@ -17,6 +17,7 @@
package com.android.settings.dashboard.profileselector;
import androidx.fragment.app.Fragment;
+import com.android.settings.R;
import com.android.settings.accounts.AccountPersonalDashboardFragment;
import com.android.settings.accounts.AccountWorkProfileDashboardFragment;
@@ -32,4 +33,9 @@
new AccountWorkProfileDashboardFragment()
};
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.accounts_dashboard_settings_header;
+ }
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
index b05f23b..e0ba378 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
@@ -21,6 +21,8 @@
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.DialogInterface.OnShowListener;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
@@ -45,23 +47,30 @@
private int mSourceMetricCategory;
private Tile mSelectedTile;
+ private OnShowListener mOnShowListener;
private OnCancelListener mOnCancelListener;
+ private OnDismissListener mOnDismissListener;
/**
* Display the profile select dialog, adding the fragment to the given FragmentManager.
* @param manager The FragmentManager this fragment will be added to.
* @param tile The tile for this fragment.
* @param sourceMetricCategory The source metric category.
- * @param listener The listener listens to the dialog cancelling event.
+ * @param onShowListener The listener listens to the dialog showing event.
+ * @param onDismissListener The listener listens to the dialog dismissing event.
+ * @param onCancelListener The listener listens to the dialog cancelling event.
*/
public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory,
- OnCancelListener listener) {
+ OnShowListener onShowListener, OnDismissListener onDismissListener,
+ OnCancelListener onCancelListener) {
final ProfileSelectDialog dialog = new ProfileSelectDialog();
final Bundle args = new Bundle();
args.putParcelable(ARG_SELECTED_TILE, tile);
args.putInt(ARG_SOURCE_METRIC_CATEGORY, sourceMetricCategory);
dialog.setArguments(args);
- dialog.mOnCancelListener = listener;
+ dialog.mOnShowListener = onShowListener;
+ dialog.mOnDismissListener = onDismissListener;
+ dialog.mOnCancelListener = onCancelListener;
dialog.show(manager, "select_profile");
}
@@ -97,12 +106,30 @@
}
@Override
+ public void onStart() {
+ super.onStart();
+ // The fragment shows the dialog within onStart()
+ if (mOnShowListener != null) {
+ mOnShowListener.onShow(getDialog());
+ }
+ }
+
+ @Override
public void onCancel(DialogInterface dialog) {
+ super.onCancel(dialog);
if (mOnCancelListener != null) {
mOnCancelListener.onCancel(dialog);
}
}
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ super.onDismiss(dialog);
+ if (mOnDismissListener != null) {
+ mOnDismissListener.onDismiss(dialog);
+ }
+ }
+
public static void updateUserHandlesIfNeeded(Context context, Tile tile) {
final List<UserHandle> userHandles = tile.userHandle;
if (tile.userHandle == null || tile.userHandle.size() <= 1) {
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
index 82d524d..3b64d3d 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
@@ -107,6 +107,10 @@
Bundle savedInstanceState) {
mContentView = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
final Activity activity = getActivity();
+ final int titleResId = getTitleResId();
+ if (titleResId > 0) {
+ activity.setTitle(titleResId);
+ }
final int selectedTab = convertPosition(getTabId(activity, getArguments()));
final View tabContainer = mContentView.findViewById(R.id.tab_container);
@@ -166,6 +170,14 @@
*/
public abstract Fragment[] getFragments();
+ /**
+ * Returns a resource ID of the title
+ * Override this if the title needs to be updated dynamically.
+ */
+ public int getTitleResId() {
+ return 0;
+ }
+
@Override
protected int getPreferenceScreenResId() {
return R.xml.placeholder_preference_screen;
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectKeyboardFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectKeyboardFragment.java
new file mode 100644
index 0000000..c4386e6
--- /dev/null
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectKeyboardFragment.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.dashboard.profileselector;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.R;
+import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
+
+/**
+ * When current user has work profile, this fragment used following fragments to represent the
+ * on-screen keyboard settings page.
+ *
+ * <p>{@link AvailableVirtualKeyboardFragment} used to show both of personal/work user installed
+ * IMEs.</p>
+ */
+public final class ProfileSelectKeyboardFragment extends ProfileSelectFragment {
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.available_virtual_keyboard;
+ }
+
+ @Override
+ public Fragment[] getFragments() {
+ final Bundle personalOnly = new Bundle();
+ personalOnly.putInt(EXTRA_PROFILE, ProfileType.PERSONAL);
+ final Fragment personalFragment = new AvailableVirtualKeyboardFragment();
+ personalFragment.setArguments(personalOnly);
+
+ final Bundle workOnly = new Bundle();
+ workOnly.putInt(EXTRA_PROFILE, ProfileType.WORK);
+ final Fragment workFragment = new AvailableVirtualKeyboardFragment();
+ workFragment.setArguments(workOnly);
+
+ return new Fragment[]{
+ personalFragment,
+ workFragment
+ };
+ }
+}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
index e4cde8e..28fb97b 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
@@ -60,4 +60,9 @@
workFragment
};
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.location_settings_header;
+ }
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
index b6f03d6..5f25f59 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
@@ -20,6 +20,7 @@
import androidx.fragment.app.Fragment;
+import com.android.settings.R;
import com.android.settings.location.LocationServices;
import com.android.settings.location.LocationServicesForWork;
@@ -44,4 +45,9 @@
workFragment
};
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.location_services_header;
+ }
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
index 17fed11..36aa9c5 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
@@ -16,6 +16,8 @@
package com.android.settings.dashboard.profileselector;
+import android.app.Activity;
+import android.content.Intent;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
@@ -43,4 +45,12 @@
workFragment
};
}
+
+ @Override
+ public int getTitleResId() {
+ final Activity activity = getActivity();
+ final Intent intent = activity.getIntent();
+ final Bundle args = getArguments();
+ return ManageApplications.getTitleResId(intent, args);
+ }
}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
index 058ffe4..16cb43c 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
@@ -20,6 +20,7 @@
import androidx.fragment.app.Fragment;
+import com.android.settings.R;
import com.android.settings.location.RecentLocationRequestSeeAllFragment;
/**
@@ -43,4 +44,9 @@
workFragment
};
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.location_recent_requests_header;
+ }
}
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index f72a006..cd033e3 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -142,12 +142,7 @@
mChart = findPreference(KEY_CHART_DATA);
mApps = findPreference(KEY_APPS_GROUP);
- // TODO(b/167474581): This is a temporary solution to hide unnecessary warning
- // preference, when the provider model is completed, the following code should be removed.
- final Preference unnecessaryWarningPreference =
- FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)
- ? findPreference("operator_warning")
- : findPreference("non_carrier_data_usage_warning");
+ final Preference unnecessaryWarningPreference = findPreference("operator_warning");
if (unnecessaryWarningPreference != null) {
unnecessaryWarningPreference.setVisible(false);
}
diff --git a/src/com/android/settings/development/BluetoothA2dpConfigStore.java b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
index 0b154d2..7fd7b13 100644
--- a/src/com/android/settings/development/BluetoothA2dpConfigStore.java
+++ b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
@@ -71,10 +71,16 @@
}
public BluetoothCodecConfig createCodecConfig() {
- return new BluetoothCodecConfig(mCodecType, mCodecPriority,
- mSampleRate, mBitsPerSample,
- mChannelMode, mCodecSpecific1Value,
- mCodecSpecific2Value, mCodecSpecific3Value,
- mCodecSpecific4Value);
+ return new BluetoothCodecConfig.Builder()
+ .setCodecType(mCodecType)
+ .setCodecPriority(mCodecPriority)
+ .setSampleRate(mSampleRate)
+ .setBitsPerSample(mBitsPerSample)
+ .setChannelMode(mChannelMode)
+ .setCodecSpecific1(mCodecSpecific1Value)
+ .setCodecSpecific2(mCodecSpecific2Value)
+ .setCodecSpecific3(mCodecSpecific3Value)
+ .setCodecSpecific4(mCodecSpecific4Value)
+ .build();
}
}
diff --git a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
index 765c5f8..1af6e96 100644
--- a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
@@ -30,6 +30,8 @@
import com.android.settings.development.BluetoothA2dpConfigStore;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import java.util.List;
+
/**
* Abstract class for Bluetooth A2DP config dialog controller in developer option.
*/
@@ -170,7 +172,7 @@
*
* @return Array of {@link BluetoothCodecConfig}.
*/
- protected BluetoothCodecConfig[] getSelectableConfigs(BluetoothDevice device) {
+ protected List<BluetoothCodecConfig> getSelectableConfigs(BluetoothDevice device) {
final BluetoothA2dp bluetoothA2dp = mBluetoothA2dp;
if (bluetoothA2dp == null) {
return null;
@@ -198,11 +200,7 @@
Log.d(TAG, "Unable to get selectable config. No active device.");
return null;
}
- final BluetoothCodecConfig[] configs = getSelectableConfigs(activeDevice);
- if (configs == null) {
- Log.d(TAG, "Unable to get selectable config. Selectable configs is empty.");
- return null;
- }
+ final List<BluetoothCodecConfig> configs = getSelectableConfigs(activeDevice);
for (BluetoothCodecConfig config : configs) {
if (config.getCodecType() == codecTypeValue) {
return config;
@@ -220,7 +218,7 @@
public void onHDAudioEnabled(boolean enabled) {}
static int getHighestCodec(BluetoothA2dp bluetoothA2dp, BluetoothDevice activeDevice,
- BluetoothCodecConfig[] configs) {
+ List<BluetoothCodecConfig> configs) {
if (configs == null) {
Log.d(TAG, "Unable to get highest codec. Configs are empty");
return BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
@@ -231,8 +229,8 @@
return BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
}
for (int i = 0; i < CODEC_TYPES.length; i++) {
- for (int j = 0; j < configs.length; j++) {
- if ((configs[j].getCodecType() == CODEC_TYPES[i])) {
+ for (BluetoothCodecConfig config : configs) {
+ if (config.getCodecType() == CODEC_TYPES[i]) {
return CODEC_TYPES[i];
}
}
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
index b1b58e5..5f916f3 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
@@ -77,7 +77,7 @@
// Check HD audio is enabled, display the available list.
if (bluetoothA2dp.isOptionalCodecsEnabled(activeDevice)
== BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED) {
- BluetoothCodecConfig[] configs = getSelectableConfigs(activeDevice);
+ List<BluetoothCodecConfig> configs = getSelectableConfigs(activeDevice);
if (configs != null) {
return getIndexFromConfig(configs);
}
@@ -153,10 +153,10 @@
writeConfigurationValues(/* index= */ 0);
}
- private List<Integer> getIndexFromConfig(BluetoothCodecConfig[] configs) {
+ private List<Integer> getIndexFromConfig(List<BluetoothCodecConfig> configs) {
List<Integer> indexArray = new ArrayList<>();
- for (int i = 0; i < configs.length; i++) {
- indexArray.add(convertCfgToBtnIndex(configs[i].getCodecType()));
+ for (BluetoothCodecConfig config : configs) {
+ indexArray.add(convertCfgToBtnIndex(config.getCodecType()));
}
return indexArray;
}
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index 6c32c59..d196af7 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -159,6 +159,6 @@
@VisibleForTesting
protected Preference createNewPreference(Context context) {
- return new Preference(context);
+ return new PhoneNumberSummaryPreference(context);
}
}
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java b/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java
new file mode 100644
index 0000000..2e31084
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.deviceinfo;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+/**
+ * Preference which support phone number talkback in summary part.
+ */
+public class PhoneNumberSummaryPreference extends Preference {
+
+ /**
+ * Constructor
+ * @param context
+ */
+ public PhoneNumberSummaryPreference(Context context) {
+ this(context, null);
+ }
+
+ /**
+ * Constructor
+ * @param context
+ * @param attrs
+ */
+ public PhoneNumberSummaryPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void onBindViewHolder(PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ // Expand text to support phone number talkback.
+ TextView summaryView = (TextView) holder.findViewById(android.R.id.summary);
+ if (summaryView != null) {
+ summaryView.setText(PhoneNumberUtil.expandByTts(summaryView.getText()));
+ }
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberUtil.java b/src/com/android/settings/deviceinfo/PhoneNumberUtil.java
new file mode 100644
index 0000000..77e02b4
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/PhoneNumberUtil.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.deviceinfo;
+
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.text.style.TtsSpan;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
+/**
+ * Helper class to detect format of phone number.
+ */
+public class PhoneNumberUtil {
+
+ /**
+ * Convert given text to support phone number talkback.
+ * @param text given
+ * @return converted text
+ */
+ public static CharSequence expandByTts(CharSequence text) {
+ if ((text == null) || (text.length() <= 0)
+ || (!isPhoneNumberDigits(text))) {
+ return text;
+ }
+ Spannable spannable = new SpannableStringBuilder(text);
+ TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build();
+ spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+ return spannable;
+ }
+
+ /**
+ * Check if given text may contains a phone id related numbers.
+ * (ex: phone number, IMEI, ICCID)
+ * @param text given
+ * @return true when given text is a phone id related number.
+ */
+ private static boolean isPhoneNumberDigits(CharSequence text) {
+ long textLength = (long)text.length();
+ return (textLength == text.chars()
+ .filter(c -> isPhoneNumberDigit(c)).count());
+ }
+
+ private static boolean isPhoneNumberDigit(int c) {
+ return ((c >= (int)'0') && (c <= (int)'9'))
+ || (c == (int)'-') || (c == (int)'+')
+ || (c == (int)'(') || (c == (int)')');
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index a10b9f1..1ae6b40 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -21,11 +21,6 @@
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.style.TtsSpan;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -53,19 +48,6 @@
@VisibleForTesting
static final int ID_GSM_SETTINGS = R.id.gsm_settings;
- private static CharSequence getTextAsDigits(CharSequence text) {
- if (TextUtils.isEmpty(text)) {
- return "";
- }
- if (TextUtils.isDigitsOnly(text)) {
- final Spannable spannable = new SpannableStringBuilder(text);
- final TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build();
- spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- text = spannable;
- }
- return text;
- }
-
private final ImeiInfoDialogFragment mDialog;
private final TelephonyManager mTelephonyManager;
private final SubscriptionInfo mSubscriptionInfo;
@@ -121,10 +103,9 @@
if ((mSubscriptionInfo != null && isCdmaLteEnabled()) ||
(mSubscriptionInfo == null && isSimPresent(mSlotId))) {
// Show IMEI for LTE device
- mDialog.setText(ID_IMEI_VALUE,
- getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
+ mDialog.setText(ID_IMEI_VALUE, mTelephonyManager.getImei(mSlotId));
mDialog.setText(ID_IMEI_SV_VALUE,
- getTextAsDigits(mTelephonyManager.getDeviceSoftwareVersion(mSlotId)));
+ mTelephonyManager.getDeviceSoftwareVersion(mSlotId));
} else {
// device is not GSM/UMTS, do not display GSM/UMTS features
mDialog.removeViewFromScreen(ID_GSM_SETTINGS);
@@ -132,9 +113,9 @@
}
private void updateDialogForGsmPhone() {
- mDialog.setText(ID_IMEI_VALUE, getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
+ mDialog.setText(ID_IMEI_VALUE, mTelephonyManager.getImei(mSlotId));
mDialog.setText(ID_IMEI_SV_VALUE,
- getTextAsDigits(mTelephonyManager.getDeviceSoftwareVersion(mSlotId)));
+ mTelephonyManager.getDeviceSoftwareVersion(mSlotId));
// device is not CDMA, do not display CDMA features
mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
}
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
index b2f083f..c8d78da 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
@@ -31,8 +31,12 @@
import androidx.fragment.app.FragmentManager;
import com.android.settings.R;
+import com.android.settings.deviceinfo.PhoneNumberUtil;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
public class ImeiInfoDialogFragment extends InstrumentedDialogFragment {
@VisibleForTesting
@@ -83,13 +87,27 @@
}
}
+ /**
+ * View ID(s) which is digit format (instead of decimal number) text.
+ **/
+ private static final int [] sViewIdsInDigitFormat = IntStream
+ .of(ImeiInfoDialogController.ID_MEID_NUMBER_VALUE,
+ ImeiInfoDialogController.ID_MIN_NUMBER_VALUE,
+ ImeiInfoDialogController.ID_IMEI_VALUE,
+ ImeiInfoDialogController.ID_IMEI_SV_VALUE)
+ .sorted().toArray();
+
public void setText(int viewId, CharSequence text) {
final TextView textView = mRootView.findViewById(viewId);
+ if (textView == null) {
+ return;
+ }
if (TextUtils.isEmpty(text)) {
text = getResources().getString(R.string.device_info_default);
}
- if (textView != null) {
- textView.setText(text);
+ else if (Arrays.binarySearch(sViewIdsInDigitFormat, viewId) >= 0) {
+ text = PhoneNumberUtil.expandByTts(text);
}
+ textView.setText(text);
}
}
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index 407e4e5..e0bff6d 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -32,6 +32,7 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.deviceinfo.PhoneNumberSummaryPreference;
import com.android.settings.slices.Sliceable;
import com.android.settingslib.Utils;
@@ -162,6 +163,6 @@
@VisibleForTesting
Preference createNewPreference(Context context) {
- return new Preference(context);
+ return new PhoneNumberSummaryPreference(context);
}
}
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index f2bce78..2cf523f 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -134,7 +134,7 @@
}
if (SubscriptionManager.isValidSubscriptionId(nextSubId)) {
mTelephonyManager =
- mTelephonyManager.createForSubscriptionId(nextSubId);
+ getTelephonyManager().createForSubscriptionId(nextSubId);
registerImsRegistrationCallback(nextSubId);
}
}
@@ -228,6 +228,11 @@
}
}
+ @VisibleForTesting
+ public TelephonyManager getTelephonyManager() {
+ return mTelephonyManager;
+ }
+
public void initialize() {
requestForUpdateEid();
@@ -235,7 +240,7 @@
return;
}
mTelephonyManager =
- mTelephonyManager.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
+ getTelephonyManager().createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
mTelephonyCallback = new SimStatusDialogTelephonyCallback();
updateLatestAreaInfo();
updateSubscriptionStatus();
@@ -246,8 +251,8 @@
// getServiceState() may return null when the subscription is inactive
// or when there was an error communicating with the phone process.
- final ServiceState serviceState = mTelephonyManager.getServiceState();
- final SignalStrength signalStrength = mTelephonyManager.getSignalStrength();
+ final ServiceState serviceState = getTelephonyManager().getServiceState();
+ final SignalStrength signalStrength = getTelephonyManager().getSignalStrength();
updatePhoneNumber();
updateServiceState(serviceState);
@@ -279,9 +284,10 @@
if (mSubscriptionInfo == null) {
return;
}
- mTelephonyManager = mTelephonyManager.createForSubscriptionId(
+ mTelephonyManager = getTelephonyManager().createForSubscriptionId(
mSubscriptionInfo.getSubscriptionId());
- mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
+ getTelephonyManager()
+ .registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
mSubscriptionManager.addOnSubscriptionsChangedListener(
mContext.getMainExecutor(), mOnSubscriptionsChangedListener);
registerImsRegistrationCallback(mSubscriptionInfo.getSubscriptionId());
@@ -304,7 +310,7 @@
if (mIsRegisteredListener) {
mSubscriptionManager.removeOnSubscriptionsChangedListener(
mOnSubscriptionsChangedListener);
- mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
+ getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
if (mShowLatestAreaInfo) {
mContext.unregisterReceiver(mAreaInfoReceiver);
}
@@ -315,7 +321,7 @@
unregisterImsRegistrationCallback(mSubscriptionInfo.getSubscriptionId());
mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
- mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
+ getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
if (mShowLatestAreaInfo) {
mContext.unregisterReceiver(mAreaInfoReceiver);
@@ -329,7 +335,7 @@
}
@VisibleForTesting
- protected void updatePhoneNumber() {
+ public void updatePhoneNumber() {
// If formattedNumber is null or empty, it'll display as "Unknown".
mDialog.setText(PHONE_NUMBER_VALUE_ID,
DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, mSubscriptionInfo));
@@ -433,7 +439,7 @@
private void updateLatestAreaInfo() {
mShowLatestAreaInfo = Resources.getSystem().getBoolean(
com.android.internal.R.bool.config_showAreaUpdateInfoSettings)
- && mTelephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA;
+ && getTelephonyManager().getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA;
if (mShowLatestAreaInfo) {
// Bind cell broadcast service to get the area info. The info will be updated once
@@ -451,7 +457,7 @@
resetSignalStrength();
} else if (!Utils.isInService(mPreviousServiceState)) {
// If ServiceState changed from out of service -> in service, update signal strength.
- updateSignalStrength(mTelephonyManager.getSignalStrength());
+ updateSignalStrength(getTelephonyManager().getSignalStrength());
}
String serviceStateValue;
@@ -498,7 +504,7 @@
return;
}
- ServiceState serviceState = mTelephonyManager.getServiceState();
+ ServiceState serviceState = getTelephonyManager().getServiceState();
if (!Utils.isInService(serviceState)) {
return;
}
@@ -536,8 +542,8 @@
String dataNetworkTypeName = null;
String voiceNetworkTypeName = null;
final int subId = mSubscriptionInfo.getSubscriptionId();
- final int actualDataNetworkType = mTelephonyManager.getDataNetworkType();
- final int actualVoiceNetworkType = mTelephonyManager.getVoiceNetworkType();
+ final int actualDataNetworkType = getTelephonyManager().getDataNetworkType();
+ final int actualVoiceNetworkType = getTelephonyManager().getVoiceNetworkType();
final int overrideNetworkType = mTelephonyDisplayInfo == null
? TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE
: mTelephonyDisplayInfo.getOverrideNetworkType();
@@ -604,7 +610,7 @@
mDialog.removeSettingFromScreen(ICCID_INFO_LABEL_ID);
mDialog.removeSettingFromScreen(ICCID_INFO_VALUE_ID);
} else {
- mDialog.setText(ICCID_INFO_VALUE_ID, mTelephonyManager.getSimSerialNumber());
+ mDialog.setText(ICCID_INFO_VALUE_ID, getTelephonyManager().getSimSerialNumber());
}
}
@@ -617,10 +623,10 @@
}
@VisibleForTesting
- protected AtomicReference<String> getEid(int slotIndex) {
+ public AtomicReference<String> getEid(int slotIndex) {
boolean shouldHaveEid = false;
String eid = null;
- if (mTelephonyManager.getActiveModemCount() > MAX_PHONE_COUNT_SINGLE_SIM) {
+ if (getTelephonyManager().getActiveModemCount() > MAX_PHONE_COUNT_SINGLE_SIM) {
// Get EID per-SIM in multi-SIM mode
final Map<Integer, Integer> mapping = mTelephonyManager
.getLogicalToPhysicalSlotMapping();
@@ -628,7 +634,7 @@
SubscriptionManager.INVALID_SIM_SLOT_INDEX);
if (pSlotId != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
- final List<UiccCardInfo> infos = mTelephonyManager.getUiccCardsInfo();
+ final List<UiccCardInfo> infos = getTelephonyManager().getUiccCardsInfo();
for (UiccCardInfo info : infos) {
if (info.getPhysicalSlotIndex() == pSlotId) {
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
index 93323b3..8eb71df 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
@@ -30,6 +30,10 @@
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.deviceinfo.PhoneNumberUtil;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
public class SimStatusDialogFragment extends InstrumentedDialogFragment {
@@ -87,13 +91,26 @@
}
}
+ /**
+ * View ID(s) which is digit format (instead of decimal number) text.
+ **/
+ private static final int [] sViewIdsInDigitFormat = IntStream
+ .of(SimStatusDialogController.ICCID_INFO_VALUE_ID,
+ SimStatusDialogController.PHONE_NUMBER_VALUE_ID,
+ SimStatusDialogController.EID_INFO_VALUE_ID)
+ .sorted().toArray();
+
public void setText(int viewId, CharSequence text) {
final TextView textView = mRootView.findViewById(viewId);
+ if (textView == null) {
+ return;
+ }
if (TextUtils.isEmpty(text)) {
text = getResources().getString(R.string.device_info_default);
}
- if (textView != null) {
- textView.setText(text);
+ else if (Arrays.binarySearch(sViewIdsInDigitFormat, viewId) >= 0) {
+ text = PhoneNumberUtil.expandByTts(text);
}
+ textView.setText(text);
}
}
diff --git a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
index 627f107..5bfce18 100644
--- a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
@@ -17,6 +17,13 @@
package com.android.settings.display;
import android.app.settings.SettingsEnums;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.viewpager.widget.ViewPager;
import com.android.settings.R;
@@ -34,6 +41,23 @@
}
@Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View root = super.onCreateView(inflater, container, savedInstanceState);
+ if (getResources().getBoolean(R.bool.config_supported_large_screen)) {
+ final ViewPager viewPager = root.findViewById(R.id.preview_pager);
+ final View view = (View) viewPager.getAdapter().instantiateItem(viewPager,
+ viewPager.getCurrentItem());
+ final LinearLayout layout = view.findViewById(R.id.font_size_preview_text_group);
+ final int paddingStart = getResources().getDimensionPixelSize(
+ R.dimen.font_size_preview_padding_start);
+ layout.setPaddingRelative(paddingStart, layout.getPaddingTop(),
+ layout.getPaddingEnd(), layout.getPaddingBottom());
+ }
+ return root;
+ }
+
+ @Override
public void onStop() {
// Log the final choice in value if it's different from the previous value.
if (mCurrentIndex != mInitialIndex) {
diff --git a/src/com/android/settings/display/PreviewPagerAdapter.java b/src/com/android/settings/display/PreviewPagerAdapter.java
index a424b1d..018be32 100644
--- a/src/com/android/settings/display/PreviewPagerAdapter.java
+++ b/src/com/android/settings/display/PreviewPagerAdapter.java
@@ -109,10 +109,6 @@
return (view == object);
}
- FrameLayout[] getPreviewFrames() {
- return mPreviewFrames;
- }
-
boolean isAnimating() {
return mAnimationCounter > 0;
}
diff --git a/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java
index c6d5b8b..abd14d2 100644
--- a/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java
+++ b/src/com/android/settings/display/PreviewSeekBarPreferenceFragment.java
@@ -264,12 +264,6 @@
@Override
public void onPageSelected(int position) {
mPreviewPager.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);
- // To avoid displaying previous page on the left side in SUW landscape mode for
- // large size.
- if (position > 0) {
- mPreviewPagerAdapter.getPreviewFrames()[position - 1].setVisibility(View.INVISIBLE);
- }
- mPreviewPagerAdapter.getPreviewFrames()[position].setVisibility(View.VISIBLE);
}
};
diff --git a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
index 7640d08..0136eac 100644
--- a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
+++ b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
@@ -63,6 +63,11 @@
super.displayPreference(screen);
Preference preference = screen.findPreference(getPreferenceKey());
preference.setTitle(getTitle());
+ ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+ mContext,
+ getComponentName(),
+ null /* secondaryIntentAction */,
+ true /* clearTop */);
}
public String getTitle() {
@@ -103,11 +108,6 @@
mContext)) {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
}
- ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
- mContext,
- intent.getComponent(),
- null /* secondaryIntentAction */,
- true /* clearTop */);
preference.getContext().startActivity(intent);
return true;
}
diff --git a/src/com/android/settings/dream/StartNowPreferenceController.java b/src/com/android/settings/dream/StartNowPreferenceController.java
index add1b58f..f270496 100644
--- a/src/com/android/settings/dream/StartNowPreferenceController.java
+++ b/src/com/android/settings/dream/StartNowPreferenceController.java
@@ -17,20 +17,23 @@
package com.android.settings.dream;
import android.content.Context;
+import android.widget.Button;
import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.SettingsMainSwitchPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.dream.DreamBackend;
+import com.android.settingslib.widget.LayoutPreference;
/**
* Controller that used to enable screen saver
*/
-public class StartNowPreferenceController extends SettingsMainSwitchPreferenceController {
+public class StartNowPreferenceController extends BasePreferenceController {
private final DreamBackend mBackend;
private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -47,30 +50,23 @@
}
@Override
- public void updateState(Preference preference) {
- mSwitchPreference.setChecked(false);
- mSwitchPreference.setEnabled(mBackend.getWhenToDreamSetting() != DreamBackend.NEVER);
- }
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
- @Override
- public boolean isChecked() {
- return false;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- if (isChecked) {
- if (mSwitchPreference != null) {
- mMetricsFeatureProvider.logClickedPreference(mSwitchPreference,
- mSwitchPreference.getExtras().getInt(DashboardFragment.CATEGORY));
- }
+ final LayoutPreference pref = screen.findPreference(getPreferenceKey());
+ final Button startButton = pref.findViewById(R.id.dream_start_now_button);
+ startButton.setOnClickListener(v -> {
+ mMetricsFeatureProvider.logClickedPreference(pref,
+ pref.getExtras().getInt(DashboardFragment.CATEGORY));
mBackend.startDreaming();
- }
- return true;
+ });
}
@Override
- public int getSliceHighlightMenuRes() {
- return R.string.menu_key_display;
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ final Button startButton = ((LayoutPreference) preference)
+ .findViewById(R.id.dream_start_now_button);
+ startButton.setEnabled(mBackend.getWhenToDreamSetting() != DreamBackend.NEVER);
}
}
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index f86b1ff..7f314d1 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -18,7 +18,6 @@
import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -32,8 +31,6 @@
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.utils.ThreadUtils;
-import java.util.HashMap;
-
public class TopLevelBatteryPreferenceController extends BasePreferenceController implements
LifecycleObserver, OnStart, OnStop, BatteryPreferenceController {
@@ -43,13 +40,9 @@
Preference mPreference;
private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
private BatteryInfo mBatteryInfo;
- private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
private String mBatteryStatusLabel;
- @VisibleForTesting
- protected static HashMap<String, ComponentName> sReplacingActivityMap = new HashMap<>();
-
public TopLevelBatteryPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext);
@@ -63,8 +56,6 @@
}, true /* shortString */);
});
- mBatterySettingsFeatureProvider = FeatureFactory.getFactory(context)
- .getBatterySettingsFeatureProvider(context);
mBatteryStatusFeatureProvider = FeatureFactory.getFactory(context)
.getBatteryStatusFeatureProvider(context);
}
@@ -82,37 +73,6 @@
}
@Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- String prefFrag = preference.getFragment();
- if (prefFrag == null || prefFrag.isEmpty()) {
- // Not a redirect, so use the default.
- return super.handlePreferenceTreeClick(preference);
- }
-
- ComponentName currentFragmentName = convertClassPathToComponentName(prefFrag);
- if (currentFragmentName == null) {
- return super.handlePreferenceTreeClick(preference);
- }
-
- ComponentName replacingActivity;
- if (sReplacingActivityMap.containsKey(prefFrag)) {
- replacingActivity = sReplacingActivityMap.get(prefFrag);
- } else {
- replacingActivity = mBatterySettingsFeatureProvider.getReplacingActivity(
- currentFragmentName);
- sReplacingActivityMap.put(prefFrag, replacingActivity);
- }
-
- if (replacingActivity == null || currentFragmentName.compareTo(replacingActivity) == 0) {
- return super.handlePreferenceTreeClick(preference);
- }
- Intent intent = new Intent();
- intent.setComponent(replacingActivity);
- mContext.startActivity(intent);
- return true;
- }
-
- @Override
public void onStart() {
mBatteryBroadcastReceiver.register();
}
diff --git a/src/com/android/settings/gestures/TapScreenGesturePreferenceController.java b/src/com/android/settings/gestures/TapScreenGesturePreferenceController.java
index 179ed26..86ac713 100644
--- a/src/com/android/settings/gestures/TapScreenGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/TapScreenGesturePreferenceController.java
@@ -21,6 +21,7 @@
import android.annotation.UserIdInt;
import android.content.Context;
import android.hardware.display.AmbientDisplayConfiguration;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
@@ -74,8 +75,10 @@
@Override
public boolean setChecked(boolean isChecked) {
- return Settings.Secure.putInt(mContext.getContentResolver(), DOZE_TAP_SCREEN_GESTURE,
- isChecked ? 1 : 0);
+ boolean success = Settings.Secure.putInt(mContext.getContentResolver(),
+ DOZE_TAP_SCREEN_GESTURE, isChecked ? 1 : 0);
+ SystemProperties.set("persist.sys.tap_gesture", isChecked ? "1" : "0");
+ return success;
}
private AmbientDisplayConfiguration getAmbientConfig() {
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 909c146..183a2fb 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -32,6 +32,8 @@
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toolbar;
@@ -40,6 +42,7 @@
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
+import androidx.window.embedding.SplitRule;
import com.android.settings.R;
import com.android.settings.Settings;
@@ -52,6 +55,7 @@
import com.android.settings.core.FeatureFlags;
import com.android.settings.homepage.contextualcards.ContextualCardsFragment;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
import java.net.URISyntaxException;
@@ -72,7 +76,7 @@
public static final String EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA =
"settings_large_screen_deep_link_intent_data";
- private static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network;
+ static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network;
private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300;
private TopLevelSettings mMainFragment;
@@ -90,6 +94,10 @@
void onHomepageLoaded();
}
+ private interface FragmentBuilder<T extends Fragment> {
+ T build();
+ }
+
/**
* Try to add a {@link HomepageLoadedListener}. If homepage is already loaded, the listener
* will not be notified.
@@ -117,11 +125,8 @@
}
Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
final View homepageView = mHomepageView;
- if (!mIsTwoPaneLastTime) {
- mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
- } else {
- mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
- }
+ mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
+ mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
mHomepageView = null;
mLoadedListeners.forEach(listener -> listener.onHomepageLoaded());
@@ -150,6 +155,7 @@
appBar.setMinimumHeight(getSearchBoxHeight());
initHomepageContainer();
updateHomepageAppBar();
+ updateHomepageBackground();
mLoadedListeners = new ArraySet<>();
initSearchBarView();
@@ -158,18 +164,23 @@
mCategoryMixin = new CategoryMixin(this);
getLifecycle().addObserver(mCategoryMixin);
+ final String highlightMenuKey = getHighlightMenuKey();
// Only allow features on high ram devices.
if (!getSystemService(ActivityManager.class).isLowRamDevice()) {
initAvatarView();
- showSuggestionFragment();
+ final boolean scrollNeeded = mIsEmbeddingActivityEnabled
+ && !TextUtils.equals(getString(DEFAULT_HIGHLIGHT_MENU_KEY), highlightMenuKey);
+ showSuggestionFragment(scrollNeeded);
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
- showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content);
+ showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
}
}
- mMainFragment = new TopLevelSettings();
- mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
- getHighlightMenuKey());
- showFragment(mMainFragment, R.id.main_content);
+ mMainFragment = showFragment(() -> {
+ final TopLevelSettings fragment = new TopLevelSettings();
+ fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
+ highlightMenuKey);
+ return fragment;
+ }, R.id.main_content);
((FrameLayout) findViewById(R.id.main_content))
.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
@@ -206,6 +217,7 @@
if (mIsTwoPaneLastTime != isTwoPane) {
mIsTwoPaneLastTime = isTwoPane;
updateHomepageAppBar();
+ updateHomepageBackground();
}
}
@@ -236,47 +248,70 @@
}
}
- private void showSuggestionFragment() {
- final Class<? extends Fragment> fragment = FeatureFactory.getFactory(this)
+ private void updateHomepageBackground() {
+ if (!mIsEmbeddingActivityEnabled) {
+ return;
+ }
+
+ final Window window = getWindow();
+ final int color = ActivityEmbeddingUtils.isTwoPaneResolution(this)
+ ? Utils.getColorAttrDefaultColor(this, com.android.internal.R.attr.colorSurface)
+ : Utils.getColorAttrDefaultColor(this, android.R.attr.colorBackground);
+
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ // Update status bar color
+ window.setStatusBarColor(color);
+ // Update content background.
+ findViewById(R.id.settings_homepage_container).setBackgroundColor(color);
+ }
+
+ private void showSuggestionFragment(boolean scrollNeeded) {
+ final Class<? extends Fragment> fragmentClass = FeatureFactory.getFactory(this)
.getSuggestionFeatureProvider(this).getContextualSuggestionFragment();
- if (fragment == null) {
+ if (fragmentClass == null) {
return;
}
mSuggestionView = findViewById(R.id.suggestion_content);
mTwoPaneSuggestionView = findViewById(R.id.two_pane_suggestion_content);
mHomepageView = findViewById(R.id.settings_homepage_container);
- // Hide the homepage for preparing the suggestion.
- mHomepageView.setVisibility(View.INVISIBLE);
+ // Hide the homepage for preparing the suggestion. If scrolling is needed, the list views
+ // should be initialized in the invisible homepage view to prevent a scroll flicker.
+ mHomepageView.setVisibility(scrollNeeded ? View.INVISIBLE : View.GONE);
// Schedule a timer to show the homepage and hide the suggestion on timeout.
mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false),
HOMEPAGE_LOADING_TIMEOUT_MS);
- try {
- showFragment(fragment.getConstructor().newInstance(), R.id.suggestion_content);
- if (mIsEmbeddingActivityEnabled) {
- showFragment(fragment.getConstructor().newInstance(),
- R.id.two_pane_suggestion_content);
+ final FragmentBuilder<?> fragmentBuilder = () -> {
+ try {
+ return fragmentClass.getConstructor().newInstance();
+ } catch (Exception e) {
+ Log.w(TAG, "Cannot show fragment", e);
}
- } catch (Exception e) {
- Log.w(TAG, "Cannot show fragment", e);
+ return null;
+ };
+ showFragment(fragmentBuilder, R.id.suggestion_content);
+ if (mIsEmbeddingActivityEnabled) {
+ showFragment(fragmentBuilder, R.id.two_pane_suggestion_content);
}
}
- private void showFragment(Fragment fragment, int id) {
+ private <T extends Fragment> T showFragment(FragmentBuilder<T> fragmentBuilder, int id) {
final FragmentManager fragmentManager = getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
- final Fragment showFragment = fragmentManager.findFragmentById(id);
+ T showFragment = (T) fragmentManager.findFragmentById(id);
if (showFragment == null) {
- fragmentTransaction.add(id, fragment);
+ showFragment = fragmentBuilder.build();
+ fragmentTransaction.add(id, showFragment);
} else {
fragmentTransaction.show(showFragment);
}
fragmentTransaction.commit();
+ return showFragment;
}
private void launchDeepLinkIntentToRight() {
- if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
+ if (!mIsEmbeddingActivityEnabled) {
return;
}
@@ -338,16 +373,16 @@
new ComponentName(getApplicationContext(), getClass()),
targetComponentName,
targetIntent.getAction(),
- true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */,
- true /* clearTop*/);
+ SplitRule.FINISH_ALWAYS,
+ SplitRule.FINISH_ALWAYS,
+ true /* clearTop */);
ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
- new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
+ new ComponentName(getApplicationContext(), Settings.class),
targetComponentName,
targetIntent.getAction(),
- true /* finishPrimaryWithSecondary */,
- true /* finishSecondaryWithPrimary */,
- true /* clearTop*/);
+ SplitRule.FINISH_ALWAYS,
+ SplitRule.FINISH_ALWAYS,
+ true /* clearTop */);
startActivity(targetIntent);
}
diff --git a/src/com/android/settings/homepage/TopLevelHighlightMixin.java b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
new file mode 100644
index 0000000..ebfe7f2
--- /dev/null
+++ b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.homepage;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.widget.HighlightableTopLevelPreferenceAdapter;
+
+/** A highlight mixin for the top level settings fragment. */
+public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnShowListener,
+ DialogInterface.OnCancelListener, DialogInterface.OnDismissListener {
+
+ private static final String TAG = "TopLevelHighlightMixin";
+
+ private String mCurrentKey;
+ // Stores the previous key for the profile select dialog cancel event
+ private String mPreviousKey;
+ // Stores the key hidden for the search page presence
+ private String mHiddenKey;
+ private DialogInterface mDialog;
+ private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
+
+ public TopLevelHighlightMixin() {
+ }
+
+ public TopLevelHighlightMixin(Parcel source) {
+ mCurrentKey = source.readString();
+ mPreviousKey = source.readString();
+ mHiddenKey = source.readString();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mCurrentKey);
+ dest.writeString(mPreviousKey);
+ dest.writeString(mHiddenKey);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator<TopLevelHighlightMixin> CREATOR = new Creator<>() {
+ @Override
+ public TopLevelHighlightMixin createFromParcel(Parcel source) {
+ return new TopLevelHighlightMixin(source);
+ }
+
+ @Override
+ public TopLevelHighlightMixin[] newArray(int size) {
+ return new TopLevelHighlightMixin[size];
+ }
+ };
+
+ @Override
+ public void onShow(DialogInterface dialog) {
+ mDialog = dialog;
+ }
+
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ mDialog = null;
+ }
+
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ if (mTopLevelAdapter != null) {
+ mCurrentKey = mPreviousKey;
+ mPreviousKey = null;
+ mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ false);
+ }
+ }
+
+ RecyclerView.Adapter onCreateAdapter(TopLevelSettings topLevelSettings,
+ PreferenceScreen preferenceScreen) {
+ if (TextUtils.isEmpty(mCurrentKey)) {
+ mCurrentKey = getHighlightPrefKeyFromArguments(topLevelSettings.getArguments());
+ }
+
+ Log.d(TAG, "onCreateAdapter, pref key: " + mCurrentKey);
+ mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
+ (SettingsHomepageActivity) topLevelSettings.getActivity(), preferenceScreen,
+ topLevelSettings.getListView(), mCurrentKey);
+ return mTopLevelAdapter;
+ }
+
+ void reloadHighlightMenuKey(Bundle arguments) {
+ if (mTopLevelAdapter == null) {
+ return;
+ }
+ ensureDialogDismissed();
+
+ mCurrentKey = getHighlightPrefKeyFromArguments(arguments);
+ Log.d(TAG, "reloadHighlightMenuKey, pref key: " + mCurrentKey);
+ mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ true);
+ }
+
+ void setHighlightPreferenceKey(String prefKey) {
+ if (mTopLevelAdapter != null) {
+ ensureDialogDismissed();
+ mPreviousKey = mCurrentKey;
+ mCurrentKey = prefKey;
+ mTopLevelAdapter.highlightPreference(prefKey, /* scrollNeeded= */ false);
+ }
+ }
+
+ void highlightPreferenceIfNeeded(FragmentActivity activity) {
+ if (mTopLevelAdapter != null) {
+ mTopLevelAdapter.requestHighlight();
+ }
+ }
+
+ void setMenuHighlightShowed(boolean show) {
+ if (mTopLevelAdapter == null) {
+ return;
+ }
+ ensureDialogDismissed();
+
+ if (show) {
+ mCurrentKey = mHiddenKey;
+ mHiddenKey = null;
+ } else {
+ if (mHiddenKey == null) {
+ mHiddenKey = mCurrentKey;
+ }
+ mCurrentKey = null;
+ }
+ mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ show);
+ }
+
+ void setHighlightMenuKey(String menuKey, boolean scrollNeeded) {
+ if (mTopLevelAdapter == null) {
+ return;
+ }
+ ensureDialogDismissed();
+
+ final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
+ if (TextUtils.isEmpty(prefKey)) {
+ Log.e(TAG, "Invalid highlight menu key: " + menuKey);
+ } else {
+ Log.d(TAG, "Menu key: " + menuKey);
+ mCurrentKey = prefKey;
+ mTopLevelAdapter.highlightPreference(prefKey, scrollNeeded);
+ }
+ }
+
+ private static String getHighlightPrefKeyFromArguments(Bundle arguments) {
+ final String menuKey = arguments.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+ final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
+ if (TextUtils.isEmpty(prefKey)) {
+ Log.e(TAG, "Invalid highlight menu key: " + menuKey);
+ } else {
+ Log.d(TAG, "Menu key: " + menuKey);
+ }
+ return prefKey;
+ }
+
+ private void ensureDialogDismissed() {
+ if (mDialog != null) {
+ onCancel(mDialog);
+ mDialog.dismiss();
+ }
+ }
+}
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index eb1a066..f76a3de 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -19,6 +19,7 @@
import static com.android.settings.search.actionbar.SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR;
import static com.android.settingslib.search.SearchIndexable.MOBILE;
+import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.res.Configuration;
@@ -34,7 +35,6 @@
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
-import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.activityembedding.ActivityEmbeddingUtils;
@@ -42,7 +42,6 @@
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.support.SupportPreferenceController;
-import com.android.settings.widget.HighlightableTopLevelPreferenceAdapter;
import com.android.settings.widget.HomepagePreference;
import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.drawer.Tile;
@@ -53,13 +52,12 @@
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private static final String TAG = "TopLevelSettings";
- private static final String SAVED_HIGHLIGHTED_PREF = "highlighted_pref";
- private static final String SAVED_CACHED_PREF = "cached_pref";
+ private static final String SAVED_HIGHLIGHT_MIXIN = "highlight_mixin";
+ private static final String PREF_KEY_SUPPORT = "top_level_support";
- private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
-
- private String mHighlightedPreferenceKey;
- private String mCachedPreferenceKey;
+ private boolean mIsEmbeddingActivityEnabled;
+ private TopLevelHighlightMixin mHighlightMixin;
+ private boolean mFirstStarted = true;
public TopLevelSettings() {
final Bundle args = new Bundle();
@@ -127,17 +125,47 @@
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (icicle != null) {
- mHighlightedPreferenceKey = icicle.getString(SAVED_HIGHLIGHTED_PREF);
- mCachedPreferenceKey = icicle.getString(SAVED_CACHED_PREF);
+ mIsEmbeddingActivityEnabled =
+ ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext());
+ if (!mIsEmbeddingActivityEnabled) {
+ return;
}
+
+ if (icicle != null) {
+ mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
+ }
+ if (mHighlightMixin == null) {
+ mHighlightMixin = new TopLevelHighlightMixin();
+ }
+ }
+
+ @Override
+ public void onStart() {
+ if (mFirstStarted) {
+ mFirstStarted = false;
+ } else if (mIsEmbeddingActivityEnabled && isOnlyOneActivityInTask()
+ && !ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) {
+ // Set default highlight menu key for 1-pane homepage since it will show the placeholder
+ // page once changing back to 2-pane.
+ Log.i(TAG, "Set default menu key");
+ setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY),
+ /* scrollNeeded= */ false);
+ }
+ super.onStart();
+ }
+
+ private boolean isOnlyOneActivityInTask() {
+ final ActivityManager.RunningTaskInfo taskInfo = getSystemService(ActivityManager.class)
+ .getRunningTasks(1).get(0);
+ return taskInfo.numActivities == 1;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putString(SAVED_HIGHLIGHTED_PREF, mHighlightedPreferenceKey);
- outState.putString(SAVED_CACHED_PREF, mCachedPreferenceKey);
+ if (mHighlightMixin != null) {
+ outState.putParcelable(SAVED_HIGHLIGHT_MIXIN, mHighlightMixin);
+ }
}
@Override
@@ -170,58 +198,35 @@
@Override
public void highlightPreferenceIfNeeded() {
- if (mTopLevelAdapter != null) {
- mTopLevelAdapter.requestHighlight();
+ if (mHighlightMixin != null) {
+ mHighlightMixin.highlightPreferenceIfNeeded(getActivity());
}
}
+ /** Returns a {@link TopLevelHighlightMixin} that performs highlighting */
+ public TopLevelHighlightMixin getHighlightMixin() {
+ return mHighlightMixin;
+ }
+
/** Highlight a preference with specified preference key */
public void setHighlightPreferenceKey(String prefKey) {
- if (mTopLevelAdapter != null) {
- mCachedPreferenceKey = null;
- mHighlightedPreferenceKey = prefKey;
- mTopLevelAdapter.highlightPreference(prefKey, /* scrollNeeded= */ false);
+ // Skip Tips & support since it's full screen
+ if (mHighlightMixin != null && !TextUtils.equals(prefKey, PREF_KEY_SUPPORT)) {
+ mHighlightMixin.setHighlightPreferenceKey(prefKey);
}
}
- /** Highlight the previous preference */
- public void restorePreviousHighlight() {
- if (mTopLevelAdapter != null) {
- mTopLevelAdapter.restorePreviousHighlight();
- }
- }
-
- /** Show/hide the highlight on the menu entry */
+ /** Show/hide the highlight on the menu entry for the search page presence */
public void setMenuHighlightShowed(boolean show) {
- if (mTopLevelAdapter == null) {
- return;
+ if (mHighlightMixin != null) {
+ mHighlightMixin.setMenuHighlightShowed(show);
}
-
- if (show) {
- mHighlightedPreferenceKey = mCachedPreferenceKey;
- mCachedPreferenceKey = null;
- } else {
- if (mCachedPreferenceKey == null) {
- mCachedPreferenceKey = mHighlightedPreferenceKey;
- }
- mHighlightedPreferenceKey = null;
- }
- mTopLevelAdapter.highlightPreference(mHighlightedPreferenceKey, /* scrollNeeded= */ show);
}
/** Highlight and scroll to a preference with specified menu key */
- public void setHighlightMenuKey(String menuKey) {
- if (mTopLevelAdapter == null) {
- return;
- }
-
- final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
- if (TextUtils.isEmpty(prefKey)) {
- Log.e(TAG, "Invalid highlight menu key: " + menuKey);
- } else {
- Log.d(TAG, "Menu key: " + menuKey);
- mHighlightedPreferenceKey = prefKey;
- mTopLevelAdapter.highlightPreference(prefKey, /* scrollNeeded= */ true);
+ public void setHighlightMenuKey(String menuKey, boolean scrollNeeded) {
+ if (mHighlightMixin != null) {
+ mHighlightMixin.setHighlightMenuKey(menuKey, scrollNeeded);
}
}
@@ -233,20 +238,10 @@
@Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
- if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())
- || !(getActivity() instanceof SettingsHomepageActivity)) {
+ if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
return super.onCreateAdapter(preferenceScreen);
}
-
- if (TextUtils.isEmpty(mHighlightedPreferenceKey)) {
- mHighlightedPreferenceKey = getHighlightPrefKeyFromArguments();
- }
-
- Log.d(TAG, "onCreateAdapter, pref key: " + mHighlightedPreferenceKey);
- mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
- (SettingsHomepageActivity) getActivity(), preferenceScreen, getListView(),
- mHighlightedPreferenceKey);
- return mTopLevelAdapter;
+ return mHighlightMixin.onCreateAdapter(this, preferenceScreen);
}
@Override
@@ -255,25 +250,9 @@
}
void reloadHighlightMenuKey() {
- if (mTopLevelAdapter == null) {
- return;
+ if (mHighlightMixin != null) {
+ mHighlightMixin.reloadHighlightMenuKey(getArguments());
}
-
- mHighlightedPreferenceKey = getHighlightPrefKeyFromArguments();
- Log.d(TAG, "reloadHighlightMenuKey, pref key: " + mHighlightedPreferenceKey);
- mTopLevelAdapter.highlightPreference(mHighlightedPreferenceKey, /* scrollNeeded= */ true);
- }
-
- private String getHighlightPrefKeyFromArguments() {
- final Bundle arguments = getArguments();
- final String menuKey = arguments.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
- final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
- if (TextUtils.isEmpty(prefKey)) {
- Log.e(TAG, "Invalid highlight menu key: " + menuKey);
- } else {
- Log.d(TAG, "Menu key: " + menuKey);
- }
- return prefKey;
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
index 7523ae4..b083aef 100644
--- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
@@ -16,18 +16,21 @@
package com.android.settings.inputmethod;
-import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.inputmethod.InputMethodAndSubtypeUtilCompat;
import com.android.settingslib.inputmethod.InputMethodPreference;
@@ -38,23 +41,41 @@
import java.util.ArrayList;
import java.util.List;
+/**
+ * The fragment for on-screen keyboard settings which used to display user installed IMEs.
+ *
+ * TODO(b/207452897): Add test for AvailableVirtualKeyboardFragment
+ */
@SearchIndexable
-public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFragment
+public final class AvailableVirtualKeyboardFragment extends DashboardFragment
implements InputMethodPreference.OnSavePreferenceListener {
+ private static final String TAG = "AvailableVirtualKeyboardFragment";
private final ArrayList<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
private InputMethodSettingValuesWrapper mInputMethodSettingValues;
- private InputMethodManager mImm;
- private DevicePolicyManager mDpm;
+ private Context mUserAwareContext;
+ private int mUserId;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.available_virtual_keyboard);
- Activity activity = getActivity();
+ mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(mUserAwareContext);
+ }
- mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(activity);
- mImm = activity.getSystemService(InputMethodManager.class);
- mDpm = activity.getSystemService(DevicePolicyManager.class);
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ final int profileType = getArguments().getInt(ProfileSelectFragment.EXTRA_PROFILE);
+ if (profileType == ProfileSelectFragment.ProfileType.WORK) {
+ final UserManager userManager = UserManager.get(context);
+ final UserHandle workUser = Utils.getManagedProfile(userManager);
+ // get work userId
+ mUserId = Utils.getManagedProfileId(userManager, UserHandle.myUserId());
+ mUserAwareContext = context.createContextAsUser(workUser, 0);
+ } else {
+ mUserId = UserHandle.myUserId();
+ mUserAwareContext = context;
+ }
}
@Override
@@ -67,11 +88,24 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.available_virtual_keyboard;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
public void onSaveInputMethodPreference(final InputMethodPreference pref) {
final boolean hasHardwareKeyboard = getResources().getConfiguration().keyboard
== Configuration.KEYBOARD_QWERTY;
- InputMethodAndSubtypeUtilCompat.saveInputMethodSubtypeList(this, getContentResolver(),
- mImm.getInputMethodList(), hasHardwareKeyboard);
+ InputMethodAndSubtypeUtilCompat.saveInputMethodSubtypeListForUser(this,
+ mUserAwareContext.getContentResolver(),
+ getContext().getSystemService(
+ InputMethodManager.class).getInputMethodListAsUser(mUserId),
+ hasHardwareKeyboard, mUserId);
// Update input method settings and preference list.
mInputMethodSettingValues.refreshAllInputMethodAndSubtypes();
for (final InputMethodPreference p : mInputMethodPreferenceList) {
@@ -88,10 +122,12 @@
mInputMethodSettingValues.refreshAllInputMethodAndSubtypes();
// Clear existing "InputMethodPreference"s
mInputMethodPreferenceList.clear();
- List<String> permittedList = mDpm.getPermittedInputMethodsForCurrentUser();
- final Context context = getPrefContext();
+ final List<String> permittedList = mUserAwareContext.getSystemService(
+ DevicePolicyManager.class).getPermittedInputMethods();
+ final Context prefContext = getPrefContext();
final List<InputMethodInfo> imis = mInputMethodSettingValues.getInputMethodList();
- final List<InputMethodInfo> enabledImis = mImm.getEnabledInputMethodList();
+ final List<InputMethodInfo> enabledImis = getContext().getSystemService(
+ InputMethodManager.class).getEnabledInputMethodListAsUser(mUserId);
final int numImis = (imis == null ? 0 : imis.size());
for (int i = 0; i < numImis; ++i) {
final InputMethodInfo imi = imis.get(i);
@@ -101,12 +137,12 @@
// allowed by organization. Doing so will allow the user to disable the input method and
// remain complaint with the organization's policy. Once disabled, the input method
// cannot be re-enabled because it is not in the permitted list.
- final boolean isAllowedByOrganization = permittedList == null
+ final boolean isAllowedByOrganization = permittedList.isEmpty()
|| permittedList.contains(imi.getPackageName())
|| enabledImis.contains(imi);
- final InputMethodPreference pref = new InputMethodPreference(
- context, imi, isAllowedByOrganization, this);
- pref.setIcon(imi.loadIcon(context.getPackageManager()));
+ final InputMethodPreference pref = new InputMethodPreference(prefContext, imi,
+ isAllowedByOrganization, this, mUserId);
+ pref.setIcon(imi.loadIcon(mUserAwareContext.getPackageManager()));
mInputMethodPreferenceList.add(pref);
}
final Collator collator = Collator.getInstance();
diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index d7fc8b4..fd40c8f 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -16,6 +16,8 @@
package com.android.settings.network;
+import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
+
import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
@@ -34,7 +36,6 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
-import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -137,7 +138,8 @@
&& !SubscriptionUtil.showToggleForPhysicalSim(mSubscriptionManager)) {
SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, subId, true);
} else {
- final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
+ final Intent intent = new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
+ intent.setPackage(SETTINGS_PACKAGE_NAME);
intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
mContext.startActivity(intent);
}
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 527a632..b49613a 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -18,6 +18,8 @@
import static android.os.UserHandle.myUserId;
import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
+
import static androidx.lifecycle.Lifecycle.Event;
import android.content.BroadcastReceiver;
@@ -38,7 +40,6 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference;
@@ -146,7 +147,8 @@
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (KEY_MOBILE_NETWORK_SETTINGS.equals(preference.getKey())) {
- final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
+ final Intent intent = new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
+ intent.setPackage(SETTINGS_PACKAGE_NAME);
mContext.startActivity(intent);
return true;
}
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index 94d1ff5..1a85a7f 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -36,7 +36,7 @@
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.helper.SubscriptionAnnotation;
-import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.AddPreference;
import com.android.settingslib.Utils;
@@ -190,12 +190,8 @@
SubscriptionAnnotation info = subs.get(0);
if (info.getSubInfo().isEmbedded() || info.isActive()
|| mStatusCache.isPhysicalSimDisableSupport()) {
- final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
- intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
- // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent,
- null);
- mContext.startActivity(intent);
+ MobileNetworkUtils.launchMobileNetworkSettings(mContext,
+ info.getSubInfo());
return true;
}
diff --git a/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java b/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java
deleted file mode 100644
index 8b3503e..0000000
--- a/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.android.settings.network;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
-
-public class MobileNetworkTwoPaneUtils {
-
- private static final String TAG = "MobileNetworkTwoPaneUtils";
-
- /**
- * TODO: b/206061070, the problem of multi-instance should be fixed in Android T to apply the
- * Settings' architecture and 2 panes mode instead of registering the rule.
- *
- * The launchMode of MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- */
- public static void registerTwoPaneForMobileNetwork(Context context, Intent intent,
- @Nullable String secondaryIntentAction) {
- Log.d(TAG, "registerTwoPaneForMobileNetwork");
- ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
- context,
- intent.getComponent(),
- secondaryIntentAction /* secondaryIntentAction */,
- false /* clearTop */);
- }
-}
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index c762197..286e4e3 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -118,9 +118,7 @@
controllers.add(internetPreferenceController);
}
controllers.add(privateDnsPreferenceController);
- if (Utils.isProviderModelEnabled(context)) {
- controllers.add(new NetworkProviderCallsSmsController(context, lifecycle));
- }
+ controllers.add(new NetworkProviderCallsSmsController(context, lifecycle));
return controllers;
}
@@ -155,20 +153,7 @@
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.network_and_internet) {
-
- @Override
- // TODO(b/167474581): Should remove this method when Provider Model finished.
- public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
- boolean enabled) {
- if (Utils.isProviderModelEnabled(context)) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.network_provider_internet;
- return Arrays.asList(sir);
- }
- return super.getXmlResourcesToIndex(context, enabled);
- }
-
+ new BaseSearchIndexProvider(R.xml.network_provider_internet) {
@Override
public List<AbstractPreferenceController> createPreferenceControllers(Context
context) {
diff --git a/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java b/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
index 1bb50cb..48cd8aa 100644
--- a/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
@@ -36,7 +36,6 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -128,11 +127,7 @@
pref.setSummary(getSummary(subId));
pref.setOnPreferenceClickListener(clickedPref -> {
- final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
- intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
- // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent, null);
- mContext.startActivity(intent);
+ MobileNetworkUtils.launchMobileNetworkSettings(mContext, info);
return true;
});
mPreferences.put(subId, pref);
diff --git a/src/com/android/settings/network/NetworkProviderSimListController.java b/src/com/android/settings/network/NetworkProviderSimListController.java
index d6eaab8..77d665a 100644
--- a/src/com/android/settings/network/NetworkProviderSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderSimListController.java
@@ -36,7 +36,7 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -126,12 +126,7 @@
SubscriptionUtil.startToggleSubscriptionDialogActivity(mContext, subId,
true);
} else {
- final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
- intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
- // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent,
- null);
- mContext.startActivity(intent);
+ MobileNetworkUtils.launchMobileNetworkSettings(mContext, info);
}
return true;
});
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index c77a294..1ba0502 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -24,6 +24,7 @@
import android.annotation.Nullable;
import android.content.Context;
import android.os.ParcelUuid;
+import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -37,6 +38,8 @@
import com.android.internal.telephony.MccTable;
import com.android.settings.R;
+import com.android.settings.network.helper.SelectableSubscriptions;
+import com.android.settings.network.helper.SubscriptionAnnotation;
import com.android.settings.network.telephony.DeleteEuiccSubscriptionDialogActivity;
import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity;
import com.android.settingslib.DeviceInfoUtils;
@@ -48,6 +51,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -540,13 +544,14 @@
return null;
}
- TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
- String rawPhoneNumber =
- telephonyManager.getLine1Number(subscriptionInfo.getSubscriptionId());
- String countryIso = MccTable.countryCodeForMcc(subscriptionInfo.getMccString());
+ final SubscriptionManager subscriptionManager = context.getSystemService(
+ SubscriptionManager.class);
+ String rawPhoneNumber = subscriptionManager.getPhoneNumber(
+ subscriptionInfo.getSubscriptionId());
if (TextUtils.isEmpty(rawPhoneNumber)) {
return null;
}
+ String countryIso = MccTable.countryCodeForMcc(subscriptionInfo.getMccString());
return PhoneNumberUtils.formatNumber(rawPhoneNumber, countryIso);
}
@@ -642,4 +647,49 @@
private static int getDefaultDataSubscriptionId() {
return SubscriptionManager.getDefaultDataSubscriptionId();
}
+
+
+ /**
+ * Select one of the subscription as the default subscription.
+ * @param subAnnoList a list of {@link SubscriptionAnnotation}
+ * @return ideally the {@link SubscriptionAnnotation} as expected
+ */
+ private static SubscriptionAnnotation getDefaultSubscriptionSelection(
+ List<SubscriptionAnnotation> subAnnoList) {
+ return (subAnnoList == null) ? null :
+ subAnnoList.stream()
+ .filter(SubscriptionAnnotation::isDisplayAllowed)
+ .filter(SubscriptionAnnotation::isActive)
+ .findFirst().orElse(null);
+ }
+
+ public static SubscriptionInfo getSubscriptionOrDefault(Context context, int subscriptionId) {
+ return getSubscription(context, subscriptionId,
+ (subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) ? null : (
+ subAnnoList -> getDefaultSubscriptionSelection(subAnnoList)
+ ));
+ }
+
+ /**
+ * Get the current subscription to display. First check whether intent has {@link
+ * Settings#EXTRA_SUB_ID} and if so find the subscription with that id.
+ * If not, select default one based on {@link Function} provided.
+ *
+ * @param preferredSubscriptionId preferred subscription id
+ * @param selectionOfDefault when true current subscription is absent
+ */
+ private static SubscriptionInfo getSubscription(Context context, int preferredSubscriptionId,
+ Function<List<SubscriptionAnnotation>, SubscriptionAnnotation> selectionOfDefault) {
+ List<SubscriptionAnnotation> subList =
+ (new SelectableSubscriptions(context, true)).call();
+ Log.d(TAG, "get subId=" + preferredSubscriptionId + " from " + subList);
+ SubscriptionAnnotation currentSubInfo = subList.stream()
+ .filter(SubscriptionAnnotation::isDisplayAllowed)
+ .filter(subAnno -> (subAnno.getSubscriptionId() == preferredSubscriptionId))
+ .findFirst().orElse(null);
+ if ((currentSubInfo == null) && (selectionOfDefault != null)) {
+ currentSubInfo = selectionOfDefault.apply(subList);
+ }
+ return (currentSubInfo == null) ? null : currentSubInfo.getSubInfo();
+ }
}
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index b872680..87c4697 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -55,7 +55,6 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.network.telephony.DataConnectivityListener;
-import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.network.telephony.SignalStrengthListener;
import com.android.settings.network.telephony.TelephonyDisplayInfoListener;
@@ -94,6 +93,7 @@
private SignalStrengthListener mSignalStrengthListener;
private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener;
private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+ private final WifiManager mWifiManager;
@VisibleForTesting
final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() {
@@ -150,6 +150,7 @@
mStartOrder = startOrder;
mTelephonyManager = context.getSystemService(TelephonyManager.class);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
+ mWifiManager = context.getSystemService(WifiManager.class);
mSubscriptionPreferences = new ArrayMap<>();
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
mDataEnabledListener = new MobileDataEnabledListener(context, this);
@@ -235,7 +236,7 @@
});
mSubsGearPref.setOnGearClickListener(p ->
- startMobileNetworkActivity(mContext, subInfo.getSubscriptionId()));
+ MobileNetworkUtils.launchMobileNetworkSettings(mContext, subInfo));
}
if (!(mContext.getSystemService(UserManager.class)).isAdminUser()) {
@@ -271,9 +272,7 @@
final boolean isDataInService = (regInfo == null)
? false
: regInfo.isRegistered();
- final boolean isCarrierNetworkActive =
- (mWifiPickerTrackerHelper != null)
- && mWifiPickerTrackerHelper.isCarrierNetworkActive();
+ final boolean isCarrierNetworkActive = isCarrierNetworkActive();
String result = mSubsPrefCtrlInjector.getNetworkType(
mContext, mConfig, mTelephonyDisplayInfo, subId, isCarrierNetworkActive);
if (mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext) || isCarrierNetworkActive) {
@@ -291,20 +290,15 @@
final SignalStrength strength = tmForSubId.getSignalStrength();
int level = (strength == null) ? 0 : strength.getLevel();
int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
- if (shouldInflateSignalStrength(subId)) {
- level += 1;
+ boolean isCarrierNetworkActive = isCarrierNetworkActive();
+ if (shouldInflateSignalStrength(subId) || isCarrierNetworkActive) {
+ level = isCarrierNetworkActive
+ ? SignalStrength.NUM_SIGNAL_STRENGTH_BINS
+ : (level + 1);
numLevels += 1;
}
- Drawable icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels,
- !mTelephonyManager.isDataEnabled());
- final boolean isActiveCellularNetwork =
- mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext);
- if (isActiveCellularNetwork || (mWifiPickerTrackerHelper != null)
- && mWifiPickerTrackerHelper.isCarrierNetworkActive()) {
- icon.setTint(Utils.getColorAccentDefaultColor(mContext));
- return icon;
- }
+ Drawable icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet);
final ServiceState serviceState = tmForSubId.getServiceState();
final NetworkRegistrationInfo regInfo = (serviceState == null)
@@ -319,11 +313,17 @@
final boolean isVoiceInService = (serviceState == null)
? false
: (serviceState.getState() == ServiceState.STATE_IN_SERVICE);
- if (isDataInService || isVoiceInService) {
- return icon;
+ if (isDataInService || isVoiceInService || isCarrierNetworkActive) {
+ icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels,
+ !tmForSubId.isDataEnabled());
}
- icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet);
+ final boolean isActiveCellularNetwork =
+ mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext);
+ if (isActiveCellularNetwork || isCarrierNetworkActive) {
+ icon.setTint(Utils.getColorAccentDefaultColor(mContext));
+ }
+
return icon;
}
@@ -334,14 +334,6 @@
mSubsGearPref.setSummary("");
}
- private static void startMobileNetworkActivity(Context context, int subId) {
- final Intent intent = new Intent(context, MobileNetworkActivity.class);
- intent.putExtra(Settings.EXTRA_SUB_ID, subId);
- // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(context, intent, null);
- context.startActivity(intent);
- }
-
@VisibleForTesting
boolean shouldInflateSignalStrength(int subId) {
return SignalStrengthUtil.shouldInflateSignalStrength(mContext, subId);
@@ -417,7 +409,8 @@
*/
@Override
public boolean isAvailable() {
- if (mSubscriptionsListener.isAirplaneModeOn()) {
+ if (mSubscriptionsListener.isAirplaneModeOn()
+ && (!mWifiManager.isWifiEnabled() || !isCarrierNetworkActive())) {
return false;
}
List<SubscriptionInfo> subInfoList =
@@ -425,6 +418,7 @@
if (subInfoList == null) {
return false;
}
+
return subInfoList.stream()
// Avoid from showing subscription(SIM)s which has been marked as hidden
// For example, only one subscription will be shown when there're multiple
@@ -495,6 +489,11 @@
return new SubsPrefCtrlInjector();
}
+ boolean isCarrierNetworkActive() {
+ return mWifiPickerTrackerHelper != null
+ && mWifiPickerTrackerHelper.isCarrierNetworkActive();
+ }
+
/**
* To inject necessary data from each static api.
*/
diff --git a/src/com/android/settings/network/SwitchSlotSidecar.java b/src/com/android/settings/network/SwitchSlotSidecar.java
index cffb23f..abf8842 100644
--- a/src/com/android/settings/network/SwitchSlotSidecar.java
+++ b/src/com/android/settings/network/SwitchSlotSidecar.java
@@ -19,6 +19,7 @@
import android.annotation.IntDef;
import android.app.FragmentManager;
import android.os.Bundle;
+import android.telephony.SubscriptionInfo;
import android.util.Log;
import com.android.settings.AsyncTaskSidecar;
@@ -41,11 +42,14 @@
})
private @interface Command {
int SWITCH_TO_REMOVABLE_SIM = 0;
+ int SWITCH_TO_EUICC_SIM = 1;
}
static class Param {
@Command int command;
int slotId;
+ int port;
+ SubscriptionInfo removedSubInfo;
}
static class Result {
@@ -65,13 +69,24 @@
}
/** Starts switching to the removable slot. */
- public void runSwitchToRemovableSlot(int id) {
+ public void runSwitchToRemovableSlot(int id, SubscriptionInfo removedSubInfo) {
Param param = new Param();
param.command = Command.SWITCH_TO_REMOVABLE_SIM;
param.slotId = id;
+ param.removedSubInfo = removedSubInfo;
+ param.port = 0;
super.run(param);
}
+ /** Starts switching to the removable slot. */
+ public void runSwitchToEuiccSlot(int id, int port, SubscriptionInfo removedSubInfo) {
+ Param param = new Param();
+ param.command = Command.SWITCH_TO_EUICC_SIM;
+ param.slotId = id;
+ param.removedSubInfo = removedSubInfo;
+ param.port = port;
+ super.run(param);
+ }
/**
* Returns the exception thrown during the execution of a command. Will be null in any state
* other than {@link State#SUCCESS}, and may be null in that state if there was not an error.
@@ -91,7 +106,14 @@
try {
switch (param.command) {
case Command.SWITCH_TO_REMOVABLE_SIM:
- UiccSlotUtil.switchToRemovableSlot(param.slotId, getContext());
+ Log.i(TAG, "Start to switch to removable slot.");
+ UiccSlotUtil.switchToRemovableSlot(getContext(), param.slotId,
+ param.removedSubInfo);
+ break;
+ case Command.SWITCH_TO_EUICC_SIM:
+ Log.i(TAG, "Start to switch to euicc slot.");
+ UiccSlotUtil.switchToEuiccSlot(getContext(), param.slotId, param.port,
+ param.removedSubInfo);
break;
default:
Log.e(TAG, "Wrong command.");
diff --git a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java
index 6e6142f..d88a189 100644
--- a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java
+++ b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java
@@ -18,17 +18,30 @@
import android.app.FragmentManager;
import android.app.PendingIntent;
+import android.content.Intent;
+import android.telephony.SubscriptionInfo;
+import android.telephony.UiccCardInfo;
+import android.telephony.UiccSlotMapping;
+import android.telephony.euicc.EuiccManager;
+import android.util.Log;
import com.android.settings.SidecarFragment;
import com.android.settings.network.telephony.EuiccOperationSidecar;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
/** A headless fragment encapsulating long-running eSIM enabling/disabling operations. */
public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar {
private static final String TAG = "SwitchToEuiccSubscriptionSidecar";
private static final String ACTION_SWITCH_TO_SUBSCRIPTION =
"com.android.settings.network.SWITCH_TO_SUBSCRIPTION";
+ private static final int ESIM_SLOT_ID = 1;
private PendingIntent mCallbackIntent;
+ private int mSubId;
+ private int mPort;
/** Returns a SwitchToEuiccSubscriptionSidecar sidecar instance. */
public static SwitchToEuiccSubscriptionSidecar get(FragmentManager fm) {
@@ -46,10 +59,119 @@
return mCallbackIntent;
}
+ @Override
+ public void onStateChange(SidecarFragment fragment) {
+ if (fragment == mSwitchSlotSidecar) {
+ onSwitchSlotSidecarStateChange();
+ } else {
+ Log.wtf(TAG, "Received state change from a sidecar not expected.");
+ }
+ }
+
/** Starts calling EuiccManager#switchToSubscription to enable/disable the eSIM profile. */
+ // ToDo: delete this api and refactor the related code.
public void run(int subscriptionId) {
setState(State.RUNNING, Substate.UNUSED);
mCallbackIntent = createCallbackIntent();
mEuiccManager.switchToSubscription(subscriptionId, mCallbackIntent);
}
+
+ /**
+ * Starts calling EuiccManager#switchToSubscription to enable/disable the eSIM profile.
+ *
+ * @param subscriptionId the esim's subscriptionId.
+ * @param port the esim's portId. If user wants to inactivate esim, then user must to assign the
+ * the port. If user wants to activate esim, then the port can be -1.
+ * @param removedSubInfo if the all of slots have sims, it should remove the one of active sim.
+ * If the removedSubInfo is null, then use the default value.
+ * The default value is the esim slot and portId 0.
+ */
+ public void run(int subscriptionId, int port, SubscriptionInfo removedSubInfo) {
+ setState(State.RUNNING, Substate.UNUSED);
+ mCallbackIntent = createCallbackIntent();
+ mSubId = subscriptionId;
+ // To check whether the esim slot's port is active. If yes, skip setSlotMapping. If no,
+ // set this slot+port into setSimSlotMapping.
+ mPort = (port < 0) ? getTargetPortId(removedSubInfo) : port;
+ Log.i(TAG, "The SubId is " + mSubId + "The port is " + mPort);
+
+ mSwitchSlotSidecar.runSwitchToEuiccSlot(getTargetSlot(), mPort, removedSubInfo);
+ }
+
+ private int getTargetPortId(SubscriptionInfo removedSubInfo) {
+ if (!mTelephonyManager.isMultiSimEnabled() || !isMultipleEnabledProfilesSupported()) {
+ // In the 'SS mode' or 'DSDS+no MEP', the port is 0.
+ return 0;
+ }
+
+ // In the 'DSDS+MEP', if the removedSubInfo is esim, then the port is
+ // removedSubInfo's port.
+ if (removedSubInfo != null && removedSubInfo.isEmbedded()) {
+ return removedSubInfo.getPortIndex();
+ }
+
+ // In DSDS+MEP mode, the removedSubInfo is psim or is null, it means the this esim need
+ // another port in the esim slot.
+ // To find another esim's port and value is from 0;
+ int port = 0;
+ Collection<UiccSlotMapping> uiccSlotMappings = mTelephonyManager.getSimSlotMapping();
+ for (UiccSlotMapping uiccSlotMapping :
+ uiccSlotMappings.stream()
+ .filter(
+ uiccSlotMapping -> uiccSlotMapping.getPhysicalSlotIndex()
+ == getTargetSlot())
+ .collect(Collectors.toList())) {
+ if (uiccSlotMapping.getPortIndex() == port) {
+ port++;
+ }
+ }
+ return port;
+ }
+
+ private int getTargetSlot() {
+ return ESIM_SLOT_ID;
+ }
+
+ private void onSwitchSlotSidecarStateChange() {
+ switch (mSwitchSlotSidecar.getState()) {
+ case State.SUCCESS:
+ mSwitchSlotSidecar.reset();
+ Log.i(TAG,
+ "Successfully SimSlotMapping. Start to enable/disable esim");
+ switchToSubscription();
+ break;
+ case State.ERROR:
+ mSwitchSlotSidecar.reset();
+ Log.i(TAG, "Failed to set SimSlotMapping");
+ setState(State.ERROR, Substate.UNUSED);
+ break;
+ }
+ }
+
+ private boolean isMultipleEnabledProfilesSupported() {
+ List<UiccCardInfo> cardInfos = mTelephonyManager.getUiccCardsInfo();
+ if (cardInfos == null) {
+ Log.w(TAG, "UICC cards info list is empty.");
+ return false;
+ }
+ return cardInfos.stream().anyMatch(
+ cardInfo -> cardInfo.isMultipleEnabledProfilesSupported());
+ }
+
+ private void switchToSubscription() {
+ // The SimSlotMapping is ready, then to execute activate/inactivate esim.
+ EuiccManager.ResultListener callback = new EuiccManager.ResultListener() {
+ @Override
+ public void onComplete(int resultCode, Intent resultIntent) {
+ Log.i(TAG, String.format("Result code : %d;", resultCode));
+ if (resultCode == EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK) {
+ setState(State.SUCCESS, Substate.UNUSED);
+ } else {
+ setState(State.ERROR, resultCode);
+ }
+ }
+ };
+ mEuiccManager.switchToSubscription(mSubId, mPort, getContext().getMainExecutor(),
+ callback);
+ }
}
diff --git a/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java b/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java
index 132a2fd..2c184c6 100644
--- a/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java
+++ b/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java
@@ -38,8 +38,8 @@
// Stateless members.
private SwitchToEuiccSubscriptionSidecar mSwitchToSubscriptionSidecar;
- private SwitchSlotSidecar mSwitchSlotSidecar;
private int mPhysicalSlotId;
+ private SubscriptionInfo mRemovedSubInfo;
/** Returns a SwitchToRemovableSlotSidecar sidecar instance. */
public static SwitchToRemovableSlotSidecar get(FragmentManager fm) {
@@ -51,20 +51,17 @@
super.onCreate(savedInstanceState);
mSwitchToSubscriptionSidecar =
SwitchToEuiccSubscriptionSidecar.get(getChildFragmentManager());
- mSwitchSlotSidecar = SwitchSlotSidecar.get(getChildFragmentManager());
}
@Override
public void onResume() {
super.onResume();
mSwitchToSubscriptionSidecar.addListener(this);
- mSwitchSlotSidecar.addListener(this);
}
@Override
public void onPause() {
mSwitchToSubscriptionSidecar.removeListener(this);
- mSwitchSlotSidecar.removeListener(this);
super.onPause();
}
@@ -90,29 +87,46 @@
*
* @param physicalSlotId removable physical SIM slot ID.
*/
+ // ToDo: delete this api and refactor the related code.
public void run(int physicalSlotId) {
mPhysicalSlotId = physicalSlotId;
SubscriptionManager subscriptionManager =
getContext().getSystemService(SubscriptionManager.class);
if (SubscriptionUtil.getActiveSubscriptions(subscriptionManager).stream()
.anyMatch(SubscriptionInfo::isEmbedded)) {
+ // In SS mode, the esim is active, then inactivate the esim.
Log.i(TAG, "There is an active eSIM profile. Disable the profile first.");
// Use INVALID_SUBSCRIPTION_ID to disable the only active profile.
- mSwitchToSubscriptionSidecar.run(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ mSwitchToSubscriptionSidecar.run(SubscriptionManager.INVALID_SUBSCRIPTION_ID, 0, null);
} else {
Log.i(TAG, "There is no active eSIM profiles. Start to switch to removable slot.");
- mSwitchSlotSidecar.runSwitchToRemovableSlot(mPhysicalSlotId);
+ mSwitchSlotSidecar.runSwitchToRemovableSlot(mPhysicalSlotId, null);
}
}
+ /**
+ * Starts switching to the removable slot.
+ *
+ * @param physicalSlotId removable physical SIM slot ID.
+ * @param removedSubInfo if the all of slots have sims, it should remove the one of active sim.
+ * If the removedSubInfo is null, then use the default value.
+ * The default value is the removable physical SIM slot and portId 0.
+ */
+ public void run(int physicalSlotId, SubscriptionInfo removedSubInfo) {
+ mPhysicalSlotId = physicalSlotId;
+ mRemovedSubInfo = removedSubInfo;
+
+ Log.i(TAG, "Start to switch to removable slot.");
+ mSwitchSlotSidecar.runSwitchToRemovableSlot(mPhysicalSlotId, mRemovedSubInfo);
+ }
+
private void onSwitchToSubscriptionSidecarStateChange() {
switch (mSwitchToSubscriptionSidecar.getState()) {
case State.SUCCESS:
mSwitchToSubscriptionSidecar.reset();
- Log.i(
- TAG,
+ Log.i(TAG,
"Successfully disabled eSIM profile. Start to switch to Removable slot.");
- mSwitchSlotSidecar.runSwitchToRemovableSlot(mPhysicalSlotId);
+ mSwitchSlotSidecar.runSwitchToRemovableSlot(mPhysicalSlotId, mRemovedSubInfo);
break;
case State.ERROR:
mSwitchToSubscriptionSidecar.reset();
diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java
index ccf3f91..8938cdb 100644
--- a/src/com/android/settings/network/UiccSlotUtil.java
+++ b/src/com/android/settings/network/UiccSlotUtil.java
@@ -19,8 +19,10 @@
import android.annotation.IntDef;
import android.content.Context;
import android.provider.Settings;
+import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.UiccSlotInfo;
+import android.telephony.UiccSlotMapping;
import android.util.Log;
import com.android.settingslib.utils.ThreadUtils;
@@ -29,17 +31,21 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+// ToDo: to do the refactor for renaming
public class UiccSlotUtil {
private static final String TAG = "UiccSlotUtil";
private static final long DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS = 25 * 1000L;
- ;
public static final int INVALID_PHYSICAL_SLOT_ID = -1;
+ public static final int INVALID_PORT_ID = -1;
/**
* Mode for switching to eSIM slot which decides whether there is cleanup process, e.g.
@@ -47,9 +53,9 @@
*/
@Retention(RetentionPolicy.SOURCE)
@IntDef({
- SwitchingEsimMode.NO_CLEANUP,
- SwitchingEsimMode.ASYNC_CLEANUP,
- SwitchingEsimMode.SYNC_CLEANUP
+ SwitchingEsimMode.NO_CLEANUP,
+ SwitchingEsimMode.ASYNC_CLEANUP,
+ SwitchingEsimMode.SYNC_CLEANUP
})
public @interface SwitchingEsimMode {
/** No cleanup process after switching to eSIM slot */
@@ -76,44 +82,108 @@
* Switches to the removable slot. It waits for SIM_STATE_LOADED after switch. If slotId is
* INVALID_PHYSICAL_SLOT_ID, the method will use the first detected inactive removable slot.
*
- * @param slotId the physical removable slot id.
+ * @param slotId the physical removable slot id.
* @param context the application context.
* @throws UiccSlotsException if there is an error.
*/
+ //ToDo: delete this api and refactor the related code.
public static synchronized void switchToRemovableSlot(int slotId, Context context)
throws UiccSlotsException {
+ switchToRemovableSlot(context, slotId, null);
+ }
+
+ /**
+ * Switches to the removable slot. It waits for SIM_STATE_LOADED after switch. If slotId is
+ * INVALID_PHYSICAL_SLOT_ID, the method will use the first detected inactive removable slot.
+ *
+ * @param slotId the physical removable slot id.
+ * @param context the application context.
+ * @param removedSubInfo In the DSDS+MEP mode, if the all of slots have sims, it should
+ * remove the one of active sim.
+ * If the removedSubInfo is null, then use the default value.
+ * The default value is the esim slot and portId 0.
+ * @throws UiccSlotsException if there is an error.
+ */
+ public static synchronized void switchToRemovableSlot(Context context, int slotId,
+ SubscriptionInfo removedSubInfo) throws UiccSlotsException {
if (ThreadUtils.isMainThread()) {
throw new IllegalThreadStateException(
"Do not call switchToRemovableSlot on the main thread.");
}
TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
- if (telMgr.isMultiSimEnabled()) {
- // If this device supports multiple active slots, don't mess with TelephonyManager.
- Log.i(TAG, "Multiple active slots supported. Not calling switchSlots.");
- return;
- }
- UiccSlotInfo[] slots = telMgr.getUiccSlotsInfo();
- if (slotId == INVALID_PHYSICAL_SLOT_ID) {
- for (int i = 0; i < slots.length; i++) {
- if (slots[i].isRemovable()
- && !slots[i].getPorts().stream().findFirst().get().isActive()
- && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR
- && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) {
- performSwitchToRemovableSlot(i, context);
- return;
- }
- }
- } else {
- if (slotId >= slots.length || !slots[slotId].isRemovable()) {
- throw new UiccSlotsException("The given slotId is not a removable slot: " + slotId);
- }
- if (!slots[slotId].getPorts().stream().findFirst().get().isActive()) {
- performSwitchToRemovableSlot(slotId, context);
- }
- }
+ int inactiveRemovableSlot = getInactiveRemovableSlot(telMgr.getUiccSlotsInfo(), slotId);
+ performSwitchToSlot(telMgr,
+ prepareUiccSlotMappingsForRemovableSlot(telMgr.getSimSlotMapping(),
+ inactiveRemovableSlot, removedSubInfo, telMgr.isMultiSimEnabled()),
+ context);
}
- private static void performSwitchToRemovableSlot(int slotId, Context context)
+ /**
+ * Switches to the Euicc slot. It waits for SIM_STATE_LOADED after switch.
+ *
+ * @param context the application context.
+ * @param slotId the Euicc slot id.
+ * @param port the Euicc slot port id.
+ * @param removedSubInfo In the DSDS+MEP mode, if the all of slots have sims, it should
+ * remove the one of active sim.
+ * If the removedSubInfo is null, then it uses the default value.
+ * The default value is the esim slot and portId 0.
+ * @throws UiccSlotsException if there is an error.
+ */
+ public static synchronized void switchToEuiccSlot(Context context, int slotId, int port,
+ SubscriptionInfo removedSubInfo) throws UiccSlotsException {
+ if (ThreadUtils.isMainThread()) {
+ throw new IllegalThreadStateException(
+ "Do not call switchToRemovableSlot on the main thread.");
+ }
+ TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
+ Collection<UiccSlotMapping> uiccSlotMappings = telMgr.getSimSlotMapping();
+ Log.i(TAG, "The SimSlotMapping: " + uiccSlotMappings);
+
+ if (isTargetSlotActive(uiccSlotMappings, slotId, port)) {
+ Log.i(TAG, "The slot is active, then the sim can enable directly.");
+ return;
+ }
+
+ Collection<UiccSlotMapping> newUiccSlotMappings = new ArrayList<>();
+ if (!telMgr.isMultiSimEnabled()) {
+ // In the 'SS mode', the port is 0.
+ newUiccSlotMappings.add(new UiccSlotMapping(port, slotId, 0));
+ } else {
+ // DSDS+MEP
+ // The target slot+port is not active, but the all of logical slots are full. It
+ // needs to replace one of logical slots.
+ int removedSlot =
+ (removedSubInfo != null) ? removedSubInfo.getSimSlotIndex() : slotId;
+ int removedPort = (removedSubInfo != null) ? removedSubInfo.getPortIndex() : 0;
+ Log.i(TAG,
+ String.format("Start to set SimSlotMapping from slot%d-port%d to slot%d-port%d",
+ slotId, port, removedSlot, removedPort));
+ newUiccSlotMappings =
+ uiccSlotMappings.stream().map(uiccSlotMapping -> {
+ if (uiccSlotMapping.getPhysicalSlotIndex() == removedSlot
+ && uiccSlotMapping.getPortIndex() == removedPort) {
+ return new UiccSlotMapping(port, slotId,
+ uiccSlotMapping.getLogicalSlotIndex());
+ }
+ return uiccSlotMapping;
+ }).collect(Collectors.toList());
+ }
+
+ Log.i(TAG, "The SimSlotMapping: " + newUiccSlotMappings);
+ performSwitchToSlot(telMgr, newUiccSlotMappings, context);
+ }
+
+ private static boolean isTargetSlotActive(Collection<UiccSlotMapping> uiccSlotMappings,
+ int slotId, int port) {
+ return uiccSlotMappings.stream()
+ .anyMatch(
+ uiccSlotMapping -> uiccSlotMapping.getPhysicalSlotIndex() == slotId
+ && uiccSlotMapping.getPortIndex() == port);
+ }
+
+ private static void performSwitchToSlot(TelephonyManager telMgr,
+ Collection<UiccSlotMapping> uiccSlotMappings, Context context)
throws UiccSlotsException {
CarrierConfigChangedReceiver receiver = null;
long waitingTimeMillis =
@@ -125,7 +195,7 @@
CountDownLatch latch = new CountDownLatch(1);
receiver = new CarrierConfigChangedReceiver(latch);
receiver.registerOn(context);
- switchSlots(context, slotId);
+ telMgr.setSimSlotMapping(uiccSlotMappings);
latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
@@ -138,22 +208,80 @@
}
/**
- * Changes the logical slot to physical slot mapping. OEM should override this to provide
- * device-specific implementation if the device supports switching slots.
- *
- * @param context the application context.
- * @param physicalSlots List of physical slot ids in the order of logical slots.
+ * @param slots The UiccSlotInfo list.
+ * @param slotId The physical removable slot id.
+ * @return The inactive physical removable slot id. If the physical removable slot id is
+ * active, then return -1.
+ * @throws UiccSlotsException if there is an error.
*/
- private static void switchSlots(Context context, int... physicalSlots)
+ private static int getInactiveRemovableSlot(UiccSlotInfo[] slots, int slotId)
throws UiccSlotsException {
- TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
- if (telMgr.isMultiSimEnabled()) {
- // If this device supports multiple active slots, don't mess with TelephonyManager.
- Log.i(TAG, "Multiple active slots supported. Not calling switchSlots.");
- return;
+ if (slots == null) {
+ throw new UiccSlotsException("UiccSlotInfo is null");
}
- if (!telMgr.switchSlots(physicalSlots)) {
- throw new UiccSlotsException("Failed to switch slots");
+ if (slotId == INVALID_PHYSICAL_SLOT_ID) {
+ for (int i = 0; i < slots.length; i++) {
+ if (slots[i].isRemovable()
+ && !slots[i].getPorts().stream().findFirst().get().isActive()
+ && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR
+ && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) {
+ return i;
+ }
+ }
+ } else {
+ if (slotId >= slots.length || !slots[slotId].isRemovable()) {
+ throw new UiccSlotsException("The given slotId is not a removable slot: " + slotId);
+ }
+ if (!slots[slotId].getPorts().stream().findFirst().get().isActive()) {
+ return slotId;
+ }
}
+ return INVALID_PHYSICAL_SLOT_ID;
+ }
+
+ private static Collection<UiccSlotMapping> prepareUiccSlotMappingsForRemovableSlot(
+ Collection<UiccSlotMapping> uiccSlotMappings, int slotId,
+ SubscriptionInfo removedSubInfo, boolean isMultiSimEnabled) {
+ if (slotId == INVALID_PHYSICAL_SLOT_ID
+ || uiccSlotMappings.stream().anyMatch(uiccSlotMapping ->
+ uiccSlotMapping.getPhysicalSlotIndex() == slotId
+ && uiccSlotMapping.getPortIndex() == 0)) {
+ // The slot is invalid slot id, then to skip this.
+ // The slot is active, then the sim can enable directly.
+ return uiccSlotMappings;
+ }
+
+ Collection<UiccSlotMapping> newUiccSlotMappings = new ArrayList<>();
+ if (!isMultiSimEnabled) {
+ // In the 'SS mode', the port is 0.
+ newUiccSlotMappings.add(new UiccSlotMapping(0, slotId, 0));
+ } else if (removedSubInfo != null) {
+ // DSDS+MEP
+ // The target slot+port is not active, but the all of logical slots are full. It
+ // needs to replace one of logical slots.
+ Log.i(TAG,
+ String.format("Start to set SimSlotMapping from slot%d-port%d to slot%d-port%d",
+ slotId, 0, removedSubInfo.getSimSlotIndex(),
+ removedSubInfo.getPortIndex()));
+ newUiccSlotMappings =
+ uiccSlotMappings.stream().map(uiccSlotMapping -> {
+ if (uiccSlotMapping.getPhysicalSlotIndex()
+ == removedSubInfo.getSimSlotIndex()
+ && uiccSlotMapping.getPortIndex()
+ == removedSubInfo.getPortIndex()) {
+ return new UiccSlotMapping(0, slotId,
+ uiccSlotMapping.getLogicalSlotIndex());
+ }
+ return uiccSlotMapping;
+ }).collect(Collectors.toList());
+ } else {
+ // DSDS+no MEP
+ // The removable slot should be in UiccSlotMapping.
+ newUiccSlotMappings = uiccSlotMappings;
+ Log.i(TAG, "The removedSubInfo is null");
+ }
+
+ Log.i(TAG, "The SimSlotMapping: " + newUiccSlotMappings);
+ return newUiccSlotMappings;
}
}
diff --git a/src/com/android/settings/network/apn/ApnSettings.java b/src/com/android/settings/network/apn/ApnSettings.java
index 73e9de7..1791446 100755
--- a/src/com/android/settings/network/apn/ApnSettings.java
+++ b/src/com/android/settings/network/apn/ApnSettings.java
@@ -322,6 +322,8 @@
final StringBuilder where =
new StringBuilder("NOT (type='ia' AND (apn=\"\" OR apn IS NULL)) AND "
+ "user_visible!=0");
+ // Remove Emergency type, users should not mess with that
+ where.append(" AND NOT (type='emergency')");
if (mHideImsApn) {
where.append(" AND NOT (type='ims')");
diff --git a/src/com/android/settings/network/telephony/AlertDialogFragment.java b/src/com/android/settings/network/telephony/AlertDialogFragment.java
index 5940789..aaccc2d 100644
--- a/src/com/android/settings/network/telephony/AlertDialogFragment.java
+++ b/src/com/android/settings/network/telephony/AlertDialogFragment.java
@@ -16,13 +16,14 @@
package com.android.settings.network.telephony;
-import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
/** Fragment to show an alert dialog which only has the positive button. */
public class AlertDialogFragment extends BaseDialogFragment
implements DialogInterface.OnClickListener {
@@ -37,13 +38,13 @@
* @param title
* @param msg
*/
- public static void show(Activity activity, String title, String msg) {
+ public static void show(FragmentActivity activity, String title, String msg) {
AlertDialogFragment fragment = new AlertDialogFragment();
Bundle arguments = new Bundle();
arguments.putString(ARG_TITLE, title);
arguments.putString(ARG_MSG, msg);
fragment.setArguments(arguments);
- fragment.show(activity.getFragmentManager(), TAG);
+ fragment.show(activity.getSupportFragmentManager(), TAG);
}
@Override
@@ -55,7 +56,7 @@
if (!TextUtils.isEmpty(getArguments().getString(ARG_MSG))) {
builder.setMessage(getArguments().getString(ARG_MSG));
}
- return builder.show();
+ return builder.create();
}
@Override
diff --git a/src/com/android/settings/network/telephony/BaseDialogFragment.java b/src/com/android/settings/network/telephony/BaseDialogFragment.java
index 7da3259..0465cef 100644
--- a/src/com/android/settings/network/telephony/BaseDialogFragment.java
+++ b/src/com/android/settings/network/telephony/BaseDialogFragment.java
@@ -17,11 +17,11 @@
package com.android.settings.network.telephony;
import android.app.Activity;
-import android.app.DialogFragment;
-import android.app.Fragment;
import android.os.Bundle;
import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
/**
* Base dialog fragment class with the functionality to make a fragment or an activity as a listener
diff --git a/src/com/android/settings/network/telephony/ConfirmDialogFragment.java b/src/com/android/settings/network/telephony/ConfirmDialogFragment.java
index 1ba99c5..6352180 100644
--- a/src/com/android/settings/network/telephony/ConfirmDialogFragment.java
+++ b/src/com/android/settings/network/telephony/ConfirmDialogFragment.java
@@ -16,13 +16,24 @@
package com.android.settings.network.telephony;
-import android.app.Activity;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.R;
+
+import java.util.ArrayList;
/** Fragment to show a confirm dialog. The caller should implement onConfirmListener. */
public class ConfirmDialogFragment extends BaseDialogFragment
@@ -32,22 +43,27 @@
private static final String ARG_MSG = "msg";
private static final String ARG_POS_BUTTON_STRING = "pos_button_string";
private static final String ARG_NEG_BUTTON_STRING = "neg_button_string";
+ private static final String ARG_LIST = "list";
/**
* Interface defining the method that will be invoked when the user has done with the dialog.
*/
public interface OnConfirmListener {
/**
- * @param tag The tag in the caller.
- * @param confirmed True if the user has clicked the positive button. False if the user has
- * clicked the negative button or cancel the dialog.
+ * @param tag The tag in the caller.
+ * @param confirmed True if the user has clicked the positive button. False if the
+ * user has
+ * clicked the negative button or cancel the dialog.
+ * @param itemPosition It is the position of item, if user selects one of the list item.
+ * If the user select "cancel" or the dialog does not have list, then
+ * the value is -1.
*/
- void onConfirm(int tag, boolean confirmed);
+ void onConfirm(int tag, boolean confirmed, int itemPosition);
}
/** Displays a confirmation dialog which has confirm and cancel buttons. */
public static <T> void show(
- Activity activity,
+ FragmentActivity activity,
Class<T> callbackInterfaceClass,
int tagInCaller,
String title,
@@ -62,7 +78,29 @@
arguments.putString(ARG_NEG_BUTTON_STRING, negButtonString);
setListener(activity, null, callbackInterfaceClass, tagInCaller, arguments);
fragment.setArguments(arguments);
- fragment.show(activity.getFragmentManager(), TAG);
+ fragment.show(activity.getSupportFragmentManager(), TAG);
+ }
+
+ /** Displays a confirmation dialog which has confirm and cancel buttons and carrier list.*/
+ public static <T> void show(
+ FragmentActivity activity,
+ Class<T> callbackInterfaceClass,
+ int tagInCaller,
+ String title,
+ String msg,
+ String posButtonString,
+ String negButtonString,
+ ArrayList<String> list) {
+ ConfirmDialogFragment fragment = new ConfirmDialogFragment();
+ Bundle arguments = new Bundle();
+ arguments.putString(ARG_TITLE, title);
+ arguments.putCharSequence(ARG_MSG, msg);
+ arguments.putString(ARG_POS_BUTTON_STRING, posButtonString);
+ arguments.putString(ARG_NEG_BUTTON_STRING, negButtonString);
+ arguments.putStringArrayList(ARG_LIST, list);
+ setListener(activity, null, callbackInterfaceClass, tagInCaller, arguments);
+ fragment.setArguments(arguments);
+ fragment.show(activity.getSupportFragmentManager(), TAG);
}
@Override
@@ -71,37 +109,87 @@
String message = getArguments().getString(ARG_MSG);
String posBtnString = getArguments().getString(ARG_POS_BUTTON_STRING);
String negBtnString = getArguments().getString(ARG_NEG_BUTTON_STRING);
+ ArrayList<String> list = getArguments().getStringArrayList(ARG_LIST);
- Log.i("Showing dialog with title = %s", title);
- AlertDialog.Builder builder =
- new AlertDialog.Builder(getContext())
- .setTitle(title)
- .setPositiveButton(posBtnString, this)
- .setNegativeButton(negBtnString, this);
+ Log.i(TAG, "Showing dialog with title =" + title);
+ AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
+ .setPositiveButton(posBtnString, this)
+ .setNegativeButton(negBtnString, this);
- if (!TextUtils.isEmpty(message)) {
- builder.setMessage(message);
+ if (list != null && !list.isEmpty()) {
+ Log.i(TAG, "list =" + list.toString());
+
+ View content = LayoutInflater.from(getContext()).inflate(
+ R.layout.sim_confirm_dialog_multiple_enabled_profiles_supported, null);
+
+ if (!TextUtils.isEmpty(title)) {
+ View titleView = LayoutInflater.from(getContext()).inflate(
+ R.layout.sim_confirm_dialog_title_multiple_enabled_profiles_supported,
+ null);
+ TextView titleTextView = titleView.findViewById(R.id.title);
+ titleTextView.setText(title);
+ builder.setCustomTitle(titleTextView);
+ }
+ TextView dialogMessage = content.findViewById(R.id.msg);
+ if (!TextUtils.isEmpty(message) && dialogMessage != null) {
+ dialogMessage.setText(message);
+ }
+
+ final ArrayAdapter<String> arrayAdapterItems = new ArrayAdapter<String>(
+ getContext(),
+ R.layout.sim_confirm_dialog_item_multiple_enabled_profiles_supported, list);
+ final ListView lvItems = content.findViewById(R.id.carrier_list);
+ if (lvItems != null) {
+ lvItems.setAdapter(arrayAdapterItems);
+ lvItems.setChoiceMode(ListView.CHOICE_MODE_NONE);
+ lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position,
+ long id) {
+ Log.i(TAG, "list onClick =" + position);
+ Log.i(TAG, "list item =" + list.get(position));
+
+ if (position == list.size() - 1) {
+ // user select the "cancel" item;
+ informCaller(false, -1);
+ } else {
+ informCaller(true, position);
+ }
+ }
+ });
+ }
+ builder.setView(content);
+ } else {
+ if (!TextUtils.isEmpty(title)) {
+ builder.setTitle(title);
+ }
+ if (!TextUtils.isEmpty(message)) {
+ builder.setMessage(message);
+ }
}
- AlertDialog dialog = builder.show();
+
+ AlertDialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
@Override
public void onClick(DialogInterface dialog, int which) {
- informCaller(which == DialogInterface.BUTTON_POSITIVE);
+ Log.i(TAG, "dialog onClick =" + which);
+
+ informCaller(which == DialogInterface.BUTTON_POSITIVE, -1);
}
@Override
public void onCancel(DialogInterface dialog) {
- informCaller(false);
+ informCaller(false, -1);
}
- private void informCaller(boolean confirmed) {
+ private void informCaller(boolean confirmed, int itemPosition) {
OnConfirmListener listener = getListener(OnConfirmListener.class);
if (listener == null) {
return;
}
- listener.onConfirm(getTagInCaller(), confirmed);
+ listener.onConfirm(getTagInCaller(), confirmed, itemPosition);
}
}
diff --git a/src/com/android/settings/network/telephony/DeleteEuiccSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/DeleteEuiccSubscriptionDialogActivity.java
index f429f8b..8247f63 100644
--- a/src/com/android/settings/network/telephony/DeleteEuiccSubscriptionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/DeleteEuiccSubscriptionDialogActivity.java
@@ -96,7 +96,7 @@
}
@Override
- public void onConfirm(int tag, boolean confirmed) {
+ public void onConfirm(int tag, boolean confirmed, int itemPosition) {
if (!confirmed) {
finish();
return;
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 25e0ae0..aa58663 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -23,9 +23,11 @@
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.util.Log;
+import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
@@ -59,16 +61,25 @@
private CarrierConfigManager mCarrierConfigManager;
private PreferenceEntriesBuilder mBuilder;
private SubscriptionsChangeListener mSubscriptionsListener;
+ private int mCallState = TelephonyManager.CALL_STATE_IDLE;
+ private PhoneCallStateTelephonyCallback mTelephonyCallback;
public EnabledNetworkModePreferenceController(Context context, String key) {
super(context, key);
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+ if (mTelephonyCallback == null) {
+ mTelephonyCallback = new PhoneCallStateTelephonyCallback();
+ }
}
@Override
public int getAvailabilityStatus(int subId) {
boolean visible;
+ if (!isCallStateIdle()) {
+ return AVAILABLE_UNSEARCHABLE;
+ }
+
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId);
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
visible = false;
@@ -87,23 +98,28 @@
return visible ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
+ protected boolean isCallStateIdle() {
+ return mCallState == TelephonyManager.CALL_STATE_IDLE;
+ }
@OnLifecycleEvent(ON_START)
public void onStart() {
mSubscriptionsListener.start();
- if (mAllowedNetworkTypesListener == null) {
+ if (mAllowedNetworkTypesListener == null || mTelephonyCallback == null) {
return;
}
mAllowedNetworkTypesListener.register(mContext, mSubId);
+ mTelephonyCallback.register(mTelephonyManager, mSubId);
}
@OnLifecycleEvent(ON_STOP)
public void onStop() {
mSubscriptionsListener.stop();
- if (mAllowedNetworkTypesListener == null) {
+ if (mAllowedNetworkTypesListener == null || mTelephonyCallback == null) {
return;
}
mAllowedNetworkTypesListener.unregister(mContext, mSubId);
+ mTelephonyCallback.unregister();
}
@Override
@@ -125,6 +141,7 @@
listPreference.setEntryValues(mBuilder.getEntryValues());
listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
listPreference.setSummary(mBuilder.getSummary());
+ listPreference.setEnabled(isCallStateIdle());
}
@Override
@@ -157,7 +174,6 @@
updatePreference();
});
}
-
lifecycle.addObserver(this);
}
@@ -828,6 +844,43 @@
}
+ @VisibleForTesting
+ class PhoneCallStateTelephonyCallback extends TelephonyCallback implements
+ TelephonyCallback.CallStateListener {
+
+ private TelephonyManager mTelephonyManager;
+
+ @Override
+ public void onCallStateChanged(int state) {
+ Log.d(LOG_TAG, "onCallStateChanged:" + state);
+ mCallState = state;
+ mBuilder.updateConfig();
+ updatePreference();
+ }
+
+ public void register(TelephonyManager telephonyManager, int subId) {
+ mTelephonyManager = telephonyManager;
+
+ // assign current call state so that it helps to show correct preference state even
+ // before first onCallStateChanged() by initial registration.
+ mCallState = mTelephonyManager.getCallState(subId);
+ mTelephonyManager.registerTelephonyCallback(
+ mContext.getMainExecutor(), mTelephonyCallback);
+ }
+
+ public void unregister() {
+ mCallState = TelephonyManager.CALL_STATE_IDLE;
+ if (mTelephonyManager != null) {
+ mTelephonyManager.unregisterTelephonyCallback(this);
+ }
+ }
+ }
+
+ @VisibleForTesting
+ PhoneCallStateTelephonyCallback getTelephonyCallback() {
+ return mTelephonyCallback;
+ }
+
@Override
public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
}
diff --git a/src/com/android/settings/network/telephony/EuiccOperationSidecar.java b/src/com/android/settings/network/telephony/EuiccOperationSidecar.java
index 05c866e..d1d362b 100644
--- a/src/com/android/settings/network/telephony/EuiccOperationSidecar.java
+++ b/src/com/android/settings/network/telephony/EuiccOperationSidecar.java
@@ -24,10 +24,12 @@
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.SystemClock;
+import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager;
import android.util.Log;
import com.android.settings.SidecarFragment;
+import com.android.settings.network.SwitchSlotSidecar;
import java.util.concurrent.atomic.AtomicInteger;
@@ -37,7 +39,8 @@
* should implement its own get() function to return an instance of that class, and implement the
* functional class like run() to actually trigger the function in EuiccManager.
*/
-public abstract class EuiccOperationSidecar extends SidecarFragment {
+public abstract class EuiccOperationSidecar extends SidecarFragment
+ implements SidecarFragment.Listener{
private static final String TAG = "EuiccOperationSidecar";
private static final int REQUEST_CODE = 0;
private static final String EXTRA_OP_ID = "op_id";
@@ -45,6 +48,9 @@
new AtomicInteger((int) SystemClock.elapsedRealtime());
protected EuiccManager mEuiccManager;
+ protected TelephonyManager mTelephonyManager;
+ protected SwitchSlotSidecar mSwitchSlotSidecar;
+
private int mResultCode;
private int mDetailedCode;
@@ -107,6 +113,8 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mEuiccManager = getContext().getSystemService(EuiccManager.class);
+ mTelephonyManager = getContext().getSystemService(TelephonyManager.class);
+ mSwitchSlotSidecar = SwitchSlotSidecar.get(getChildFragmentManager());
getContext()
.getApplicationContext()
@@ -119,11 +127,41 @@
}
@Override
+ public void onResume() {
+ super.onResume();
+ mSwitchSlotSidecar.addListener(this);
+ }
+
+ @Override
+ public void onPause() {
+ mSwitchSlotSidecar.removeListener(this);
+ super.onPause();
+ }
+
+ @Override
public void onDestroy() {
getContext().getApplicationContext().unregisterReceiver(mReceiver);
super.onDestroy();
}
+ @Override
+ public void onStateChange(SidecarFragment fragment) {
+ if (fragment == mSwitchSlotSidecar) {
+ switch (mSwitchSlotSidecar.getState()) {
+ case State.SUCCESS:
+ mSwitchSlotSidecar.reset();
+ Log.i(TAG, "mSwitchSlotSidecar SUCCESS");
+ break;
+ case State.ERROR:
+ mSwitchSlotSidecar.reset();
+ Log.i(TAG, "mSwitchSlotSidecar ERROR");
+ break;
+ }
+ } else {
+ Log.wtf(TAG, "Received state change from a sidecar not expected.");
+ }
+ }
+
public int getResultCode() {
return mResultCode;
}
diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
index 1ac121e..69951bf 100644
--- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
+++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
@@ -122,6 +122,7 @@
@Override
public boolean isChecked() {
+ mTelephonyManager = getTelephonyManager();
return mTelephonyManager.isDataEnabled();
}
@@ -152,8 +153,21 @@
public void init(FragmentManager fragmentManager, int subId) {
mFragmentManager = fragmentManager;
mSubId = subId;
- mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
- .createForSubscriptionId(mSubId);
+ mTelephonyManager = null;
+ mTelephonyManager = getTelephonyManager();
+ }
+
+ private TelephonyManager getTelephonyManager() {
+ if (mTelephonyManager != null) {
+ return mTelephonyManager;
+ }
+ TelephonyManager telMgr =
+ mContext.getSystemService(TelephonyManager.class);
+ if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ telMgr = telMgr.createForSubscriptionId(mSubId);
+ }
+ mTelephonyManager = telMgr;
+ return telMgr;
}
public void setWifiPickerTrackerHelper(WifiPickerTrackerHelper helper) {
@@ -163,6 +177,7 @@
@VisibleForTesting
boolean isDialogNeeded() {
final boolean enableData = !isChecked();
+ mTelephonyManager = getTelephonyManager();
final boolean isMultiSim = (mTelephonyManager.getActiveModemCount() > 1);
final int defaultSubId = mSubscriptionManager.getDefaultDataSubscriptionId();
final boolean needToDisableOthers = mSubscriptionManager
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index 22bb581..d25ae65 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -18,6 +18,8 @@
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;
+import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME;
+
import android.annotation.ColorInt;
import android.app.PendingIntent;
import android.content.Context;
@@ -27,6 +29,7 @@
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
+import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -142,7 +145,8 @@
@Override
public Intent getIntent() {
- return new Intent(mContext, MobileNetworkActivity.class);
+ return new Intent(Settings.ACTION_NETWORK_OPERATOR_SETTINGS).setPackage(
+ SETTINGS_PACKAGE_NAME);
}
@Override
diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
deleted file mode 100644
index bbff57d..0000000
--- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.telephony;
-
-import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY;
-
-import android.app.ActionBar;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.ims.ImsRcsManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.Toolbar;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.VisibleForTesting;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
-import androidx.lifecycle.Lifecycle;
-
-import com.android.settings.R;
-import com.android.settings.core.SettingsBaseActivity;
-import com.android.settings.network.ProxySubscriptionManager;
-import com.android.settings.network.SubscriptionUtil;
-import com.android.settings.network.helper.SelectableSubscriptions;
-import com.android.settings.network.helper.SubscriptionAnnotation;
-
-import java.util.List;
-import java.util.function.Function;
-
-/**
- * Activity for displaying MobileNetworkSettings
- */
-public class MobileNetworkActivity extends SettingsBaseActivity
- implements ProxySubscriptionManager.OnActiveSubscriptionChangedListener {
-
- private static final String TAG = "MobileNetworkActivity";
- @VisibleForTesting
- static final String MOBILE_SETTINGS_TAG = "mobile_settings:";
- @VisibleForTesting
- static final int SUB_ID_NULL = Integer.MIN_VALUE;
-
- @VisibleForTesting
- ProxySubscriptionManager mProxySubscriptionMgr;
-
- private int mCurSubscriptionId = SUB_ID_NULL;
-
- // This flag forces subscription information fragment to be re-created.
- // Otherwise, fragment will be kept when subscription id has not been changed.
- //
- // Set initial value to true allows subscription information fragment to be re-created when
- // Activity re-create occur.
- private boolean mPendingSubscriptionChange = true;
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- validate(intent);
- setIntent(intent);
-
- int updateSubscriptionIndex = mCurSubscriptionId;
- if (intent != null) {
- updateSubscriptionIndex = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
- }
- SubscriptionInfo info = getSubscriptionOrDefault(updateSubscriptionIndex);
- if (info == null) {
- Log.d(TAG, "Invalid subId request " + mCurSubscriptionId
- + " -> " + updateSubscriptionIndex);
- return;
- }
-
- int oldSubId = mCurSubscriptionId;
- updateSubscriptions(info, null);
-
- // If the subscription has changed or the new intent doesnt contain the opt in action,
- // remove the old discovery dialog. If the activity is being recreated, we will see
- // onCreate -> onNewIntent, so the dialog will first be recreated for the old subscription
- // and then removed.
- if (mCurSubscriptionId != oldSubId || !doesIntentContainOptInAction(intent)) {
- removeContactDiscoveryDialog(oldSubId);
- }
- // evaluate showing the new discovery dialog if this intent contains an action to show the
- // opt-in.
- if (doesIntentContainOptInAction(intent)) {
- maybeShowContactDiscoveryDialog(info);
- }
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- final UserManager userManager = this.getSystemService(UserManager.class);
- if (!userManager.isAdminUser()) {
- this.finish();
- return;
- }
-
- final Toolbar toolbar = findViewById(R.id.action_bar);
- toolbar.setVisibility(View.VISIBLE);
- setActionBar(toolbar);
-
- final ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
- }
-
- getProxySubscriptionManager().setLifecycle(getLifecycle());
-
- final Intent startIntent = getIntent();
- validate(startIntent);
- mCurSubscriptionId = savedInstanceState != null
- ? savedInstanceState.getInt(Settings.EXTRA_SUB_ID, SUB_ID_NULL)
- : ((startIntent != null)
- ? startIntent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL)
- : SUB_ID_NULL);
- // perform registration after mCurSubscriptionId been configured.
- registerActiveSubscriptionsListener();
-
- SubscriptionInfo subscription = getSubscriptionOrDefault(mCurSubscriptionId);
- if (subscription == null) {
- Log.d(TAG, "Invalid subId request " + mCurSubscriptionId);
- tryToFinishActivity();
- return;
- }
-
- maybeShowContactDiscoveryDialog(subscription);
-
- updateSubscriptions(subscription, null);
- }
-
- @VisibleForTesting
- ProxySubscriptionManager getProxySubscriptionManager() {
- if (mProxySubscriptionMgr == null) {
- mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(this);
- }
- return mProxySubscriptionMgr;
- }
-
- @VisibleForTesting
- void registerActiveSubscriptionsListener() {
- getProxySubscriptionManager().addActiveSubscriptionsListener(this);
- }
-
- /**
- * Implementation of ProxySubscriptionManager.OnActiveSubscriptionChangedListener
- */
- public void onChanged() {
- mPendingSubscriptionChange = false;
-
- if (mCurSubscriptionId == SUB_ID_NULL) {
- return;
- }
-
- if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
- mPendingSubscriptionChange = true;
- return;
- }
-
- SubscriptionInfo subInfo = getSubscription(mCurSubscriptionId, null);
- if (subInfo != null) {
- if (mCurSubscriptionId != subInfo.getSubscriptionId()) {
- // update based on subscription status change
- removeContactDiscoveryDialog(mCurSubscriptionId);
- updateSubscriptions(subInfo, null);
- }
- return;
- }
-
- Log.w(TAG, "subId missing: " + mCurSubscriptionId);
-
- // When UI is not the active one, avoid from destroy it immediately
- // but wait until onResume() to see if subscription back online again.
- // This is to avoid from glitch behavior of subscription which changes
- // the UI when UI is considered as in the background or only partly
- // visible.
- if (!getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
- mPendingSubscriptionChange = true;
- return;
- }
-
- // Subscription could be missing
- tryToFinishActivity();
- }
-
- protected void runSubscriptionUpdate(Runnable onUpdateRemaining) {
- SubscriptionInfo subInfo = getSubscription(mCurSubscriptionId, null);
- if (subInfo == null) {
- onUpdateRemaining.run();
- tryToFinishActivity();
- return;
- }
- if (mCurSubscriptionId != subInfo.getSubscriptionId()) {
- removeContactDiscoveryDialog(mCurSubscriptionId);
- updateSubscriptions(subInfo, null);
- }
- onUpdateRemaining.run();
- }
-
- protected void tryToFinishActivity() {
- if ((!isFinishing()) && (!isDestroyed())) {
- finish();
- }
- }
-
- @Override
- protected void onStart() {
- getProxySubscriptionManager().setLifecycle(getLifecycle());
- if (mPendingSubscriptionChange) {
- mPendingSubscriptionChange = false;
- runSubscriptionUpdate(() -> super.onStart());
- return;
- }
- super.onStart();
- }
-
- @Override
- protected void onResume() {
- if (mPendingSubscriptionChange) {
- mPendingSubscriptionChange = false;
- runSubscriptionUpdate(() -> super.onResume());
- return;
- }
- super.onResume();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (mProxySubscriptionMgr == null) {
- return;
- }
- mProxySubscriptionMgr.removeActiveSubscriptionsListener(this);
- }
-
- @Override
- protected void onSaveInstanceState(@NonNull Bundle outState) {
- super.onSaveInstanceState(outState);
- saveInstanceState(outState);
- }
-
- @VisibleForTesting
- void saveInstanceState(@NonNull Bundle outState) {
- outState.putInt(Settings.EXTRA_SUB_ID, mCurSubscriptionId);
- }
-
- private void updateTitleAndNavigation(SubscriptionInfo subscription) {
- // Set the title to the name of the subscription. If we don't have subscription info, the
- // title will just default to the label for this activity that's already specified in
- // AndroidManifest.xml.
- if (subscription != null) {
- setTitle(SubscriptionUtil.getUniqueSubscriptionDisplayName(subscription, this));
- }
- }
-
- @VisibleForTesting
- void updateSubscriptions(SubscriptionInfo subscription, Bundle savedInstanceState) {
- if (subscription == null) {
- return;
- }
- final int subscriptionIndex = subscription.getSubscriptionId();
-
- updateTitleAndNavigation(subscription);
- if (savedInstanceState == null) {
- switchFragment(subscription);
- }
-
- mCurSubscriptionId = subscriptionIndex;
- }
-
- /**
- * Select one of the subscription as the default subscription.
- * @param subAnnoList a list of {@link SubscriptionAnnotation}
- * @return ideally the {@link SubscriptionAnnotation} as expected
- */
- protected SubscriptionAnnotation defaultSubscriptionSelection(
- List<SubscriptionAnnotation> subAnnoList) {
- return (subAnnoList == null) ? null :
- subAnnoList.stream()
- .filter(SubscriptionAnnotation::isDisplayAllowed)
- .filter(SubscriptionAnnotation::isActive)
- .findFirst().orElse(null);
- }
-
- protected SubscriptionInfo getSubscriptionOrDefault(int subscriptionId) {
- return getSubscription(subscriptionId,
- (subscriptionId != SUB_ID_NULL) ? null : (
- subAnnoList -> defaultSubscriptionSelection(subAnnoList)
- ));
- }
-
- /**
- * Get the current subscription to display. First check whether intent has {@link
- * Settings#EXTRA_SUB_ID} and if so find the subscription with that id.
- * If not, select default one based on {@link Function} provided.
- *
- * @param preferredSubscriptionId preferred subscription id
- * @param selectionOfDefault when true current subscription is absent
- */
- @VisibleForTesting
- protected SubscriptionInfo getSubscription(int preferredSubscriptionId,
- Function<List<SubscriptionAnnotation>, SubscriptionAnnotation> selectionOfDefault) {
- List<SubscriptionAnnotation> subList =
- (new SelectableSubscriptions(this, true)).call();
- Log.d(TAG, "get subId=" + preferredSubscriptionId + " from " + subList);
- SubscriptionAnnotation currentSubInfo = subList.stream()
- .filter(SubscriptionAnnotation::isDisplayAllowed)
- .filter(subAnno -> (subAnno.getSubscriptionId() == preferredSubscriptionId))
- .findFirst().orElse(null);
- if ((currentSubInfo == null) && (selectionOfDefault != null)) {
- currentSubInfo = selectionOfDefault.apply(subList);
- }
- return (currentSubInfo == null) ? null : currentSubInfo.getSubInfo();
- }
-
- @VisibleForTesting
- SubscriptionInfo getSubscriptionForSubId(int subId) {
- return SubscriptionUtil.getAvailableSubscription(this,
- getProxySubscriptionManager(), subId);
- }
-
- @VisibleForTesting
- void switchFragment(SubscriptionInfo subInfo) {
- final FragmentManager fragmentManager = getSupportFragmentManager();
- final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-
- final int subId = subInfo.getSubscriptionId();
- final Intent intent = getIntent();
- final Bundle bundle = new Bundle();
- bundle.putInt(Settings.EXTRA_SUB_ID, subId);
- if (intent != null && Settings.ACTION_MMS_MESSAGE_SETTING.equals(intent.getAction())) {
- // highlight "mms_message" preference.
- bundle.putString(EXTRA_FRAGMENT_ARG_KEY, "mms_message");
- }
-
- final String fragmentTag = buildFragmentTag(subId);
- if (fragmentManager.findFragmentByTag(fragmentTag) != null) {
- Log.d(TAG, "Construct fragment: " + fragmentTag);
- }
-
- final Fragment fragment = new MobileNetworkSettings();
- fragment.setArguments(bundle);
- fragmentTransaction.replace(R.id.content_frame, fragment, fragmentTag);
- fragmentTransaction.commitAllowingStateLoss();
- }
-
- private void removeContactDiscoveryDialog(int subId) {
- ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(subId);
- if (fragment != null) {
- fragment.dismiss();
- }
- }
-
- private ContactDiscoveryDialogFragment getContactDiscoveryFragment(int subId) {
- // In the case that we are rebuilding this activity after it has been destroyed and
- // recreated, look up the dialog in the fragment manager.
- return (ContactDiscoveryDialogFragment) getSupportFragmentManager()
- .findFragmentByTag(ContactDiscoveryDialogFragment.getFragmentTag(subId));
- }
-
- private void maybeShowContactDiscoveryDialog(SubscriptionInfo info) {
- int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- CharSequence carrierName = "";
- if (info != null) {
- subId = info.getSubscriptionId();
- carrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(info, this);
- }
- // If this activity was launched using ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN, show the
- // associated dialog only if the opt-in has not been granted yet.
- boolean showOptInDialog = doesIntentContainOptInAction(getIntent())
- // has the carrier config enabled capability discovery?
- && MobileNetworkUtils.isContactDiscoveryVisible(this, subId)
- // has the user already enabled this configuration?
- && !MobileNetworkUtils.isContactDiscoveryEnabled(this, subId);
- ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(subId);
- if (showOptInDialog) {
- if (fragment == null) {
- fragment = ContactDiscoveryDialogFragment.newInstance(subId, carrierName);
- }
- // Only try to show the dialog if it has not already been added, otherwise we may
- // accidentally add it multiple times, causing multiple dialogs.
- if (!fragment.isAdded()) {
- fragment.show(getSupportFragmentManager(),
- ContactDiscoveryDialogFragment.getFragmentTag(subId));
- }
- }
- }
-
- private boolean doesIntentContainOptInAction(Intent intent) {
- String intentAction = (intent != null ? intent.getAction() : null);
- return TextUtils.equals(intentAction,
- ImsRcsManager.ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN);
- }
-
- private void validate(Intent intent) {
- // Do not allow ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN without a subscription id specified,
- // since we do not want the user to accidentally turn on capability polling for the wrong
- // subscription.
- if (doesIntentContainOptInAction(intent)) {
- if (SUB_ID_NULL == intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL)) {
- throw new IllegalArgumentException("Intent with action "
- + "SHOW_CAPABILITY_DISCOVERY_OPT_IN must also include the extra "
- + "Settings#EXTRA_SUB_ID");
- }
- }
- }
-
- @VisibleForTesting
- String buildFragmentTag(int subscriptionId) {
- return MOBILE_SETTINGS_TAG + subscriptionId;
- }
-}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index ba80a8c..f1a4018 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -23,6 +23,7 @@
import android.os.Bundle;
import android.os.UserManager;
import android.provider.Settings;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -35,10 +36,12 @@
import androidx.preference.Preference;
import com.android.settings.R;
+import com.android.settings.Settings.MobileNetworkActivity;
import com.android.settings.datausage.BillingCyclePreferenceController;
import com.android.settings.datausage.DataUsageSummaryPreferenceController;
import com.android.settings.network.ActiveSubscriptionsListener;
import com.android.settings.network.CarrierWifiTogglePreferenceController;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.telephony.cdma.CdmaSubscriptionPreferenceController;
import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceController;
import com.android.settings.network.telephony.gsm.AutoSelectPreferenceController;
@@ -115,9 +118,16 @@
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
- MobileNetworkUtils.getSearchableSubscriptionId(context));
- Log.i(LOG_TAG, "display subId: " + mSubId);
+ Intent intent = getIntent();
+ if (intent != null) {
+ mSubId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+ MobileNetworkUtils.getSearchableSubscriptionId(context));
+ Log.i(LOG_TAG, "display subId from intent: " + mSubId);
+ } else {
+ mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
+ MobileNetworkUtils.getSearchableSubscriptionId(context));
+ Log.i(LOG_TAG, "display subId from getArguments(): " + mSubId);
+ }
if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
return Arrays.asList();
@@ -131,6 +141,30 @@
public void onAttach(Context context) {
super.onAttach(context);
+ Intent intent = getIntent();
+ SubscriptionInfo info = SubscriptionUtil.getSubscriptionOrDefault(context, mSubId);
+ if (info == null) {
+ Log.d(LOG_TAG, "Invalid subId request " + mSubId);
+ return;
+ }
+
+ int oldSubId = mSubId;
+ updateSubscriptions(info);
+ // If the subscription has changed or the new intent does not contain the opt in action,
+ // remove the old discovery dialog. If the activity is being recreated, we will see
+ // onCreate -> onNewIntent, so the dialog will first be recreated for the old subscription
+ // and then removed.
+ if (!MobileNetworkActivity.doesIntentContainOptInAction(intent)) {
+ removeContactDiscoveryDialog(oldSubId);
+ }
+
+ // evaluate showing the new discovery dialog if this intent contains an action to show the
+ // opt-in.
+ if (MobileNetworkActivity.doesIntentContainOptInAction(intent)) {
+ showContactDiscoveryDialog(
+ SubscriptionUtil.getSubscriptionOrDefault(context, mSubId));
+ }
+
final DataUsageSummaryPreferenceController dataUsageSummaryPreferenceController =
use(DataUsageSummaryPreferenceController.class);
if (dataUsageSummaryPreferenceController != null) {
@@ -339,4 +373,49 @@
return context.getSystemService(UserManager.class).isAdminUser();
}
};
+
+ private ContactDiscoveryDialogFragment getContactDiscoveryFragment(int subId) {
+ // In the case that we are rebuilding this activity after it has been destroyed and
+ // recreated, look up the dialog in the fragment manager.
+ return (ContactDiscoveryDialogFragment) getChildFragmentManager()
+ .findFragmentByTag(ContactDiscoveryDialogFragment.getFragmentTag(subId));
+ }
+
+
+ private void removeContactDiscoveryDialog(int subId) {
+ ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(subId);
+ if (fragment != null) {
+ fragment.dismiss();
+ }
+ }
+
+ private void showContactDiscoveryDialog(SubscriptionInfo info) {
+ if (info == null) {
+ Log.d(LOG_TAG, "Invalid subId request " + mSubId);
+ onDestroy();
+ return;
+ }
+
+ CharSequence carrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(info,
+ getContext());
+ ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(mSubId);
+ if (fragment == null) {
+ fragment = ContactDiscoveryDialogFragment.newInstance(mSubId, carrierName);
+ }
+ // Only try to show the dialog if it has not already been added, otherwise we may
+ // accidentally add it multiple times, causing multiple dialogs.
+ if (!fragment.isAdded()) {
+ fragment.show(getChildFragmentManager(),
+ ContactDiscoveryDialogFragment.getFragmentTag(mSubId));
+ }
+ }
+
+ private void updateSubscriptions(SubscriptionInfo subscription) {
+ if (subscription == null) {
+ return;
+ }
+ final int subscriptionIndex = subscription.getSubscriptionId();
+
+ mSubId = subscriptionIndex;
+ }
}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 658f650..e2d158d 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -45,6 +45,7 @@
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
+import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -73,9 +74,11 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
+import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.utils.ThreadUtils;
@@ -1008,4 +1011,21 @@
return context.getResources().getString(resId);
}
+ public static void launchMobileNetworkSettings(Context context, SubscriptionInfo info) {
+ final int subId = info.getSubscriptionId();
+ if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ Log.d(TAG, "launchMobileNetworkSettings fail, subId is invalid");
+ return;
+ }
+
+ final Bundle extra = new Bundle();
+ extra.putInt(Settings.EXTRA_SUB_ID, subId);
+ new SubSettingLauncher(context)
+ .setTitleText(SubscriptionUtil.getUniqueSubscriptionDisplayName(info, context))
+ .setDestination(MobileNetworkSettings.class.getCanonicalName())
+ .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
+ .setArguments(extra)
+ .launch();
+ }
+
}
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index d20cc27..b26e783 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -19,6 +19,7 @@
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -102,7 +103,7 @@
@VisibleForTesting
protected void onCreateInitialization() {
mUseNewApi = enableNewAutoSelectNetworkUI(getContext());
- mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
+ mSubId = getSubId();
mPreferenceCategory = getPreferenceCategory(PREF_KEY_NETWORK_OPERATORS);
mStatusMessagePreference = new Preference(getContext());
@@ -121,7 +122,7 @@
mMetricsFeatureProvider = getMetricsFeatureProvider(getContext());
mIsAggregationEnabled = enableAggregation(getContext());
Log.d(TAG, "init: mUseNewApi:" + mUseNewApi
- + " ,mIsAggregationEnabled:" + mIsAggregationEnabled);
+ + " ,mIsAggregationEnabled:" + mIsAggregationEnabled + " ,mSubId:" + mSubId);
}
@Keep
@@ -175,6 +176,18 @@
getPreferenceScreen().setEnabled(enable);
}
+ @Keep
+ @VisibleForTesting
+ protected int getSubId() {
+ int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ Intent intent = getActivity().getIntent();
+ if (intent != null) {
+ subId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ }
+ return subId;
+ }
+
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
index 7ff0d9a..288f1ac 100644
--- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
@@ -16,12 +16,13 @@
package com.android.settings.network.telephony;
-import android.app.Activity;
import android.os.Bundle;
import android.telephony.SubscriptionManager;
+import androidx.fragment.app.FragmentActivity;
+
/** The base class for subscription action dialogs */
-public class SubscriptionActionDialogActivity extends Activity {
+public class SubscriptionActionDialogActivity extends FragmentActivity {
private static final String TAG = "SubscriptionActionDialogActivity";
// Arguments
diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
index 2f6e8a1..cc2986d 100644
--- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
@@ -23,6 +23,7 @@
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.UiccCardInfo;
import android.telephony.UiccSlotInfo;
import android.text.TextUtils;
import android.util.Log;
@@ -40,7 +41,9 @@
import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
/** This dialog activity handles both eSIM and pSIM subscriptions enabling and disabling. */
public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogActivity
@@ -55,6 +58,8 @@
private static final int DIALOG_TAG_ENABLE_SIM_CONFIRMATION = 2;
private static final int DIALOG_TAG_ENABLE_DSDS_CONFIRMATION = 3;
private static final int DIALOG_TAG_ENABLE_DSDS_REBOOT_CONFIRMATION = 4;
+ private static final int DIALOG_TAG_ENABLE_SIM_CONFIRMATION_MEP = 5;
+
// Number of SIMs for DSDS
private static final int NUM_OF_SIMS_FOR_DSDS = 2;
// Support RTL mode
@@ -85,11 +90,11 @@
private boolean mIsEsimOperation;
private TelephonyManager mTelMgr;
private boolean isRtlMode;
+ private List<SubscriptionInfo> mActiveSubInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
Intent intent = getIntent();
int subId = intent.getIntExtra(ARG_SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
mTelMgr = getSystemService(TelephonyManager.class);
@@ -107,6 +112,7 @@
return;
}
+ mActiveSubInfos = SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager);
mSubInfo = SubscriptionUtil.getSubById(mSubscriptionManager, subId);
mIsEsimOperation = mSubInfo != null && mSubInfo.isEmbedded();
mSwitchToEuiccSubscriptionSidecar =
@@ -116,6 +122,7 @@
mEnable = intent.getBooleanExtra(ARG_enable, true);
isRtlMode = getResources().getConfiguration().getLayoutDirection()
== View.LAYOUT_DIRECTION_RTL;
+ Log.i(TAG, "isMultipleEnabledProfilesSupported():" + isMultipleEnabledProfilesSupported());
if (savedInstanceState == null) {
if (mEnable) {
@@ -154,7 +161,7 @@
}
@Override
- public void onConfirm(int tag, boolean confirmed) {
+ public void onConfirm(int tag, boolean confirmed, int itemPosition) {
if (!confirmed
&& tag != DIALOG_TAG_ENABLE_DSDS_CONFIRMATION
&& tag != DIALOG_TAG_ENABLE_DSDS_REBOOT_CONFIRMATION) {
@@ -162,14 +169,16 @@
return;
}
+ SubscriptionInfo removedSubInfo = null;
switch (tag) {
case DIALOG_TAG_DISABLE_SIM_CONFIRMATION:
if (mIsEsimOperation) {
Log.i(TAG, "Disabling the eSIM profile.");
showProgressDialog(
getString(R.string.privileged_action_disable_sub_dialog_progress));
+ int port = mSubInfo != null ? mSubInfo.getPortIndex() : 0;
mSwitchToEuiccSubscriptionSidecar.run(
- SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID, port, null);
return;
}
Log.i(TAG, "Disabling the pSIM profile.");
@@ -201,6 +210,11 @@
SimActivationNotifier.setShowSimSettingsNotification(this, true);
mTelMgr.switchMultiSimConfig(NUM_OF_SIMS_FOR_DSDS);
break;
+ case DIALOG_TAG_ENABLE_SIM_CONFIRMATION_MEP:
+ if (itemPosition != -1) {
+ removedSubInfo = (mActiveSubInfos != null) ? mActiveSubInfos.get(itemPosition)
+ : null;
+ }
case DIALOG_TAG_ENABLE_SIM_CONFIRMATION:
Log.i(TAG, "User confirmed to enable the subscription.");
if (mIsEsimOperation) {
@@ -209,12 +223,15 @@
R.string.sim_action_switch_sub_dialog_progress,
SubscriptionUtil.getUniqueSubscriptionDisplayName(
mSubInfo, this)));
- mSwitchToEuiccSubscriptionSidecar.run(mSubInfo.getSubscriptionId());
+ mSwitchToEuiccSubscriptionSidecar.run(mSubInfo.getSubscriptionId(),
+ UiccSlotUtil.INVALID_PORT_ID,
+ removedSubInfo);
return;
}
showProgressDialog(
getString(R.string.sim_action_enabling_sim_without_carrier_name));
- mSwitchToRemovableSlotSidecar.run(UiccSlotUtil.INVALID_PHYSICAL_SLOT_ID);
+ mSwitchToRemovableSlotSidecar.run(UiccSlotUtil.INVALID_PHYSICAL_SLOT_ID,
+ removedSubInfo);
break;
default:
Log.e(TAG, "Unrecognized confirmation dialog tag: " + tag);
@@ -225,8 +242,7 @@
private void handleSwitchToEuiccSubscriptionSidecarStateChange() {
switch (mSwitchToEuiccSubscriptionSidecar.getState()) {
case SidecarFragment.State.SUCCESS:
- Log.i(
- TAG,
+ Log.i(TAG,
String.format(
"Successfully %s the eSIM profile.",
mEnable ? "enable" : "disable"));
@@ -235,8 +251,7 @@
finish();
break;
case SidecarFragment.State.ERROR:
- Log.i(
- TAG,
+ Log.i(TAG,
String.format(
"Failed to %s the eSIM profile.", mEnable ? "enable" : "disable"));
mSwitchToEuiccSubscriptionSidecar.reset();
@@ -290,7 +305,8 @@
if (mIsEsimOperation) {
Log.i(TAG, "DSDS enabled, start to enable profile: " + mSubInfo.getSubscriptionId());
// For eSIM operations, we simply switch to the selected eSIM profile.
- mSwitchToEuiccSubscriptionSidecar.run(mSubInfo.getSubscriptionId());
+ mSwitchToEuiccSubscriptionSidecar.run(mSubInfo.getSubscriptionId(),
+ UiccSlotUtil.INVALID_PORT_ID, null);
return;
}
@@ -305,10 +321,8 @@
mSubscriptionManager.setUiccApplicationsEnabled(mSubInfo.getSubscriptionId(), mEnable);
finish();
} else {
- Log.i(
- TAG,
- "The device does not support toggling pSIM. It is enough to just "
- + "enable the removable slot.");
+ Log.i(TAG, "The device does not support toggling pSIM. It is enough to just "
+ + "enable the removable slot.");
}
}
@@ -319,7 +333,10 @@
showEnableDsdsConfirmDialog();
return;
}
- if (!mIsEsimOperation && mTelMgr.isMultiSimEnabled()) {
+ if (!mIsEsimOperation && mTelMgr.isMultiSimEnabled()
+ && isRemovableSimEnabled()) {
+ // This case is for switching on psim when device is not multiple enable profile
+ // supported.
Log.i(TAG, "Toggle on pSIM, no dialog displayed.");
handleTogglePsimAction();
finish();
@@ -372,27 +389,55 @@
}
private void showEnableSimConfirmDialog() {
- List<SubscriptionInfo> activeSubs =
- SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager);
- SubscriptionInfo activeSub = activeSubs.isEmpty() ? null : activeSubs.get(0);
- if (activeSub == null) {
+ if (mActiveSubInfos == null || mActiveSubInfos.isEmpty()) {
Log.i(TAG, "No active subscriptions available.");
showNonSwitchSimConfirmDialog();
return;
}
- Log.i(TAG, "Found active subscription.");
- boolean isBetweenEsim = mIsEsimOperation && activeSub.isEmbedded();
- if (mTelMgr.isMultiSimEnabled() && !isBetweenEsim) {
+ Log.i(TAG, "mActiveSubInfos:" + mActiveSubInfos);
+
+ boolean isSwitchingBetweenEsims = mIsEsimOperation
+ && mActiveSubInfos.stream().anyMatch(activeSubInfo -> activeSubInfo.isEmbedded());
+ boolean isMultiSimEnabled = mTelMgr.isMultiSimEnabled();
+ if (isMultiSimEnabled
+ && !isMultipleEnabledProfilesSupported()
+ && !isSwitchingBetweenEsims) {
+ // Showing the "no switch dialog" for below cases.
+ // DSDS mode + no MEP +
+ // (there is the active psim -> esim switch on => active (psim + esim))
showNonSwitchSimConfirmDialog();
return;
}
+ if (isMultiSimEnabled && isMultipleEnabledProfilesSupported()) {
+ if (mActiveSubInfos.size() < NUM_OF_SIMS_FOR_DSDS) {
+ // The sim can add into device directly, so showing the "no switch dialog".
+ // DSDS + MEP + (active sim < NUM_OF_SIMS_FOR_DSDS)
+ showNonSwitchSimConfirmDialog();
+ } else {
+ // The all of slots have sim, it needs to show the "MEP switch dialog".
+ // DSDS + MEP + two active sims
+ showMepSwitchSimConfirmDialog();
+ }
+ return;
+ }
+
+ // Showing the "switch dialog" for below cases.
+ // case1: SS mode + psim switch on from esim.
+ // case2: SS mode + esim switch from psim.
+ // case3: DSDS mode + No MEP + esim switch on from another esim.
+ SubscriptionInfo activeSub =
+ (isMultiSimEnabled && isSwitchingBetweenEsims)
+ ? mActiveSubInfos.stream()
+ .filter(activeSubInfo -> activeSubInfo.isEmbedded())
+ .findFirst().get()
+ : mActiveSubInfos.get(0);
ConfirmDialogFragment.show(
this,
ConfirmDialogFragment.OnConfirmListener.class,
DIALOG_TAG_ENABLE_SIM_CONFIRMATION,
getSwitchSubscriptionTitle(),
- getSwitchDialogBodyMsg(activeSub, isBetweenEsim),
+ getSwitchDialogBodyMsg(activeSub, isSwitchingBetweenEsims),
getSwitchDialogPosBtnText(),
getString(R.string.sim_action_cancel));
}
@@ -408,6 +453,35 @@
getString(R.string.sim_action_cancel));
}
+ private void showMepSwitchSimConfirmDialog() {
+ Log.i(TAG, "showMepSwitchSimConfirmDialog");
+ final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
+ mSubInfo, this);
+ String title = getString(R.string.sim_action_switch_sub_dialog_mep_title, displayName);
+ final StringBuilder switchDialogMsg = new StringBuilder();
+ switchDialogMsg.append(
+ getString(R.string.sim_action_switch_sub_dialog_mep_text, displayName));
+ if (isRtlMode) {
+ /* There are two lines of message in the dialog, and the RTL symbols must be added
+ * before and after each sentence, so use the line break symbol to find the position.
+ * (Each message are all with two line break symbols)
+ */
+ switchDialogMsg.insert(0, RTL_MARK)
+ .insert(switchDialogMsg.indexOf(LINE_BREAK) - LINE_BREAK_OFFSET_ONE, RTL_MARK)
+ .insert(switchDialogMsg.indexOf(LINE_BREAK) + LINE_BREAK_OFFSET_TWO, RTL_MARK)
+ .insert(switchDialogMsg.length(), RTL_MARK);
+ }
+ ConfirmDialogFragment.show(
+ this,
+ ConfirmDialogFragment.OnConfirmListener.class,
+ DIALOG_TAG_ENABLE_SIM_CONFIRMATION_MEP,
+ title,
+ switchDialogMsg.toString(),
+ null,
+ null,
+ getSwitchDialogBodyList());
+ }
+
private String getSwitchDialogPosBtnText() {
return mIsEsimOperation
? getString(
@@ -468,6 +542,20 @@
return switchDialogMsg.toString();
}
+ private ArrayList<String> getSwitchDialogBodyList() {
+ ArrayList<String> list = new ArrayList<String>(mActiveSubInfos.stream()
+ .map(subInfo -> {
+ CharSequence subInfoName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
+ subInfo, this);
+ return getString(
+ R.string.sim_action_switch_sub_dialog_carrier_list_item_for_turning_off,
+ subInfoName);
+ })
+ .collect(Collectors.toList()));
+ list.add(getString(R.string.sim_action_cancel));
+ return list;
+ }
+
private boolean isDsdsConditionSatisfied() {
if (mTelMgr.isMultiSimEnabled()) {
Log.i(TAG, "DSDS is already enabled. Condition not satisfied.");
@@ -477,17 +565,7 @@
Log.i(TAG, "Hardware does not support DSDS.");
return false;
}
- ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(mTelMgr);
- boolean isRemovableSimEnabled =
- slotInfos.stream()
- .anyMatch(
- slot ->
- slot != null
- && slot.isRemovable()
- && slot.getPorts().stream().anyMatch(
- port -> port.isActive())
- && slot.getCardStateInfo()
- == UiccSlotInfo.CARD_STATE_INFO_PRESENT);
+ boolean isRemovableSimEnabled = isRemovableSimEnabled();
if (mIsEsimOperation && isRemovableSimEnabled) {
Log.i(TAG, "eSIM operation and removable SIM is enabled. DSDS condition satisfied.");
return true;
@@ -496,13 +574,36 @@
SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager).stream()
.anyMatch(SubscriptionInfo::isEmbedded);
if (!mIsEsimOperation && isEsimProfileEnabled) {
- Log.i(
- TAG,
- "Removable SIM operation and eSIM profile is enabled. DSDS condition"
- + " satisfied.");
+ Log.i(TAG, "Removable SIM operation and eSIM profile is enabled. DSDS condition"
+ + " satisfied.");
return true;
}
Log.i(TAG, "DSDS condition not satisfied.");
return false;
}
+
+ private boolean isRemovableSimEnabled() {
+ ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(mTelMgr);
+ boolean isRemovableSimEnabled =
+ slotInfos.stream()
+ .anyMatch(
+ slot -> slot != null
+ && slot.isRemovable()
+ && slot.getPorts().stream().anyMatch(
+ port -> port.isActive())
+ && slot.getCardStateInfo()
+ == UiccSlotInfo.CARD_STATE_INFO_PRESENT);
+ Log.i(TAG, "isRemovableSimEnabled: " + isRemovableSimEnabled);
+ return isRemovableSimEnabled;
+ }
+
+ private boolean isMultipleEnabledProfilesSupported() {
+ List<UiccCardInfo> cardInfos = mTelMgr.getUiccCardsInfo();
+ if (cardInfos == null) {
+ Log.w(TAG, "UICC cards info list is empty.");
+ return false;
+ }
+ return cardInfos.stream().anyMatch(
+ cardInfo -> cardInfo.isMultipleEnabledProfilesSupported());
+ }
}
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 997235c..028c4e7 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -20,9 +20,8 @@
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
import android.app.ProgressDialog;
-import android.app.settings.SettingsEnums;
import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
import android.os.Handler;
import android.os.HandlerExecutor;
import android.os.Looper;
@@ -43,10 +42,8 @@
import androidx.preference.SwitchPreference;
import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.AllowedNetworkTypesListener;
import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
import com.android.settings.network.telephony.TelephonyTogglePreferenceController;
import com.android.settingslib.utils.ThreadUtils;
@@ -151,25 +148,26 @@
public boolean setChecked(boolean isChecked) {
if (isChecked) {
setAutomaticSelectionMode();
- return false;
} else {
- final Bundle bundle = new Bundle();
- bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
- new SubSettingLauncher(mContext)
- .setDestination(NetworkSelectSettings.class.getName())
- .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
- .setTitleRes(R.string.choose_network_title)
- .setArguments(bundle)
- .launch();
- return false;
+ if (mSwitchPreference != null) {
+ Intent intent = new Intent();
+ intent.setClassName("com.android.settings",
+ "com.android.settings.Settings$NetworkSelectActivity");
+ intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+ mSwitchPreference.setIntent(intent);
+ }
}
+ return false;
}
@VisibleForTesting
Future setAutomaticSelectionMode() {
final long startMillis = SystemClock.elapsedRealtime();
showAutoSelectProgressBar();
- mSwitchPreference.setEnabled(false);
+ if (mSwitchPreference != null) {
+ mSwitchPreference.setIntent(null);
+ mSwitchPreference.setEnabled(false);
+ }
return ThreadUtils.postOnBackgroundThread(() -> {
// set network selection mode in background
mTelephonyManager.setNetworkSelectionModeAutomatic();
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 4047009..54f5ce1 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -19,14 +19,12 @@
import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
-import android.app.settings.SettingsEnums;
import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
import android.provider.Settings;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import android.text.TextUtils;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
@@ -35,10 +33,8 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.AllowedNetworkTypesListener;
import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
import com.android.settings.network.telephony.TelephonyBasePreferenceController;
/**
@@ -102,6 +98,12 @@
super.updateState(preference);
preference.setEnabled(mTelephonyManager.getNetworkSelectionMode()
!= TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
+
+ Intent intent = new Intent();
+ intent.setClassName("com.android.settings",
+ "com.android.settings.Settings$NetworkSelectActivity");
+ intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+ preference.setIntent(intent);
}
@Override
@@ -114,23 +116,6 @@
}
}
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
- final Bundle bundle = new Bundle();
- bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
- new SubSettingLauncher(mContext)
- .setDestination(NetworkSelectSettings.class.getName())
- .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
- .setTitleRes(R.string.choose_network_title)
- .setArguments(bundle)
- .launch();
- return true;
- }
-
- return false;
- }
-
public OpenNetworkSelectPagePreferenceController init(Lifecycle lifecycle, int subId) {
mSubId = subId;
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 1af8867..cae3cae 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -54,6 +54,7 @@
import androidx.annotation.VisibleForTesting;
+import com.android.internal.util.CollectionUtils;
import com.android.settingslib.R;
import com.android.settingslib.Utils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -159,7 +160,9 @@
StringBuilder sb = new StringBuilder();
try {
- List<String> associatedMacAddrs = cdm.getAssociations(pkg, userId);
+ List<String> associatedMacAddrs = CollectionUtils.mapNotNull(
+ cdm.getAssociations(pkg, userId),
+ a -> a.isSelfManaged() ? null : a.getDeviceMacAddress().toString());
if (associatedMacAddrs != null) {
for (String assocMac : associatedMacAddrs) {
final Collection<CachedBluetoothDevice> cachedDevices =
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 85623b8..ab53a3f 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -256,8 +256,6 @@
new DockingSoundPreferenceController(context, fragment, lifecycle);
final TouchSoundPreferenceController touchSoundPreferenceController =
new TouchSoundPreferenceController(context, fragment, lifecycle);
- final VibrateOnTouchPreferenceController vibrateOnTouchPreferenceController =
- new VibrateOnTouchPreferenceController(context, fragment, lifecycle);
final DockAudioMediaPreferenceController dockAudioMediaPreferenceController =
new DockAudioMediaPreferenceController(context, fragment, lifecycle);
final BootSoundPreferenceController bootSoundPreferenceController =
@@ -270,7 +268,6 @@
controllers.add(chargingSoundPreferenceController);
controllers.add(dockingSoundPreferenceController);
controllers.add(touchSoundPreferenceController);
- controllers.add(vibrateOnTouchPreferenceController);
controllers.add(dockAudioMediaPreferenceController);
controllers.add(bootSoundPreferenceController);
controllers.add(emergencyTonePreferenceController);
@@ -281,7 +278,6 @@
chargingSoundPreferenceController,
dockingSoundPreferenceController,
touchSoundPreferenceController,
- vibrateOnTouchPreferenceController,
dockAudioMediaPreferenceController,
bootSoundPreferenceController,
emergencyTonePreferenceController)));
diff --git a/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java b/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java
deleted file mode 100644
index 0ae4c03..0000000
--- a/src/com/android/settings/notification/VibrateOnTouchPreferenceController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
-
-import android.content.Context;
-import android.os.Vibrator;
-import android.provider.Settings.System;
-
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-public class VibrateOnTouchPreferenceController extends SettingPrefController {
-
- private static final String KEY_VIBRATE_ON_TOUCH = "vibrate_on_touch";
-
- public VibrateOnTouchPreferenceController(Context context, SettingsPreferenceFragment parent,
- Lifecycle lifecycle) {
- super(context, parent, lifecycle);
- mPreference = new SettingPref(
- TYPE_SYSTEM, KEY_VIBRATE_ON_TOUCH, System.HAPTIC_FEEDBACK_ENABLED, 0) {
- @Override
- public boolean isApplicable(Context context) {
- return hasHaptic(context);
- }
- };
-
- }
-
- private static boolean hasHaptic(Context context) {
- final Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
- return vibrator != null && vibrator.hasVibrator();
- }
-
-}
diff --git a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
index 170c699..5ce8b48 100644
--- a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
@@ -59,6 +59,7 @@
@Override
public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
mContext = getActivity();
final Intent intent = getActivity().getIntent();
@@ -81,7 +82,6 @@
return;
}
- super.onCreate(icicle);
mCustomBehaviorPreference = getPreferenceScreen().findPreference(CUSTOM_BEHAVIOR_KEY);
mCustomBehaviorPreference.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index c033625..a2f9922 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -268,9 +268,7 @@
R.string.lockpassword_choose_your_pin_header_for_fingerprint,
R.string.lockpassword_choose_your_pin_header_for_face,
R.string.lockpassword_choose_your_pin_header_for_biometrics,
- R.string.lockpassword_choose_password_description,
R.string.lock_settings_picker_biometrics_added_security_message,
- R.string.lockpassword_choose_pin_description,
R.string.lock_settings_picker_biometrics_added_security_message,
R.string.next_label),
@@ -287,8 +285,6 @@
R.string.lockpassword_confirm_your_pin_header,
0,
0,
- 0,
- 0,
R.string.lockpassword_confirm_label),
ConfirmWrong(
@@ -304,8 +300,6 @@
R.string.lockpassword_confirm_pins_dont_match,
0,
0,
- 0,
- 0,
R.string.lockpassword_confirm_label);
Stage(int hintInAlpha,
@@ -318,9 +312,7 @@
int hintInNumericForFingerprint,
int hintInNumericForFace,
int hintInNumericForBiometrics,
- int messageInAlpha,
int messageInAlphaForBiometrics,
- int messageInNumeric,
int messageInNumericForBiometrics,
int nextButtonText) {
@@ -336,10 +328,7 @@
this.numericHintForFace = hintInNumericForFace;
this.numericHintForBiometrics = hintInNumericForBiometrics;
- this.alphaMessage = messageInAlpha;
this.alphaMessageForBiometrics = messageInAlphaForBiometrics;
-
- this.numericMessage = messageInNumeric;
this.numericMessageForBiometrics = messageInNumericForBiometrics;
this.buttonText = nextButtonText;
@@ -365,11 +354,9 @@
public final int numericHintForBiometrics;
// Password description
- public final int alphaMessage;
public final int alphaMessageForBiometrics;
// PIN description
- public final int numericMessage;
public final int numericMessageForBiometrics;
public final int buttonText;
@@ -407,7 +394,7 @@
case TYPE_NONE:
default:
- return isAlpha ? alphaMessage : numericMessage;
+ return 0;
}
}
}
@@ -869,12 +856,17 @@
setNextEnabled(canInput && length >= LockPatternUtils.MIN_LOCK_PASSWORD_SIZE);
mSkipOrClearButton.setVisibility(toVisibility(canInput && length > 0));
}
- int message = mUiStage.getMessage(mIsAlphaMode, getStageType());
- if (message != 0) {
- mMessage.setVisibility(View.VISIBLE);
- mMessage.setText(message);
+ final int stage = getStageType();
+ if (getStageType() != Stage.TYPE_NONE) {
+ int message = mUiStage.getMessage(mIsAlphaMode, stage);
+ if (message != 0) {
+ mMessage.setVisibility(View.VISIBLE);
+ mMessage.setText(message);
+ } else {
+ mMessage.setVisibility(View.INVISIBLE);
+ }
} else {
- mMessage.setVisibility(View.INVISIBLE);
+ mMessage.setVisibility(View.GONE);
}
setNextText(mUiStage.buttonText);
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 016906a..3e7622c 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -363,54 +363,49 @@
Introduction(
R.string.lock_settings_picker_biometrics_added_security_message,
- R.string.lockpattern_choose_pattern_description,
R.string.lockpattern_recording_intro_header,
LeftButtonMode.Gone, RightButtonMode.ContinueDisabled,
ID_EMPTY_MESSAGE, true),
HelpScreen(
- ID_EMPTY_MESSAGE, ID_EMPTY_MESSAGE, R.string.lockpattern_settings_help_how_to_record,
+ ID_EMPTY_MESSAGE, R.string.lockpattern_settings_help_how_to_record,
LeftButtonMode.Gone, RightButtonMode.Ok, ID_EMPTY_MESSAGE, false),
ChoiceTooShort(
R.string.lock_settings_picker_biometrics_added_security_message,
- R.string.lockpattern_choose_pattern_description,
R.string.lockpattern_recording_incorrect_too_short,
LeftButtonMode.Retry, RightButtonMode.ContinueDisabled,
ID_EMPTY_MESSAGE, true),
FirstChoiceValid(
R.string.lock_settings_picker_biometrics_added_security_message,
- R.string.lockpattern_choose_pattern_description,
R.string.lockpattern_pattern_entered_header,
LeftButtonMode.Retry, RightButtonMode.Continue, ID_EMPTY_MESSAGE, false),
NeedToConfirm(
- ID_EMPTY_MESSAGE, ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_confirm,
+ ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_confirm,
LeftButtonMode.Gone, RightButtonMode.ConfirmDisabled,
ID_EMPTY_MESSAGE, true),
ConfirmWrong(
- ID_EMPTY_MESSAGE, ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_unlock_wrong,
+ ID_EMPTY_MESSAGE, R.string.lockpattern_need_to_unlock_wrong,
LeftButtonMode.Gone, RightButtonMode.ConfirmDisabled,
ID_EMPTY_MESSAGE, true),
ChoiceConfirmed(
- ID_EMPTY_MESSAGE, ID_EMPTY_MESSAGE, R.string.lockpattern_pattern_confirmed_header,
+ ID_EMPTY_MESSAGE, R.string.lockpattern_pattern_confirmed_header,
LeftButtonMode.Gone, RightButtonMode.Confirm, ID_EMPTY_MESSAGE, false);
/**
* @param messageForBiometrics The message displayed at the top, above header for
* fingerprint flow.
- * @param message The message displayed at the top.
* @param headerMessage The message displayed at the top.
* @param leftMode The mode of the left button.
* @param rightMode The mode of the right button.
* @param footerMessage The footer message.
* @param patternEnabled Whether the pattern widget is enabled.
*/
- Stage(int messageForBiometrics, int message, int headerMessage,
+ Stage(int messageForBiometrics, int headerMessage,
LeftButtonMode leftMode,
RightButtonMode rightMode,
int footerMessage, boolean patternEnabled) {
this.headerMessage = headerMessage;
this.messageForBiometrics = messageForBiometrics;
- this.message = message;
this.leftMode = leftMode;
this.rightMode = rightMode;
this.footerMessage = footerMessage;
@@ -419,7 +414,6 @@
final int headerMessage;
final int messageForBiometrics;
- final int message;
final LeftButtonMode leftMode;
final RightButtonMode rightMode;
final int footerMessage;
@@ -735,11 +729,14 @@
}
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
final boolean forAnyBiometric = mForFingerprint || mForFace || mForBiometrics;
- int message = forAnyBiometric ? stage.messageForBiometrics : stage.message;
- if (message == ID_EMPTY_MESSAGE) {
- layout.setDescriptionText("");
+ if (forAnyBiometric) {
+ if (stage.messageForBiometrics == ID_EMPTY_MESSAGE) {
+ layout.setDescriptionText("");
+ } else {
+ layout.setDescriptionText(stage.messageForBiometrics);
+ }
} else {
- layout.setDescriptionText(message);
+ layout.getDescriptionTextView().setVisibility(View.GONE);
}
if (stage.footerMessage == ID_EMPTY_MESSAGE) {
mFooterText.setText("");
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index 03e83a4..22d87a5 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -108,6 +108,10 @@
if (errorCode == BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED
|| errorCode == BiometricPrompt.BIOMETRIC_ERROR_CANCELED) {
finish();
+ } else if (mUserManager.getUserInfo(mUserId) == null) {
+ // This can happen when profile gets wiped due to too many failed auth attempts.
+ Log.i(TAG, "Finishing, user no longer valid: " + mUserId);
+ finish();
} else {
// All other errors go to some version of CC
showConfirmCredentials();
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
index a60fab9..3440071 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
@@ -152,6 +152,7 @@
mForgotButton.setOnClickListener(v -> {
final Intent intent = new Intent();
intent.setClassName(SETTINGS_PACKAGE_NAME, ForgotPasswordActivity.class.getName());
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
getActivity().startActivity(intent);
getActivity().finish();
diff --git a/src/com/android/settings/password/OWNERS b/src/com/android/settings/password/OWNERS
index 636800f..3b2013b 100644
--- a/src/com/android/settings/password/OWNERS
+++ b/src/com/android/settings/password/OWNERS
@@ -1,5 +1,6 @@
# Default reviewers for this and subdirectories.
curtislb@google.com
+graciecheng@google.com
ilyamaty@google.com
jaggies@google.com
jbolinger@google.com
@@ -8,4 +9,4 @@
paulcrowley@google.com
rubinxu@google.com
-# Emergency approvers in case the above are not available
\ No newline at end of file
+# Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 70cd6f2..7151c6d 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -142,14 +142,8 @@
mLeftButtonIsSkip = false;
}
- // Show generic pattern message when pattern lock screen launch in Setup wizard flow
- // before fingerprint and face setup.
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
- if (stage.message == ID_EMPTY_MESSAGE) {
- layout.setDescriptionText("");
- } else {
- layout.setDescriptionText(stage.message);
- }
+ layout.setDescriptionText("");
}
@Override
diff --git a/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceController.java b/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceController.java
new file mode 100644
index 0000000..dcc68ff
--- /dev/null
+++ b/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceController.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.privacy;
+
+import android.annotation.NonNull;
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.safetycenter.SafetyCenterStatus;
+
+/** The preference controller for the top level privacy tile. */
+public class TopLevelPrivacyEntryPreferenceController extends BasePreferenceController {
+
+ public TopLevelPrivacyEntryPreferenceController(@NonNull Context context, @NonNull String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!SafetyCenterStatus.isEnabled()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+}
diff --git a/src/com/android/settings/safetycenter/SafetyCenterStatus.java b/src/com/android/settings/safetycenter/SafetyCenterStatus.java
new file mode 100644
index 0000000..d96bb32
--- /dev/null
+++ b/src/com/android/settings/safetycenter/SafetyCenterStatus.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.safetycenter;
+
+import android.provider.DeviceConfig;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/** Knows whether safety center is enabled or disabled. */
+public class SafetyCenterStatus {
+
+ /** Whether SafetyCenter page is enabled. */
+ @VisibleForTesting
+ public static final String SAFETY_CENTER_IS_ENABLED = "safety_center_is_enabled";
+
+ /** Returns true is SafetyCenter page is enabled, false otherwise. */
+ public static boolean isEnabled() {
+ // TODO(b/208625216): use SafetyManager API instead
+ return DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_PRIVACY, SAFETY_CENTER_IS_ENABLED, false);
+ }
+}
diff --git a/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceController.java b/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceController.java
new file mode 100644
index 0000000..b3b49b0
--- /dev/null
+++ b/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceController.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.safetycenter;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Controller for the SafetyCenter entry in top level Settings. */
+public class TopLevelSafetyCenterEntryPreferenceController extends BasePreferenceController {
+
+ private static final String TAG = "TopLevelSafetyCenterEntryPreferenceController";
+
+ public TopLevelSafetyCenterEntryPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (SafetyCenterStatus.isEnabled()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+ return super.handlePreferenceTreeClick(preference);
+ }
+
+ try {
+ mContext.startActivity(new Intent(Intent.ACTION_SAFETY_CENTER));
+ } catch (ActivityNotFoundException e) {
+ Log.e(TAG, "Unable to open safety center", e);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
index f9cbc36..8b041b6 100644
--- a/src/com/android/settings/search/SearchResultTrampoline.java
+++ b/src/com/android/settings/search/SearchResultTrampoline.java
@@ -109,7 +109,8 @@
final SettingsHomepageActivity homeActivity =
((SettingsApplication) getApplicationContext()).getHomeActivity();
if (homeActivity != null) {
- homeActivity.getMainFragment().setHighlightMenuKey(highlightMenuKey);
+ homeActivity.getMainFragment().setHighlightMenuKey(highlightMenuKey,
+ /* scrollNeeded= */ true);
}
} else {
// Two-pane case
diff --git a/src/com/android/settings/security/InstallCaCertificateWarning.java b/src/com/android/settings/security/InstallCaCertificateWarning.java
index 3854875..139bc1c 100644
--- a/src/com/android/settings/security/InstallCaCertificateWarning.java
+++ b/src/com/android/settings/security/InstallCaCertificateWarning.java
@@ -16,6 +16,8 @@
package com.android.settings.security;
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
import android.annotation.Nullable;
import android.app.Activity;
import android.content.Intent;
@@ -45,6 +47,8 @@
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
ThemeHelper.trySetDynamicColor(this);
setContentView(R.layout.ca_certificate_warning_dialog);
+ getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+
final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
layout.setHeaderText(R.string.ca_certificate_warning_title);
@@ -57,6 +61,7 @@
.setTheme(R.style.SudGlifButton_Secondary)
.build()
);
+ mixin.getSecondaryButtonView().setFilterTouchesWhenObscured(true);
mixin.setPrimaryButton(
new FooterButton.Builder(this)
@@ -66,6 +71,7 @@
.setTheme(R.style.SudGlifButton_Primary)
.build()
);
+ mixin.getPrimaryButtonView().setFilterTouchesWhenObscured(true);
}
private View.OnClickListener installCaCertificate() {
diff --git a/src/com/android/settings/security/TopLevelSecurityEntryPreferenceController.java b/src/com/android/settings/security/TopLevelSecurityEntryPreferenceController.java
index 964482e..2d98606 100644
--- a/src/com/android/settings/security/TopLevelSecurityEntryPreferenceController.java
+++ b/src/com/android/settings/security/TopLevelSecurityEntryPreferenceController.java
@@ -24,6 +24,7 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.safetycenter.SafetyCenterStatus;
public class TopLevelSecurityEntryPreferenceController extends BasePreferenceController {
@@ -37,7 +38,10 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ if (!SafetyCenterStatus.isEnabled()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/sim/DsdsDialogActivity.java b/src/com/android/settings/sim/DsdsDialogActivity.java
index 62a6995..7d9a43b 100644
--- a/src/com/android/settings/sim/DsdsDialogActivity.java
+++ b/src/com/android/settings/sim/DsdsDialogActivity.java
@@ -85,7 +85,7 @@
}
@Override
- public void onConfirm(int tag, boolean confirmed) {
+ public void onConfirm(int tag, boolean confirmed, int itemPosition) {
if (!confirmed) {
Log.i(TAG, "User cancel the dialog to enable DSDS.");
startChooseSimActivity();
diff --git a/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java
new file mode 100644
index 0000000..f5c2406
--- /dev/null
+++ b/src/com/android/settings/sim/SelectSpecificDataSimDialogFragment.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.sim;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
+
+import com.android.settings.R;
+import com.android.settings.network.SubscriptionUtil;
+
+import java.util.List;
+
+/**
+ * Presents a dialog asking the user if they want to switch the data to another sim
+ */
+public class SelectSpecificDataSimDialogFragment extends SimDialogFragment implements
+ DialogInterface.OnClickListener {
+ private static final String TAG = "PreferredSimDialogFrag";
+
+ private SubscriptionInfo mSubscriptionInfo;
+
+ /**
+ * @return the dialog fragment.
+ */
+ public static SelectSpecificDataSimDialogFragment newInstance() {
+ final SelectSpecificDataSimDialogFragment
+ fragment = new SelectSpecificDataSimDialogFragment();
+ final Bundle args = initArguments(SimDialogActivity.DATA_PICK,
+ R.string.select_specific_sim_for_data_title);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ final AlertDialog dialog = new AlertDialog.Builder(getContext())
+ .setNegativeButton(R.string.sim_action_no_thanks, null)
+ .create();
+ updateDialog(dialog);
+ return dialog;
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int buttonClicked) {
+ if (buttonClicked != DialogInterface.BUTTON_POSITIVE) {
+ return;
+ }
+ final SimDialogActivity activity = (SimDialogActivity) getActivity();
+ final SubscriptionInfo info = getTargetSubscriptionInfo();
+ if (info != null) {
+ activity.onSubscriptionSelected(getDialogType(), info.getSubscriptionId());
+ }
+ }
+
+ private SubscriptionInfo getNonDefaultDataSubscriptionInfo(SubscriptionInfo dds) {
+ List<SubscriptionInfo> subInfos = getSubscriptionManager().getActiveSubscriptionInfoList();
+ if (subInfos == null || dds == null) {
+ return null;
+ }
+ return subInfos.stream().filter(subinfo -> subinfo != dds).findFirst().orElse(null);
+ }
+
+ private SubscriptionInfo getDefaultDataSubId() {
+ return getSubscriptionManager().getDefaultDataSubscriptionInfo();
+ }
+
+ private void updateDialog(AlertDialog dialog) {
+ Log.d(TAG, "Dialog updated, dismiss status: " + mWasDismissed);
+ if (mWasDismissed) {
+ return;
+ }
+
+ SubscriptionInfo activeSubInfo = getDefaultDataSubId();
+ SubscriptionInfo newSubInfo = getNonDefaultDataSubscriptionInfo(activeSubInfo);
+
+ if (newSubInfo == null || activeSubInfo == null) {
+ dismiss();
+ return;
+ }
+
+ setTargetSubscriptionInfo(newSubInfo);
+
+ CharSequence newDataCarrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
+ newSubInfo, getContext());
+ CharSequence currentDataCarrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
+ activeSubInfo, getContext());
+
+ String positive = getContext().getString(
+ R.string.select_specific_sim_for_data_button, newDataCarrierName);
+ String message = getContext().getString(R.string.select_specific_sim_for_data_msg,
+ newDataCarrierName, currentDataCarrierName);
+
+ View content = LayoutInflater.from(getContext()).inflate(
+ R.layout.sim_confirm_dialog_multiple_enabled_profiles_supported, null);
+ TextView dialogMessage = content.findViewById(R.id.msg);
+ if (!TextUtils.isEmpty(message) && dialogMessage != null) {
+ dialogMessage.setText(message);
+ }
+
+ final ListView lvItems = content.findViewById(R.id.carrier_list);
+ if (lvItems != null) {
+ lvItems.setVisibility(View.GONE);
+ }
+ final LinearLayout infoOutline = content.findViewById(R.id.info_outline_layout);
+ if (infoOutline != null) {
+ infoOutline.setVisibility(View.GONE);
+ }
+ dialog.setView(content);
+
+ View titleView = LayoutInflater.from(getContext()).inflate(
+ R.layout.sim_confirm_dialog_title_multiple_enabled_profiles_supported, null);
+ TextView titleTextView = titleView.findViewById(R.id.title);
+ titleTextView.setText(getContext().getString(getTitleResId(), newDataCarrierName));
+
+ dialog.setCustomTitle(titleTextView);
+ dialog.setButton(AlertDialog.BUTTON_POSITIVE, positive, this);
+ }
+
+ private void setTargetSubscriptionInfo(SubscriptionInfo subInfo) {
+ mSubscriptionInfo = subInfo;
+ }
+
+ private SubscriptionInfo getTargetSubscriptionInfo() {
+ return mSubscriptionInfo;
+ }
+
+ @Override
+ public void updateDialog() {
+ updateDialog((AlertDialog) getDialog());
+ }
+
+ @VisibleForTesting
+ protected SubscriptionManager getSubscriptionManager() {
+ return getContext().getSystemService(SubscriptionManager.class);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.DIALOG_PREFERRED_SIM_PICKER;
+ }
+}
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index e5457ae..1125e1f 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -95,15 +95,16 @@
private SimDialogFragment createFragment(int dialogType) {
switch (dialogType) {
case DATA_PICK:
- return SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
- false /* includeAskEveryTime */);
+ return getDataPickDialogFramgent();
case CALLS_PICK:
return CallsSimListDialogFragment.newInstance(dialogType,
R.string.select_sim_for_calls,
- true /* includeAskEveryTime */);
+ true /* includeAskEveryTime */,
+ false /* isCancelItemShowed */);
case SMS_PICK:
return SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_sms,
- true /* includeAskEveryTime */);
+ true /* includeAskEveryTime */,
+ false /* isCancelItemShowed */);
case PREFERRED_PICK:
if (!getIntent().hasExtra(PREFERRED_SIM)) {
throw new IllegalArgumentException("Missing required extra " + PREFERRED_SIM);
@@ -111,12 +112,23 @@
return PreferredSimDialogFragment.newInstance();
case SMS_PICK_FOR_MESSAGE:
return SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_sms,
- false /* includeAskEveryTime */);
+ false /* includeAskEveryTime */,
+ false /* isCancelItemShowed */);
default:
throw new IllegalArgumentException("Invalid dialog type " + dialogType + " sent.");
}
}
+ private SimDialogFragment getDataPickDialogFramgent() {
+ if (SubscriptionManager.getDefaultDataSubscriptionId()
+ == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ return SimListDialogFragment.newInstance(DATA_PICK, R.string.select_sim_for_data,
+ false /* includeAskEveryTime */,
+ true /* isCancelItemShowed */);
+ }
+ return SelectSpecificDataSimDialogFragment.newInstance();
+ }
+
public void onSubscriptionSelected(int dialogType, int subId) {
if (getSupportFragmentManager().findFragmentByTag(Integer.toString(dialogType)) == null) {
Log.w(TAG, "onSubscriptionSelected ignored because stored fragment was null");
@@ -160,8 +172,10 @@
final TelephonyManager telephonyManager = getSystemService(
TelephonyManager.class).createForSubscriptionId(subId);
subscriptionManager.setDefaultDataSubId(subId);
- telephonyManager.setDataEnabled(true);
- Toast.makeText(this, R.string.data_switch_started, Toast.LENGTH_LONG).show();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ telephonyManager.setDataEnabled(true);
+ Toast.makeText(this, R.string.data_switch_started, Toast.LENGTH_LONG).show();
+ }
}
private void setDefaultCallsSubId(final int subId) {
diff --git a/src/com/android/settings/sim/SimListDialogFragment.java b/src/com/android/settings/sim/SimListDialogFragment.java
index 2681d7b..629a087 100644
--- a/src/com/android/settings/sim/SimListDialogFragment.java
+++ b/src/com/android/settings/sim/SimListDialogFragment.java
@@ -29,7 +29,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
-import android.widget.ImageView;
+import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -38,7 +38,6 @@
import androidx.appcompat.app.AlertDialog;
import com.android.settings.R;
-import com.android.settings.Utils;
import com.android.settings.network.SubscriptionUtil;
import java.util.ArrayList;
@@ -52,16 +51,19 @@
DialogInterface.OnClickListener {
private static final String TAG = "SimListDialogFragment";
protected static final String KEY_INCLUDE_ASK_EVERY_TIME = "include_ask_every_time";
+ protected static final String KEY_SHOW_CANCEL_ITEM = "show_cancel_item";
+ private static final int LIST_VIEW_DIVIDER_LINE_WEIGHT = 2;
protected SelectSubscriptionAdapter mAdapter;
@VisibleForTesting
List<SubscriptionInfo> mSubscriptions;
public static SimListDialogFragment newInstance(int dialogType, int titleResId,
- boolean includeAskEveryTime) {
+ boolean includeAskEveryTime, boolean isCancelItemShowed) {
final SimListDialogFragment fragment = new SimListDialogFragment();
final Bundle args = initArguments(dialogType, titleResId);
args.putBoolean(KEY_INCLUDE_ASK_EVERY_TIME, includeAskEveryTime);
+ args.putBoolean(KEY_SHOW_CANCEL_ITEM, isCancelItemShowed);
fragment.setArguments(args);
return fragment;
}
@@ -72,12 +74,20 @@
mSubscriptions = new ArrayList<>();
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
- builder.setTitle(getTitleResId());
+ View titleView = LayoutInflater.from(getContext()).inflate(
+ R.layout.sim_confirm_dialog_title_multiple_enabled_profiles_supported, null);
+ TextView titleTextView = titleView.findViewById(R.id.title);
+ titleTextView.setText(getContext().getString(getTitleResId()));
+ builder.setCustomTitle(titleTextView);
mAdapter = new SelectSubscriptionAdapter(builder.getContext(), mSubscriptions);
-
setAdapter(builder);
- final Dialog dialog = builder.create();
+
+ final AlertDialog dialog = builder.create();
+ ListView listView = dialog.getListView();
+ if (listView != null) {
+ listView.setDividerHeight(LIST_VIEW_DIVIDER_LINE_WEIGHT);
+ }
updateDialog();
return dialog;
}
@@ -112,10 +122,22 @@
}
return;
}
- if (getArguments().getBoolean(KEY_INCLUDE_ASK_EVERY_TIME)) {
- final List<SubscriptionInfo> tmp = new ArrayList<>(currentSubscriptions.size() + 1);
- tmp.add(null);
+ boolean includeAskEveryTime = getArguments().getBoolean(KEY_INCLUDE_ASK_EVERY_TIME);
+ boolean isCancelItemShowed = getArguments().getBoolean(KEY_SHOW_CANCEL_ITEM);
+ if (includeAskEveryTime || isCancelItemShowed) {
+ int arraySize = currentSubscriptions.size()
+ + (includeAskEveryTime ? 1 : 0)
+ + (isCancelItemShowed ? 1 : 0);
+ final List<SubscriptionInfo> tmp = new ArrayList<>(arraySize);
+ if (includeAskEveryTime) {
+ // add the value of 'AskEveryTime' item
+ tmp.add(null);
+ }
tmp.addAll(currentSubscriptions);
+ if (isCancelItemShowed) {
+ // add the value of 'Cancel' item
+ tmp.add(null);
+ }
currentSubscriptions = tmp;
}
if (currentSubscriptions.equals(mSubscriptions)) {
@@ -177,19 +199,23 @@
final TextView title = convertView.findViewById(R.id.title);
final TextView summary = convertView.findViewById(R.id.summary);
- final ImageView icon = convertView.findViewById(R.id.icon);
if (sub == null) {
- title.setText(R.string.sim_calls_ask_first_prefs_title);
- summary.setText("");
- icon.setImageDrawable(mContext.getDrawable(R.drawable.ic_feedback_24dp));
- icon.setImageTintList(
- Utils.getColorAttr(mContext, android.R.attr.textColorSecondary));
+ if (position == 0) {
+ title.setText(R.string.sim_calls_ask_first_prefs_title);
+ } else {
+ title.setText(R.string.sim_action_cancel);
+ }
+ summary.setVisibility(View.GONE);
} else {
title.setText(SubscriptionUtil.getUniqueSubscriptionDisplayName(sub, mContext));
- summary.setText(isMdnProvisioned(sub.getNumber()) ? sub.getNumber() : "");
- icon.setImageBitmap(sub.createIconBitmap(mContext));
-
+ String phoneNumber = isMdnProvisioned(sub.getNumber()) ? sub.getNumber() : "";
+ if (!TextUtils.isEmpty(phoneNumber)) {
+ summary.setVisibility(View.VISIBLE);
+ summary.setText(phoneNumber);
+ } else {
+ summary.setVisibility(View.GONE);
+ }
}
return convertView;
}
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index 84b7523..5902b92 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -52,9 +52,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.HelpTrampoline;
import com.android.settings.R;
-import com.android.settings.network.MobileNetworkTwoPaneUtils;
import com.android.settings.network.SubscriptionUtil;
-import com.android.settings.network.telephony.MobileNetworkActivity;
public class SimSelectNotification extends BroadcastReceiver {
private static final String TAG = "SimSelectNotification";
@@ -262,11 +260,8 @@
// Create the pending intent that will lead to the subscription setting page.
Intent resultIntent = new Intent(Settings.ACTION_MMS_MESSAGE_SETTING);
- resultIntent.setClass(context, MobileNetworkActivity.class);
+ resultIntent.setPackage(SETTINGS_PACKAGE_NAME);
resultIntent.putExtra(Settings.EXTRA_SUB_ID, subId);
- // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
- MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(context, resultIntent,
- Settings.ACTION_MMS_MESSAGE_SETTING);
PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent,
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
builder.setContentIntent(resultPendingIntent);
diff --git a/src/com/android/settings/sim/SwitchToEsimConfirmDialogActivity.java b/src/com/android/settings/sim/SwitchToEsimConfirmDialogActivity.java
index 385deff..be2fa2d 100644
--- a/src/com/android/settings/sim/SwitchToEsimConfirmDialogActivity.java
+++ b/src/com/android/settings/sim/SwitchToEsimConfirmDialogActivity.java
@@ -101,7 +101,7 @@
}
@Override
- public void onConfirm(int tag, boolean confirmed) {
+ public void onConfirm(int tag, boolean confirmed, int itemPosition) {
if (!confirmed) {
AlertDialogFragment.show(
this,
diff --git a/src/com/android/settings/sound/VibrateForCallsPreferenceController.java b/src/com/android/settings/sound/VibrateForCallsPreferenceController.java
index 31abd8a..58c6ba5 100644
--- a/src/com/android/settings/sound/VibrateForCallsPreferenceController.java
+++ b/src/com/android/settings/sound/VibrateForCallsPreferenceController.java
@@ -51,9 +51,9 @@
@Override
public CharSequence getSummary() {
- if (Settings.Global.getInt(
+ if (Settings.System.getInt(
mContext.getContentResolver(),
- Settings.Global.APPLY_RAMPING_RINGER, OFF) == ON) {
+ Settings.System.APPLY_RAMPING_RINGER, OFF) == ON) {
return mContext.getText(R.string.vibrate_when_ringing_option_ramping_ringer);
} else if (Settings.System.getInt(
mContext.getContentResolver(),
diff --git a/src/com/android/settings/sound/VibrateForCallsPreferenceFragment.java b/src/com/android/settings/sound/VibrateForCallsPreferenceFragment.java
index 73b9f2f..a769de1 100644
--- a/src/com/android/settings/sound/VibrateForCallsPreferenceFragment.java
+++ b/src/com/android/settings/sound/VibrateForCallsPreferenceFragment.java
@@ -78,18 +78,18 @@
if (TextUtils.equals(key, KEY_ALWAYS_VIBRATE)) {
Settings.System.putInt(
getContext().getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, ON);
- Settings.Global.putInt(
- getContext().getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(
+ getContext().getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, OFF);
} else if (TextUtils.equals(key, KEY_RAMPING_RINGER)) {
Settings.System.putInt(
getContext().getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(
- getContext().getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, ON);
+ Settings.System.putInt(
+ getContext().getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, ON);
} else {
Settings.System.putInt(
getContext().getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(
- getContext().getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(
+ getContext().getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, OFF);
}
}
@@ -104,9 +104,9 @@
@Override
protected String getDefaultKey() {
- if (Settings.Global.getInt(
+ if (Settings.System.getInt(
getContext().getContentResolver(),
- Settings.Global.APPLY_RAMPING_RINGER, OFF) == ON) {
+ Settings.System.APPLY_RAMPING_RINGER, OFF) == ON) {
return KEY_RAMPING_RINGER;
} else if (Settings.System.getInt(
getContext().getContentResolver(),
diff --git a/src/com/android/settings/users/AddSupervisedUserActivity.java b/src/com/android/settings/users/AddSupervisedUserActivity.java
new file mode 100644
index 0000000..f3c5867
--- /dev/null
+++ b/src/com/android/settings/users/AddSupervisedUserActivity.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.users;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.NewUserRequest;
+import android.os.NewUserResponse;
+import android.os.UserManager;
+
+import androidx.annotation.Nullable;
+
+import com.android.settings.R;
+
+import java.util.Objects;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+
+/**
+ * Fallback activity for supervised user creation.
+ * Built to test {@link UserManager#createUser(NewUserRequest)} API.
+ */
+// TODO(b/209659998): [to-be-removed] fallback activity for supervised user creation.
+public class AddSupervisedUserActivity extends Activity {
+
+ private UserManager mUserManager;
+ private ActivityManager mActivityManager;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mUserManager = getSystemService(UserManager.class);
+ mActivityManager = getSystemService(ActivityManager.class);
+ setContentView(R.layout.add_supervised_user);
+ findViewById(R.id.createSupervisedUser).setOnClickListener(v -> createUser());
+ }
+
+ private void createUserAsync(final NewUserRequest request,
+ final Consumer<NewUserResponse> onResponse) {
+ Objects.requireNonNull(onResponse);
+
+ final Handler mMainThread = new Handler(Looper.getMainLooper());
+ Executors.newSingleThreadExecutor().execute(() -> {
+ final NewUserResponse response = mUserManager.createUser(request);
+ mMainThread.post(() -> onResponse.accept(response));
+ });
+ }
+
+ private void createUser() {
+ final NewUserRequest request = new NewUserRequest.Builder().build();
+
+ final AlertDialog pleaseWaitDialog = new AlertDialog.Builder(this)
+ .setMessage(getString(R.string.creating_new_user_dialog_message))
+ .setCancelable(false)
+ .create();
+
+ pleaseWaitDialog.show();
+ createUserAsync(request, response -> {
+ pleaseWaitDialog.dismiss();
+
+ if (response.isSuccessful()) {
+ mActivityManager.switchUser(response.getUser());
+ finish();
+ } else {
+ new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.add_user_failed))
+ .setMessage(UserManager.UserOperationResult.class.getName()
+ + " = " + response.getOperationResult())
+ .setNeutralButton(getString(R.string.okay), null)
+ .show();
+ }
+ });
+ }
+}
diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java
index 459a880..7af6c64 100644
--- a/src/com/android/settings/users/UserCapabilities.java
+++ b/src/com/android/settings/users/UserCapabilities.java
@@ -58,7 +58,9 @@
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
// No restricted profiles for tablets with a device owner, or phones.
- if (dpm.isDeviceManaged() || Utils.isVoiceCapable(context)) {
+ if (dpm.isDeviceManaged()
+ || Utils.isVoiceCapable(context)
+ || !userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_RESTRICTED)) {
caps.mCanAddRestrictedProfile = false;
}
caps.updateAddUserCapabilities(context);
@@ -76,15 +78,19 @@
mDisallowAddUser = (mEnforcedAdmin != null || hasBaseUserRestriction);
mUserSwitcherEnabled = userManager.isUserSwitcherEnabled();
mCanAddUser = true;
- if (!mIsAdmin || UserManager.getMaxSupportedUsers() < 2
+ if (!mIsAdmin
+ || UserManager.getMaxSupportedUsers() < 2
|| !UserManager.supportsMultipleUsers()
- || mDisallowAddUser) {
+ || mDisallowAddUser
+ || (!userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_SECONDARY)
+ && !mCanAddRestrictedProfile)) {
mCanAddUser = false;
}
final boolean canAddUsersWhenLocked = mIsAdmin || Settings.Global.getInt(
context.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) == 1;
- mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked;
+ mCanAddGuest = !mIsGuest && !mDisallowAddUser && canAddUsersWhenLocked
+ && userManager.isUserTypeEnabled(UserManager.USER_TYPE_FULL_GUEST);
mDisallowSwitchUser = userManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 92d1bae..c3f0439 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -115,6 +115,7 @@
private static final String KEY_USER_GUEST = "user_guest";
private static final String KEY_ADD_GUEST = "guest_add";
private static final String KEY_ADD_USER = "user_add";
+ private static final String KEY_ADD_SUPERVISED_USER = "supervised_user_add";
private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked";
private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro";
@@ -165,10 +166,13 @@
@VisibleForTesting
RestrictedPreference mAddUser;
@VisibleForTesting
+ RestrictedPreference mAddSupervisedUser;
+ @VisibleForTesting
SparseArray<Bitmap> mUserIcons = new SparseArray<>();
private int mRemovingUserId = -1;
private boolean mAddingUser;
private boolean mGuestUserAutoCreated;
+ private String mConfigSupervisedUserCreationPackage;
private String mAddingUserName;
private UserCapabilities mUserCaps;
private boolean mShouldUpdateUserList = true;
@@ -300,6 +304,10 @@
}
mAddUser.setOnPreferenceClickListener(this);
+ setConfigSupervisedUserCreationPackage();
+ mAddSupervisedUser = findPreference(KEY_ADD_SUPERVISED_USER);
+ mAddSupervisedUser.setOnPreferenceClickListener(this);
+
activity.registerReceiverAsUser(
mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
@@ -491,6 +499,21 @@
}
}
+ private void onAddSupervisedUserClicked() {
+ final Intent intent = new Intent()
+ .setAction(UserManager.ACTION_CREATE_SUPERVISED_USER)
+ .setPackage(mConfigSupervisedUserCreationPackage);
+
+ // TODO(b/209659998): [to-be-removed] fallback activity for supervised user creation.
+ if (getActivity().getPackageManager().resolveActivity(intent, 0) == null) {
+ intent
+ .setClass(getContext(), AddSupervisedUserActivity.class)
+ .setPackage(null);
+ }
+
+ startActivity(intent);
+ }
+
private void onRemoveUserClicked(int userId) {
synchronized (mUserLock) {
if (mRemovingUserId == -1 && !mAddingUser) {
@@ -1058,6 +1081,7 @@
updateAddGuest(context, users.stream().anyMatch(UserInfo::isGuest));
updateAddUser(context);
+ updateAddSupervisedUser(context);
if (!mUserCaps.mUserSwitcherEnabled) {
return;
@@ -1070,6 +1094,12 @@
}
+ @VisibleForTesting
+ void setConfigSupervisedUserCreationPackage() {
+ mConfigSupervisedUserCreationPackage = getPrefContext().getString(
+ com.android.internal.R.string.config_supervisedUserCreationPackage);
+ }
+
private boolean isCurrentUserGuest() {
return mUserCaps.mIsGuest;
}
@@ -1080,6 +1110,7 @@
private void updateAddGuest(Context context, boolean isGuestAlreadyCreated) {
if (!isGuestAlreadyCreated && mUserCaps.mCanAddGuest
+ && mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_GUEST)
&& WizardManagerHelper.isDeviceProvisioned(context)
&& mUserCaps.mUserSwitcherEnabled) {
mAddGuest.setVisible(true);
@@ -1099,25 +1130,41 @@
}
private void updateAddUser(Context context) {
+ updateAddUserCommon(context, mAddUser, mUserCaps.mCanAddRestrictedProfile);
+ }
+
+ private void updateAddSupervisedUser(Context context) {
+ if (!TextUtils.isEmpty(mConfigSupervisedUserCreationPackage)) {
+ updateAddUserCommon(context, mAddSupervisedUser, false);
+ } else {
+ mAddSupervisedUser.setVisible(false);
+ }
+ }
+
+ private void updateAddUserCommon(Context context, RestrictedPreference addUser,
+ boolean canAddRestrictedProfile) {
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
&& WizardManagerHelper.isDeviceProvisioned(context)
&& mUserCaps.mUserSwitcherEnabled) {
- mAddUser.setVisible(true);
- mAddUser.setSelectable(true);
- final boolean canAddMoreUsers = mUserManager.canAddMoreUsers();
- mAddUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
+ addUser.setVisible(true);
+ addUser.setSelectable(true);
+ final boolean canAddMoreUsers =
+ mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY)
+ || (canAddRestrictedProfile
+ && mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_RESTRICTED));
+ addUser.setEnabled(canAddMoreUsers && !mAddingUser && canSwitchUserNow());
if (!canAddMoreUsers) {
- mAddUser.setSummary(
+ addUser.setSummary(
getString(R.string.user_add_max_count, getRealUsersCount()));
} else {
- mAddUser.setSummary(null);
+ addUser.setSummary(null);
}
- if (mAddUser.isEnabled()) {
- mAddUser.setDisabledByAdmin(
+ if (addUser.isEnabled()) {
+ addUser.setDisabledByAdmin(
mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
}
} else {
- mAddUser.setVisible(false);
+ addUser.setVisible(false);
}
}
@@ -1202,6 +1249,9 @@
onAddUserClicked(USER_TYPE_USER);
}
return true;
+ } else if (pref == mAddSupervisedUser) {
+ onAddSupervisedUserClicked();
+ return true;
} else if (pref == mAddGuest) {
mAddGuest.setEnabled(false); // prevent multiple tap issue
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD);
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 0543fee..d4ee5b9 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -34,11 +34,13 @@
import android.os.UserManager;
import android.text.TextUtils;
import android.util.Log;
+import android.widget.TextView;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
import com.android.internal.net.VpnConfig;
import com.android.internal.util.ArrayUtils;
@@ -77,7 +79,6 @@
private String mVpnLabel;
// UI preference
- private Preference mPreferenceVersion;
private RestrictedSwitchPreference mPreferenceAlwaysOn;
private RestrictedSwitchPreference mPreferenceLockdown;
private RestrictedPreference mPreferenceForget;
@@ -122,7 +123,6 @@
mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class);
mVpnManager = getContext().getSystemService(VpnManager.class);
- mPreferenceVersion = findPreference(KEY_VERSION);
mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
mPreferenceLockdown = (RestrictedSwitchPreference) findPreference(KEY_LOCKDOWN_VPN);
mPreferenceForget = (RestrictedPreference) findPreference(KEY_FORGET_VPN);
@@ -138,9 +138,52 @@
boolean isInfoLoaded = loadInfo();
if (isInfoLoaded) {
- mPreferenceVersion.setTitle(
- getPrefContext().getString(R.string.vpn_version, mPackageInfo.versionName));
updateUI();
+
+ Preference version = getPreferenceScreen().findPreference(KEY_VERSION);
+ if (version != null) {
+ // Version field has been added.
+ return;
+ }
+
+ /**
+ * Create version field at runtime, and set max height on the display area.
+ *
+ * When long length of text given within version field, a large text area
+ * might be created and inconvenient to the user (User need to scroll
+ * for a long time in order to get to the Preferences after this field.)
+ */
+ version = new Preference(getPrefContext()) {
+ @Override
+ public void onBindViewHolder(PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ TextView titleView =
+ (TextView) holder.findViewById(android.R.id.title);
+ if (titleView != null) {
+ titleView.setTextAppearance(R.style.vpn_app_management_version_title);
+ }
+
+ TextView summaryView =
+ (TextView) holder.findViewById(android.R.id.summary);
+ if (summaryView != null) {
+ summaryView.setTextAppearance(R.style.vpn_app_management_version_summary);
+
+ // Set max height in summary area.
+ int versionMaxHeight = getListView().getHeight();
+ summaryView.setMaxHeight(versionMaxHeight);
+ summaryView.setVerticalScrollBarEnabled(false);
+ summaryView.setHorizontallyScrolling(false);
+ }
+ }
+ };
+ version.setOrder(0); // Set order to 0 in order to be placed
+ // in front of other Preference(s).
+ version.setKey(KEY_VERSION); // Set key to avoid from creating multi instance.
+ version.setTitle(R.string.vpn_version);
+ version.setSummary(mPackageInfo.versionName);
+ version.setSelectable(false);
+ getPreferenceScreen().addPreference(version);
} else {
finish();
}
diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
index b7f3015..ff8f805 100644
--- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -20,6 +20,7 @@
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.Log;
+import android.util.SparseArray;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
@@ -59,17 +60,18 @@
private final int mNormalBackgroundRes;
private final int mHighlightBackgroundRes;
private String mHighlightKey;
- private String mPreviousHighlightKey;
private int mHighlightPosition = RecyclerView.NO_POSITION;
private int mScrollPosition = RecyclerView.NO_POSITION;
private boolean mHighlightNeeded;
private boolean mScrolled;
+ private SparseArray<PreferenceViewHolder> mViewHolders;
public HighlightableTopLevelPreferenceAdapter(SettingsHomepageActivity homepageActivity,
PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
super(preferenceGroup);
mRecyclerView = recyclerView;
mHighlightKey = key;
+ mViewHolders = new SparseArray<>();
mContext = preferenceGroup.getContext();
mHomepageActivity = homepageActivity;
final TypedValue outValue = new TypedValue();
@@ -92,6 +94,7 @@
@Override
public void onBindViewHolder(PreferenceViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
+ mViewHolders.put(position, holder);
updateBackground(holder, position);
}
@@ -120,9 +123,9 @@
return;
}
+ final int previousPosition = mHighlightPosition;
if (TextUtils.isEmpty(mHighlightKey)) {
// De-highlight previous preference.
- final int previousPosition = mHighlightPosition;
mHighlightPosition = RecyclerView.NO_POSITION;
mScrolled = true;
if (previousPosition >= 0) {
@@ -145,10 +148,14 @@
// Turn on/off highlight when screen split mode is changed.
if (highlightNeeded != mHighlightNeeded) {
- Log.d(TAG, "Highlight change needed: " + highlightNeeded);
+ Log.d(TAG, "Highlight needed change: " + highlightNeeded);
mHighlightNeeded = highlightNeeded;
mHighlightPosition = position;
notifyItemChanged(position);
+ if (!highlightNeeded) {
+ // De-highlight to prevent a flicker
+ removeHighlightAt(previousPosition);
+ }
return;
}
@@ -156,7 +163,6 @@
return;
}
- final int previousPosition = mHighlightPosition;
mHighlightPosition = position;
Log.d(TAG, "Request highlight position " + position);
Log.d(TAG, "Is highlight needed: " + highlightNeeded);
@@ -178,20 +184,11 @@
* preference is clicked.
*/
public void highlightPreference(String key, boolean scrollNeeded) {
- mPreviousHighlightKey = mHighlightKey;
mHighlightKey = key;
mScrolled = !scrollNeeded;
requestHighlight();
}
- /**
- * A function that restores the previous highlighted setting.
- */
- public void restorePreviousHighlight() {
- mHighlightKey = mPreviousHighlightKey;
- requestHighlight();
- }
-
@Override
public void onHomepageLoaded() {
scroll();
@@ -224,6 +221,17 @@
}
}
+ private void removeHighlightAt(int position) {
+ if (position >= 0) {
+ // De-highlight the existing preference view holder at an early stage
+ final PreferenceViewHolder holder = mViewHolders.get(position);
+ if (holder != null) {
+ removeHighlightBackground(holder);
+ }
+ notifyItemChanged(position);
+ }
+ }
+
private void addHighlightBackground(PreferenceViewHolder holder) {
final View v = holder.itemView;
v.setBackgroundResource(mHighlightBackgroundRes);
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 68d47b5..6bb4389 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -58,9 +58,7 @@
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
- getActivity().setTitle(R.string.network_and_internet_preferences_title);
- }
+ getActivity().setTitle(R.string.network_and_internet_preferences_title);
mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS);
if (mCertinstallerPreference != null) {
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 408ffbe..0c063db 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -1503,11 +1503,15 @@
}
// Shows display name of each active subscription.
- final String[] displayNames = SubscriptionUtil.getUniqueSubscriptionDisplayNames(
- mContext).values().stream().toArray(String[]::new);
- mEapSimSpinner.setAdapter(getSpinnerAdapter(displayNames));
+ final ArrayList<CharSequence> displayNames = new ArrayList<>();
+ for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
+ displayNames.add(
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
+ }
+ mEapSimSpinner.setAdapter(
+ getSpinnerAdapter(displayNames.toArray(new String[displayNames.size()])));
mEapSimSpinner.setSelection(0 /* position */);
- if (displayNames.length == 1) {
+ if (displayNames.size() == 1) {
mEapSimSpinner.setEnabled(false);
}
}
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index 011c970..127c882 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -1482,11 +1482,15 @@
}
// Shows display name of each active subscription.
- final String[] displayNames = SubscriptionUtil.getUniqueSubscriptionDisplayNames(
- mContext).values().stream().toArray(String[]::new);
- mEapSimSpinner.setAdapter(getSpinnerAdapter(displayNames));
+ final ArrayList<CharSequence> displayNames = new ArrayList<>();
+ for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
+ displayNames.add(
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
+ }
+ mEapSimSpinner.setAdapter(
+ getSpinnerAdapter(displayNames.toArray(new String[displayNames.size()])));
mEapSimSpinner.setSelection(0 /* position */);
- if (displayNames.length == 1) {
+ if (displayNames.size() == 1) {
mEapSimSpinner.setEnabled(false);
}
}
diff --git a/src/com/android/settings/wifi/calling/LinkifyDescriptionPreference.java b/src/com/android/settings/wifi/calling/LinkifyDescriptionPreference.java
new file mode 100644
index 0000000..60400b0
--- /dev/null
+++ b/src/com/android/settings/wifi/calling/LinkifyDescriptionPreference.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.calling;
+
+import android.content.Context;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
+import android.text.util.Linkify;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.core.text.util.LinkifyCompat;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settings.R;
+
+/** A preference which supports linkify text as a description in the summary **/
+public class LinkifyDescriptionPreference extends Preference {
+
+ public LinkifyDescriptionPreference(Context context) {
+ this(context, null);
+ }
+
+ public LinkifyDescriptionPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void onBindViewHolder(PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ final TextView summaryView = (TextView) holder.findViewById(android.R.id.summary);
+ if (summaryView == null || summaryView.getVisibility() != View.VISIBLE) {
+ return;
+ }
+
+ final CharSequence summary = getSummary();
+ if (TextUtils.isEmpty(summary)) {
+ return;
+ }
+
+ summaryView.setMaxLines(Integer.MAX_VALUE);
+
+ final SpannableString spannableSummary = new SpannableString(summary);
+ if (spannableSummary.getSpans(0, spannableSummary.length(), ClickableSpan.class)
+ .length > 0) {
+ summaryView.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+ LinkifyCompat.addLinks(summaryView,
+ Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS);
+ }
+}
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 8d9e031..19664be 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -35,7 +35,6 @@
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
import android.text.TextUtils;
-import android.text.util.Linkify;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -58,8 +57,11 @@
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.widget.SettingsMainSwitchBar;
+import com.android.settings.wifi.calling.LinkifyDescriptionPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
+import java.util.List;
+
/**
* This is the inner class of {@link WifiCallingSettings} fragment.
* The preference screen lets you enable/disable Wi-Fi Calling and change Wi-Fi Calling mode.
@@ -73,6 +75,7 @@
private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
+ private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description";
@VisibleForTesting
static final int REQUEST_CHECK_WFC_EMERGENCY_ADDRESS = 1;
@@ -92,7 +95,6 @@
private ListWithEntrySummaryPreference mButtonWfcMode;
private ListWithEntrySummaryPreference mButtonWfcRoamingMode;
private Preference mUpdateAddress;
- private TextView mEmptyView;
private boolean mValidListener = false;
private boolean mEditableWfcMode = true;
@@ -186,14 +188,6 @@
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mEmptyView = getView().findViewById(android.R.id.empty);
- setEmptyView(mEmptyView);
- mEmptyView.setAutoLinkMask(Linkify.WEB_URLS);
- final Resources res = getResourcesForSubId();
- final String emptyViewText = res.getString(R.string.wifi_calling_off_explanation,
- res.getString(R.string.wifi_calling_off_explanation_2));
- mEmptyView.setText(emptyViewText);
-
mSwitchBar = getView().findViewById(R.id.switch_bar);
mSwitchBar.show();
}
@@ -309,6 +303,9 @@
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(ImsManager.ACTION_WFC_IMS_REGISTRATION_ERROR);
+
+ updateDescriptionForOptions(
+ List.of(mButtonWfcMode, mButtonWfcRoamingMode, mUpdateAddress));
}
@Override
@@ -324,7 +321,7 @@
final View view = inflater.inflate(
R.layout.wifi_calling_settings_preferences, container, false);
- final ViewGroup prefs_container = view.findViewById(R.id.prefs_container);
+ final ViewGroup prefs_container = view.findViewById(android.R.id.tabcontent);
Utils.prepareCustomPreferencesList(container, view, prefs_container, false);
final View prefs = super.onCreateView(inflater, prefs_container, savedInstanceState);
prefs_container.addView(prefs);
@@ -573,28 +570,35 @@
final PreferenceScreen preferenceScreen = getPreferenceScreen();
final boolean updateAddressEnabled = (getCarrierActivityIntent() != null);
if (wfcEnabled) {
- if (mEditableWfcMode) {
- preferenceScreen.addPreference(mButtonWfcMode);
- } else {
- // Don't show WFC (home) preference if it's not editable.
- preferenceScreen.removePreference(mButtonWfcMode);
- }
- if (mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming) {
- preferenceScreen.addPreference(mButtonWfcRoamingMode);
- } else {
- // Don't show WFC roaming preference if it's not editable.
- preferenceScreen.removePreference(mButtonWfcRoamingMode);
- }
- if (updateAddressEnabled) {
- preferenceScreen.addPreference(mUpdateAddress);
- } else {
- preferenceScreen.removePreference(mUpdateAddress);
- }
+ // Don't show WFC (home) preference if it's not editable.
+ mButtonWfcMode.setVisible(mEditableWfcMode);
+ // Don't show WFC roaming preference if it's not editable.
+ mButtonWfcRoamingMode.setVisible(
+ mEditableWfcRoamingMode && !mUseWfcHomeModeForRoaming);
+ mUpdateAddress.setVisible(updateAddressEnabled);
} else {
- preferenceScreen.removePreference(mButtonWfcMode);
- preferenceScreen.removePreference(mButtonWfcRoamingMode);
- preferenceScreen.removePreference(mUpdateAddress);
+ mButtonWfcMode.setVisible(false);
+ mButtonWfcRoamingMode.setVisible(false);
+ mUpdateAddress.setVisible(false);
}
+ updateDescriptionForOptions(
+ List.of(mButtonWfcMode, mButtonWfcRoamingMode, mUpdateAddress));
+ }
+
+ private void updateDescriptionForOptions(List<Preference> visibleOptions) {
+ LinkifyDescriptionPreference pref = findPreference(PREFERENCE_NO_OPTIONS_DESC);
+ if (pref == null) {
+ return;
+ }
+
+ boolean optionsAvailable = visibleOptions.stream().anyMatch(Preference::isVisible);
+ if (!optionsAvailable) {
+ final Resources res = getResourcesForSubId();
+ String emptyViewText = res.getString(R.string.wifi_calling_off_explanation,
+ res.getString(R.string.wifi_calling_off_explanation_2));
+ pref.setSummary(emptyViewText);
+ }
+ pref.setVisible(!optionsAvailable);
}
@Override
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
index 3636341..c73bffa 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
@@ -179,7 +179,8 @@
.setTitle(res.getText(R.string.wifi_calling_settings_title))
.addEndItem(
SliceAction.createToggle(
- getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED),
+ getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED,
+ isWifiCallingEnabled),
null /* actionTitle */, isWifiCallingEnabled))
.setPrimaryAction(SliceAction.createDeeplink(
getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY),
@@ -316,7 +317,7 @@
final Resources res = getResourcesForSubId(subId);
return new RowBuilder()
.setTitle(res.getText(preferenceTitleResId))
- .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
+ .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action, checked),
icon, res.getText(preferenceTitleResId), checked));
}
@@ -370,25 +371,31 @@
public void handleWifiCallingChanged(Intent intent) {
final int subId = getDefaultVoiceSubId();
- if (SubscriptionManager.isValidSubscriptionId(subId)) {
+ if (SubscriptionManager.isValidSubscriptionId(subId)
+ && intent.hasExtra(EXTRA_TOGGLE_STATE)) {
final WifiCallingQueryImsState queryState = queryImsState(subId);
if (queryState.isWifiCallingProvisioned()) {
- final boolean currentValue = queryState.isEnabledByUser()
- && queryState.isAllowUserControl();
+ final boolean currentValue = isWifiCallingEnabled();
final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
currentValue);
final Intent activationAppIntent =
getWifiCallingCarrierActivityIntent(subId);
- if (!newValue || activationAppIntent == null) {
+ if ((newValue == currentValue) && activationAppIntent == null) {
// If either the action is to turn off wifi calling setting
// or there is no activation involved - Update the setting
- if (newValue != currentValue) {
- final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
- imsMmTelManager.setVoWiFiSettingEnabled(newValue);
- }
+ final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
+ imsMmTelManager.setVoWiFiSettingEnabled(!newValue);
+ } else {
+ Log.w(TAG, "action not taken: subId " + subId
+ + " from " + currentValue + " to " + newValue);
}
+ } else {
+ Log.w(TAG, "action not taken: subId " + subId + " needs provision");
}
+ } else {
+ Log.w(TAG, "action not taken: subId " + subId);
}
+
// notify change in slice in any case to get re-queried. This would result in displaying
// appropriate message with the updated setting.
mContext.getContentResolver().notifyChange(WIFI_CALLING_URI, null);
@@ -541,10 +548,20 @@
PendingIntent.FLAG_IMMUTABLE);
}
- private PendingIntent getBroadcastIntent(String action) {
+ /**
+ * Create PendingIntent for Slice.
+ * Note: SliceAction#createDeeplink() didn't support toggle status so far,
+ * therefore, embedding toggle status within PendingIntent.
+ *
+ * @param action Slice action
+ * @param isChecked Status when Slice created.
+ * @return PendingIntent
+ */
+ private PendingIntent getBroadcastIntent(String action, boolean isChecked) {
final Intent intent = new Intent(action);
intent.setClass(mContext, SliceBroadcastReceiver.class);
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+ intent.putExtra(EXTRA_TOGGLE_STATE, isChecked);
return PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
}
diff --git a/tests/componenttests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerComponentTest.java b/tests/componenttests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerComponentTest.java
index d80faf2..78a2c92 100644
--- a/tests/componenttests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerComponentTest.java
+++ b/tests/componenttests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerComponentTest.java
@@ -37,6 +37,7 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.settings.Settings;
import com.android.settings.testutils.CommonUtils;
import com.android.settings.testutils.UiUtils;
@@ -68,7 +69,7 @@
Context.TELECOM_SERVICE);
@Rule
- public ActivityScenarioRule<com.android.settings.network.telephony.MobileNetworkActivity>
+ public ActivityScenarioRule<Settings.MobileNetworkActivity>
rule = new ActivityScenarioRule<>(
new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index bc25377..2945bef 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -37,7 +37,6 @@
"com.google.android.material_material",
"setupcompat",
"setupdesign",
- "androidx-constraintlayout_constraintlayout-solver",
"androidx.lifecycle_lifecycle-runtime",
"androidx.lifecycle_lifecycle-extensions",
"androidx.test.core",
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index 74f2790..c9f1b66 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -146,16 +146,16 @@
@Test
@Config(shadows = {ShadowDeviceConfig.class})
public void isRampingRingerEnabled_settingsFlagOn_Enabled() {
- Settings.Global.putInt(
- mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, ON);
+ Settings.System.putInt(
+ mContext.getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, ON);
assertThat(AccessibilitySettings.isRampingRingerEnabled(mContext)).isTrue();
}
@Test
@Config(shadows = {ShadowDeviceConfig.class})
public void isRampingRingerEnabled_settingsFlagOff_Disabled() {
- Settings.Global.putInt(
- mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(
+ mContext.getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, OFF);
assertThat(AccessibilitySettings.isRampingRingerEnabled(mContext)).isFalse();
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/RingVibrationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/RingVibrationPreferenceFragmentTest.java
index cd1d17e..e2b1051 100644
--- a/tests/robotests/src/com/android/settings/accessibility/RingVibrationPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/RingVibrationPreferenceFragmentTest.java
@@ -50,17 +50,17 @@
@Config(shadows = {ShadowDeviceConfig.class})
public void getVibrationEnabledSetting_rampingRingerEnabled_returnApplyRampingRinger() {
// Turn on both flags to enable ramping ringer.
- Settings.Global.putInt(
- mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, 1 /* ON */);
+ Settings.System.putInt(
+ mContext.getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, 1 /* ON */);
assertThat(mFragment.getVibrationEnabledSetting()).isEqualTo(
- Settings.Global.APPLY_RAMPING_RINGER);
+ Settings.System.APPLY_RAMPING_RINGER);
}
@Test
public void getVibrationEnabledSetting_rampingRingerDisabled_returnVibrationWhenRinging() {
- // Turn off Settings.Global.APPLY_RAMPING_RINGER to disable ramping ringer.
- Settings.Global.putInt(
- mContext.getContentResolver(), Settings.Global.APPLY_RAMPING_RINGER, 0 /* OFF */);
+ // Turn off Settings.System.APPLY_RAMPING_RINGER to disable ramping ringer.
+ Settings.System.putInt(
+ mContext.getContentResolver(), Settings.System.APPLY_RAMPING_RINGER, 0 /* OFF */);
assertThat(mFragment.getVibrationEnabledSetting()).isEqualTo(
Settings.System.VIBRATE_WHEN_RINGING);
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
index 013ef52..3cdff6e 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
@@ -235,7 +235,7 @@
}
@Test
- public void onProfileConnectionStateChanged_leAudioDeviceConnected_notInCall_addPreference() {
+ public void onProfileConnectionStateChanged_leAudioDeviceConnected_notInCall_addsPreference() {
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
@@ -248,7 +248,7 @@
}
@Test
- public void onProfileConnectionStateChanged_leAudioDeviceConnected_inCall_addPreference() {
+ public void onProfileConnectionStateChanged_leAudioDeviceConnected_inCall_addsPreference() {
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
when(mBluetoothDeviceUpdater
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
index 1d5aa54..0f7bf20 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
@@ -24,9 +24,9 @@
import android.companion.AssociationInfo;
import android.companion.CompanionDeviceManager;
-import android.companion.DeviceId;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.net.MacAddress;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
@@ -100,15 +100,14 @@
setupFakeLabelAndInfo(packageName, appName);
final int associationId = mAssociations.size() + 1;
- final DeviceId deviceId =
- new DeviceId(DeviceId.TYPE_MAC_ADDRESS, mCachedDevice.getAddress());
final AssociationInfo association = new AssociationInfo(
associationId,
/* userId */ 0,
packageName,
- Arrays.asList(deviceId),
+ MacAddress.fromString(mCachedDevice.getAddress()),
+ /* displayName */ null,
/* deviceProfile */ "",
- /* managedByCompanionApp */ false,
+ /* selfManaged */ false,
/* notifyOnDeviceNearby */ true,
/* timeApprovedMs */ System.currentTimeMillis());
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java
index 40b20dc..98f1fe3 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java
@@ -235,7 +235,7 @@
}
@Test
- public void onProfileConnectionStateChanged_leAudioDeviceConnected_inCall_removePreference() {
+ public void onProfileConnectionStateChanged_leAudioDeviceConnected_inCall_removesPreference() {
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
when(mBluetoothDeviceUpdater
.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
@@ -248,7 +248,7 @@
}
@Test
- public void onProfileConnectionStateChanged_leAudioDeviceConnected_notInCall_removePreference()
+ public void onProfileConnectionStateChanged_leAudioDeviceConnected_notInCall_removesPreference()
{
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater
diff --git a/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java
index 78a7a69..da7516b 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdaterTest.java
@@ -250,4 +250,22 @@
verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice,
BluetoothDevicePreference.SortType.TYPE_NO_SORT);
}
+
+ @Test
+ public void forceUpdate_deviceIsSubDevice_doesNothing() {
+ final List<BluetoothDevice> bluetoothDevices = new ArrayList<>();
+ bluetoothDevices.add(mBluetoothDevice);
+
+ when(mBluetoothAdapter.isEnabled()).thenReturn(true);
+ when(mBluetoothAdapter.getMostRecentlyConnectedDevices()).thenReturn(bluetoothDevices);
+ when(mBluetoothManager.getCachedDeviceManager()).thenReturn(mDeviceManager);
+ when(mDeviceManager.findDevice(mBluetoothDevice)).thenReturn(mCachedBluetoothDevice);
+ when(mDeviceManager.isSubDevice(mBluetoothDevice)).thenReturn(true);
+
+ mBluetoothDeviceUpdater.forceUpdate();
+
+ verify(mBluetoothDeviceUpdater, never()).removePreference(mCachedBluetoothDevice);
+ verify(mBluetoothDeviceUpdater, never()).addPreference(mCachedBluetoothDevice,
+ BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
index a12131d..c1648bf 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceControllerTest.java
@@ -47,6 +47,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@@ -85,8 +86,12 @@
mBluetoothA2dpConfigStore));
mPreference = spy(new BaseBluetoothDialogPreferenceImpl(mContext));
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC);
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .build();
+ mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .build();
mCodecConfigs[0] = mCodecConfigAAC;
mCodecConfigs[1] = mCodecConfigSBC;
@@ -160,17 +165,19 @@
@Test
public void getSelectableConfigs_verifyConfig() {
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
- assertThat(mController.getSelectableConfigs(null)).isEqualTo(mCodecConfigs);
+ assertThat(mController.getSelectableConfigs(null)).isEqualTo(Arrays.asList(mCodecConfigs));
}
@Test
public void getSelectableByCodecType_verifyConfig() {
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -181,7 +188,8 @@
@Test
public void getSelectableByCodecType_unavailable() {
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -192,7 +200,8 @@
@Test
public void onBluetoothServiceConnected_verifyBluetoothA2dpConfigStore() {
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothBitPerSampleDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothBitPerSampleDialogPreferenceControllerTest.java
index 0996ae3..a042ebe 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothBitPerSampleDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothBitPerSampleDialogPreferenceControllerTest.java
@@ -44,6 +44,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@@ -80,25 +81,23 @@
mPreference = new BluetoothBitPerSampleDialogPreference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_NONE,
- BluetoothCodecConfig.BITS_PER_SAMPLE_16 | BluetoothCodecConfig.BITS_PER_SAMPLE_24,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 0, 0, 0, 0);
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_NONE,
- BluetoothCodecConfig.BITS_PER_SAMPLE_24,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 0, 0, 0, 0);
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_16
+ | BluetoothCodecConfig.BITS_PER_SAMPLE_24)
+ .build();
+ mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_24)
+ .build();
when(mBluetoothA2dp.getActiveDevice()).thenReturn(mActiveDevice);
}
@Test
public void writeConfigurationValues_selectDefault_setHighest() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -127,7 +126,8 @@
@Test
public void getSelectableIndex_verifyList() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
List<Integer> indexList = new ArrayList<>();
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothChannelModeDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothChannelModeDialogPreferenceControllerTest.java
index 81fb3fe..75d8fc4 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothChannelModeDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothChannelModeDialogPreferenceControllerTest.java
@@ -44,6 +44,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@@ -80,25 +81,23 @@
mPreference = new BluetoothChannelModeDialogPreference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_NONE,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_STEREO,
- 0, 0, 0, 0);
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_NONE,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_MONO | BluetoothCodecConfig.CHANNEL_MODE_STEREO,
- 0, 0, 0, 0);
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_STEREO)
+ .build();
+ mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_MONO
+ | BluetoothCodecConfig.CHANNEL_MODE_STEREO)
+ .build();
when(mBluetoothA2dp.getActiveDevice()).thenReturn(mActiveDevice);
}
@Test
public void writeConfigurationValues_selectDefault_setHighest() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -124,7 +123,8 @@
@Test
public void getSelectableIndex_verifyList() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
List<Integer> indexList = new ArrayList<>();
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
index 0f01e00..3a34aa0 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
@@ -45,6 +45,9 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.Arrays;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
public class BluetoothCodecDialogPreferenceControllerTest {
@@ -85,29 +88,41 @@
mPreference = new BluetoothCodecDialogPreference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
- BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST,
- BluetoothCodecConfig.SAMPLE_RATE_96000 | BluetoothCodecConfig.SAMPLE_RATE_176400,
- BluetoothCodecConfig.BITS_PER_SAMPLE_32,
- BluetoothCodecConfig.CHANNEL_MODE_MONO | BluetoothCodecConfig.CHANNEL_MODE_STEREO,
- 0, 0, 0, 0);
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
- BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST,
- BluetoothCodecConfig.SAMPLE_RATE_48000 | BluetoothCodecConfig.SAMPLE_RATE_88200,
- BluetoothCodecConfig.BITS_PER_SAMPLE_16 | BluetoothCodecConfig.BITS_PER_SAMPLE_24,
- BluetoothCodecConfig.CHANNEL_MODE_STEREO,
- 0, 0, 0, 0);
- mCodecConfigAPTX = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX);
- mCodecConfigAPTXHD = new BluetoothCodecConfig(
- BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD);
- mCodecConfigLDAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC);
+ mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .setCodecPriority(BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_96000
+ | BluetoothCodecConfig.SAMPLE_RATE_176400)
+ .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_32)
+ .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_MONO
+ | BluetoothCodecConfig.CHANNEL_MODE_STEREO)
+ .build();
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .setCodecPriority(BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000
+ | BluetoothCodecConfig.SAMPLE_RATE_88200)
+ .setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_16
+ | BluetoothCodecConfig.BITS_PER_SAMPLE_24)
+ .setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_STEREO)
+ .build();
+ mCodecConfigAPTX = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX)
+ .build();
+ mCodecConfigAPTXHD = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD)
+ .build();
+ mCodecConfigLDAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC)
+ .build();
when(mBluetoothA2dp.getActiveDevice()).thenReturn(mActiveDevice);
}
@Test
public void writeConfigurationValues_selectDefault_setHighest() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED);
@@ -121,7 +136,8 @@
public void writeConfigurationValues_checkCodec() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC, mCodecConfigAPTX,
mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigSBC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -148,7 +164,8 @@
public void writeConfigurationValues_resetHighestConfig() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC, mCodecConfigAPTX,
mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
mController.writeConfigurationValues(2);
@@ -178,7 +195,7 @@
@Test
public void onHDAudioEnabled_optionalCodecEnabled_setsCodecTypeAsAAC() {
- BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigAAC, mCodecConfigSBC);
mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC,
/* codecsLocalCapabilities= */ null,
mCodecConfigs);
@@ -194,7 +211,7 @@
}
@Test
public void onHDAudioEnabled_optionalCodecDisabled_setsCodecTypeAsSBC() {
- BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigAAC, mCodecConfigSBC);
mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC,
/* codecsLocalCapabilities= */ null,
mCodecConfigs);
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceControllerTest.java
index ef209a2..e50b716 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothQualityDialogPreferenceControllerTest.java
@@ -43,6 +43,8 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.Arrays;
+
@RunWith(RobolectricTestRunner.class)
public class BluetoothQualityDialogPreferenceControllerTest {
@@ -77,18 +79,16 @@
mPreference = new BluetoothQualityDialogPreference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_48000 | BluetoothCodecConfig.SAMPLE_RATE_88200,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 0, 0, 0, 0);
- mCodecConfigLDAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_96000,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 1001, 0, 0, 0);
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000
+ | BluetoothCodecConfig.SAMPLE_RATE_88200)
+ .build();
+ mCodecConfigLDAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_96000)
+ .setCodecSpecific1(1001)
+ .build();
when(mBluetoothA2dp.getActiveDevice()).thenReturn(mActiveDevice);
}
@@ -116,7 +116,8 @@
@Test
public void updateState_codeTypeIsLDAC_enablePreference() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigLDAC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigLDAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigLDAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
mController.updateState(mPreference);
@@ -127,7 +128,8 @@
@Test
public void updateState_codeTypeAAC_disablePreference() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigLDAC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java
index c649fdf..fca154d 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothSampleRateDialogPreferenceControllerTest.java
@@ -44,6 +44,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@@ -81,26 +82,26 @@
mPreference = new BluetoothSampleRateDialogPreference(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
- mCodecConfigAAC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_48000 | BluetoothCodecConfig.SAMPLE_RATE_88200,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 0, 0, 0, 0);
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC,
- BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT,
- BluetoothCodecConfig.SAMPLE_RATE_96000,
- BluetoothCodecConfig.BITS_PER_SAMPLE_NONE,
- BluetoothCodecConfig.CHANNEL_MODE_NONE,
- 0, 0, 0, 0);
+ mCodecConfigAAC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000
+ | BluetoothCodecConfig.SAMPLE_RATE_88200)
+ .build();
+ mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_96000)
+ .build();
when(mBluetoothA2dp.getActiveDevice()).thenReturn(mActiveDevice);
}
@Test
public void writeConfigurationValues_selectDefault_setHighest() {
- mCodecConfigSBC = new BluetoothCodecConfig(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC);
+ BluetoothCodecConfig mCodecConfigSBC = new BluetoothCodecConfig.Builder()
+ .setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC)
+ .build();
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
- mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
+ mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null,
+ Arrays.asList(mCodecConfigs));
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
mController.onBluetoothServiceConnected(mBluetoothA2dp);
@@ -132,7 +133,10 @@
@Test
public void getSelectableIndex_verifyList() {
- BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ List<BluetoothCodecConfig> mCodecConfigs = new ArrayList() {{
+ add(mCodecConfigAAC);
+ add(mCodecConfigSBC);
+ }};
mCodecStatus = new BluetoothCodecStatus(mCodecConfigAAC, null, mCodecConfigs);
when(mBluetoothA2dp.getCodecStatus(
mActiveDevice)).thenReturn(mCodecStatus);
diff --git a/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
index 6c8a8f6..98ba1ce 100644
--- a/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
@@ -16,17 +16,18 @@
package com.android.settings.dream;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.widget.Button;
import androidx.preference.PreferenceScreen;
+import com.android.settings.R;
import com.android.settingslib.dream.DreamBackend;
-import com.android.settingslib.widget.MainSwitchPreference;
+import com.android.settingslib.widget.LayoutPreference;
import org.junit.Before;
import org.junit.Test;
@@ -46,7 +47,9 @@
@Mock
private PreferenceScreen mScreen;
@Mock
- private MainSwitchPreference mPref;
+ private LayoutPreference mLayoutPref;
+ @Mock
+ private Button mButton;
@Mock
private DreamBackend mBackend;
@@ -56,36 +59,29 @@
mContext = spy(RuntimeEnvironment.application);
mController = new StartNowPreferenceController(mContext, "key");
- mPref = mock(MainSwitchPreference.class);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPref);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mLayoutPref);
+ when(mLayoutPref.findViewById(R.id.dream_start_now_button)).thenReturn(mButton);
ReflectionHelpers.setField(mController, "mBackend", mBackend);
}
@Test
- public void displayPreference_shouldAddOnSwitchChangeListener() {
- mController.displayPreference(mScreen);
-
- verify(mPref).addOnSwitchChangeListener(mController);
- }
-
- @Test
- public void updateState_neverDreaming_preferenceShouldDidabled() {
+ public void updateState_neverDreaming_buttonShouldDidabled() {
when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.NEVER);
mController.displayPreference(mScreen);
- mController.updateState(mPref);
+ mController.updateState(mLayoutPref);
- verify(mPref).setEnabled(false);
+ verify(mButton).setEnabled(false);
}
@Test
- public void updateState_dreamIsAvailable_preferenceShouldEnabled() {
+ public void updateState_dreamIsAvailable_buttonShouldEnabled() {
when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.EITHER);
mController.displayPreference(mScreen);
- mController.updateState(mPref);
+ mController.updateState(mLayoutPref);
- verify(mPref).setEnabled(true);
+ verify(mButton).setEnabled(true);
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
index 700522a..da0002c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
@@ -21,11 +21,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -37,14 +33,11 @@
import androidx.preference.Preference;
import com.android.settings.R;
-import com.android.settings.testutils.FakeFeatureFactory;
-import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@@ -53,24 +46,14 @@
@RunWith(RobolectricTestRunner.class)
public class TopLevelBatteryPreferenceControllerTest {
private Context mContext;
- private FakeFeatureFactory mFeatureFactory;
private TopLevelBatteryPreferenceController mController;
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
- private ArgumentCaptor<Intent> mIntentArgumentCaptor;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mFeatureFactory = FakeFeatureFactory.setupForTest();
mContext = spy(Robolectric.setupActivity(Activity.class));
mController = new TopLevelBatteryPreferenceController(mContext, "test_key");
- mBatterySettingsFeatureProvider =
- mFeatureFactory.batterySettingsFeatureProvider;
- }
-
- @After
- public void cleanUp() {
- TopLevelBatteryPreferenceController.sReplacingActivityMap.clear();
}
@Test
@@ -85,56 +68,6 @@
}
@Test
- public void handlePreferenceTreeClick_noFragment_noCustomActivityCalled() {
- Preference preference = new Preference(mContext);
-
- assertThat(mController.handlePreferenceTreeClick(preference)).isFalse();
- }
-
- @Test
- public void handlePreferenceTreeClick_sameActivityReturned_noCustomActivityCalled() {
- String fragmentPath = "my.fragment.ClassName";
- Preference preference = mock(Preference.class);
- when(preference.getFragment()).thenReturn(fragmentPath);
- ComponentName pathName = mController.convertClassPathToComponentName(fragmentPath);
- when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(pathName);
-
- assertThat(mController.handlePreferenceTreeClick(preference)).isFalse();
- }
-
- @Test
- @Ignore
- public void handlePreferenceTreeClick_newActivityReturned_newActivityRedirected() {
- String fragmentPath = "my.fragment.ClassName";
- Preference preference = mock(Preference.class);
- when(preference.getFragment()).thenReturn(fragmentPath);
- String newFragmentPath = "my.fragment.NewClassName";
- ComponentName newPathName = mController.convertClassPathToComponentName(newFragmentPath);
- when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(
- newPathName);
- doNothing().when(mContext).startActivity(mIntentArgumentCaptor.capture());
-
- assertThat(mIntentArgumentCaptor.getValue().getComponent()).isEqualTo(newPathName);
- assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
- }
-
- @Test
- public void handlePreferenceTreeClick_calledMultipleTimes_fetchedFromCache() {
- String fragmentPath = "my.fragment.ClassName";
- Preference preference = mock(Preference.class);
- when(preference.getFragment()).thenReturn(fragmentPath);
- String newFragmentPath = "my.fragment.NewClassName";
- ComponentName newPathName = mController.convertClassPathToComponentName(newFragmentPath);
- when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(
- newPathName);
- doNothing().when(mContext).startActivity(any());
-
- assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
- assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
- verify(mBatterySettingsFeatureProvider, times(1)).getReplacingActivity(any());
- }
-
- @Test
public void convertClassPathToComponentName_nullInput_returnsNull() {
assertThat(mController.convertClassPathToComponentName(null)).isNull();
}
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index 6870e7a..66536a5 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -44,7 +44,7 @@
import androidx.lifecycle.Lifecycle;
import androidx.preference.PreferenceScreen;
-import com.android.settings.network.telephony.MobileNetworkActivity;
+import com.android.settings.Settings.MobileNetworkActivity;
import com.android.settings.widget.AddPreference;
import com.android.settingslib.RestrictedLockUtils;
@@ -212,86 +212,6 @@
}
@Test
- @Ignore
- public void getSummary_twoSubscriptions_correctSummaryAndFragment() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
- final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
- final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
- when(sub1.getSubscriptionId()).thenReturn(1);
- when(sub2.getSubscriptionId()).thenReturn(2);
-
- SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
- mController.displayPreference(mPreferenceScreen);
- mController.onResume();
- assertThat(mController.getSummary()).isEqualTo("2 SIMs");
- assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
- }
-
- @Test
- @Ignore
- public void getSummaryAfterUpdate_twoSubscriptionsBecomesOne_correctSummaryAndFragment() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
- final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
- final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
- when(sub1.getSubscriptionId()).thenReturn(1);
- when(sub2.getSubscriptionId()).thenReturn(2);
- when(sub1.getDisplayName()).thenReturn("sub1");
- when(sub2.getDisplayName()).thenReturn("sub2");
-
- SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
- SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
- mController.displayPreference(mPreferenceScreen);
- mController.onResume();
- assertThat(mController.getSummary()).isEqualTo("2 SIMs");
- assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
-
- // Simulate sub2 having disappeared - the end result should change to be the same as
- // if there were just one subscription.
- SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
- mController.onSubscriptionsChanged();
- assertThat(mController.getSummary()).isEqualTo("sub1");
- assertThat(mPreference.getFragment()).isNull();
- final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- doNothing().when(mContext).startActivity(intentCaptor.capture());
- mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
- assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
- MobileNetworkActivity.class.getName());
- }
-
- @Test
- @Ignore
- public void getSummaryAfterUpdate_oneSubscriptionBecomesTwo_correctSummaryAndFragment() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
- final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
- final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
- when(sub1.getSubscriptionId()).thenReturn(1);
- when(sub2.getSubscriptionId()).thenReturn(2);
- when(sub1.getDisplayName()).thenReturn("sub1");
- when(sub2.getDisplayName()).thenReturn("sub2");
-
- when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
- Arrays.asList(sub1));
- SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
- mController.displayPreference(mPreferenceScreen);
- mController.onResume();
- assertThat(mController.getSummary()).isEqualTo("sub1");
- assertThat(mPreference.getFragment()).isNull();
- final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- doNothing().when(mContext).startActivity(intentCaptor.capture());
- mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
- assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
- MobileNetworkActivity.class.getName());
-
- // Simulate sub2 appearing in the list of subscriptions and check the results.
- SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
- mController.displayPreference(mPreferenceScreen);
- mController.onResume();
- assertThat(mController.getSummary()).isEqualTo("2 SIMs");
- assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
- }
-
- @Test
- @Ignore
public void getSummary_providerModel_Enabled() {
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
@@ -302,15 +222,9 @@
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
mController.displayPreference(mPreferenceScreen);
mController.onResume();
assertThat(mController.getSummary()).isEqualTo("sub1, sub2");
-
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
- mController.displayPreference(mPreferenceScreen);
- mController.onResume();
- assertThat(mController.getSummary()).isEqualTo("2 SIMs");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
deleted file mode 100644
index 459d77e..0000000
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.telephony;
-
-import static androidx.lifecycle.Lifecycle.State;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.anyInt;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.robolectric.Shadows.shadowOf;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-
-import androidx.test.core.app.ActivityScenario;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.settings.network.ProxySubscriptionManager;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadow.api.Shadow;
-import org.robolectric.shadows.ShadowContextImpl;
-import org.robolectric.shadows.ShadowSubscriptionManager;
-import org.robolectric.shadows.ShadowSubscriptionManager.SubscriptionInfoBuilder;
-
-@RunWith(AndroidJUnit4.class)
-public class MobileNetworkActivityTest {
-
- private static final int CURRENT_SUB_ID = 3;
- private static final int PREV_SUB_ID = 1;
-
- private Context mContext;
- private ShadowContextImpl mShadowContextImpl;
- private Intent mTestIntent;
-
- @Mock
- private UserManager mUserManager;
- @Mock
- private TelephonyManager mTelephonyManager;
-
- private ShadowSubscriptionManager mSubscriptionManager;
- private SubscriptionInfo mSubscriptionInfo1;
- private SubscriptionInfo mSubscriptionInfo2;
-
- private ActivityScenario<MobileNetworkActivity> mMobileNetworkActivity;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mContext = ApplicationProvider.getApplicationContext();
- mShadowContextImpl = Shadow.extract(RuntimeEnvironment.application.getBaseContext());
-
- mShadowContextImpl.setSystemService(Context.USER_SERVICE, mUserManager);
- doReturn(true).when(mUserManager).isAdminUser();
-
- mShadowContextImpl.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
- doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
-
- mTestIntent = new Intent(mContext, MockMobileNetworkActivity.class);
-
- mSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
- mSubscriptionInfo1 = SubscriptionInfoBuilder.newBuilder()
- .setId(PREV_SUB_ID).buildSubscriptionInfo();
- mSubscriptionInfo2 = SubscriptionInfoBuilder.newBuilder()
- .setId(CURRENT_SUB_ID).buildSubscriptionInfo();
- }
-
- @After
- public void cleanUp() {
- if (mMobileNetworkActivity != null) {
- mMobileNetworkActivity.close();
- }
- }
-
- private static class MockMobileNetworkActivity extends MobileNetworkActivity {
- private MockMobileNetworkActivity() {
- super();
- }
-
- private SubscriptionInfo mSubscriptionInFragment;
-
- @Override
- ProxySubscriptionManager getProxySubscriptionManager() {
- if (mProxySubscriptionMgr == null) {
- mProxySubscriptionMgr = mock(ProxySubscriptionManager.class);
- }
- return mProxySubscriptionMgr;
- }
-
- @Override
- void registerActiveSubscriptionsListener() {
- onChanged();
- }
-
- @Override
- void switchFragment(SubscriptionInfo subInfo) {
- mSubscriptionInFragment = subInfo;
- }
- }
-
- private ActivityScenario<MobileNetworkActivity> createTargetActivity(Intent activityIntent) {
- return ActivityScenario.launch(activityIntent);
- }
-
- @Test
- @Ignore
- public void updateBottomNavigationView_oneSubscription_shouldNotCrash() {
- mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1);
-
- mMobileNetworkActivity = createTargetActivity(mTestIntent);
-
- mMobileNetworkActivity.moveToState(State.STARTED);
- }
-
- @Test
- @Ignore
- public void updateBottomNavigationView_twoSubscription_shouldNotCrash() {
- mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
-
- mMobileNetworkActivity = createTargetActivity(mTestIntent);
-
- mMobileNetworkActivity.moveToState(State.STARTED);
- }
-
- @Test
- @Ignore
- public void switchFragment_switchBetweenTwoSubscriptions() {
- mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
-
- mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
- mMobileNetworkActivity = createTargetActivity(mTestIntent);
-
- mMobileNetworkActivity.moveToState(State.STARTED);
-
- mMobileNetworkActivity.onActivity(activity -> {
- final MockMobileNetworkActivity mockActivity = (MockMobileNetworkActivity) activity;
- mockActivity.switchFragment(mSubscriptionInfo1);
- assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
- });
- }
-
- @Test
- @Ignore
- public void switchFragment_subscriptionsUpdate_notifyByIntent() {
- mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
-
- mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
- mMobileNetworkActivity = createTargetActivity(mTestIntent);
-
- mMobileNetworkActivity.moveToState(State.STARTED);
-
- mMobileNetworkActivity.onActivity(activity -> {
- final MockMobileNetworkActivity mockActivity = (MockMobileNetworkActivity) activity;
- mockActivity.switchFragment(mSubscriptionInfo1);
- assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
-
- mContext.sendBroadcast(new Intent(
- CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED), null);
-
- mockActivity.switchFragment(mSubscriptionInfo2);
- assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo2);
-
- mContext.sendBroadcast(new Intent(
- TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED), null);
-
- mockActivity.switchFragment(mSubscriptionInfo1);
- assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
- });
- }
-
- @Test
- @Ignore
- public void onSaveInstanceState_saveCurrentSubId() {
- mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
-
- mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
- mMobileNetworkActivity = createTargetActivity(mTestIntent);
-
- mMobileNetworkActivity.moveToState(State.STARTED);
-
- mMobileNetworkActivity.onActivity(activity -> {
- final Bundle bundle = new Bundle();
- activity.saveInstanceState(bundle);
- assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(PREV_SUB_ID);
- });
- }
-}
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
index 063be35..71fab42 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationBackendTest.java
@@ -31,11 +31,13 @@
import android.app.role.RoleManager;
import android.app.usage.UsageEvents;
import android.bluetooth.BluetoothAdapter;
+import android.companion.AssociationInfo;
import android.companion.ICompanionDeviceManager;
import android.content.ComponentName;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.net.MacAddress;
import android.os.Parcel;
import android.provider.Settings;
@@ -234,8 +236,9 @@
@Test
public void getDeviceList_associationsButNoDevice() throws Exception {
- List<String> macs = ImmutableList.of("00:00:00:00:00:10", "00:00:00:00:00:20");
- when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(macs);
+ List<AssociationInfo> associations =
+ mockAssociations("00:00:00:00:00:10", "00:00:00:00:00:20");
+ when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(associations);
when(mCbm.getCachedDevicesCopy()).thenReturn(new ArrayList<>());
@@ -245,12 +248,13 @@
@Test
public void getDeviceList_singleDevice() throws Exception {
- List<String> macs = ImmutableList.of("00:00:00:00:00:10", "00:00:00:00:00:20");
- when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(macs);
+ String[] macs = { "00:00:00:00:00:10", "00:00:00:00:00:20" };
+ List<AssociationInfo> associations = mockAssociations(macs);
+ when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(associations);
Collection<CachedBluetoothDevice> cachedDevices = new ArrayList<>();
CachedBluetoothDevice cbd1 = mock(CachedBluetoothDevice.class);
- when(cbd1.getAddress()).thenReturn(macs.get(0));
+ when(cbd1.getAddress()).thenReturn(macs[0]);
when(cbd1.getName()).thenReturn("Device 1");
cachedDevices.add(cbd1);
when(mCbm.getCachedDevicesCopy()).thenReturn(cachedDevices);
@@ -261,17 +265,18 @@
@Test
public void getDeviceList_multipleDevices() throws Exception {
- List<String> macs = ImmutableList.of("00:00:00:00:00:10", "00:00:00:00:00:20");
- when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(macs);
+ String[] macs = { "00:00:00:00:00:10", "00:00:00:00:00:20" };
+ List<AssociationInfo> associations = mockAssociations(macs);
+ when(mCdm.getAssociations(mCn.getPackageName(), 0)).thenReturn(associations);
Collection<CachedBluetoothDevice> cachedDevices = new ArrayList<>();
CachedBluetoothDevice cbd1 = mock(CachedBluetoothDevice.class);
- when(cbd1.getAddress()).thenReturn(macs.get(0));
+ when(cbd1.getAddress()).thenReturn(macs[0]);
when(cbd1.getName()).thenReturn("Device 1");
cachedDevices.add(cbd1);
CachedBluetoothDevice cbd2 = mock(CachedBluetoothDevice.class);
- when(cbd2.getAddress()).thenReturn(macs.get(1));
+ when(cbd2.getAddress()).thenReturn(macs[1]);
when(cbd2.getName()).thenReturn("Device 2");
cachedDevices.add(cbd2);
when(mCbm.getCachedDevicesCopy()).thenReturn(cachedDevices);
@@ -279,4 +284,16 @@
assertThat(new NotificationBackend().getDeviceList(
mCdm, mBm, mCn.getPackageName(), 0).toString()).isEqualTo("Device 1, Device 2");
}
+
+ private ImmutableList<AssociationInfo> mockAssociations(String... macAddresses) {
+ final AssociationInfo[] associations = new AssociationInfo[macAddresses.length];
+ for (int index = 0; index < macAddresses.length; index++) {
+ final AssociationInfo association = mock(AssociationInfo.class);
+ when(association.isSelfManaged()).thenReturn(false);
+ when(association.getDeviceMacAddress())
+ .thenReturn(MacAddress.fromString(macAddresses[index]));
+ associations[index] = association;
+ }
+ return ImmutableList.copyOf(associations);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java
deleted file mode 100644
index 2b2f02c..0000000
--- a/tests/robotests/src/com/android/settings/notification/VibrateOnTouchPreferenceControllerTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.when;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.os.Vibrator;
-import android.provider.Settings.System;
-
-import androidx.fragment.app.FragmentActivity;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class VibrateOnTouchPreferenceControllerTest {
-
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private FragmentActivity mActivity;
- @Mock
- private ContentResolver mContentResolver;
- @Mock
- private SoundSettings mSetting;
- @Mock
- private Context mContext;
- @Mock
- private Vibrator mVibrator;
-
- private VibrateOnTouchPreferenceController mController;
- private SwitchPreference mPreference;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- when(mActivity.getSystemService(Context.VIBRATOR_SERVICE)).thenReturn(mVibrator);
- when(mContext.getSystemService(Context.VIBRATOR_SERVICE)).thenReturn(mVibrator);
- when(mVibrator.hasVibrator()).thenReturn(true);
- when(mSetting.getActivity()).thenReturn(mActivity);
- when(mActivity.getContentResolver()).thenReturn(mContentResolver);
- mPreference = new SwitchPreference(RuntimeEnvironment.application);
- mController = new VibrateOnTouchPreferenceController(mContext, mSetting, null);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- doReturn(mScreen).when(mSetting).getPreferenceScreen();
- }
-
- @Test
- public void isAvailable_hasHaptic_shouldReturnTrue() {
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_noHaptic_shouldReturnFalse() {
- when(mVibrator.hasVibrator()).thenReturn(false);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void displayPreference_hapticEnabled_shouldCheckedPreference() {
- System.putInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void displayPreference_hapticDisabled_shouldUncheckedPreference() {
- System.putInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 0);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void onPreferenceChanged_preferenceChecked_shouldEnabledHaptic() {
- mController.displayPreference(mScreen);
-
- mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, true);
-
- assertThat(System.getInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1)).isEqualTo(1);
- }
-
- @Test
- public void onPreferenceChanged_preferenceUnchecked_shouldDisabledHaptic() {
- mController.displayPreference(mScreen);
-
- mPreference.getOnPreferenceChangeListener().onPreferenceChange(mPreference, false);
-
- assertThat(System.getInt(mContentResolver, System.HAPTIC_FEEDBACK_ENABLED, 1)).isEqualTo(0);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
index 0fefbe0..070bcb1 100644
--- a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
@@ -53,7 +53,8 @@
final int dialogType = DATA_PICK;
setDialogType(dialogType);
mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
- false /* includeAskEveryTime */));
+ false /* includeAskEveryTime */,
+ false /* isCancelItemShowed */));
doReturn(null).when(mFragment).getCurrentSubscriptions();
startDialog();
verify(mFragment).dismiss();
@@ -64,7 +65,8 @@
final int dialogType = DATA_PICK;
setDialogType(dialogType);
mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
- false /* includeAskEveryTime */));
+ false /* includeAskEveryTime */,
+ false /* isCancelItemShowed */));
doReturn(Arrays.asList(mSim1, mSim2)).when(mFragment).getCurrentSubscriptions();
// Avoid problems robolectric has with our real adapter.
doNothing().when(mFragment).setAdapter(any());
@@ -84,7 +86,8 @@
final int dialogType = DATA_PICK;
setDialogType(dialogType);
mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
- false /* includeAskEveryTime */));
+ false /* includeAskEveryTime */,
+ false /* isCancelItemShowed */));
doReturn(Arrays.asList(mSim1, mSim2)).when(mFragment).getCurrentSubscriptions();
// Avoid problems robolectric has with our real adapter.
doNothing().when(mFragment).setAdapter(any());
@@ -101,7 +104,8 @@
final int dialogType = SMS_PICK;
setDialogType(dialogType);
mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_sms,
- true /* includeAskEveryTime */));
+ true /* includeAskEveryTime */,
+ false /* isCancelItemShowed */));
doReturn(Arrays.asList(mSim1, mSim2)).when(mFragment).getCurrentSubscriptions();
// Avoid problems robolectric has with our real adapter.
doNothing().when(mFragment).setAdapter(any());
diff --git a/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceControllerTest.java
index bf2b0f3..1f4ba96 100644
--- a/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceControllerTest.java
@@ -94,7 +94,7 @@
@Test
public void getSummary_applyRampingRinger_rampingRingerSummary() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, ON);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, ON);
assertThat(mController.getSummary()).isEqualTo(
mContext.getText(R.string.vibrate_when_ringing_option_ramping_ringer));
@@ -103,7 +103,7 @@
@Test
public void getSummary_enableVibrateWhenRinging_alwaysVibrateSummary() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, ON);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF);
assertThat(mController.getSummary()).isEqualTo(
mContext.getText(R.string.vibrate_when_ringing_option_always_vibrate));
@@ -112,7 +112,7 @@
@Test
public void getSummary_notApplyRampingRingerDisableVibrateWhenRinging_neverVibrateSummary() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF);
assertThat(mController.getSummary()).isEqualTo(
mContext.getText(R.string.vibrate_when_ringing_option_never_vibrate));
diff --git a/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceFragmentTest.java
index 0a766d6..889e5a6 100644
--- a/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/sound/VibrateForCallsPreferenceFragmentTest.java
@@ -52,7 +52,7 @@
@Test
public void getDefaultKey_applyRampingRinger_keyRampingRinger() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, ON);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, ON);
assertThat(mFragment.getDefaultKey()).isEqualTo(
VibrateForCallsPreferenceFragment.KEY_RAMPING_RINGER);
@@ -61,7 +61,7 @@
@Test
public void getDefaultKey_enableVibrateWhenRinging_keyAlwaysVibrate() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, ON);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF);
assertThat(mFragment.getDefaultKey()).isEqualTo(
VibrateForCallsPreferenceFragment.KEY_ALWAYS_VIBRATE);
@@ -70,7 +70,7 @@
@Test
public void getDefaultKey_notApplyRampingRingerDisableVibrateWhenRinging_keyNeverVibrate() {
Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF);
- Settings.Global.putInt(mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF);
+ Settings.System.putInt(mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF);
assertThat(mFragment.getDefaultKey()).isEqualTo(
VibrateForCallsPreferenceFragment.KEY_NEVER_VIBRATE);
@@ -80,8 +80,8 @@
public void setDefaultKey_keyRampingRinger_applyRampingRingerDisableVibrateWhenRinging() {
mFragment.setDefaultKey(VibrateForCallsPreferenceFragment.KEY_RAMPING_RINGER);
- assertThat(Settings.Global.getInt(
- mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF)).isEqualTo(ON);
+ assertThat(Settings.System.getInt(
+ mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF)).isEqualTo(ON);
assertThat(Settings.System.getInt(
mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF)).isEqualTo(OFF);
}
@@ -90,8 +90,8 @@
public void setDefaultKey_keyAlwaysVibrate_notApplyRampingRingerEnableVibrateWhenRinging() {
mFragment.setDefaultKey(VibrateForCallsPreferenceFragment.KEY_ALWAYS_VIBRATE);
- assertThat(Settings.Global.getInt(
- mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF)).isEqualTo(OFF);
+ assertThat(Settings.System.getInt(
+ mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF)).isEqualTo(OFF);
assertThat(Settings.System.getInt(
mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF)).isEqualTo(ON);
}
@@ -100,8 +100,8 @@
public void setDefaultKey_keyNeverVibrate_notApplyRampingRingerDisableVibrateWhenRinging() {
mFragment.setDefaultKey(VibrateForCallsPreferenceFragment.KEY_NEVER_VIBRATE);
- assertThat(Settings.Global.getInt(
- mContentResolver, Settings.Global.APPLY_RAMPING_RINGER, OFF)).isEqualTo(OFF);
+ assertThat(Settings.System.getInt(
+ mContentResolver, Settings.System.APPLY_RAMPING_RINGER, OFF)).isEqualTo(OFF);
assertThat(Settings.System.getInt(
mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, OFF)).isEqualTo(OFF);
}
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index 299e054..d8f3959 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -24,6 +24,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.doReturn;
@@ -58,6 +59,7 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.RestrictedLockUtils;
@@ -84,7 +86,11 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUserManager.class, ShadowDevicePolicyManager.class})
+@Config(shadows = {
+ ShadowUserManager.class,
+ ShadowDevicePolicyManager.class,
+ SettingsShadowResources.class,
+})
public class UserSettingsTest {
private static final String KEY_USER_GUEST = "user_guest";
@@ -110,6 +116,8 @@
@Mock
private RestrictedPreference mAddUserPreference;
@Mock
+ private RestrictedPreference mAddSupervisedUserPreference;
+ @Mock
private RestrictedPreference mAddGuestPreference;
@Mock
private UserManager mUserManager;
@@ -160,6 +168,7 @@
mFragment.mMePreference = mMePreference;
mFragment.mAddUser = mAddUserPreference;
+ mFragment.mAddSupervisedUser = mAddSupervisedUserPreference;
mFragment.mAddGuest = mAddGuestPreference;
mFragment.mUserListCategory = mock(PreferenceCategory.class);
}
@@ -168,6 +177,7 @@
public void tearDown() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, mProvisionedBackupValue);
+ SettingsShadowResources.reset();
}
@Test
@@ -258,7 +268,8 @@
@Test
public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
mUserCapabilities.mCanAddUser = true;
- doReturn(true).when(mUserManager).canAddMoreUsers();
+ doReturn(true)
+ .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_SECONDARY));
doReturn(true).when(mAddUserPreference).isEnabled();
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
@@ -274,7 +285,8 @@
@Test
public void updateUserList_canAddGuestAndSwitchUser_shouldShowAddGuest() {
mUserCapabilities.mCanAddGuest = true;
- doReturn(true).when(mUserManager).canAddMoreUsers();
+ doReturn(true)
+ .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
mFragment.updateUserList();
@@ -288,7 +300,7 @@
@Test
public void updateUserList_cannotSwitchUser_shouldDisableAddUser() {
mUserCapabilities.mCanAddUser = true;
- doReturn(true).when(mUserManager).canAddMoreUsers();
+ doReturn(true).when(mUserManager).canAddMoreUsers(anyString());
doReturn(true).when(mAddUserPreference).isEnabled();
doReturn(SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED)
.when(mUserManager).getUserSwitchability();
@@ -304,7 +316,7 @@
@Test
public void updateUserList_canNotAddMoreUsers_shouldDisableAddUserWithSummary() {
mUserCapabilities.mCanAddUser = true;
- doReturn(false).when(mUserManager).canAddMoreUsers();
+ doReturn(false).when(mUserManager).canAddMoreUsers(anyString());
doReturn(false).when(mAddUserPreference).isEnabled();
doReturn(SWITCHABILITY_STATUS_OK).when(mUserManager).getUserSwitchability();
doReturn(4).when(mFragment).getRealUsersCount();
@@ -320,7 +332,8 @@
@Test
public void updateUserList_cannotSwitchUser_shouldDisableAddGuest() {
mUserCapabilities.mCanAddGuest = true;
- doReturn(true).when(mUserManager).canAddMoreUsers();
+ doReturn(true)
+ .when(mUserManager).canAddMoreUsers(eq(UserManager.USER_TYPE_FULL_GUEST));
doReturn(SWITCHABILITY_STATUS_USER_IN_CALL).when(mUserManager).getUserSwitchability();
mFragment.updateUserList();
@@ -690,6 +703,36 @@
verify(mUserManager).getUsers();
}
+ private void setConfigSupervisedUserCreationPackage(String value) {
+ SettingsShadowResources.overrideResource(
+ com.android.internal.R.string.config_supervisedUserCreationPackage,
+ value
+ );
+ mFragment.setConfigSupervisedUserCreationPackage();
+ mUserCapabilities.mCanAddUser = true;
+ mFragment.updateUserList();
+ }
+
+ @Test
+ public void addSupervisedUserOption_resourceIsDefined_shouldBeDisplayed() {
+ try {
+ setConfigSupervisedUserCreationPackage("test");
+ verify(mAddSupervisedUserPreference).setVisible(true);
+ } finally {
+ SettingsShadowResources.reset();
+ }
+ }
+
+ @Test
+ public void addSupervisedUserOption_resourceIsNotDefined_shouldBeHidden() {
+ try {
+ setConfigSupervisedUserCreationPackage("");
+ verify(mAddSupervisedUserPreference).setVisible(false);
+ } finally {
+ SettingsShadowResources.reset();
+ }
+ }
+
private void givenUsers(UserInfo... userInfo) {
List<UserInfo> users = Arrays.asList(userInfo);
doReturn(users).when(mUserManager).getUsers();
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
index a3c2535..74bddda 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
@@ -74,12 +74,12 @@
private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
+ private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description";
private static final String TEST_EMERGENCY_ADDRESS_CARRIER_APP =
"com.android.settings/.wifi.calling.TestEmergencyAddressCarrierApp";
private TestFragment mFragment;
private Context mContext;
- private TextView mEmptyView;
private final PersistableBundle mBundle = new PersistableBundle();
private MockWifiCallingQueryImsState mQueryImsState;
@@ -100,6 +100,8 @@
@Mock
private View mView;
@Mock
+ private LinkifyDescriptionPreference mDescriptionView;
+ @Mock
private ListWithEntrySummaryPreference mButtonWfcMode;
@Mock
private ListWithEntrySummaryPreference mButtonWfcRoamingMode;
@@ -126,12 +128,10 @@
doReturn(mock(ListWithEntrySummaryPreference.class)).when(mFragment).findPreference(any());
doReturn(mButtonWfcMode).when(mFragment).findPreference(BUTTON_WFC_MODE);
doReturn(mButtonWfcRoamingMode).when(mFragment).findPreference(BUTTON_WFC_ROAMING_MODE);
+ doReturn(mDescriptionView).when(mFragment).findPreference(PREFERENCE_NO_OPTIONS_DESC);
doNothing().when(mFragment).finish();
doReturn(mView).when(mFragment).getView();
- mEmptyView = new TextView(mContext);
- doReturn(mEmptyView).when(mView).findViewById(android.R.id.empty);
-
mSwitchBar = new SettingsMainSwitchBar(mContext);
doReturn(mSwitchBar).when(mView).findViewById(R.id.switch_bar);
@@ -211,8 +211,7 @@
mFragment.onResume();
// Check that WFC roaming preference is shown.
- verify(mPreferenceScreen, times(1)).addPreference(mButtonWfcRoamingMode);
- verify(mPreferenceScreen, never()).removePreference(mButtonWfcRoamingMode);
+ verify(mButtonWfcRoamingMode, times(1)).setVisible(true);
}
@Test
@@ -225,8 +224,7 @@
mFragment.onResume();
// Check that WFC roaming preference is hidden.
- verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
- verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
+ verify(mButtonWfcRoamingMode, times(1)).setVisible(false);
}
@Test
@@ -239,8 +237,7 @@
mFragment.onResume();
// Check that WFC roaming preference is hidden.
- verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
- verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
+ verify(mButtonWfcRoamingMode, times(1)).setVisible(false);
}
@Test
@@ -253,8 +250,7 @@
mFragment.onResume();
// Check that WFC roaming preference is hidden.
- verify(mPreferenceScreen, never()).addPreference(mButtonWfcRoamingMode);
- verify(mPreferenceScreen, times(1)).removePreference(mButtonWfcRoamingMode);
+ verify(mButtonWfcRoamingMode, times(1)).setVisible(false);
}
@Test
@@ -332,9 +328,9 @@
Activity.RESULT_OK, null);
// Check the WFC preferences is added.
- verify(mPreferenceScreen).addPreference(mButtonWfcMode);
- verify(mPreferenceScreen).addPreference(mButtonWfcRoamingMode);
- verify(mPreferenceScreen).addPreference(mUpdateAddress);
+ verify(mButtonWfcMode).setVisible(true);
+ verify(mButtonWfcRoamingMode).setVisible(true);
+ verify(mUpdateAddress).setVisible(true);
// Check the WFC enable request.
verify(mImsMmTelManager).setVoWiFiSettingEnabled(true);
}
diff --git a/tests/uitests/src/com/android/settings/ui/SoundSettingsTest.java b/tests/uitests/src/com/android/settings/ui/SoundSettingsTest.java
index 9789c5f..735992b 100644
--- a/tests/uitests/src/com/android/settings/ui/SoundSettingsTest.java
+++ b/tests/uitests/src/com/android/settings/ui/SoundSettingsTest.java
@@ -153,14 +153,6 @@
"Touch sounds", Settings.System.SOUND_EFFECTS_ENABLED));
}
- @MediumTest
- public void testOtherSoundsVibrateOnTap() throws Exception {
- loadOtherSoundsPage();
- assertTrue("Vibrate on tap not toggled",
- mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE,
- "Vibrate on tap", Settings.System.HAPTIC_FEEDBACK_ENABLED));
- }
-
private void loadOtherSoundsPage() throws Exception {
launchSoundSettings();
mHelper.scrollVert(false);
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
new file mode 100644
index 0000000..a97656c
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocaleDetailsTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.LocaleManager;
+import android.content.Context;
+import android.os.LocaleList;
+import android.os.Looper;
+import android.telephony.TelephonyManager;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.google.common.collect.Iterables;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Locale;
+
+@RunWith(AndroidJUnit4.class)
+public class AppLocaleDetailsTest {
+ private static final String APP_PACKAGE_NAME = "app_package_name";
+
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
+ private LocaleManager mLocaleManager;
+
+ private Context mContext;
+ private LocaleList mSystemLocales;
+ private Locale mSimLocale;
+ private LocaleList mAppLocale;
+ private String[] mAssetLocales;
+
+ @Before
+ @UiThreadTest
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(LocaleManager.class)).thenReturn(mLocaleManager);
+
+ setupInitialLocales("en",
+ "uk",
+ "en, uk, jp, ne",
+ new String[]{"en", "ne", "ms", "pa"});
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_localeManagerIsNull_noCrash() {
+ when(mContext.getSystemService(LocaleManager.class)).thenReturn(null);
+
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_1stLocaleOfSuggestedLocaleListIsAppLocale() {
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+
+ Locale locale = Iterables.get(helper.getSuggestedLocales(), 0);
+ assertTrue(locale.equals(mAppLocale.get(0)));
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_2ndLocaleOfSuggestedLocaleListIsSimLocale() {
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+
+ Locale locale = Iterables.get(helper.getSuggestedLocales(), 1);
+ assertTrue(locale.equals(mSimLocale));
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_withoutAppLocale_1stLocaleOfSuggestedLocaleListIsSimLocal() {
+ setupInitialLocales("",
+ "uk",
+ "en, uk, jp, ne",
+ new String[]{"en", "ne", "ms", "pa"});
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+
+ Locale locale = Iterables.get(helper.getSuggestedLocales(), 0);
+ assertTrue(locale.equals(mSimLocale));
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_noAppAndSimLocale_1stLocaleIsFirstOneInSystemLocales() {
+ setupInitialLocales("",
+ "",
+ "en, uk, jp, ne",
+ new String[]{"en", "ne", "ms", "pa"});
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+
+ Locale locale = Iterables.get(helper.getSuggestedLocales(), 0);
+ assertTrue(locale.equals(mSystemLocales.get(0)));
+ }
+
+ @Test
+ @UiThreadTest
+ public void handleAllLocalesData_supportLocaleListIsNotEmpty() {
+ DummyAppLocaleDetailsHelper helper =
+ new DummyAppLocaleDetailsHelper(mContext, APP_PACKAGE_NAME);
+
+ helper.handleAllLocalesData();
+
+ assertFalse(helper.getSupportedLocales().isEmpty());
+ }
+
+ /**
+ * Sets the initial Locale data
+ *
+ * @param appLocale Application locale, it shall be a language tag.
+ * example: "en"
+ * @param simLocale SIM carrier locale, it shall be a language tag.
+ * example: "en"
+ * @param systemLocales System locales, a locale list by a multiple language tags with comma.
+ * example: "en, uk, jp"
+ * @param assetLocales Asset locales, a locale list by a multiple language tags with String
+ * array.
+ * example: new String[] {"en", "ne", "ms", "pa"}
+ */
+ private void setupInitialLocales(String appLocale,
+ String simLocale,
+ String systemLocales,
+ String[] assetLocales) {
+ mAppLocale = LocaleList.forLanguageTags(appLocale);
+ mSimLocale = Locale.forLanguageTag(simLocale);
+ mSystemLocales = LocaleList.forLanguageTags(systemLocales);
+ mAssetLocales = assetLocales;
+ when(mTelephonyManager.getSimLocale()).thenReturn(simLocale.isEmpty() ? null : mSimLocale);
+ when(mLocaleManager.getApplicationLocales(anyString())).thenReturn(mAppLocale);
+ }
+
+ private class DummyAppLocaleDetailsHelper
+ extends AppLocaleDetails.AppLocaleDetailsHelper {
+
+ DummyAppLocaleDetailsHelper(Context context, String packageName) {
+ super(context, packageName);
+ }
+
+ @Override
+ String[] getAssetSystemLocales() {
+ return mAssetLocales;
+ }
+
+ @Override
+ LocaleList getCurrentSystemLocales() {
+ return mSystemLocales;
+ }
+ }
+
+}
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java
new file mode 100644
index 0000000..f6f56d9
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePickerActivityTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Looper;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.applications.AppInfoBase;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class AppLocalePickerActivityTest {
+ private TestAppLocalePickerActivity mActivity;
+
+ @Before
+ @UiThreadTest
+ public void setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ mActivity = new TestAppLocalePickerActivity();
+ }
+
+ @After
+ public void cleanUp() {
+ mActivity = null;
+ }
+
+ @Test
+ public void onCreate_getEntryIntent_returnNull() {
+ TestAppLocalePickerActivity.setCallingPackage(null);
+ Intent intent = new Intent();
+
+ assertThat(mActivity.getEntryIntent(intent)).isEqualTo(null);
+ }
+
+ @Test
+ public void onCreate_getEntryIntent_returnIntentWithPackageName() {
+ String callingPackageName = "com.example.android";
+ TestAppLocalePickerActivity.setCallingPackage(callingPackageName);
+ Intent intent = new Intent();
+
+ Intent entryIntent = mActivity.getEntryIntent(intent);
+
+ Bundle outputBundle =
+ entryIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
+ String packageName = outputBundle.getString(AppInfoBase.ARG_PACKAGE_NAME);
+ assertThat(packageName).isEqualTo(callingPackageName);
+ }
+
+ private static class TestAppLocalePickerActivity extends AppLocalePickerActivity {
+ private static String sCallingPackage;
+ @Override
+ public String getCallingPackage() {
+ return sCallingPackage;
+ }
+
+ public static void setCallingPackage(String packageName) {
+ sCallingPackage = packageName;
+ }
+ }
+}
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java
new file mode 100644
index 0000000..d7e3f92
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/appinfo/AppLocalePreferenceControllerTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.util.FeatureFlagUtils;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class AppLocalePreferenceControllerTest {
+
+ private Context mContext;
+ private AppLocalePreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+
+ mController = spy(new AppLocalePreferenceController(mContext, "test_key"));
+ FeatureFlagUtils
+ .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
+ }
+
+ @Test
+ public void getAvailabilityStatus_featureFlagOff_shouldReturnUnavailable() {
+ FeatureFlagUtils
+ .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_featureFlagOn_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java
new file mode 100644
index 0000000..648c757
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/appinfo/ManageAppLocalePreferenceControllerTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications.appinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.util.FeatureFlagUtils;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class ManageAppLocalePreferenceControllerTest {
+ private Context mContext;
+ private ManageAppLocalePreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mController = spy(new ManageAppLocalePreferenceController(mContext, "a key"));
+
+ FeatureFlagUtils
+ .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
+ }
+
+ @Test
+ public void getAvailabilityStatus_featureFlagOff_shouldReturnUnavailable() {
+ FeatureFlagUtils
+ .setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_featureFlagOn_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
index 5360dac..9cd6f2d 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
@@ -33,6 +33,7 @@
import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_LABEL_ID;
import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_VALUE_ID;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -78,12 +79,16 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
@RunWith(AndroidJUnit4.class)
public class SimStatusDialogControllerTest {
@Mock
private SimStatusDialogFragment mDialog;
+ @Mock
private TelephonyManager mTelephonyManager;
@Mock
private SubscriptionInfo mSubscriptionInfo;
@@ -109,6 +114,9 @@
@Mock
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
+ private AtomicBoolean mEuiccEnabled;
+ private AtomicReference<String> mEid;
+ private AtomicInteger mUpdatePhoneNumberCount;
private static final String TEST_EID_FROM_CARD = "11111111111111111111111111111111";
private static final String TEST_EID_FROM_MANAGER = "22222222222222222222222222222222";
@@ -139,7 +147,26 @@
doReturn(2).when(mTelephonyManager).getCardIdForDefaultEuicc();
doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mTelephonyManager).getDataNetworkType();
- mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
+ mUpdatePhoneNumberCount = new AtomicInteger();
+ mEuiccEnabled = new AtomicBoolean(false);
+ mEid = new AtomicReference<String>("");
+ mController = new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */) {
+ @Override
+ public TelephonyManager getTelephonyManager() {
+ return mTelephonyManager;
+ }
+
+ @Override
+ public AtomicReference<String> getEid(int slotIndex) {
+ return mEuiccEnabled.get() ? mEid : null;
+ }
+
+ @Override
+ public void updatePhoneNumber() {
+ super.updatePhoneNumber();
+ mUpdatePhoneNumberCount.incrementAndGet();
+ }
+ };
// CellSignalStrength setup
doReturn(0).when(mCellSignalStrengthCdma).getDbm();
doReturn(0).when(mCellSignalStrengthCdma).getAsuLevel();
@@ -157,7 +184,7 @@
.getLogicalToPhysicalSlotMapping();
when(mEuiccManager.isEnabled()).thenReturn(false);
- when(mEuiccManager.getEid()).thenReturn("");
+ mEuiccEnabled.set(false);
when(mEuiccManager.createForCardId(anyInt())).thenReturn(mEuiccManager);
mPersistableBundle = new PersistableBundle();
@@ -183,7 +210,7 @@
public void initialize_shouldUpdatePhoneNumber() {
mController.initialize();
- verify(mController).updatePhoneNumber();
+ assertTrue(mUpdatePhoneNumberCount.get() > 0);
}
@Test
@@ -426,10 +453,9 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(null);
+ mEuiccEnabled.set(true);
+ mEid.set(null);
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Keep 'Not available' if neither the card nor the associated manager can provide EID.
@@ -480,11 +506,10 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ mEuiccEnabled.set(true);
+ mEid.set(TEST_EID_FROM_CARD);
when(mEuiccManager.createForCardId(0)).thenReturn(mEuiccManager);
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Set EID retrieved from the card.
@@ -538,13 +563,12 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ mEuiccEnabled.set(true);
+ mEid.set(TEST_EID_FROM_MANAGER);
when(mEuiccManager.createForCardId(0)).thenThrow(
new RuntimeException("Unexpected card ID was specified"));
when(mEuiccManager.createForCardId(1)).thenReturn(mEuiccManager);
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Set EID retrieved from the manager associated with the card which cannot provide EID.
@@ -552,6 +576,7 @@
verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
}
+ @Ignore
@Test
public void initialize_updateEid_shouldRemoveEid() {
when(mTelephonyManager.getActiveModemCount()).thenReturn(MAX_PHONE_COUNT_DUAL_SIM);
@@ -597,9 +622,9 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ mEuiccEnabled.set(true);
+ mEid.set(TEST_EID_FROM_MANAGER);
- doNothing().when(mController).requestForUpdateEid();
mController.updateEid(mController.getEid(0));
mController.initialize();
@@ -637,10 +662,9 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(null);
+ mEuiccEnabled.set(true);
+ mEid.set(null);
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Keep 'Not available' if the default eUICC manager cannot provide EID in Single SIM mode.
@@ -677,12 +701,11 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ mEuiccEnabled.set(true);
+ mEid.set(TEST_EID_FROM_MANAGER);
when(mEuiccManager.createForCardId(anyInt())).thenThrow(
new RuntimeException("EID shall be retrieved from the default eUICC manager"));
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Set EID retrieved from the default eUICC manager in Single SIM mode.
@@ -719,12 +742,11 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ mEuiccEnabled.set(true);
+ mEid.set(TEST_EID_FROM_MANAGER);
when(mEuiccManager.createForCardId(anyInt())).thenThrow(
new RuntimeException("EID shall be retrieved from the default eUICC manager"));
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Set EID retrieved from the default eUICC manager in Single SIM mode.
@@ -760,14 +782,12 @@
when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
when(mEuiccManager.isEnabled()).thenReturn(false);
- when(mEuiccManager.getEid()).thenReturn(null);
+ mEuiccEnabled.set(false);
+ mEid.set(null);
- doNothing().when(mController).requestForUpdateEid();
- mController.updateEid(mController.getEid(0));
mController.initialize();
// Remove EID if the default eUICC manager indicates that eSIM is not enabled.
- verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
verify(mDialog).removeSettingFromScreen(eq(EID_INFO_LABEL_ID));
verify(mDialog).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
}
diff --git a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java
index 81841b7..20f8a55 100644
--- a/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/EnabledNetworkModePreferenceControllerTest.java
@@ -19,6 +19,7 @@
import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.android.settings.network.telephony.MobileNetworkUtils.getRafFromNetworkType;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.CDMA;
@@ -32,6 +33,8 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -154,6 +157,30 @@
@UiThreadTest
@Test
+ public void getAvailabilityStatus_callStateIsIdle_returnAvailable() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA);
+ mController.getTelephonyCallback().onCallStateChanged(TelephonyManager.CALL_STATE_IDLE);
+
+ mController.updateState(mPreference);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ assertTrue(mPreference.isEnabled());
+ }
+
+ @UiThreadTest
+ @Test
+ public void getAvailabilityStatus_duringCalling_returnAvailable() {
+ mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA);
+ mController.getTelephonyCallback().onCallStateChanged(TelephonyManager.CALL_STATE_OFFHOOK);
+
+ mController.updateState(mPreference);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE);
+ assertFalse(mPreference.isEnabled());
+ }
+
+ @UiThreadTest
+ @Test
public void updateState_LteWorldPhone_GlobalHasLte() {
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 3d192cf..b0d6365 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -34,6 +34,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -153,8 +154,8 @@
// Each subscription has a unique last 4 digits of the phone number.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -167,6 +168,7 @@
assertEquals(CARRIER_2, idNames.get(SUBID_2));
}
+ @Ignore
@Test
public void getUniqueDisplayNames_identicalCarriers_fourDigitsUsed() {
// Both subscriptoins have the same display name.
@@ -182,8 +184,8 @@
// Each subscription has a unique last 4 digits of the phone number.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -196,6 +198,7 @@
assertEquals(CARRIER_1 + " 4444", idNames.get(SUBID_2));
}
+ @Ignore
@Test
public void getUniqueDisplayNames_identicalCarriersAfterTrim_fourDigitsUsed() {
// Both subscriptoins have the same display name.
@@ -211,8 +214,8 @@
// Each subscription has a unique last 4 digits of the phone number.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -239,8 +242,8 @@
// The subscriptions' phone numbers cannot be revealed to the user.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("");
- when(sub2Telmgr.getLine1Number()).thenReturn("");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -253,6 +256,7 @@
assertEquals(CARRIER_1 + " 2", idNames.get(SUBID_2));
}
+ @Ignore
@Test
public void getUniqueDisplayNames_phoneNumberIdentical_subscriptoinIdFallback() {
// TODO have three here from the same carrier
@@ -274,9 +278,9 @@
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
TelephonyManager sub3Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
- when(sub3Telmgr.getLine1Number()).thenReturn("5556664444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_3)).thenReturn("5556664444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_3)).thenReturn(sub3Telmgr);
@@ -298,9 +302,9 @@
when(info1.getSubscriptionId()).thenReturn(SUBID_1);
when(info1.getDisplayName()).thenReturn(CARRIER_1);
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
final CharSequence name =
@@ -310,6 +314,7 @@
assertEquals(CARRIER_1, name);
}
+ @Ignore
@Test
public void getUniqueDisplayName_identicalCarriers_correctNameReturned() {
// Each subscription's default display name is unique.
@@ -324,8 +329,8 @@
// Each subscription has a unique last 4 digits of the phone number.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -339,6 +344,7 @@
assertEquals(CARRIER_1 + " 4444", name2);
}
+ @Ignore
@Test
public void getUniqueDisplayName_phoneNumberIdentical_correctNameReturned() {
// Each subscription's default display name is unique.
@@ -353,8 +359,8 @@
// Both subscriptions have a the same 4 digits of the phone number.
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
TelephonyManager sub2Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112224444");
- when(sub2Telmgr.getLine1Number()).thenReturn("2223334444");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_2)).thenReturn("2223334444");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
when(mTelMgr.createForSubscriptionId(SUBID_2)).thenReturn(sub2Telmgr);
@@ -377,7 +383,7 @@
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
// Subscription id is different than the one returned by the subscription manager.
@@ -397,7 +403,7 @@
when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info1));
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
final CharSequence name =
@@ -416,7 +422,7 @@
Arrays.asList(info1));
TelephonyManager sub1Telmgr = mock(TelephonyManager.class);
- when(sub1Telmgr.getLine1Number()).thenReturn("1112223333");
+ when(mSubMgr.getPhoneNumber(SUBID_1)).thenReturn("1112223333");
when(mTelMgr.createForSubscriptionId(SUBID_1)).thenReturn(sub1Telmgr);
SubscriptionInfo info2 = null;
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 8b03352..ac07fae 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -39,6 +39,7 @@
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
+import android.net.wifi.WifiManager;
import android.os.Looper;
import android.os.UserManager;
import android.provider.Settings;
@@ -102,6 +103,8 @@
private LifecycleOwner mLifecycleOwner;
@Mock
private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+ @Mock
+ private WifiManager mWifiManager;
private LifecycleRegistry mLifecycleRegistry;
private int mOnChildUpdatedCount;
@@ -132,6 +135,7 @@
when(mConnectivityManager.getNetworkCapabilities(mActiveNetwork))
.thenReturn(mNetworkCapabilities);
when(mUserManager.isAdminUser()).thenReturn(true);
+ when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry);
mPreferenceManager = new PreferenceManager(mContext);
@@ -171,10 +175,11 @@
}
@Test
- public void isAvailable_airplaneModeOn_availableFalse() {
+ public void isAvailable_airplaneModeOnWifiOff_availableFalse() {
setupMockSubscriptions(2);
assertThat(mController.isAvailable()).isTrue();
+ when(mWifiManager.isWifiEnabled()).thenReturn(false);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
@@ -182,6 +187,44 @@
}
@Test
+ public void isAvailable_airplaneModeOnWifiOnWithNoCarrierNetwork_availableFalse() {
+ setupMockSubscriptions(2);
+
+ assertThat(mController.isAvailable()).isTrue();
+ when(mWifiManager.isWifiEnabled()).thenReturn(true);
+ doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
+
+ Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_airplaneModeOnWifiOffWithCarrierNetwork_availableTrue() {
+ setupMockSubscriptions(1);
+
+ when(mWifiManager.isWifiEnabled()).thenReturn(false);
+ doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
+
+ Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_airplaneModeOff_availableFalse() {
+ setupMockSubscriptions(2);
+
+ assertThat(mController.isAvailable()).isTrue();
+ when(mWifiManager.isWifiEnabled()).thenReturn(true);
+ doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
+
+ Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
@UiThreadTest
public void displayPreference_providerAndHasSim_showPreference() {
final List<SubscriptionInfo> sub = setupMockSubscriptions(1);
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
index e7a6af3..8396f1b 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
@@ -153,7 +153,6 @@
@Test
public void
shouldShowBackupCallingForSub_crossSimDisabled_returnFalse() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
doReturn(false).when(mNetworkProviderBackupCallingGroup).isCrossSimEnabledByPlatform(
mContext, SUB_ID_1);
@@ -163,7 +162,6 @@
@Test
public void shouldBackupCallingForSub_crossSimEnabled_returnTrue() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
doReturn(true).when(mNetworkProviderBackupCallingGroup).isCrossSimEnabledByPlatform(
mContext, SUB_ID_1);
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
index 660772e..9cd12fe 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
@@ -147,7 +147,6 @@
@Test
public void
shouldShowWifiCallingForSub_wifiCallingDisabledWithWifiCallingNotReady_returnFalse() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
setWifiCallingEnabled(false);
doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
@@ -157,7 +156,6 @@
@Test
public void shouldShowWifiCallingForSub_wifiCallingEnabledWithWifiCallingIsReady_returnTrue() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
setWifiCallingEnabled(true);
doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
@@ -168,7 +166,6 @@
@Test
public void
shouldShowWifiCallingForSub_wifiCallingDisabledWithNoActivityHandleIntent_returnFalse() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
buildPhoneAccountConfigureIntent(false);
doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
doReturn(mPhoneAccountHandle).when(mNetworkProviderWifiCallingGroup)
@@ -181,7 +178,6 @@
@Test
public void
shouldShowWifiCallingForSub_wifiCallingEnabledWithActivityHandleIntent_returnTrue() {
- FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
buildPhoneAccountConfigureIntent(true);
doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
doReturn(mPhoneAccountHandle).when(mNetworkProviderWifiCallingGroup)
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
index 6449c65..7d86018 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -122,10 +122,6 @@
public TargetClass(NetworkSelectSettingsTest env) {
mTestEnv = env;
-
- Bundle bundle = new Bundle();
- bundle.putInt(Settings.EXTRA_SUB_ID, SUB_ID);
- setArguments(bundle);
}
@Override
@@ -184,6 +180,11 @@
protected boolean enableAggregation(Context context) {
return mTestEnv.mIsAggregationEnabled;
}
+
+ @Override
+ protected int getSubId() {
+ return SUB_ID;
+ }
}
@Test
diff --git a/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java b/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java
new file mode 100644
index 0000000..2365553
--- /dev/null
+++ b/tests/unit/src/com/android/settings/privacy/PrivacyDashboardActivityTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.privacy;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Intent;
+import android.provider.DeviceConfig;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.settings.Settings;
+import com.android.settings.SettingsActivity;
+import com.android.settings.safetycenter.SafetyCenterStatus;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+
+@RunWith(AndroidJUnit4.class)
+public class PrivacyDashboardActivityTest {
+
+ private static final String DEFAULT_FRAGMENT_CLASSNAME = "DefaultFragmentClassname";
+
+ private Settings.PrivacyDashboardActivity mActivity;
+
+ @Before
+ public void setUp() {
+ DeviceConfig.resetToDefaults(android.provider.Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ final Intent intent = new Intent();
+ intent.setAction(android.provider.Settings.ACTION_PRIVACY_SETTINGS);
+ intent.setClass(InstrumentationRegistry.getInstrumentation().getTargetContext(),
+ Settings.PrivacyDashboardActivity.class);
+ intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, DEFAULT_FRAGMENT_CLASSNAME);
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+ try {
+ mActivity =
+ spy((Settings.PrivacyDashboardActivity) InstrumentationRegistry
+ .getInstrumentation().newActivity(
+ getClass().getClassLoader(),
+ Settings.PrivacyDashboardActivity.class.getName(),
+ intent));
+ } catch (Exception e) {
+ throw new RuntimeException(e); // nothing to do
+ }
+ });
+ doNothing().when(mActivity).startActivity(any(Intent.class));
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(android.provider.Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @Test
+ public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+ final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+ mActivity.handleSafetyCenterRedirection();
+
+ verify(mActivity).startActivity(intentCaptor.capture());
+ assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER);
+ }
+
+ @Test
+ public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ mActivity.handleSafetyCenterRedirection();
+
+ verify(mActivity, times(0)).startActivity(any());
+ }
+}
diff --git a/tests/unit/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceControllerTest.java b/tests/unit/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceControllerTest.java
new file mode 100644
index 0000000..570df73
--- /dev/null
+++ b/tests/unit/src/com/android/settings/privacy/TopLevelPrivacyEntryPreferenceControllerTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.privacy;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.DeviceConfig;
+import android.provider.Settings;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.safetycenter.SafetyCenterStatus;
+import com.android.settings.security.TopLevelSecurityEntryPreferenceController;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+@RunWith(AndroidJUnit4.class)
+public class TopLevelPrivacyEntryPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "top_level_privacy";
+
+ private TopLevelPrivacyEntryPreferenceController mTopLevelPrivacyEntryPreferenceController;
+
+ @Mock
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+
+ mTopLevelPrivacyEntryPreferenceController =
+ new TopLevelPrivacyEntryPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterEnabled_returnsUnavailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelPrivacyEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSecurityEntryPreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterDisabled_returnsAvailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelPrivacyEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSecurityEntryPreferenceController.AVAILABLE);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/safetycenter/SafetyCenterStatusTest.java b/tests/unit/src/com/android/settings/safetycenter/SafetyCenterStatusTest.java
new file mode 100644
index 0000000..f36fbe1
--- /dev/null
+++ b/tests/unit/src/com/android/settings/safetycenter/SafetyCenterStatusTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.safetycenter;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.provider.DeviceConfig;
+import android.provider.Settings;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class SafetyCenterStatusTest {
+
+ @Before
+ public void setUp() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @Test
+ public void isEnabled_whenFlagTrue_returnsTrue() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+
+ assertThat(SafetyCenterStatus.isEnabled()).isTrue();
+ }
+
+ @Test
+ public void isEnabled_whenFlagFalse_returnsFalse() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ assertThat(SafetyCenterStatus.isEnabled()).isFalse();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceControllerTest.java b/tests/unit/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceControllerTest.java
new file mode 100644
index 0000000..907fb99
--- /dev/null
+++ b/tests/unit/src/com/android/settings/safetycenter/TopLevelSafetyCenterEntryPreferenceControllerTest.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.safetycenter;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.DeviceConfig;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@RunWith(AndroidJUnit4.class)
+public class TopLevelSafetyCenterEntryPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "top_level_safety_center";
+
+ private TopLevelSafetyCenterEntryPreferenceController
+ mTopLevelSafetyCenterEntryPreferenceController;
+ private Preference mPreference;
+
+ @Mock
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mPreference = new Preference(ApplicationProvider.getApplicationContext());
+ mPreference.setKey(PREFERENCE_KEY);
+
+ doNothing().when(mContext).startActivity(any(Intent.class));
+ mTopLevelSafetyCenterEntryPreferenceController =
+ new TopLevelSafetyCenterEntryPreferenceController(mContext, PREFERENCE_KEY);
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_forDifferentPreferenceKey_isNotHandled() {
+ Preference preference = new Preference(ApplicationProvider.getApplicationContext());
+ preference.setKey("some_other_preference");
+
+ boolean preferenceHandled =
+ mTopLevelSafetyCenterEntryPreferenceController.handlePreferenceTreeClick(
+ preference);
+
+ assertThat(preferenceHandled).isFalse();
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_launchesIntendedIntent() {
+ final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+ boolean preferenceHandled = mTopLevelSafetyCenterEntryPreferenceController
+ .handlePreferenceTreeClick(mPreference);
+
+ assertThat(preferenceHandled).isTrue();
+ verify(mContext).startActivity(intentCaptor.capture());
+ assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER);
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_onStartActivityThrows_returnsFalse() {
+ doThrow(ActivityNotFoundException.class)
+ .when(mContext).startActivity(any(Intent.class));
+
+ boolean preferenceHandled = mTopLevelSafetyCenterEntryPreferenceController
+ .handlePreferenceTreeClick(mPreference);
+
+ assertThat(preferenceHandled).isFalse();
+ }
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterDisabled_returnsUnavailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelSafetyCenterEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSafetyCenterEntryPreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterEnabled_returnsAvailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelSafetyCenterEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSafetyCenterEntryPreferenceController.AVAILABLE);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
index 3bda96e..0406616 100644
--- a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
+++ b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
@@ -18,20 +18,29 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Intent;
+import android.provider.DeviceConfig;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
+import com.android.settings.safetycenter.SafetyCenterStatus;
import com.android.settings.testutils.FakeFeatureFactory;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
@@ -48,6 +57,8 @@
MockitoAnnotations.initMocks(this);
FakeFeatureFactory mFeatureFactory = FakeFeatureFactory.setupForTest();
mSecuritySettingsFeatureProvider = mFeatureFactory.getSecuritySettingsFeatureProvider();
+ DeviceConfig.resetToDefaults(android.provider.Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
mDefaultIntent = new Intent();
mDefaultIntent.setAction(android.provider.Settings.ACTION_SECURITY_SETTINGS);
mDefaultIntent.setClass(InstrumentationRegistry.getInstrumentation().getTargetContext(),
@@ -56,15 +67,22 @@
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
try {
mActivity =
- (Settings.SecurityDashboardActivity) InstrumentationRegistry
+ spy((Settings.SecurityDashboardActivity) InstrumentationRegistry
.getInstrumentation().newActivity(
getClass().getClassLoader(),
Settings.SecurityDashboardActivity.class.getName(),
- mDefaultIntent);
+ mDefaultIntent));
} catch (Exception e) {
throw new RuntimeException(e); // nothing to do
}
});
+ doNothing().when(mActivity).startActivity(any(Intent.class));
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(android.provider.Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
}
@Test
@@ -104,4 +122,32 @@
assertThat(mActivity.isValidFragment(ALTERNATIVE_FRAGMENT_CLASSNAME)).isTrue();
}
+
+ @Test
+ public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+ final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+ mActivity.handleSafetyCenterRedirection();
+
+ verify(mActivity).startActivity(intentCaptor.capture());
+ assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_SAFETY_CENTER);
+ }
+
+ @Test
+ public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ mActivity.handleSafetyCenterRedirection();
+
+ verify(mActivity, times(0)).startActivity(any());
+ }
}
diff --git a/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java b/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java
index a9acd2a..7e83ca7 100644
--- a/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/security/TopLevelSecurityEntryPreferenceControllerTest.java
@@ -25,14 +25,18 @@
import android.content.Context;
import android.content.Intent;
+import android.provider.DeviceConfig;
+import android.provider.Settings;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.SettingsActivity;
+import com.android.settings.safetycenter.SafetyCenterStatus;
import com.android.settings.testutils.FakeFeatureFactory;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -60,6 +64,9 @@
mFeatureFactory = FakeFeatureFactory.setupForTest();
mSecuritySettingsFeatureProvider = mFeatureFactory.getSecuritySettingsFeatureProvider();
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+
mPreference = new Preference(ApplicationProvider.getApplicationContext());
mPreference.setKey(PREFERENCE_KEY);
@@ -68,6 +75,12 @@
new TopLevelSecurityEntryPreferenceController(mContext, PREFERENCE_KEY);
}
+ @After
+ public void tearDown() {
+ DeviceConfig.resetToDefaults(Settings.RESET_MODE_PACKAGE_DEFAULTS,
+ DeviceConfig.NAMESPACE_PRIVACY);
+ }
+
@Test
public void handlePreferenceTreeClick_forDifferentPreferenceKey_isNotHandled() {
Preference preference = new Preference(ApplicationProvider.getApplicationContext());
@@ -121,4 +134,28 @@
assertThat(preferenceHandled).isFalse();
}
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterEnabled_returnsUnavailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(true),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelSecurityEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSecurityEntryPreferenceController.CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_whenSafetyCenterDisabled_returnsAvailable() {
+ DeviceConfig.setProperty(
+ DeviceConfig.NAMESPACE_PRIVACY,
+ SafetyCenterStatus.SAFETY_CENTER_IS_ENABLED,
+ /* value = */ Boolean.toString(false),
+ /* makeDefault = */ false);
+
+ assertThat(mTopLevelSecurityEntryPreferenceController.getAvailabilityStatus())
+ .isEqualTo(TopLevelSecurityEntryPreferenceController.AVAILABLE);
+ }
}