Merge "Revert "Fix rotate device at face unlock detailed page, device will display"" into udc-d1-dev am: 5239911c6b
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/24199674
Change-Id: I1ed93893d170141ac974b2ad64fd2ddb6fe98bc5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 4d07913..d2b8fc7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -69,6 +69,7 @@
"androidx.appcompat_appcompat",
"androidx.cardview_cardview",
"androidx.compose.runtime_runtime-livedata",
+ "androidx.activity_activity-ktx",
"androidx.preference_preference",
"androidx.recyclerview_recyclerview",
"androidx.window_window",
@@ -149,14 +150,17 @@
srcs: ["proguard.flags"],
}
-// The sources for Settings need to be exposed to SettingsGoogle, etc.
-// so they can run the com.android.settingslib.search.IndexableProcessor
-// over all the sources together.
+// Deprecated. The sources for Settings need to be exposed to ArcSettings, so they can run the
+// com.android.settingslib.search.IndexableProcessor over all the sources together.
+// Use "-Acom.android.settingslib.search.processor.package=" instead to generate the search data
+// separately for different modules.
filegroup {
name: "Settings_srcs",
srcs: ["src/**/*.java", "src/**/*.kt"],
}
+// Deprecated. Do not depend on this, only depend on Settings-core, and its manifest is also
+// included.
filegroup {
name: "Settings_manifest",
srcs: ["AndroidManifest.xml"],
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index df4ad39..ad153cd 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2395,6 +2395,8 @@
<intent-filter android:priority="1">
<action android:name="android.app.action.CONFIRM_DEVICE_CREDENTIAL" />
<action android:name="android.app.action.CONFIRM_FRP_CREDENTIAL" />
+ <action android:name="android.app.action.PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL" />
+ <action android:name="android.app.action.CONFIRM_REPAIR_MODE_DEVICE_CREDENTIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@@ -4837,7 +4839,7 @@
</activity>
<activity android:name="Settings$FactoryResetActivity"
- android:permission="android.permission.BACKUP"
+ android:permission="android.permission.MASTER_CLEAR"
android:label="@string/main_clear_title"
android:exported="true"
android:theme="@style/SudThemeGlif.Light">
@@ -4902,6 +4904,20 @@
<activity android:name=".spa.SpaBridgeActivity" android:exported="false"/>
<activity android:name=".spa.SpaAppBridgeActivity" android:exported="false"/>
+ <activity android:name=".Settings$FingerprintSettingsActivityV2"
+ android:label="@string/security_settings_fingerprint_preference_title"
+ android:exported="false"
+ android:icon="@drawable/ic_fingerprint_header">
+ <intent-filter>
+ <action android:name="android.settings.FINGERPRINT_SETTINGS_V2" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.biometrics.fingerprint2.ui.fragment.FingerprintSettingsV2Fragment" />
+ <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+ android:value="@string/menu_key_security"/>
+ </activity>
+
<activity-alias android:name="UsageStatsActivity"
android:exported="true"
android:label="@string/testing_usage_stats"
diff --git a/protos/fuelgauge_log.proto b/protos/fuelgauge_log.proto
index 150c2e2..e75ca48 100644
--- a/protos/fuelgauge_log.proto
+++ b/protos/fuelgauge_log.proto
@@ -5,13 +5,12 @@
option java_package = "com.android.settings.fuelgauge";
option java_outer_classname = "FuelgaugeLogProto";
-// Stores history of setting optimize mode
+// Store history of setting optimize mode
message BatteryOptimizeHistoricalLog {
repeated BatteryOptimizeHistoricalLogEntry log_entry = 1;
}
message BatteryOptimizeHistoricalLogEntry {
-
// The action to set optimize mode
enum Action {
UNKNOWN = 0;
@@ -28,3 +27,25 @@
optional string action_description = 3;
optional int64 timestamp = 4;
}
+
+
+// Store history of battery usage periodic job
+message BatteryUsageHistoricalLog {
+ repeated BatteryUsageHistoricalLogEntry log_entry = 1;
+}
+
+message BatteryUsageHistoricalLogEntry {
+ // The action to record battery usage job event
+ enum Action {
+ UNKNOWN = 0;
+ SCHEDULE_JOB = 1;
+ EXECUTE_JOB = 2;
+ RECHECK_JOB = 3;
+ FETCH_USAGE_DATA = 4;
+ INSERT_USAGE_DATA = 5;
+ }
+
+ optional int64 timestamp = 1;
+ optional Action action = 2;
+ optional string action_description = 3;
+}
diff --git a/res-product/values-am/strings.xml b/res-product/values-am/strings.xml
index a8449d8..d2acfa6 100644
--- a/res-product/values-am/strings.xml
+++ b/res-product/values-am/strings.xml
@@ -113,12 +113,12 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_1" product="default" msgid="8488497844109768268">"ስልክዎን ለመክፈት የጣት አሻራዎን መጠቀሙ ከጠንካራ ስርዓተ ጥለት ወይም ፒን ያነሰ ደህንነቱ የተጠበቀ ሊሆን ይችላል"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_1" product="tablet" msgid="5688664190282817312">"ጡባዊዎን ለመክፈት የጣት አሻራዎን መጠቀም ከጠንካራ ስርዓተ ጥለት ወይም ፒን ያነሰ ደህንነት ሊኖረው ይችላል"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_1" product="device" msgid="2814616139536479018">"መሣሪያዎን ለመክፈት የጣት አሻራዎን መጠቀም ከጠንካራ ስርዓተ ጥለት ወይም ፒን ያነሰ ደህንነት ሊኖረው ይችላል"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="default" msgid="3334689370761542152">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ጥቅም ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በስልክዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ሲሆን በጭራሽ ከስልኩ አይወጣም። ሁሉም ሂደቶች በስልክዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከሰታል።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="tablet" msgid="6142978289780449828">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ሥራ ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በጡባዊዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከጡባዊው አይወጣም። ሁሉም ማሰናዳት በጡባዊዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="device" msgid="9221017777932077429">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ሥራ ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በመሣሪያዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከመሣሪያው አይወጣም። ሁሉም ማሰናዳት በመሣሪያዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="default" msgid="6804981319922169283">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ሥራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ሲሆን በጭራሽ ከስልኩ አይወጣም። ሁሉም ሂደቶች በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከሰታል።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="tablet" msgid="1426913673720862863">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራቸውን ሞዴል ለማዘመን ሥራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በጡባዊው ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከጡባዊው አይወጣም። ሁሉም ማሰናዳት በጡባዊው ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="device" msgid="2631789126811300879">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራቸውን ሞዴል ለማዘመን ሥራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ሥራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በመሣሪያው ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከመሣሪያው አይወጣም። ሁሉም ማሰናዳት በመሣሪያው ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="default" msgid="3334689370761542152">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ጥቅም ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በስልክዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ሲሆን በጭራሽ ከስልኩ አይወጣም። ሁሉም ሂደቶች በስልክዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከሰታል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="tablet" msgid="6142978289780449828">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በጡባዊዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከጡባዊው አይወጣም። ሁሉም ማሰናዳት በጡባዊዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_3" product="device" msgid="9221017777932077429">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የጣት አሻራዎን ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በመሣሪያዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከመሣሪያው አይወጣም። ሁሉም ማሰናዳት በመሣሪያዎ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="default" msgid="6804981319922169283">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ሲሆን በጭራሽ ከስልኩ አይወጣም። ሁሉም ሂደቶች በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከሰታል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="tablet" msgid="1426913673720862863">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራቸውን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በጡባዊው ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከጡባዊው አይወጣም። ሁሉም ማሰናዳት በጡባዊው ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" product="device" msgid="2631789126811300879">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራቸውን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በመሣሪያው ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ነው እና በጭራሽ ከመሣሪያው አይወጣም። ሁሉም ማሰናዳት በመሣሪያው ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከናወናል።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" product="default" msgid="1354488801088258040">"የጣት አሻራዎን ምስሎች እና ሞዴል መሰረዝ ወይም በቅንብሮች ውስጥ በማንኛውም ጊዜ በጣት አሻራ መከፈትን ማጥፋት ይችላሉ። የጣት አሻራ ምስሎች እና ሞዴሎች እስኪሰርዟቸው ድረስ በስልኩ ላይ ይቀመጣሉ።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" product="tablet" msgid="8207309581266022275">"እርስዎ በማንኛውም ጊዜ በቅንብሮች ውስጥ የጣት አሻራዎን ምስሎች እና ሞዴል መሰረዝ ወይም በጣት አሻራ መከፈትን ማጥፋት ይችላሉ። የጣት አሻራ ምስሎች እና ሞዴሎች እስኪሰርዟቸው ድረስ በጡባዊው ላይ ይከማቻሉ።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" product="device" msgid="2498580070051496133">"እርስዎ በማንኛውም ጊዜ በቅንብሮች ውስጥ የጣት አሻራዎን ምስሎች እና ሞዴል መሰረዝ ወይም በጣት አሻራ መከፈትን ማጥፋት ይችላሉ። የጣት አሻራ ምስሎች እና ሞዴሎች እስኪሰርዟቸው ድረስ በመሣሪያው ላይ ይከማቻሉ።"</string>
diff --git a/res-product/values-pt-rPT/strings.xml b/res-product/values-pt-rPT/strings.xml
index 8f0f1d8..df1d195 100644
--- a/res-product/values-pt-rPT/strings.xml
+++ b/res-product/values-pt-rPT/strings.xml
@@ -23,22 +23,22 @@
<string name="bluetooth_footer_mac_message" product="default" msgid="1640339352473051542">"Endereço Bluetooth do telemóvel: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="7338607486971997745">"Endereço Bluetooth do tablet: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="device" msgid="8944917742814573320">"Endereço Bluetooth do dispositivo: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
- <string name="bluetooth_ask_discovery" product="tablet" msgid="7430581669309228387">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer tornar o seu tablet visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_discovery" product="default" msgid="3947027393224406367">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer tornar o seu telemóvel visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="440976482246291783">"Uma aplicação quer tornar o seu tablet visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_discovery_no_name" product="default" msgid="5164413774312648842">"Uma aplicação quer tornar o seu telemóvel visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="750347558570909906">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer tornar o seu tablet visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_lasting_discovery" product="default" msgid="5844129004156080891">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer tornar o seu telemóvel visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="1062185767225450964">"Uma aplicação quer tornar o seu tablet visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="7909547303183236140">"Uma aplicação quer tornar o seu telemóvel visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="6187874232925632790">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="1018495685727482700">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="3469927640700478737">"Uma aplicação quer ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="4847493437698663706">"Uma aplicação quer ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="487436507630570730">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="5169934906530139494">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="505214056751470551">"Uma aplicação quer ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="6187216564831513193">"Uma aplicação quer ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_discovery" product="tablet" msgid="7430581669309228387">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende tornar o seu tablet visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_discovery" product="default" msgid="3947027393224406367">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende tornar o seu telemóvel visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="440976482246291783">"Uma aplicação pretende tornar o seu tablet visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_discovery_no_name" product="default" msgid="5164413774312648842">"Uma aplicação pretende tornar o seu telemóvel visível para outros dispositivos Bluetooth durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="750347558570909906">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende tornar o seu tablet visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_lasting_discovery" product="default" msgid="5844129004156080891">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende tornar o seu telemóvel visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="1062185767225450964">"Uma aplicação pretende tornar o seu tablet visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="7909547303183236140">"Uma aplicação pretende tornar o seu telemóvel visível para outros dispositivos Bluetooth. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="6187874232925632790">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="1018495685727482700">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos durante <xliff:g id="TIMEOUT">%2$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="3469927640700478737">"Uma aplicação pretende ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="4847493437698663706">"Uma aplicação pretende ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos durante <xliff:g id="TIMEOUT">%1$d</xliff:g> segundos."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="487436507630570730">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="5169934906530139494">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="505214056751470551">"Uma aplicação pretende ativar o Bluetooth e tornar o seu tablet visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="6187216564831513193">"Uma aplicação pretende ativar o Bluetooth e tornar o seu telemóvel visível para outros dispositivos. Pode alterar esta opção mais tarde nas definições de Bluetooth."</string>
<string name="encryption_and_credential_settings_summary" product="default" msgid="3741475436042800617">"Dados do telemóvel encriptados"</string>
<string name="not_encrypted_summary" product="default" msgid="330652312169527734">"Telemóvel não encriptado"</string>
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="2220021007677215054">"Dispositivo encriptado"</string>
@@ -214,17 +214,17 @@
<string name="setup_lock_settings_picker_title" product="tablet" msgid="7615280976565002421">"Proteger o seu tablet"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="701531571481098327">"Proteger o dispositivo"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="9097195832806088530">"Proteger o telemóvel"</string>
- <string name="setup_lock_settings_picker_message" product="tablet" msgid="5570255431873198678">"Impeça terceiros de utilizar este tablet sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que quer utilizar."</string>
- <string name="setup_lock_settings_picker_message" product="device" msgid="437860817089616245">"Impeça terceiros de utilizar este dispositivo sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que quer utilizar."</string>
- <string name="setup_lock_settings_picker_message" product="default" msgid="343440740226992914">"Impeça terceiros de utilizar este telemóvel sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que quer utilizar."</string>
+ <string name="setup_lock_settings_picker_message" product="tablet" msgid="5570255431873198678">"Impeça terceiros de utilizar este tablet sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que pretende utilizar."</string>
+ <string name="setup_lock_settings_picker_message" product="device" msgid="437860817089616245">"Impeça terceiros de utilizar este dispositivo sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que pretende utilizar."</string>
+ <string name="setup_lock_settings_picker_message" product="default" msgid="343440740226992914">"Impeça terceiros de utilizar este telemóvel sem a sua autorização ao ativar as funcionalidades de proteção do dispositivo. Escolha o bloqueio de ecrã que pretende utilizar."</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="176620413491664050">"O telemóvel deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="8098078685596880647">"O tablet deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_body" product="device" msgid="563640675231461703">"O dispositivo deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"Permita a utilização do NFC apenas quando o ecrã está desbloqueado"</string>
- <string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar uma rede no seu telemóvel."</string>
- <string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar uma rede no seu tablet."</string>
- <string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar estas redes no seu telemóvel."</string>
- <string name="wifi_add_app_networks_summary" product="tablet" msgid="6433255556506891439">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar estas redes no seu tablet."</string>
+ <string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende guardar uma rede no seu telemóvel."</string>
+ <string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende guardar uma rede no seu tablet."</string>
+ <string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende guardar estas redes no seu telemóvel."</string>
+ <string name="wifi_add_app_networks_summary" product="tablet" msgid="6433255556506891439">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende guardar estas redes no seu tablet."</string>
<string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"Ajuste automaticamente a orientação do ecrã quando move o telemóvel entre o modo vertical e horizontal"</string>
<string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"Ajuste automaticamente a orientação do ecrã quando move o tablet entre o modo vertical e horizontal"</string>
<string name="sim_lock_on" product="tablet" msgid="227481196121403470">"É necessário o PIN para utilizar o tablet"</string>
diff --git a/res/layout-land/choose_lock_pattern_common.xml b/res/layout-land/choose_lock_pattern_common.xml
index 2913c5a..e440461 100644
--- a/res/layout-land/choose_lock_pattern_common.xml
+++ b/res/layout-land/choose_lock_pattern_common.xml
@@ -38,15 +38,6 @@
android:paddingRight="0dp"
android:paddingBottom="0dp">
- <!-- TODO b/249974175 Move into Glif header mixin -->
- <Button
- android:id="@+id/screen_lock_options"
- style="@style/SudGlifButton.Tertiary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/setup_lock_settings_options_button_label"
- android:visibility="gone"/>
-
<com.google.android.setupdesign.view.FillContentLayout
style="@style/LockPatternContainerStyle"
android:layout_width="wrap_content"
diff --git a/res/layout/choose_lock_password.xml b/res/layout/choose_lock_password.xml
index 5819774..c2eb13a 100644
--- a/res/layout/choose_lock_password.xml
+++ b/res/layout/choose_lock_password.xml
@@ -61,12 +61,6 @@
android:imeOptions="actionNext|flagNoExtractUi|flagForceAscii"
style="@style/TextAppearance.PasswordEntry"/>
- <androidx.recyclerview.widget.RecyclerView
- android:layout_marginTop="8dp"
- android:id="@+id/password_requirements_view"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
-
<CheckBox
android:id="@+id/auto_pin_confirm_enabler"
android:layout_marginTop="8dp"
@@ -91,14 +85,6 @@
android:textSize="16sp"
android:visibility="gone" />
- <Button
- android:id="@+id/screen_lock_options"
- style="@style/SudGlifButton.Tertiary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/setup_lock_settings_options_button_label"
- android:visibility="gone" />
-
</LinearLayout>
</com.google.android.setupdesign.GlifLayout>
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index 774f5cd..ddfa046 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -36,14 +36,6 @@
android:paddingLeft="0dp"
android:paddingRight="0dp">
- <Button
- android:id="@+id/screen_lock_options"
- style="@style/LockPatternButtonStyle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/setup_lock_settings_options_button_label"
- android:visibility="gone"/>
-
<com.google.android.setupdesign.view.FillContentLayout
style="@style/LockPatternContainerStyle"
android:layout_width="wrap_content"
diff --git a/res/layout/layout_color_selector.xml b/res/layout/layout_color_selector.xml
index c366add..a6b9cc8 100644
--- a/res/layout/layout_color_selector.xml
+++ b/res/layout/layout_color_selector.xml
@@ -14,161 +14,167 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/color_selector_root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:orientation="vertical">
-
+ android:padding="20dp"
+ android:clipToPadding="false"
+ android:scrollbarStyle="outsideOverlay">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:orientation="horizontal">
-
- <RadioButton
- android:id="@+id/color_radio_button_00"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_01_selector"
- android:contentDescription="@string/screen_flash_color_blue" />
-
- <Space
- android:layout_width="0dp"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:orientation="vertical">
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_marginBottom="10dp"
+ android:orientation="horizontal">
- <RadioButton
- android:id="@+id/color_radio_button_01"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_02_selector"
- android:contentDescription="@string/screen_flash_color_azure" />
+ <RadioButton
+ android:id="@+id/color_radio_button_00"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_01_selector"
+ android:contentDescription="@string/screen_flash_color_blue" />
- <Space
- android:layout_width="0dp"
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_01"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_02_selector"
+ android:contentDescription="@string/screen_flash_color_azure" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_02"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_03_selector"
+ android:contentDescription="@string/screen_flash_color_cyan" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_03"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_04_selector"
+ android:contentDescription="@string/screen_flash_color_spring_green" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_marginBottom="10dp"
+ android:orientation="horizontal">
- <RadioButton
- android:id="@+id/color_radio_button_02"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_03_selector"
- android:contentDescription="@string/screen_flash_color_cyan" />
+ <RadioButton
+ android:id="@+id/color_radio_button_04"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_05_selector"
+ android:contentDescription="@string/screen_flash_color_green" />
- <Space
- android:layout_width="0dp"
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_05"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_06_selector"
+ android:contentDescription="@string/screen_flash_color_chartreuse_green" />
+
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+ <RadioButton
+ android:id="@+id/color_radio_button_06"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_07_selector"
+ android:contentDescription="@string/screen_flash_color_yellow" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_07"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_08_selector"
+ android:contentDescription="@string/screen_flash_color_orange" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1" />
+ android:layout_marginBottom="10dp"
+ android:orientation="horizontal">
- <RadioButton
- android:id="@+id/color_radio_button_03"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_04_selector"
- android:contentDescription="@string/screen_flash_color_spring_green" />
+ <RadioButton
+ android:id="@+id/color_radio_button_08"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_09_selector"
+ android:contentDescription="@string/screen_flash_color_red" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_09"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_10_selector"
+ android:contentDescription="@string/screen_flash_color_rose" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_10"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_11_selector"
+ android:contentDescription="@string/screen_flash_color_magenta" />
+
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1" />
+
+ <RadioButton
+ android:id="@+id/color_radio_button_11"
+ android:layout_width="@dimen/screen_flash_color_button_frame_size"
+ android:layout_height="@dimen/screen_flash_color_button_frame_size"
+ android:button="@drawable/screen_flash_color_12_selector"
+ android:contentDescription="@string/screen_flash_color_violet" />
+
+ </LinearLayout>
</LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:orientation="horizontal">
-
- <RadioButton
- android:id="@+id/color_radio_button_04"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_05_selector"
- android:contentDescription="@string/screen_flash_color_green" />
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
-
- <RadioButton
- android:id="@+id/color_radio_button_05"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_06_selector"
- android:contentDescription="@string/screen_flash_color_chartreuse_green" />
-
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
- <RadioButton
- android:id="@+id/color_radio_button_06"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_07_selector"
- android:contentDescription="@string/screen_flash_color_yellow" />
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
-
- <RadioButton
- android:id="@+id/color_radio_button_07"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_08_selector"
- android:contentDescription="@string/screen_flash_color_orange" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="10dp"
- android:orientation="horizontal">
-
- <RadioButton
- android:id="@+id/color_radio_button_08"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_09_selector"
- android:contentDescription="@string/screen_flash_color_red" />
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
-
- <RadioButton
- android:id="@+id/color_radio_button_09"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_10_selector"
- android:contentDescription="@string/screen_flash_color_rose" />
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
-
- <RadioButton
- android:id="@+id/color_radio_button_10"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_11_selector"
- android:contentDescription="@string/screen_flash_color_magenta" />
-
- <Space
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1" />
-
- <RadioButton
- android:id="@+id/color_radio_button_11"
- android:layout_width="@dimen/screen_flash_color_button_frame_size"
- android:layout_height="@dimen/screen_flash_color_button_frame_size"
- android:button="@drawable/screen_flash_color_12_selector"
- android:contentDescription="@string/screen_flash_color_violet" />
-
- </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</ScrollView>
diff --git a/res/layout/layout_color_selector_dialog.xml b/res/layout/layout_color_selector_dialog.xml
index 70d4509..e107689 100644
--- a/res/layout/layout_color_selector_dialog.xml
+++ b/res/layout/layout_color_selector_dialog.xml
@@ -17,16 +17,12 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingBottom="24dp">
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
<com.android.settings.accessibility.ColorSelectorLayout
android:id="@+id/color_selector_preference"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
- android:layout_marginHorizontal="25dp"
- android:layout_marginTop="21dp"
- android:orientation="vertical" />
+ android:layout_height="wrap_content"/>
</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/locale_order_list.xml b/res/layout/locale_order_list.xml
index 5c1db15..da1eb62 100644
--- a/res/layout/locale_order_list.xml
+++ b/res/layout/locale_order_list.xml
@@ -27,11 +27,11 @@
android:clipChildren="true"
android:orientation="vertical">
- <com.android.settings.localepicker.LocaleRecyclerView
+ <androidx.recyclerview.widget.RecyclerView
android:id="@+id/dragList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:scrollbars="vertical"/>
+ android:scrollbars="none"/>
<Button
android:id="@+id/add_language"
diff --git a/res/layout/modifier_key_item.xml b/res/layout/modifier_key_item.xml
index a189479..683f631 100644
--- a/res/layout/modifier_key_item.xml
+++ b/res/layout/modifier_key_item.xml
@@ -19,8 +19,7 @@
android:layout_marginTop="8dip"
android:layout_marginBottom="8dip"
android:minHeight="?android:attr/listPreferredItemHeight"
- android:paddingEnd="?android:attr/scrollbarSize"
- android:layout_weight="1">
+ android:paddingEnd="?android:attr/scrollbarSize">
<ImageView
android:id="@+id/modifier_key_check_icon"
@@ -36,7 +35,7 @@
<TextView
android:id="@+id/modifier_key_text"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textDirection="locale"
@@ -46,4 +45,38 @@
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
+ <TextView
+ android:id="@+id/modifier_key_left_bracket"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:textDirection="locale"
+ android:padding="1dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_toEndOf="@+id/modifier_key_text"
+ android:fadingEdge="horizontal" />
+
+ <ImageView
+ android:id="@+id/modifier_key_action_key_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_toEndOf="@+id/modifier_key_left_bracket"
+ android:fadingEdge="horizontal"
+ android:tint="?android:attr/textColorPrimary"/>
+
+ <TextView
+ android:id="@+id/modifier_key_right_bracket"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:textDirection="locale"
+ android:padding="1dp"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:layout_toEndOf="@+id/modifier_key_action_key_icon"
+ android:fadingEdge="horizontal" />
+
+ <View android:layout_width="wrap_content"
+ android:layout_height="match_parent" />
+
</RelativeLayout>
diff --git a/res/layout/modifier_keys_custom_key.xml b/res/layout/modifier_keys_custom_key.xml
new file mode 100644
index 0000000..f390c00
--- /dev/null
+++ b/res/layout/modifier_keys_custom_key.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 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"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:gravity="center_vertical"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/selectableItemBackground">
+
+ <FrameLayout
+ android:id="@+id/icon_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <androidx.preference.internal.PreferenceImageView
+ android:id="@android:id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:maxWidth="48dp"
+ app:maxHeight="48dp" />
+ </FrameLayout>
+
+ <RelativeLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:layout_weight="1">
+
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textColor="?android:attr/textColorPrimary"
+ android:fadingEdge="horizontal" />
+
+ <TextView android:id="@+id/summary"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/title"
+ android:layout_alignStart="@+id/title"
+ android:layout_alignLeft="@+id/title"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorSecondary"
+ android:maxLines="4" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingStart="15dp"
+ android:layout_toEndOf="@+id/title"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/modifier_key_left_bracket"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textDirection="locale"
+ android:paddingStart="1dp"
+ android:paddingEnd="1dp"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textColor="?android:attr/textColorPrimary"
+ android:fadingEdge="horizontal" />
+
+ <ImageView
+ android:id="@+id/modifier_key_action_key_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:fadingEdge="horizontal"
+ android:tint="?android:attr/textColorPrimary"/>
+
+ <TextView
+ android:id="@+id/modifier_key_right_bracket"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textDirection="locale"
+ android:paddingStart="1dp"
+ android:paddingEnd="1dp"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textColor="?android:attr/textColorPrimary"
+ android:fadingEdge="horizontal" />
+ </LinearLayout>
+ </RelativeLayout>
+
+ <!-- Preference should place its actual preference widget here. -->
+ <LinearLayout android:id="@android:id/widget_frame"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center_vertical"
+ android:orientation="vertical" />
+</LinearLayout>
diff --git a/res/layout/preference_check_icon.xml b/res/layout/preference_check_icon.xml
index 1b759fc..bd0dd79 100644
--- a/res/layout/preference_check_icon.xml
+++ b/res/layout/preference_check_icon.xml
@@ -20,4 +20,5 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
- android:layout_marginHorizontal="16dp"/>
\ No newline at end of file
+ android:layout_marginHorizontal="16dp"
+ android:contentDescription="@*android:string/checked"/>
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index ee8b1d1..07e5ea6 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth is aangeskakel"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Sien alles"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Versteknotasapp"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Puntknoppiedruk"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (werkprofiel)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Skryf in teksvelde"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignoreer alle stilusknoppiedrukke"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatuur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Eerste dag van die week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Nommervoorkeure"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Gebruik appverstek"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Gebruik verstek"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sondag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernweergawe"</string>
<string name="build_number" msgid="9009733242117579826">"Bounommer"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-stelselopdatering"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batteryinligting"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nie beskikbaar nie"</string>
<string name="storage_settings" msgid="7472188817781592677">"Berging"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Berging en kas"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-adres"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Reeksnommer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tyd aanlyn"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Vervaardigingdatum"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum van eerste gebruik"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Siklustelling"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Onbeskikbaar"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Bereken tans…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Hernoem"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Monteer"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Dit sal alle wi‑fi- en Bluetooth-instellings terugstel. Jy kan nie hierdie handeling ontdoen nie."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Stel terug"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth en wi‑fi is teruggestel"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Vee uit"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Vee e-SIM-kaarte uit"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Dit sal geen mobielediensplanne kanselleer nie. Kontak jou diensverskaffer om vervanging-SIM\'s af te laai."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Stel instellings terug"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Gebruik ook patroon om dié toestel te ontsluit"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Gebruik ook PIN om dié toestel te ontsluit"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Gebruik ook wagwoord om dié toestel te ontsluit"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifieer patroon"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifieer PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifieer wagwoord"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Gebruik jou toestelpatroon om voort te gaan"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Voer jou toestel-PIN in om voort te gaan"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Voer jou toestelwagwoord in om voort te gaan"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Verkeerde PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Verkeerde wagwoord"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Verkeerde patroon"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Bekyk volgens apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Bekyk volgens stelsels"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Die siklustelling sal weens gehalte-inspeksies voor versending dalk nie nul wees wanneer dit vir die eerste keer gebruik word nie"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Proses-statistieke"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Bleeksiel-statistieke vir lopende prosesse"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Berginggebruik"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vee gasaktiwiteit uit?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Programme en data van hierdie gastesessie sal nou uitgevee word, en alle toekomstige gasaktiwiteit sal uitgevee word elke keer wanneer jy gasmodus verlaat"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"vee uit, gas, aktiwiteit, verwyder, data, besoeker"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Laat gas toe om foon te gebruik"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Laat gas toe om foonoproepe te maak"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Oproepgeskiedenis sal met gasgebruiker gedeel word"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Skakel foonoproepe en SMS aan"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Maak hierdie gebruiker ’n admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"netwerk, selnetwerktoestand, dienstoestand, seinsterkte, selnetwerktipe, swerwing, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"reeksnommer, hardewareweergawe"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery-inligting, vervaardigingdatum, siklustelling, eerste gebruik"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android-sekuriteitregstellingvlak, basisband-weergawe, kernweergawe"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, lig, donker, modus, ligsensitiwiteit, fotofobie, maak donkerder, maak donker, donkermodus, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"donker tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Toestelverstek"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Kon nie oorlegger toepas nie"</string>
<string name="special_access" msgid="1767980727423395147">"Spesiale apptoegang"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> programme kan onbeperkte data gebruik</item>
- <item quantity="one">1 program kan onbeperkte data gebruik</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Sien meer"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Lang agtergrondtake"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Laat agtergrondtake toe wat lank neem"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Wissel veranderinge aan programversoenbaarheid"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Veranderinge aan by verstek geaktiveer"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Veranderinge aan by verstek gedeaktiveer"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Geen programme nie"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Veranderinge aan programversoenbaarheid kan net vir ontfoutbare programme gewysig word. Installeer \'n ontfoutbare program en probeer weer."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Hang van \'n ander instelling af"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Rekening"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Deaktiveer kindprosesbeperkings"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Deaktiveer beperkings op die stelselhulpbrongebruik van die app se kindprosesse"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Verplig aktivering van Notas-rol"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktiveer integrasie van stelsels om notas te maak met die Notas-rol. Doen niks as die Notas-rol reeds geaktiveer is nie."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktiveer integrasie van stelsels om notas te maak met die Notas-rol. Doen niks as die Notas-rol reeds geaktiveer is nie. Vereis herselflaai."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Saai uit"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Saai <xliff:g id="CURRENTAPP">%1$s</xliff:g> uit"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Luister na uitsendings wat in jou omtrek speel"</string>
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
index 03f79b4..488bd6b 100644
--- a/res/values-am/arrays.xml
+++ b/res/values-am/arrays.xml
@@ -88,7 +88,7 @@
<string-array name="bluetooth_audio_routing_titles">
<item msgid="3488687531285795335">"የመተግበሪያ ነባሪን ይጠቀሙ"</item>
<item msgid="5112879855377353813">"በመስሚያ መሣሪያ ያጫውቱ"</item>
- <item msgid="4853360663119482646">"በስልክ ድምፅ ማውጫ ያጫውቱ"</item>
+ <item msgid="4853360663119482646">"በስልክ ድምጽ ማውጫ ያጫውቱ"</item>
</string-array>
<string-array name="wifi_signal">
<item msgid="199360311367724149">"ደካማ"</item>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 5301203..614a207 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -69,7 +69,7 @@
<string name="bluetooth_device_controls_specific" msgid="7706863288754077107">"ለዚህ መሳሪያ"</string>
<string name="bluetooth_audio_routing_title" msgid="5541729245424856226">"የኦዲዮ ውጽዓት"</string>
<string name="bluetooth_audio_routing_about_title" msgid="5773336779246891954">"ስለኦዲዮ ውፅዓት"</string>
- <string name="bluetooth_audio_routing_summary" msgid="7180947533985969066">"ድምጾችን ወደ የመስሚያ መሣሪያዎ ወይም ወደ ስልክዎ ድምፅ ማውጫ ያዙሩ"</string>
+ <string name="bluetooth_audio_routing_summary" msgid="7180947533985969066">"ድምጾችን ወደ የመስሚያ መሣሪያዎ ወይም ወደ ስልክዎ ድምጽ ማውጫ ያዙሩ"</string>
<string name="bluetooth_screen_related" msgid="7976543255501825536">"ተዛማጅ"</string>
<string name="bluetooth_ringtone_title" msgid="3177308461256892085">"የጥሪ ቅላጼ እና ማንቂያዎች"</string>
<string name="bluetooth_call_title" msgid="6851464952021874072">"ኦዲዮ በጥሪዎች ወቅት"</string>
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ብሉቱዝ በርቷል"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ሁሉንም ይመልከቱ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ብሮስፌ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ነባሪ የማስታወሻዎች መተግበሪያ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"የጭራ አዝራርን መጫን"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (የሥራ መገለጫ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"በጽሑፍ መስኮች ውስጥ ይፃፉ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ሁሉንም የብሮስፌ አዝራር መጫኖችን ችላ ይበሉ"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ብሮስፌ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"የሙቀት መጠን"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"የሳምንቱ የመጀመሪያ ቀን"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"የቁጥሮች አማራጮች"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"የመተግበሪያ ነባሪን ይጠቀሙ"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ነባሪውን ይጠቀሙ"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ሴልሺየስ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ፋራናይት (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"እሑድ"</string>
@@ -954,7 +955,7 @@
<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="8102786488994263815">"የድንገተኛ አደጋ አድራሻ"</string>
- <string name="emergency_address_summary" msgid="3022628750270626473">"በWi-Fi ላይ የአስቸኳይ አደጋ ጥሪ ሲያደርጉ እንደ የእርስዎ አካባቢ ሆኖ ሥራ ላይ ይውላል"</string>
+ <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>
<string name="wifi_calling_settings_activation_instructions" msgid="3936067355828542266">"የWi-Fi ጥሪ አደራረግን አግብር"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"የከርነል ሥሪት"</string>
<string name="build_number" msgid="9009733242117579826">"የግንባታ ቁጥር"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ሥርዓት ዝማኔ"</string>
+ <string name="battery_info" msgid="7873528123969546728">"የባትሪ መረጃ"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"አይገኝም"</string>
<string name="storage_settings" msgid="7472188817781592677">"ማከማቻ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ማከማቻ እና መሸጎጫ"</string>
@@ -1156,12 +1158,16 @@
<string name="status_bt_address" msgid="6919660304578476547">"የብሉቱዝ አድራሻ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"መለያ ቁጥር"</string>
<string name="status_up_time" msgid="1274778533719495438">"የቆየበት ሰዓት"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"የተመረተበት ቀን"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ጥቅም ላይ የዋለበት የመጀመሪያ ቀን"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"የዑደት ቁጥር"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"አይገኝም"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"በማስላት ላይ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"እንደገና ሰይም"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"አፈናጥ"</string>
<string name="storage_menu_unmount" msgid="8171552487742912282">"አስወጣ"</string>
<string name="storage_menu_format" msgid="8903698999905354146">"ኤስዲ ካርድን ለተንቀሳቃሽ ማከማቻ ቅርጸት ይስሩበት"</string>
- <string name="storage_menu_format_button" msgid="7623565190643699626">"የካርድ ቅርጸት ሥራ"</string>
+ <string name="storage_menu_format_button" msgid="7623565190643699626">"የካርድ ቅርጸት ስራ"</string>
<string name="storage_menu_format_public" msgid="5567214442727034630">"እንደተንቀሳቃሽ ቅረጽ"</string>
<string name="storage_menu_format_option" msgid="4886059624052908432">"ቅርጸት"</string>
<string name="storage_menu_migrate" msgid="2196088149560070193">"ውሂብ ስደድ"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ይህ ሁሉንም የWi-Fi እና የብሉቱዝ ቅንብሮች ዳግም ያስጀምራል። ይህን ተግባር መቀልበስ አይችሉም።"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ዳግም አስጀምር"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ብሉቱዝ እና Wi-Fi ዳግም ተጀምረዋል"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ደምስስ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ኢሲሞችን ደምስስ"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ይህ ማናቸውም የተንቀሳቃሽ ስልክ አገልግሎት ዕቅዶችን አይሰርዝም። ተተኪ ሲሞችን ለማውረድ፣ የአገልግሎት አቅራቢዎን ያነጋግሩ።"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ቅንብሮችን ዳግም ያቀናብሩ"</string>
@@ -1382,7 +1387,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"የአካባቢ የሰዓት ሰቅ ማወቂያ ተሰናክሏል"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"የአካባቢ የሰዓት ሰቅ ማወቂያ አይደገፍም"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"የአካባቢ የሰዓት ሰቅ ማወቂያ ለውጦች አይፈቀዱም"</string>
- <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"የሰዓት ሰቅን ለማቀናበር አካባቢ ሥራ ላይ ሊውል ይችላል"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"የሰዓት ሰቅን ለማቀናበር አካባቢ ስራ ላይ ሊውል ይችላል"</string>
<string name="about_settings_summary" msgid="4831942939227432513">"የሕግ መረጃ፣ኹነታ፣ የሶፍትዌር ሥሪት እይ"</string>
<string name="legal_information" msgid="7509900979811934843">"የህግ መረጃ"</string>
<string name="manual" msgid="3651593989906084868">"መመሪያ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"እንዲሁም ይህን መሣሪያ ለመክፈት ስርዓተ ጥለት ይጠቀሙ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"እንዲሁም ይህን መሣሪያ ለመክፈት ፒን ይጠቀሙ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"እንዲሁም ይህን መሣሪያ ለመክፈት የይለፍ ቃል ይጠቀሙ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ሥርዓተ-ጥለትን ያረጋግጡ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ፒን ያረጋግጡ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"የይለፍ ቃል ያረጋግጡ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ለመቀጠል የመሣሪያዎን ስርዓተ ጥለት ይጠቀሙ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ለመቀጠል የመሣሪያዎን ፒን ያስገቡ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ለመቀጠል የመሣሪያዎን የይለፍ ቃል ያስገቡ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"የተሳሳተ ፒን"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"የተሳሳተ ይለፍ ቃል"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"የተሳሳተ ስርዓተ ጥለት"</string>
@@ -1593,7 +1604,7 @@
<string name="app_install_details_summary" msgid="2013043219249992373">"መተግበሪያ ከ<xliff:g id="APP_STORE">%1$s</xliff:g> ተጭኗል"</string>
<string name="instant_app_details_summary" msgid="417197491598208216">"በ<xliff:g id="APP_STORE">%1$s</xliff:g> ላይ ተጨማሪ መረጃ"</string>
<string name="app_ops_running" msgid="6127474473137428721">"ሩጫ"</string>
- <string name="app_ops_never_used" msgid="9038133162371204506">"(በጭራሽ ሥራ ላይ ያልዋለ)"</string>
+ <string name="app_ops_never_used" msgid="9038133162371204506">"(በጭራሽ ስራ ላይ ያልዋለ)"</string>
<string name="storageuse_settings_title" msgid="3125650750657988194">"የማከማቻ ጥቅም"</string>
<string name="service_restarting" msgid="5104563288155809226">"ዳግም በማስጀመር ላይ"</string>
<string name="cached" msgid="5379485147573438201">"የተሸጎጠ የዳራ ሂደት"</string>
@@ -1731,7 +1742,7 @@
<string name="keyboard_layout_picker_category_title" msgid="2369473692906329772">"አካላዊ የቁልፍ ሰሌዳ አቀማመጦች"</string>
<string name="user_dict_settings_title" msgid="680410651924276991">"የግል መዝገበ-ቃላት"</string>
<string name="user_dict_settings_for_work_title" msgid="1245315720684961770">"የስራ የግል መዝገበ-ቃላት"</string>
- <string name="user_dict_settings_summary" msgid="4939694372338975081">"እንደ ፊደል አራሚ ባሉ መተግበሪያዎች ውስጥ ሥራ ላይ የሚውሉ ቃላትን ያክሉ"</string>
+ <string name="user_dict_settings_summary" msgid="4939694372338975081">"እንደ ፊደል አራሚ ባሉ መተግበሪያዎች ውስጥ ስራ ላይ የሚውሉ ቃላትን ያክሉ"</string>
<string name="user_dict_settings_add_menu_title" msgid="8046882347281382968">"አክል"</string>
<string name="user_dict_settings_add_dialog_title" msgid="3485845465134083084">"ወደ መዝገበ ቃላት አክል"</string>
<string name="user_dict_settings_add_screen_title" msgid="1866408024073475379">"ሐረግ"</string>
@@ -1761,7 +1772,7 @@
<string name="allow_bind_app_widget_activity_always_allow_bind" msgid="7268758525344468364">"<xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> ፍርግሞች እንዲፈጥርና ውሂባቸውን እንዲደርስ ሁልጊዜ ፍቀድ"</string>
<string name="testing_usage_stats" msgid="4660643799010906365">"የአጠቃቀም ስታስቲክስ"</string>
<string name="usage_stats_sort_by_usage_time" msgid="2927310334119998301">"በአጠቃቀም ጊዜ ደርድር"</string>
- <string name="usage_stats_sort_by_last_time_used" msgid="7039213339779884017">"ለመጨረሻ ጊዜ ሥራ ላይ በዋለበት ጊዜ ደርድር"</string>
+ <string name="usage_stats_sort_by_last_time_used" msgid="7039213339779884017">"ለመጨረሻ ጊዜ ስራ ላይ በዋለበት ጊዜ ደርድር"</string>
<string name="usage_stats_sort_by_app_name" msgid="4463833145514850478">"በመተግበሪያ ስም ደርድር"</string>
<string name="last_time_used_label" msgid="2639712813493534074">"ለመጨረሻ ጊዜ ጥቅም ላይ የዋለበት ጊዜ"</string>
<string name="usage_time_label" msgid="9105343335151559883">"ጊዜ አጠቃቀም"</string>
@@ -2132,7 +2143,7 @@
<string name="print_settings" msgid="8519810615863882491">"ማተም"</string>
<string name="print_settings_summary_no_service" msgid="6721731154917653862">"ጠፍቷል"</string>
<string name="print_settings_summary" msgid="1458773840720811915">"{count,plural, =1{1 የህትመት አገልግሎት በርቷል}one{# የህትመት አገልግሎት በርቷል}other{# የህትመት አገልግሎቶች በርተዋል}}"</string>
- <string name="print_jobs_summary" msgid="7040836482336577323">"{count,plural, =1{1 የህትመት ሥራ}one{# የህትመት ሥራ}other{# የህትመት ሥራዎች}}"</string>
+ <string name="print_jobs_summary" msgid="7040836482336577323">"{count,plural, =1{1 የህትመት ስራ}one{# የህትመት ስራ}other{# የህትመት ስራዎች}}"</string>
<string name="print_settings_title" msgid="7680498284751129935">"የህትመት አገልግሎቶች"</string>
<string name="print_no_services_installed" msgid="7554057966540602692">"ምንም አገልግሎቶች አልተጫኑም"</string>
<string name="print_no_printers_found" msgid="4833082484646109486">"ምንም አታሚዎች አልተገኙም"</string>
@@ -2146,7 +2157,7 @@
<string name="print_searching_for_printers" msgid="5401413178028348800">"አታሚዎችን በመፈለግ ላይ"</string>
<string name="print_service_disabled" msgid="9185935228930987786">"አገልግሎት ተሰናክሏል"</string>
<string name="print_print_jobs" msgid="2605944855933091183">"የህትመት ስራዎች"</string>
- <string name="print_print_job" msgid="8477859161886726608">"የህትመት ሥራ"</string>
+ <string name="print_print_job" msgid="8477859161886726608">"የህትመት ስራ"</string>
<string name="print_restart" msgid="4424096106141083945">"እንደገና ጀምር"</string>
<string name="print_cancel" msgid="7611266511967568501">"ይቅር"</string>
<string name="print_job_summary" msgid="277210060872032969">"<xliff:g id="PRINTER">%1$s</xliff:g>\n<xliff:g id="TIME">%2$s</xliff:g>"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"በመተግበሪያዎች ይመልከቱ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"በሥርዓቶች ይመልከቱ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ከመላክ በፊት ባሉ የጥራት ፍተሻዎች ምክንያት በመጀመሪያው ጥቅም ላይ የዑደቱ ቁጠር ዜሮ ላይሆን ይችላል"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"የሂደት ስታትስቲክስ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"እያሄዱ ስላሉ ሂደቶች ያሉ ዝርዝር ስታትስቲክስ"</string>
<string name="app_memory_use" msgid="7559666138324410666">"የማህደረ ትውስታ አጠቃቀም"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"የእንግዳ እንቅስቃሴ ይሰረዝ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"የዚህ የእንግዳ ክፍለ-ጊዜ መተግበሪያዎች እና ውሂብ አሁን ይሰረዛሉ እና ከእንግዳ ሁነታ በወጡ ቁጥር ሁሉም የወደፊት የእንግዳ እንቅስቃሴዎች ይሰረዛሉ።"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ሰርዝ፣ እንግዳ፣ እንቅስቃሴ፣ አስወግድ፣ ውሂብ፣ ጎብኚ፣ ደምስስ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"እንግዳ ስልኩን እንዲጠቀሙ ይፍቀዱ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"እንግዳው ስልክ እንዲደውል ፍቀድ"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"የጥሪ ታሪክ ለዚህ እንግዳ ተጠቃሚ ይጋራል"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ስልክ ጥሪዎችን እና ኤስኤምኤስን አብራ"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ይህን ተጠቃሚ አስተዳዳሪ ያድርጉ"</string>
@@ -2748,7 +2760,7 @@
<string name="nfc_payment_set_default_instead_of" msgid="565237441045013280">"ንክኪ-አልባ ተርሚናሉ ላይ በ<xliff:g id="APP_0">%1$s</xliff:g> ይክፈሉ።\n\nይህ <xliff:g id="APP_1">%2$s</xliff:g>ን እንደ ነባሪው የክፍያ መተግበሪያዎን ይተካዋል።"</string>
<string name="nfc_payment_btn_text_set_deault" msgid="1821065137209590196">"ነባሪ አቀናብር"</string>
<string name="nfc_payment_btn_text_update" msgid="5159700960497443832">"አዘምን"</string>
- <string name="nfc_work_text" msgid="2496515165821504077">"ሥራ"</string>
+ <string name="nfc_work_text" msgid="2496515165821504077">"ስራ"</string>
<string name="restriction_settings_title" msgid="4293731103465972557">"ገደቦች"</string>
<string name="restriction_menu_reset" msgid="92859464456364092">"ገደቦችን አስወግድ"</string>
<string name="restriction_menu_change_pin" msgid="2505923323199003718">"ፒን ቀይር"</string>
@@ -2808,7 +2820,7 @@
<string name="restriction_location_enable_summary" msgid="7139292323897390221">"መተግበሪያዎች የአካባቢ መረጃዎትን እንዲጠቀሙ ይፍቀዱ"</string>
<string name="wizard_back" msgid="8257697435061870191">"ተመለስ"</string>
<string name="wizard_next" msgid="3884832431439072471">"ቀጣይ"</string>
- <string name="wizard_back_adoptable" msgid="1447814356855134183">"በሌላ መንገድ ቅርጸት ሥራ"</string>
+ <string name="wizard_back_adoptable" msgid="1447814356855134183">"በሌላ መንገድ ቅርጸት ስራ"</string>
<string name="regulatory_info_text" msgid="1154461023369976667"></string>
<string name="sim_settings_title" msgid="2254609719033946272">"ሲሞች"</string>
<string name="sim_cellular_data_unavailable" msgid="4653591727755387534">"የተንቀሳቃሽ ስልክ ውሂብ አይገኝም"</string>
@@ -2818,7 +2830,7 @@
<string name="select_sim_for_sms" msgid="5335510076282673497">"ለኤስኤምኤስ ሲም ይምረጡ"</string>
<string name="data_switch_started" msgid="6292759843974720112">"የውሂብ ሲም በመቀየር ላይ፣ ይህ እስከ አንድ ደቂቃ ድረስ ሊወስድ ይችላል…"</string>
<string name="select_specific_sim_for_data_title" msgid="5851980301321577985">"ለተንቀሳቃሽ ስልክ ውሂብ <xliff:g id="NEW_SIM">%1$s</xliff:g>ን ይጠቀሙ?"</string>
- <string name="select_specific_sim_for_data_msg" msgid="7401698123430573637">"ወደ <xliff:g id="NEW_SIM">%1$s</xliff:g> ከቀየሩ <xliff:g id="OLD_SIM">%2$s</xliff:g> ከእንግዲህ ለተንቀሳቃሽ ስልክ ውሂብ ሥራ ላይ አይውልም።"</string>
+ <string name="select_specific_sim_for_data_msg" msgid="7401698123430573637">"ወደ <xliff:g id="NEW_SIM">%1$s</xliff:g> ከቀየሩ <xliff:g id="OLD_SIM">%2$s</xliff:g> ከእንግዲህ ለተንቀሳቃሽ ስልክ ውሂብ ስራ ላይ አይውልም።"</string>
<string name="select_specific_sim_for_data_button" msgid="6571935548920603512">"<xliff:g id="NEW_SIM">%1$s</xliff:g>ን ይጠቀሙ"</string>
<string name="select_sim_for_calls" msgid="7843107015635189868">"ይደውሉ ከዚህ ጋር"</string>
<string name="sim_name_hint" msgid="8231524869124193119">"የሲም ስም ያስገቡ"</string>
@@ -2913,7 +2925,7 @@
<string name="keywords_color_temperature" msgid="8159539138837118453">"ቀለም፣ ሙቀት፣ D65፣ D73፣ ነጭ፣ ቢጫ፣ ሰማያዊ፣ ለብ ያለ፣ ቀዝቃዛ"</string>
<string name="keywords_lockscreen" msgid="3656926961043485797">"ለማስከፈት ያንሸራትቱ፣ የይለፍ ቃል፣ ስርዓተ-ጥለት፣ ፒን"</string>
<string name="keywords_app_pinning" msgid="1564144561464945019">"ማያ ገጽን መሰካት"</string>
- <string name="keywords_profile_challenge" msgid="5135555521652143612">"የሥራ ፈተና፣ ሥራ፣ መገለጫ"</string>
+ <string name="keywords_profile_challenge" msgid="5135555521652143612">"የስራ ፈተና፣ ስራ፣ መገለጫ"</string>
<string name="keywords_unification" msgid="2677472004971453468">"የሥራ መገለጫ፣ የሚተዳደር መገለጫ፣ አዋህድ፣ ውህደት፣ ሥራ፣ መገለጫ"</string>
<string name="keywords_gesture" msgid="3456930847450080520">"የጣት ምልክቶች"</string>
<string name="keywords_wallet" msgid="3757421969956996972">"Wallet"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"አውታረ መረብ፣ የተንቀሳቃሽ ስልክ አውታረ መረብ ሁኔታ፣ አገልግሎት ሁኔታ፣ የምልክት ጥንካሬ፣ የተንቀሳቃሽ ስልክ አውታረ መረብ ዓይነት፣ በማዛወር ላይ፣ iccid፣ eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"ተከታታይ ቁጥር፣ የሃርድዌር ስሪት"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"የባትሪ መረጃ፣ የተመረተበት ቀን፣ የዑደት ቁጥር፣ የመጀመሪያ ጥቅም"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"የandroid ደህንነት መጠገኛ ደረጃ፣ የመሰረተ-ድግ ስሪት፣ የአውራ ከዋኝ ስሪት"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ገጽታ፣ ብርሃን፣ ጨለማ፣ ሁነታ፣ ቀላል ስሜታዊነት፣ ፎቶፎቢያ፣ ይበልጥ ጨለማ ያድርጉ፣ ጨለማ፣ ጨለማ ሁነታ፣ ማይግሬ"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ጨለማ ገጽታ"</string>
@@ -3040,7 +3053,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="2152115038156049608">"ማሳወቂያዎች ሲመጡ ስልክዎ ድምፅ አያሰማም ወይም አይነዝርም።"</string>
<string name="zen_mode_restrict_notifications_hide" msgid="5997930361607752541">"ማሳወቂያዎች ላይ ምንም ምስሎች ወይም ድምፅ የለም"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="6005445725686969583">"ማሳወቂያዎችን አያዩም ወይም አይሰሙም።"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="3761837271201073330">"የእርስዎ ስልክ አዲስ ወይም ነባር ማሳወቂያዎችን አያሳይም፣ ለእነሱ አይነዝርም ወይም ድምፅ አያሰማም። ለመሣሪያ እንቅስቃሴ ወሳኝ የሆኑ ማሳወቂያዎች እና ሁኔታ አሁንም እንደሚታዩ ልብ ይበሉ።\n\nአትረብሽን ሲያጠፉት ያመለጡ ማሳወቂያዎችን ከማያ ገጽዎ አናት ወደ ታች በማንሸራተት ያግኙ።"</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="3761837271201073330">"የእርስዎ ስልክ አዲስ ወይም ነባር ማሳወቂያዎችን አያሳይም፣ ለእነሱ አይነዝርም ወይም ድምጽ አያሰማም። ለመሣሪያ እንቅስቃሴ ወሳኝ የሆኑ ማሳወቂያዎች እና ሁኔታ አሁንም እንደሚታዩ ልብ ይበሉ።\n\nአትረብሽን ሲያጠፉት ያመለጡ ማሳወቂያዎችን ከማያ ገጽዎ አናት ወደ ታች በማንሸራተት ያግኙ።"</string>
<string name="zen_mode_restrict_notifications_custom" msgid="5469078057954463796">"ብጁ"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="4303255634151330401">"ብጁ ቅንብን አንቃ"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="5062332754972217218">"ብጁ ቅንብን አስወግድ"</string>
@@ -3261,7 +3274,7 @@
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"አጥፋ"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"ይቅር"</string>
<string name="notif_type_ongoing" msgid="135675014223627555">"ቅጽበታዊ"</string>
- <string name="notif_type_ongoing_summary" msgid="2348867528527573574">"ሥራ ላይ እየዋሉ ያሉ መተግበሪያዎች፣ አሰሳ፣ የስልክ ጥሪዎች እና ተጨማሪ ላይ ቀጣይ የመልዕክት ልውውጦች"</string>
+ <string name="notif_type_ongoing_summary" msgid="2348867528527573574">"ስራ ላይ እየዋሉ ያሉ መተግበሪያዎች፣ አሰሳ፣ የስልክ ጥሪዎች እና ተጨማሪ ላይ ቀጣይ የመልዕክት ልውውጦች"</string>
<string name="notif_type_conversation" msgid="4383931408641374979">"ውይይቶች"</string>
<string name="notif_type_conversation_summary" msgid="179142405410217101">"ኤስኤምኤስ፣ የጽሑፍ መልዕክቶች እና ሌላ የመልዕክት ልውውጦች"</string>
<string name="notif_type_alerting" msgid="4713073696855718576">"ማሳወቂያዎች"</string>
@@ -3289,7 +3302,7 @@
<string name="picture_in_picture_app_detail_title" msgid="4442235098255164650">"ሥዕል-ላይ-ሥዕል"</string>
<string name="picture_in_picture_app_detail_switch" msgid="8544190716075624017">"ሥዕል-በሥዕል-ውስጥ ፍቀድ"</string>
<string name="picture_in_picture_app_detail_summary" msgid="2503211101305358849">"ይህ መተግበሪያ ክፍት ሆኖ ሳለ ወይም ከተዉት በኋላ (ለምሳሌ፦ አንድ ቪዲዮ ለመመልከት) የስዕል-በስዕል ውስጥ መስኮት እንዲፈጥር ይፍቀዱለት። ይህ መስኮት እየተጠቀሙባቸው ባሉ ሌሎች መተግበሪያዎች ላይ ያሳያል።"</string>
- <string name="interact_across_profiles_title" msgid="7285906999927669971">"የተገናኘ ሥራ እና የግላዊነት መተግበሪያዎች"</string>
+ <string name="interact_across_profiles_title" msgid="7285906999927669971">"የተገናኘ ስራ እና የግላዊነት መተግበሪያዎች"</string>
<string name="interact_across_profiles_summary_allowed" msgid="1365881452153799092">"ተገናኝቷል"</string>
<string name="interact_across_profiles_summary_not_allowed" msgid="5802674212788171790">"አልተገናኘም"</string>
<string name="interact_across_profiles_empty_text" msgid="419061031064397168">"ምንም የተገናኙ መተግበሪያዎች የሉም"</string>
@@ -3534,8 +3547,8 @@
<string name="permissions_usage_summary" msgid="6784310472062516454">"የትኛዎቹ መተግበሪያዎች ፈቃዶችን በቅርቡ እንደጠቀሙ አሳይ"</string>
<string name="unused_apps" msgid="4566272194756830656">"ጥቅም ላይ ያልዋሉ መተግበሪያዎች"</string>
<string name="unused_apps_summary" msgid="4236371818881973021">"{count,plural, =1{# ሥራ ላይ ያልዋለ መተግበሪያ}one{# ሥራ ላይ ያልዋለ መተግበሪያ}other{# ሥራ ላይ ያልዋሉ መተግበሪያዎች}}"</string>
- <string name="unused_apps_category" msgid="8954930958175500851">"ሥራ ላይ ያልዋሉ የመተግበሪያ ቅንብሮች"</string>
- <string name="unused_apps_switch" msgid="7595419855882245772">"የመተግበሪያ እንቅስቃሴ ሥራ ላይ ካልዋለ ባለበት አቁም"</string>
+ <string name="unused_apps_category" msgid="8954930958175500851">"ስራ ላይ ያልዋሉ የመተግበሪያ ቅንብሮች"</string>
+ <string name="unused_apps_switch" msgid="7595419855882245772">"የመተግበሪያ እንቅስቃሴ ስራ ላይ ካልዋለ ባለበት አቁም"</string>
<string name="unused_apps_switch_summary" msgid="2171098908014596802">"ፈቃዶችን አስወግድ፣ ጊዜያዊ ፋይሎችን ሰርዝ እና ማሳወቂያዎችን አቁም"</string>
<string name="filter_all_apps" msgid="6645539744080251371">"ሁሉም መተግበሪያዎች"</string>
<string name="filter_enabled_apps" msgid="8868356616126759124">"የተጫኑ መተግበሪያዎች"</string>
@@ -3702,7 +3715,7 @@
<string name="apps_summary" msgid="4007416751775414252">"<xliff:g id="COUNT">%1$d</xliff:g> መተግበሪያዎች ተጭነዋል"</string>
<string name="storage_summary" msgid="5903562203143572768">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> ጥቅም ላይ ውሏል - <xliff:g id="FREE_SPACE">%2$s</xliff:g> ነፃ"</string>
<string name="display_dashboard_summary" msgid="1599453894989339454">"ጠቆር ያለ ገጽታ፣ የቅርጸ-ቁምፊ መጠን፣ ብሩህነት"</string>
- <string name="memory_summary" msgid="8221954450951651735">"በአማካይ <xliff:g id="USED_MEMORY">%1$s</xliff:g> ከ<xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> ማህደረ ትውስጥ ሥራ ላይ ውሏል"</string>
+ <string name="memory_summary" msgid="8221954450951651735">"በአማካይ <xliff:g id="USED_MEMORY">%1$s</xliff:g> ከ<xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> ማህደረ ትውስጥ ስራ ላይ ውሏል"</string>
<string name="users_summary" msgid="8473589474976307510">"እንደ <xliff:g id="USER_NAME">%1$s</xliff:g> ሆነው ገብተዋል።"</string>
<string name="android_version_summary" msgid="7818952662015042768">"ወደ Android <xliff:g id="VERSION">%1$s</xliff:g> ተዘምኗል"</string>
<string name="android_version_pending_update_summary" msgid="5404532347171027730">"ዝማኔ ይገኛል"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"የመሣሪያ ነባሪ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"የላይ ሽፋንን ተግባራዊ ማድረግ አልተሳካም"</string>
<string name="special_access" msgid="1767980727423395147">"ልዩ የመተግበሪያ መዳረሻ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> መተግበሪያዎች ያልተገደበ ውሂብ ሊጠቀሙ ይችላሉ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> መተግበሪያዎች ያልተገደበ ውሂብ ሊጠቀሙ ይችላሉ</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ተጨማሪ ይመልከቱ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ረዥም የዳራ ተግባሮች"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ረዥም ጊዜ የሚያሄዱ የዳራ ተግባሮችን ፍቀድ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"የመተግበሪያ ተኳኋኝነት ለውጦችን ይቀያይሩ"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ነባሪ የነቁ ለውጦች"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ነባሪ የተሰናከሉ ለውጦች"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ምንም መተግበሪያዎች አይገኙም"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"የመተግበሪያ ተኳኋኝነት ለውጦች ሊታረሙ ለሚችሉ መተግበሪያዎች ብቻ ነው ሊቀየሩ የሚችሉት። ሊታረም የሚችል መተግበሪያን ይጫኑ እና እንደገና ይሞክሩ"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"በሌላ ቅንብር ላይ ይመረኮዛል"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"መለያ"</string>
@@ -4257,7 +4265,7 @@
<string name="mobile_network_inactive_esim" msgid="8777415108263057939">"ንቁ ያልሆነ / ኢሲም"</string>
<string name="mobile_network_sim_name" msgid="3187192894150386537">"የሲም ስም እና ቀለም"</string>
<string name="mobile_network_sim_name_label" msgid="1452440641628369625">"ስም"</string>
- <string name="mobile_network_sim_color_label" msgid="5293944087609632340">"ቀለም (በተኳኋኝ መተግበሪያዎች ሥራ ላይ የሚውል)"</string>
+ <string name="mobile_network_sim_color_label" msgid="5293944087609632340">"ቀለም (በተኳኋኝ መተግበሪያዎች ስራ ላይ የሚውል)"</string>
<string name="mobile_network_sim_name_rename" msgid="5967588549571582924">"አስቀምጥ"</string>
<string name="mobile_network_use_sim_on" msgid="7298332437547707908">"ሲም ይጠቀሙ"</string>
<string name="mobile_network_use_sim_off" msgid="6303281166199670639">"ጠፍቷል"</string>
@@ -4331,7 +4339,7 @@
<string name="choose_sim_activating" msgid="9035902671985449448">"በማግበር ላይ<xliff:g id="ELLIPSIS">…</xliff:g>"</string>
<string name="choose_sim_could_not_activate" msgid="2154564459842291617">"አሁን ማግበር አልተቻለም"</string>
<string name="switch_sim_dialog_title" msgid="5407316878973237773">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>ን ይጠቀሙ?"</string>
- <string name="switch_sim_dialog_text" msgid="7530186862171635464">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> ለተንቀሳቃሽ ስልክ ውሂብ፣ ጥሪዎች እና ኤስኤምኤስ ሥራ ላይ ይውላል።"</string>
+ <string name="switch_sim_dialog_text" msgid="7530186862171635464">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> ለተንቀሳቃሽ ስልክ ውሂብ፣ ጥሪዎች እና ኤስኤምኤስ ስራ ላይ ይውላል።"</string>
<string name="switch_sim_dialog_no_switch_title" msgid="809763410787744247">"ምንም ገቢር ሲሞች የሉም"</string>
<string name="switch_sim_dialog_no_switch_text" msgid="7053939850026876088">"የተንቀሳቃሽ ስልክ ውሂብን፣ የስልክ ጥሪ ባህሪያትን እና ኤስኤምኤስን ለመጠቀም ወደ የእርስዎ አውታረ መረብ ቅንብሮች ይሂዱ።"</string>
<string name="sim_card_label" msgid="6263064316075963775">"ሲም"</string>
@@ -4506,7 +4514,7 @@
<string name="default_active_sim_calls" msgid="2390973682556353558">"ጥሪዎች"</string>
<string name="default_active_sim_sms" msgid="8041498593025994921">"ኤስኤምኤስ"</string>
<string name="default_active_sim_mobile_data" msgid="6798083892814045301">"የተንቀሳቃሽ ስልክ ውሂብ"</string>
- <string name="wifi_scan_notify_message" msgid="1331238142061476869">"የመሣሪያ ተምክሮን ለማሻሻል መተግበሪያዎች እና አገልግሎቶች አሁንም በማንኛውም ሰዓት፣ Wi-Fi ጠፍቶም እንኳ የWi-Fi አውታረ መረቦችን መቃኘት ይችላሉ። ይህም ለምሳሌ አካባቢ ላይ የተመሠረቱ ባህሪያትን እና አገልግሎቶችን ለማሻሻል ሥራ ላይ ሊውል ይችላል። ይህን በWi‑Fi ቅኝት ቅንብሮች ውስጥ መቀየር ይችላሉ።"</string>
+ <string name="wifi_scan_notify_message" msgid="1331238142061476869">"የመሣሪያ ተምክሮን ለማሻሻል መተግበሪያዎች እና አገልግሎቶች አሁንም በማንኛውም ሰዓት፣ Wi-Fi ጠፍቶም እንኳ የWi-Fi አውታረ መረቦችን መቃኘት ይችላሉ። ይህም ለምሳሌ አካባቢ ላይ የተመሠረቱ ባህሪያትን እና አገልግሎቶችን ለማሻሻል ስራ ላይ ሊውል ይችላል። ይህን በWi‑Fi ቅኝት ቅንብሮች ውስጥ መቀየር ይችላሉ።"</string>
<string name="wifi_scan_change" msgid="8438320311511852918">"ቀይር"</string>
<string name="preference_summary_default_combination" msgid="4643585915107796253">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string>
<string name="mobile_data_connection_active" msgid="2422223108911581552">"ተገናኝቷል"</string>
@@ -4646,7 +4654,7 @@
<string name="dream_home_controls_toggle_summary" msgid="4102519907917430579">"ከማያ ገፅ ማቆያው የቤት ውስጥ ቁጥጥሮች አዝራርን አሳይ"</string>
<string name="dream_more_settings_category" msgid="3119192146760773748">"ተጨማሪ ቅንብሮች"</string>
<string name="dream_setup_title" msgid="2458303874255396142">"የእርስዎን የማያ ገፅ ማቆያ ይምረጡ"</string>
- <string name="dream_setup_description" msgid="7508547154038580296">"ጡባዊዎ ሲተከል በማያ ገፅዎ ላይ የሚያዩትን ይምረጡ። የማያ ገፅ ማቆያ ሥራ ላይ ሲውል መሣሪያዎ የበለጠ ኃይል ሊጠቀም ይችላል።"</string>
+ <string name="dream_setup_description" msgid="7508547154038580296">"ጡባዊዎ ሲተከል በማያ ገፅዎ ላይ የሚያዩትን ይምረጡ። የማያ ገፅ ማቆያ ስራ ላይ ሲውል መሣሪያዎ የበለጠ ኃይል ሊጠቀም ይችላል።"</string>
<string name="customize_button_title" msgid="1110284655990203359">"አብጅ"</string>
<string name="customize_button_description" msgid="7440248477266126231">"<xliff:g id="SCREENSAVER_NAME">%1$s</xliff:g> አብጅ"</string>
<string name="reboot_dialog_enable_freeform_support" msgid="6412591361284929149">"የነጻ ቅርጽ ድጋፍን ለማንቃት ዳግም ማስነሳት ያስፈልጋል።"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ልጅ የሂደቶች ገደቦችን ያሰናክሉ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"የመተግበሪያው ልጅ ሂደቶቹ ላይ ያሉ የሥርዓት ንብረት አጠቃቀም ገደቦችን ያሰናክሉ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"የማስታወሻዎች ሚናን በግዳጅ ያንቁ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"በማስታወሻዎች ሚና በኩል ማስታወሻ የመውሰጃ ሥርዓት ውህደቶችን ያንቁ። የማስታወሻዎች ሚና አስቀድሞ ከነቃ ምንም አያድርጉ።"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"በማስታወሻዎች ሚና በኩል ማስታወሻ የመውሰጃ ሥርዓት ውህደቶችን ያንቁ። የማስታወሻዎች ሚና አስቀድሞ ከነቃ ምንም አያድርጉ። ዳግም ማስነሳት ይፈልጋል።"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ስርጭት"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g>ን ያሰራጩ"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"በአቅራቢያዎ የሚጫወቱ ስርጭቶችን ያዳምጡ"</string>
@@ -4697,7 +4705,7 @@
<string name="flash_notifications_summary_on_screen" msgid="9040640799633336219">"በርቷል / የማያ ገፅ ብልጭታ"</string>
<string name="flash_notifications_summary_on_camera_and_screen" msgid="2326268141063768701">"በርቷል / የካሜራ እና የማያ ገፅ ብልጭታ"</string>
<string name="flash_notifications_intro" msgid="8409873413480928249">"ማሳወቂያዎች ሲደርሱዎት ወይም ማንቂያዎች ሲጮሁ የካሜራውን ብርሃን ወይም ማያ ገጹን ብልጭ ያደርጋል"</string>
- <string name="flash_notifications_intro_without_camera_flash" msgid="6297337174487793891">"ማሳወቂያዎች ሲደርስዎ ወይም ማንቂያዎች ድምፅ ሲያወጡ ማያገጹን ብልጭ ያድርጉ"</string>
+ <string name="flash_notifications_intro_without_camera_flash" msgid="6297337174487793891">"ማሳወቂያዎች ሲደርስዎ ወይም ማንቂያዎች ድምጽ ሲያወጡ ማያገጹን ብልጭ ያድርጉ"</string>
<string name="flash_notifications_note" msgid="2426125248448055075">"ለብርሃን በቀላሉ ተጠቂ ከሆኑ የብልጭታ ማሳወቂያዎችን በጥንቃቄ ይጠቀሙ"</string>
<string name="flash_notifications_keywords" msgid="2458759275318514836">"ብልጭታ፣ ብርሃን፣ የመስማት ችግር፣ የመስማት ችሎታን ማጣት"</string>
<string name="flash_notifications_preview" msgid="5320176885050440874">"ቅድመ ዕይታ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 2452600..6692e40 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"تم تفعيل البلوتوث."</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"عرض الكل"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"قلم الشاشة"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"التطبيق التلقائي لتدوين الملاحظات"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"الضغط على زرّ قلم الشاشة"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"تطبيق \"<xliff:g id="APP_NAME">%s</xliff:g>\" (الملف الشخصي للعمل)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"الكتابة بخط اليد في الحقول النصية"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"تجاهل كل الأزرار التي تم الضغط عليها باستخدام قلم الشاشة"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"قلم الشاشة"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"درجة الحرارة"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"أول يوم في الأسبوع"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"الإعدادات المفضّلة لنظام الأرقام"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"استخدام الإعدادات التلقائية للتطبيق"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"استخدام الخيار التلقائي"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"درجة مئوية (°م)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"فهرنهايت (°ف)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"الأحد"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"إصدار النواة"</string>
<string name="build_number" msgid="9009733242117579826">"رقم الإصدار"</string>
<string name="module_version" msgid="1787518340082046658">"تحديث نظام Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"معلومات البطارية"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"غير متاح"</string>
<string name="storage_settings" msgid="7472188817781592677">"التخزين"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"مساحة التخزين وذاكرة التخزين المؤقت"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"عنوان البلوتوث"</string>
<string name="status_serial_number" msgid="9060064164331466789">"الرقم التسلسلي"</string>
<string name="status_up_time" msgid="1274778533719495438">"وقت التشغيل"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"تاريخ التصنيع"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"تاريخ أول استخدام"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"عدد مرات تفريغ البطارية وشحنها"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"العدد غير متوفّر"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"جارٍ الحساب..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"إعادة تسمية"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"تثبيت"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"سيؤدي هذا الإجراء إلى إعادة ضبط كل إعدادات Wi‑Fi والبلوتوث. لا يمكنك التراجع عن هذا الإجراء."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"إعادة الضبط"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"تمت إعادة ضبط البلوتوث وWi‑Fi."</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"محو البيانات"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"محو بيانات شرائح eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"لن يؤدي هذا إلى إلغاء أيّ خطة من خطط خدمة الجوّال. لتنزيل شرائح SIM بديلة، يمكنك التواصل مع مشغّل شبكة الجوّال."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"إعادة ضبط الإعدادات"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"استخدام نقش أيضًا لفتح هذا الجهاز"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"إضافة رقم تعريف شخصي أيضًا لفتح هذا الجهاز"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"استخدام كلمة مرور أيضًا لفتح هذا الجهاز"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"تأكيد النقش"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"تأكيد رقم التعريف الشخصي"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"تأكيد كلمة المرور"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"استخدِم النقش المخصّص لفتح جهازك للمتابعة."</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"أدخِل رقم التعريف الشخصي للجهاز للمتابعة."</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"أدخِل كلمة مرور الجهاز للمتابعة."</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"رقم تعريف شخصي خاطئ"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"كلمة مرور خاطئة"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"النقش غير صحيح."</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"العرض حسب التطبيقات"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"العرض حسب الأنظمة"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"قد يظهر عند الاستخدام الأول أنه تم تفريغ البطارية وشحنها عدة مرات بسبب فحوصات الجودة."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"إحصاءات العمليات"</string>
<string name="process_stats_summary" msgid="522842188571764699">"الإحصائيات التقنية حول العمليات الجارية"</string>
<string name="app_memory_use" msgid="7559666138324410666">"استخدام الذاكرة"</string>
@@ -2703,8 +2715,8 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"هل تريد حذف نشاط وضع الضيف؟"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ستُحذف الآن التطبيقات والبيانات من جلسة الضيف هذه. بالإضافة إلى ذلك، ستُحذف جميع أنشطة الضيف المستقبلية في كل مرّة تخرج فيها من وضع الضيف."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"حذف، ضيف، نشاط، إزالة، بيانات، زائر، محو بيانات"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"السماح للمستخدِم الضيف باستخدام الهاتف"</string>
- <string name="enable_guest_calling_summary" msgid="4748224917641204782">"مشاركة سجلّ المكالمات مع المستخدِم الضيف"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"السماح للضيف بإجراء مكالمات هاتفية"</string>
+ <string name="enable_guest_calling_summary" msgid="4748224917641204782">"ستتم مشاركة سجلّ المكالمات مع المستخدِم الضيف."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"تفعيل المكالمات الهاتفية والرسائل القصيرة"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"منح هذا المستخدم امتيازات المشرف"</string>
<string name="user_remove_user" msgid="8468203789739693845">"حذف حساب المستخدم"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"شبكة، حالة شبكة الجوّال، حالة الخدمة، قوة الإشارة، نوع شبكة الجوّال، التجوال، معرّف ICCID، معرّف بطاقة SIM المضمنة (EID)"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"معرّف بطاقة SIM المضمنة (EID)"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"رقم تسلسلي، إصدار الجهاز"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"معلومات البطارية، تاريخ التصنيع، عدد مرات تفريغ البطارية وشحنها، أول استخدام"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"مستوى رمز تصحيح أمان android، إصدار النطاق الأساسي، إصدار النواة"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"المظهر، الإضاءة، الوضع المُعتِم، حساسية الضوء، رهاب الضوء، تعتيم، جعله داكنًا، الوضع المُعتِم، الصداع الشقِّي"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"المظهر الداكن"</string>
@@ -3855,14 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"الإعداد التلقائي للجهاز"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"تعذّر تطبيق الطبقة المتراكبة."</string>
<string name="special_access" msgid="1767980727423395147">"أذونات خاصة للتطبيقات"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="zero">يمكن لـ <xliff:g id="COUNT">%d</xliff:g> تطبيق استخدام البيانات بدون قيود.</item>
- <item quantity="two">يمكن لتطبيقين (<xliff:g id="COUNT">%d</xliff:g>) استخدام البيانات بدون قيود.</item>
- <item quantity="few">يمكن لـ <xliff:g id="COUNT">%d</xliff:g> تطبيقات استخدام البيانات بدون قيود.</item>
- <item quantity="many">يمكن لـ <xliff:g id="COUNT">%d</xliff:g> تطبيقًا استخدام البيانات بدون قيود.</item>
- <item quantity="other">يمكن لـ <xliff:g id="COUNT">%d</xliff:g> تطبيق استخدام البيانات بدون قيود.</item>
- <item quantity="one">يمكن لتطبيق واحد استخدام البيانات بدون قيود.</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"الاطّلاع على المزيد"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"المهام الطويلة في الخلفية"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"السماح بالمهام الطويلة المدى في الخلفية"</string>
@@ -4150,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"التبديل بين تغييرات توافق التطبيقات"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"التغييرات التي يتم تفعيلها تلقائيًا"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"التغييرات التي يتم إيقافها تلقائيًا"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ما مِن تطبيقات متاحة"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"يمكن تعديل تغييرات التوافق فقط للتطبيقات التي تتيح تصحيح الأخطاء فيها. ما عليك سوى تثبيت تطبيق يمكن تصحيح الأخطاء فيه، ثم إعادة المحاولة."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"يعتمد على إعداد آخر"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"الحساب"</string>
@@ -4672,7 +4676,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"إيقاف القيود المفروضة على العمليات الثانوية"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"إيقاف القيود المفروضة على استخدام موارد النظام لعمليات التطبيق الثانوية"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"فرض تفعيل دور \"الملاحظات\""</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"تفعيل عمليات دمج نظام تدوين الملاحظات من خلال دور \"الملاحظات\"، بدون حاجة لاتّخاذ أي إجراء إذا سبق وفعَّلت دور \"الملاحظات\""</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"يؤدي هذا الإجراء إلى إتاحة عمليات دمج نظام تدوين الملاحظات من خلال الدور Notes (تدوين الملاحظات). إذا كان قد سبق وتم تفعيل الدور Notes (تدوين الملاحظات)، لن يكون لهذا الإجراء أي تأثير. يتطلّب تنفيذ هذا الإجراء إعادة التشغيل."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"البث"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"بث تطبيق <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"يمكنك الاستماع إلى محتوى يتم بثّه بالقرب منك."</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index e2ade50..22572169 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ব্লুটুথ অন কৰা হ’ল"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"আটাইবোৰ চাওক"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ষ্টাইলাছ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ডিফ’ল্ট টোকা লোৱা এপ্"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"টেইল বুটাম টিপা"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (কৰ্মস্থানৰ প্ৰ’ফাইল)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"পাঠৰ ক্ষেত্ৰসমূহত লিখক"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ষ্টাইলাছ বুটামত দিয়া আটাইবোৰ টিপা উপেক্ষা কৰক"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ষ্টাইলাছ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"উষ্ণতা"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"সপ্তাহৰ প্ৰথম দিন"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"সংখ্যাৰ অগ্ৰাধিকাৰ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"এপৰ ডিফ’ল্ট ছেটিং ব্যৱহাৰ কৰক"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ডিফ’ল্ট ব্যৱহাৰ কৰক"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"চেলছিয়াছ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ফাৰেনহাইট (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"দেওবাৰ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"কাৰ্ণেলৰ সংস্কৰণ"</string>
<string name="build_number" msgid="9009733242117579826">"বিল্ড নম্বৰ"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ছিষ্টেম আপডে’ট"</string>
+ <string name="battery_info" msgid="7873528123969546728">"বেটাৰীৰ তথ্য"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"উপলব্ধ নহয়"</string>
<string name="storage_settings" msgid="7472188817781592677">"ষ্ট’ৰেজ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ষ্ট’ৰেজ আৰু কেশ্ব"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ব্লুটুথৰ ঠিকনা"</string>
<string name="status_serial_number" msgid="9060064164331466789">"ক্ৰমিক নম্বৰ"</string>
<string name="status_up_time" msgid="1274778533719495438">"চলি থকা সময়"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"নিৰ্মাণ কৰাৰ তাৰিখ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"প্ৰথম ব্যৱহাৰ কৰাৰ তাৰিখ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"চক্ৰৰ গণনা"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"উপলব্ধ নহয়"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"গণনা কৰি থকা হৈছে…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"নতুন নাম দিয়ক"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"সংলগ্ন কৰক"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"এইটোৱে ব্লুটুথ আৰু ৱাই-ফাইৰ আটাইবোৰ ছেটিং ৰিছেট কৰিব। আপুনি এই কাৰ্য আনডু কৰিব নোৱাৰে।"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ৰিছেট কৰক"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ব্লুটুথ আৰু ৱাই-ফাই ৰিছেট কৰা হৈছে"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"মচক"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ই-ছিমসমূহ মচক"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ই কোনো ম’বাইল সেৱাৰ আঁচনি বাতিল নকৰে। সলনি কৰা ছিম ডাউনল’ড কৰিবলৈ আপোনাৰ বাহকৰ সৈতে যোগাযোগ কৰক।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ছেটিং ৰিছেট কৰক"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"এই ডিভাইচটো আনলক কৰিবলৈ আৰ্হি ব্যৱহাৰ কৰক"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"এই ডিভাইচটো আনলক কৰিবলৈ পিন ব্যৱহাৰ কৰক"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"এই ডিভাইচটো আনলক কৰিবলৈ পাছৱৰ্ড ব্যৱহাৰ কৰক"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"আৰ্হি সত্যাপন কৰক"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"পিনটো সত্যাপন কৰক"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"পাছৱৰ্ড সত্যাপন কৰক"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচৰ আৰ্হিটো ব্যৱহাৰ কৰক"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচৰ পিনটো দিয়ক"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচৰ পাছৱৰ্ডটো দিয়ক"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ভুল পিন"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ভুল পাছৱৰ্ড"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ভুল আৰ্হি"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"এপ্ অনুসৰি চাওক"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ছিষ্টেম অনুসৰি চাওক"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"শ্বিপিং কৰাৰ আগতে কৰা গুণগত মান সম্পৰ্কীয় নিৰীক্ষণৰ কাৰণে প্ৰথম ব্যৱহাৰত চক্ৰৰ পৰিমাণটো শূন্য নহ’বও পাৰে"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"প্ৰক্ৰিয়া-বিষয়ক পৰিসংখ্যা"</string>
<string name="process_stats_summary" msgid="522842188571764699">"চলি থকা প্ৰক্ৰিয়াসমূহৰ বিষয়ে কাৰিকৰী পৰিসংখ্যা"</string>
<string name="app_memory_use" msgid="7559666138324410666">"মেম\'ৰিৰ ব্যৱহাৰ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"অতিথিৰ কাৰ্যকলাপ মচিবনে?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"এতিয়া এই অতিথিৰ ছেশ্বনৰ এপ্ আৰু ডেটা মচা হ’ব আৰু আপুনি অতিথি ম’ডৰ পৰা প্ৰতিবাৰ বাহিৰ হওঁতে ভৱিষ্যতে কৰা আটাইবোৰ অতিথিৰ কাৰ্যকলাপ মচা হ’ব।"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"মচক, আলহী, কাৰ্যকলাপ, আঁতৰাওক, ডেটা, ভিজিটৰ, মোহাৰক"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"অতিথিক ফ’ন ব্যৱহাৰ কৰিবলৈ দিয়ক"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"অতিথিক ফল কল কৰিবলৈ অনুমতি দিয়ক"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"এইগৰাকী অতিথি ব্যৱহাৰকাৰীৰ সৈতে কলৰ ইতিহাস শ্বেয়াৰ কৰা হ’ব"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ফ\'ন কল আৰু এছএমএছ অন কৰক"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"এই ব্যৱহাৰকাৰীগৰাকীক এগৰাকী প্ৰশাসক বনাওক"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"নেটৱৰ্ক, ম’বাইল নেটৱৰ্কৰ স্থিতি, সেৱাৰ স্থিতি, ছিগনেলৰ ক্ষমতা, ম’বাইল নেটৱৰ্কৰ প্ৰকাৰ, ৰ’মিং, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"ক্ৰমিক নম্বৰ, হাৰ্ডৱেৰৰ সংস্কৰণ"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"বেটাৰীৰ তথ্য, নিৰ্মাণ কৰাৰ তাৰিখ, চক্ৰৰ গণনা, প্ৰথম ব্যৱহাৰ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"androidৰ সুৰক্ষা পেটচ্চ স্তৰ, বেইছবেণ্ড সংস্কৰণ, কাৰ্ণেল সংস্কৰণ"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"থীম, পাতল, গাঢ়, ম’ড, পোহৰৰ প্ৰতি সংবেদনশীলতা, ফট’ফ’বিয়া, গাঢ় কৰক, গাঢ় কৰা, গাঢ় ম’ড, মাই-গ্ৰেইন"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"গাঢ় ৰঙৰ থীম"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ডিভাইচৰ ডিফ’ল্ট ছেটিং"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"অ’ভাৰলে’ প্ৰয়োগ কৰিব পৰা নগ’ল"</string>
<string name="special_access" msgid="1767980727423395147">"বিশেষ এপ্ এক্সেছ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টা এপে সীমাহীন ডেটা ব্যৱহাৰ কৰিব পাৰে</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টা এপে সীমাহীন ডেটা ব্যৱহাৰ কৰিব পাৰে</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"অধিক চাওক"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"নেপথ্যৰ দীঘলীয়া কাৰ্য"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"দীৰ্ঘ সময় ধৰি চলি থকা নেপথ্যৰ কাৰ্যসমূহক অনুমতি দিয়ক"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"এপৰ সুসংগতাৰ সালসলনিসমূহ ট’গল কৰক"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"সক্ষম কৰা ডিফ’ল্ট সালসলনিসমূহ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"অক্ষম কৰি থোৱা ডিফ’ল্ট সালসলনিসমূহ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"কোনো এপ্ উপলব্ধ নহয়"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"এপৰ সুসমতা সম্পৰ্কীয় সালসলনিসমূহ ডিবাগ কৰিব পৰা এপ্সমূহৰ বাবেহে সংশোধন কৰিব পাৰি। এটা ডিবাগ কৰিব পৰা এপ্ ইনষ্টল কৰক আৰু পুনৰ চেষ্টা কৰক।"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"অইন এটা ছেটিঙৰ ওপৰত নিৰ্ভৰশীল"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"একাউণ্ট"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"শিশুৰ প্ৰক্ৰিয়াৰ প্ৰতিবন্ধকতা অক্ষম কৰক"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"এপৰ শিশুৰ প্ৰক্ৰিয়াসমূহৰ ছিষ্টেমৰ সম্পদৰ ব্যৱহাৰত আৰোপ কৰা প্ৰতিবন্ধকতা অক্ষম কৰক"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"টোকাৰ ভূমিকা জোৰ কৰি সক্ষম কৰক"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"টোকাৰ ভূমিকাৰ জৰিয়তে টোকা লোৱা প্ৰণালীৰ একত্ৰীকৰণ সক্ষম কৰক। যদি টোকাৰ ভূমিকা ইতিমধ্যে সক্ষম কৰা হৈছে, ই একো নকৰে।"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"টোকাৰ ভূমিকাৰ জৰিয়তে টোকা লোৱা প্ৰণালীৰ একত্ৰীকৰণ সক্ষম কৰক। যদি টোকাৰ ভূমিকা ইতিমধ্যে সক্ষম কৰা হৈছে, তেন্তে ই একো নকৰে। ৰিবুট কৰাৰ প্ৰয়োজন।"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"সম্প্ৰচাৰ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> সম্প্ৰচাৰ কৰক"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"আপোনাৰ আশে-পাশে প্লে’ কৰি থোৱা সম্প্ৰচাৰসমূহ শুনক"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 63da324..89af2e1 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth aktivdir"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Hamısına baxın"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Qələm"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Defolt qeyd tətbiqi"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Başlıq düyməsinin basılması"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (İş profili)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Mətn sahələrinə yazın"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Qələmlə düymə basılmalarını nəzərə almayın"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Qələm"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Həftənin ilk günü"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Rəqəm tərcihləri"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Defolt tətbiqdən istifadə edin"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Defolt ayarı istifadə edin"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Selsi (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenheyt (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Bazar"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel versiyası"</string>
<string name="build_number" msgid="9009733242117579826">"Montaj nömrəsi"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play sistem güncəllənməsi"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batareya məlumatı"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Əlçatımlı deyil"</string>
<string name="storage_settings" msgid="7472188817781592677">"Yaddaş"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Yaddaş və keş"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth ünvanı"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Seriya nömrəsi"</string>
<string name="status_up_time" msgid="1274778533719495438">"Müddəti"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"İstehsal tarixi"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"İlk istifadə tarixi"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Dövrə sayı"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Əlçatan deyil"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Hesablanır..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Adını dəyişdirin"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Taxın"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Bu, bütün Wi‑Fi & Bluetooth ayarlarını sıfırlayacaq. Bu əməliyyatı geri qaytara bilməzsiniz."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Sıfırlayın"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi sıfırlanıb"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Silin"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM\'ləri silin"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Yeni SIM kart endirmək üçün operatorla əlaqə saxlayın. Tarif planınıza təsir etməyəcək."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Ayarları sıfırlayın"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Bu cihazın kilidi model ilə açıla bilər"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Bu cihazın kilidi PIN ilə açıla bilər"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Bu cihazın kilidi parol ilə açıla bilər"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Modeli doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN-i doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Parolu doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Kilidaçma modeli ilə davam edin"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Cihaz PIN-i ilə davam edin"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Cihaz parolu ilə davam edin"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN səhvdir"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Yanlış parol"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Yanlış model"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Tətbiqlər əsasında baxın"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Sistemlər əsasında baxın"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Göndərilməzdən əvvəl keyfiyyət yoxlamaları ilə əlaqədar dövr sayı ilk istifadədə sıfır olmaya bilər"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Proses Statistikası"</string>
<string name="process_stats_summary" msgid="522842188571764699">"İşləmə prosesləri haqqında çağırış statistikası"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Yaddaş istifadəsi"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Qonaq fəaliyyəti silinsin?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Bu qonaq sessiyasındakı tətbiqlər və data indi silinəcək və hər dəfə qonaq rejimindən çıxanda bütün gələcək qonaq fəaliyyəti silinəcək"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"sil, qonaq, fəaliyyət, sil, data, ziyarətçi, poz"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Qonağa telefondan istifadə etməyə icazə verin"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Qonağa telefon zəngi etmək icazəsi verin"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Zəng tarixçəsi qonaq istifadəçi ilə paylaşılacaq"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon zəngləri & SMS-i aktivləşdir"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Bu istifadəçini admin edin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"şəbəkə, mobil şəbəkə statusu, xidmət statusu, siqnalın gücü, mobil şəbəkə növü, rominq, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"seriya nömrəsi, proqram versiyası"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batareya məlumatı, istehsal tarixi, dövrə sayı, ilk istifadə"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android təhlükəsizliyinin yenilənmə səviyyəsi, baseband versiyası, kernel versiyası"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, işıqlı, qaranlıq, rejim, işığa həssaslıq, fotofobiya, daha qaranlıq et, qaranlıqlaşdır, qaranlıq rejim, miqren"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tünd tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Cihaz defoltu"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Örtük tətbiq edilmədi"</string>
<string name="special_access" msgid="1767980727423395147">"Xüsusi tətbiq girişi"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tətbiq məhdudlaşdırılmamış data istifadə edə bilər</item>
- <item quantity="one">1 tətbiq məhdudlaşdırılmamış data istifadə edə bilər</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ətraflı məlumat"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Uzun arxa fon tapşırıqları"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Uzun çəkən arxa fon tapşırıqlarına icazə verin"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Tətbiq uyğunluğu ayarlarına dəyişiklik göstərilsin"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Dəyişikliklər standart olaraq aktivdir"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Dəyişikliklər standart olaraq deaktivdir"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Heç bir tətbiq əlçatan deyil"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Yalnız sazlanmaya açıq tətbiqlərin uyğunluq parametrlərinə dəyişiklik mümkündür. Sazlana bilən tətbiq quraşdırıb təkrar cəhd edin."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Digər ayardan aslıdır"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Hesab"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Alt proses məhdudiyyətlərini deaktiv edin"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Tətbiqin alt proseslərinin sistem resursundan istifadə məhdudiyyətlərini deaktiv edin"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Qeydlər funksiyasını məcburi aktivləşdirin"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Qeydlər funksiyası ilə qeydgötürmə üzrə sistem inteqrasiyalarını aktivləşdirin. Qeydlər funksiyası aktivləşdirilibsə, heç nə etməyin."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Qeydlər funksiyası ilə qeydgötürmə üzrə sistem inteqrasiyalarını aktivləşdirin. Qeydlər funksiyası aktivləşdirilibsə, heç nə etməyin. Yenidən yükləmə lazımdır."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Yayım"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> tətbiqini yayımlayın"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Yaxınlığınızda oxudulan yayımları dinləyin"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index efcc305..6b18601 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth je uključen"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Prikaži sve"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pisaljka"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Podrazumevana aplikacija za beleške"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pritisak na dugme sa zadnje strane"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (poslovni profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Pišite u poljima za tekst"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignoriši sva pritiskanja dugmeta pomoću pisaljke"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pisaljka"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prvi dan nedelje"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Podešavanja brojeva"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Koristi podrazumevano u aplikaciji"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Koristi podrazumevano"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celzijus (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenhajt (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"nedelja"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Verzija jezgra"</string>
<string name="build_number" msgid="9009733242117579826">"Broj verzije"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ažuriranje sistema"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacije o bateriji"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nije dostupno"</string>
<string name="storage_settings" msgid="7472188817781592677">"Memorijski prostor"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Memorijski prostor i keš"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serijski broj"</string>
<string name="status_up_time" msgid="1274778533719495438">"Vreme rada"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Datum proizvodnje"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum prvog korišćenja"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Broj ciklusa"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nedostupno"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Proračunavanje..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Preimenuj"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Priključi"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ovim resetujete sva WiFi i Bluetooth podešavanja. Ne možete da opozovete ovu radnju."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetuj"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth i WiFi su resetovani"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Obriši"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Obriši eSIM-ove"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ovim ne otkazujete nijedan tarifni paket. Da biste preuzeli nove SIM kartice, obratite se mobilnom operateru."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Resetuj podešavanja"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Koristite i šablon za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Koristite i PIN za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Koristite i lozinku za otključavanje uređaja"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifikujte šablon"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifikujte PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifikujte lozinku"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Koristite šablon za uređaj da biste nastavili"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Unesite PIN uređaja da biste nastavili"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Unesite lozinku uređaja da biste nastavili"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Pogrešan PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Pogrešna lozinka"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Pogrešan šablon"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Prikaži prema aplikacijama"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Prikaži prema sistemima"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Zbog provere pre slanja broj ciklusa možda neće biti nula pri prvom korišćenju"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistika procesa"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Štreberska statistika o aktivnim procesima"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Iskorišćenost memorije"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisaćete aktivnosti gosta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove sesije gosta biće odmah izbrisane, a sve buduće aktivnosti gosta biće izbrisane svaki put kada izađete iz režima gosta"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"izbrisati, gost, aktivnost, ukloniti, podaci, posetilac, obrisati"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Dozvoli gostu da koristi telefon"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Dozvoli da gost upućuje pozive"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Istorija poziva će se deliti sa gostujućim korisnikom"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključi telefonske pozive i SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Postavite ovog korisnika za administratora"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"mreža, stanje mobilne mreže, stanje usluge, jačina signala, tip mobilne mreže, roming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serijski broj, verzija hardvera"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacije o bateriji, datum proizvodnje, broj ciklusa, prvo korišćenje"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivo bezbednosne zakrpe za android, verzija osnovnog propusnog opsega, verzija jezgra"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, svetla, tamna, režim, osetljivost na svetlost, fotofobija, zatamniti, tamni režim, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tamna tema"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Podrazumevano podešavanje za uređaj"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Primena preklopnog elementa nije uspela"</string>
<string name="special_access" msgid="1767980727423395147">"Poseban pristup aplikacija"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aplikacija može da koristi neograničenu količinu podataka</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacije mogu da koriste neograničenu količinu podataka</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacija može da koristi neograničenu količinu podataka</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Prikaži još"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dugotrajni zadaci u pozadini"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Dozvoli dugotrajne zadatke u pozadini"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Uključite/isključite promene kompatibilnosti aplikacije"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Podrazumevane omogućene promene"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Podrazumevane onemogućene promene"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nema aplikacija"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Promene kompatibilnosti aplikacija mogu da se izmene samo za aplikacije sa otklonjivim greškama. Instalirajte aplikaciju sa otklonjivim greškama i probajte ponovo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Zavisi od drugog podešavanja"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Nalog"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Onemogući ograničenja za podređene procese"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Onemogućite ograničenja korišćenja resursa sistema za podređene procese aplikacije"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Prinudno omogući ulogu Beleške"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Omogućite integracije pravljenja beležaka u sistemu pomoću uloge Beleške. Ako je uloga Beleške već omogućena, ne preduzimajte ništa."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Omogućite integracije pravljenja beležaka u sistemu pomoću uloge Beleške. Ako je uloga Beleške već omogućena, ne preduzimajte ništa. Zahteva restartovanje."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Emitujte"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emitujte <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Slušajte emitovanja koja se puštaju u blizini"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 8a9f7a2..24a1be7 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth уключаны"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Паказаць усе"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Стылус"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Стандартныя праграмы для стварэння нататак"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Пры націсканні на кнопку пяра"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Працоўны профіль)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Увод тэксту ў тэкставыя палі"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ігнараваць націсканні кнопак стілусам"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Стылус"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Тэмпература"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Першы дзень тыдня"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Налады лічбаў"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Выкарыстоўваць стандартную праграму"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Выкарыстоўваць стандартны параметр"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Градус Цэльсія (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Градус Фарэнгейта (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Нядзеля"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Версія ядра"</string>
<string name="build_number" msgid="9009733242117579826">"Нумар зборкі"</string>
<string name="module_version" msgid="1787518340082046658">"Абнаўленне сістэмы Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Інфармацыя пра акумулятар"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Недаступна"</string>
<string name="storage_settings" msgid="7472188817781592677">"Сховішча"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Сховішча і кэш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Адрас Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Серыйны нумар"</string>
<string name="status_up_time" msgid="1274778533719495438">"Час працы пасля апошняй загрузкі"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Дата вырабу"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Дата першага выкарыстання"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Колькасць цыклаў"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Недаступна"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Вядзецца падлік..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Перайменаваць"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Падключыць"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Будуць скінуты ўсе налады Wi‑Fi і Bluetooth. Гэта дзеянне нельга адрабіць."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Скінуць"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Налады Bluetooth і Wi‑Fi скінуты"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Сцерці даныя"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Сцерці eSIM-карты"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Гэта дзеянне не прывядзе да скасавання тарыфных планаў. Каб спампаваць новыя SIM-карты, звярніцеся да аператара."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Скінуць налады"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Выкарыстоўваць узор разблакіроўкі для гэтай прылады"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Выкарыстоўваць PIN-код для разблакіроўкі гэтай прылады"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Выкарыстоўваць пароль для разблакіроўкі гэтай прылады"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Пацвярджэнне ўзору разблакіроўкі"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Пацвярджэнне PIN-кода"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Пацвярджэнне пароля"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Каб працягнуць, выкарыстайце ўзор разблакіроўкі прылады"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Каб працягнуць, увядзіце PIN-код прылады"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Каб працягнуць, увядзіце пароль прылады"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Няправільны PIN-код"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Няправiльны пароль"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Няправільны ўзор"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Паказаць выкарыстанне праграмамі"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Паказаць выкарыстанне сістэмамі"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"У сувязі з праверкай якасці перад адпраўкай колькасць цыклаў можа не быць нулявой пры першым выкарыстанні"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статыстыка працэсаў"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Падрабязная статыстыка запушчаных працэсаў"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Аб\'ём выкарыстання памяці"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Выдаліць звесткі пра дзеянні госця?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Праграмы і даныя гэтага гасцявога сеанса будуць выдалены, і ўсе будучыя звесткі пра дзеянні госця будуць выдаляцца падчас кожнага выхаду з гасцявога рэжыму"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"выдаліць, госць, актыўнасць, прыбраць, даныя, наведвальнік, сцерці даныя"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Дазволіць гасцям карыстацца тэлефонам"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Дазволіць госцю ажыццяўляць выклікі"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Госць атрымае доступ да гісторыі выклікаў."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Уключыць тэлефонныя выклікі і SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Зрабіць гэтага карыстальніка адміністратарам"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"сетка, стан мабільнай сеткі, даступнасць мабільнай сеткі, магутнасць сігналу, тып мабільнай сеткі, роўмінг, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"серыйны нумар, версія апаратнага забеспячэння"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"інфармацыя пра акумулятар, дата вырабу, колькасць цыклаў, дата першага выкарыстання"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"узровень патчу бяспекі android, версія дыяпазону, версія ядра"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тэма, святло, цёмны, рэжым, адчувальнасць да святла, фотафобія, зрабіць цямнейшым, зацямніць, цёмны рэжым, мігрэнь"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"цёмная тэма"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Стандартная налада"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Не ўдалося ўжыць накладанне на экран"</string>
<string name="special_access" msgid="1767980727423395147">"Спецыяльны доступ для праграм"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> праграма можа выкарыстоўваць даныя без абмежаванняў</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> праграмы могуць выкарыстоўваць даныя без абмежаванняў</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> праграм могуць выкарыстоўваць даныя без абмежаванняў</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> праграмы могуць выкарыстоўваць даныя без абмежаванняў</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Яшчэ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Працяглыя фонавыя задачы"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Дазволіць выкананне працяглых фонавых задач"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Пераключыць на змяненні ў сумяшчальнасці праграм"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Стандартныя ўключаныя змяненні"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Стандартныя адключаныя змяненні"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Праграмы недаступныя"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Змяненні ў сумяшчальнасці праграм могуць быць прыменены толькі да праграм з магчымасцю адладкі. Усталюйце такую праграму і паўтарыце спробу."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Залежыць ад іншай налады"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Уліковы запіс"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Адключыць абмежаванні для даччыных працэсаў"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Адключыць абмежаванні на выкарыстанне рэсурсаў сістэмы даччынымі працэсамі праграмы"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Прымусовае ўключэнне праграмы для нататак"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Уключае інтэграцыю сістэмы стварэння нататак з праграмай для нататак. Калі праграма для нататак ужо ўключана, нічога не адбываецца."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Дазволіць стварэнне нататак праз ролю \"Нататкі\". Калі гэта роля ўжо выкарыстоўваецца, нічога не адбудзецца. Патрабуецца перазагрузка."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Трансляцыя"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Трансліраваць праграму \"<xliff:g id="CURRENTAPP">%1$s</xliff:g>\""</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слухайце трансляцыі, якія прайграюцца паблізу ад вас"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 2ce743b..6b4f9f2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Функцията за Bluetooth е включена"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Преглед на всички"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Писалка"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Основно приложение за бележки"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Натискане на бутона в горната част"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (служебен потребителски профил)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Ръкописно въвеждане в текстовите полета"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Игнориране на натисканията на бутони с писалката"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Писалка"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Първи ден от седмицата"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Предпочитания за числата"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Ползване на стандартната настройка за приложението"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Използване на настройките по подразбиране"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Целзий (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренхайт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"неделя"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Версия на ядрото"</string>
<string name="build_number" msgid="9009733242117579826">"Номер на версията"</string>
<string name="module_version" msgid="1787518340082046658">"Системна актуализация на Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Информация за батерията"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Не е налично"</string>
<string name="storage_settings" msgid="7472188817781592677">"Хранилище"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Хранилище и кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Адрес на Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Сериен номер"</string>
<string name="status_up_time" msgid="1274778533719495438">"Време на активност"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Дата на производство"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Дата на първото използване"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Брой цикли"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Не е налице"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Изчислява се..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Преименуване"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Свързване"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Това действие ще нулира настройките за Wi‑Fi и Bluetooth. То не може да бъде отменено."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Нулиране"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Настройките за Bluetooth и Wi‑Fi са нулирани"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Изтриване на данните"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Изтриване на електронните SIM карти"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Плановете за мобилни услуги няма да бъдат анулирани. Обърнете се към оператора си, за да изтеглите резервни SIM карти."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Нулиране на настройките"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Отключване на това у-во и с фигурата"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Отключване на това у-во и с ПИН кода"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Отключване на това у-во и с паролата"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Потвърждаване на фигурата"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Потвърждаване на ПИН кода"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Потвърждаване на паролата"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Използвайте фигурата за устройството си, за да продължите"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Въведете ПИН кода за устройството си, за да продължите"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Въведете паролата за устройството си, за да продължите"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Грешен ПИН код"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Грешна парола"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Грешна фигура"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Преглед по приложения"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Преглед по системи"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Тъй като преди изпращане се прави проверка на качеството, възможно е при първото ползване броят цикли да не е нула"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статистически данни за процесите"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Подробни статистически данни за изпълняващите се процеси"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Използвана памет"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Изтриване на активността като гост?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Приложенията и данните от тази сесия като гост ще бъдат изтрити сега, а цялата бъдеща активност като гост ще се изтрива всеки път, когато излезете от режима на гост"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"изтриване, гост, активност, премахване, данни, посетител, изтриване на данните"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Разрешаване на гост да използва телефона"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Гостите да извършват тел. обаждания"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Историята на обажданията ще бъде споделена с госта"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Включване на тел. обаждания и SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Задаване на потребителя като администратор"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"мрежа, състояние на мобилната мрежа, състояние на услугата, сила на сигнала, тип мобилна мрежа, роуминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"сериен номер, версия на хардуера"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"информация за батерията, дата на производство, брой цикли, първо използване"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"ниво на корекцията на сигурността под Android, версия на радиомодула, версия на ядрото"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, светла, тъмна, режим, чувствителност към светлина, фотофобия, намаляване на яркостта, потъмняване, тъмен режим, мигрена"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"тъмна тема"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Стандартна настройка за устройството"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Прилагането на наслагване не бе успешно"</string>
<string name="special_access" msgid="1767980727423395147">"Специален достъп за приложения"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> приложения могат да използват неограничено количество данни</item>
- <item quantity="one">1 приложение може да използва неограничено количество данни</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Вижте още"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Продълж. задачи на заден план"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Разрешаване на продълж. задачи на заден план"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Включване/изключване на промените в съвместимостта на приложенията"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Промени, свързани с активирането по подразбиране"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Промени, свързани с деактивирането по подразбиране"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Няма приложения"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Промени в съвместимостта на приложенията могат да се извършват само за приложения с възможност за отстраняване на грешки. Инсталирайте такова и опитайте отново."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Зависи от друга настройка"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Профил"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Деактивиране на ограниченията за дъщерните процеси"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Деактивиране на ограниченията за използването на системните ресурси за дъщерните процеси на приложението"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Принудително активиране на ролята на бележките"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Активиране на системните интегрирания за водене на бележки чрез ролята на бележките. Ако тази роля вече е активирана, не се извършва нищо."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Активиране на системните интегрирания за водене на бележки чрез ролята на бележките. Ако тази роля вече е активирана, не се извършва нищо. Изисква се рестартиране."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Предаване"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Предаване на <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слушайте предавания, които се възпроизвеждат в близост"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 388ee23..9a1e32f 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ব্লুটুথ চালু হয়েছে"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"সবগুলি দেখুন"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"স্টাইলাস"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"নোট নেওয়ার ডিফল্ট অ্যাপ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"টেল বোতাম প্রেস করুন"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (অফিস প্রোফাইল)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"টেক্সট ফিল্ডে লিখুন"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"স্টাইলাসের মাধ্যমে প্রেস করা হয়েছে এমন বোতাম এড়িয়ে যান"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"স্টাইলাস"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"তাপমাত্রা"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"সপ্তাহের প্রথম দিন"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"নম্বর সংক্রান্ত পছন্দ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"অ্যাপের ডিফল্ট সেটিং ব্যবহার করুন"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ডিফল্ট ব্যবহার করুন"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"সেলসিয়াস(°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ফারেনহাইট(°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"রবিবার"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"কার্নেল ভার্সন"</string>
<string name="build_number" msgid="9009733242117579826">"বিল্ড নম্বর"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play সিস্টেম আপডেট"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ব্যাটারি সংক্রান্ত তথ্য"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"উপলভ্য নয়"</string>
<string name="storage_settings" msgid="7472188817781592677">"স্টোরেজ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"স্টোরেজ ও ক্যাশে"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ব্লুটুথ অ্যাড্রেস"</string>
<string name="status_serial_number" msgid="9060064164331466789">"সিরিয়াল নম্বর"</string>
<string name="status_up_time" msgid="1274778533719495438">"আপ টাইম"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"তৈরির তারিখ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ব্যবহারের প্রথম তারিখ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"সাইকেল কাউন্ট"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"উপলভ্য নেই"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"গণনা করা হচ্ছে..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"নাম বদলান"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"মাউন্ট করা"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"এর ফলে সব ওয়াই-ফাই ও ব্লুটুথ সেটিংস রিসেট হয়ে যাবে। এই অ্যাকশন আর আগের অবস্থায় ফিরিয়ে আনতে পারবেন না।"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"রিসেট করুন"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ব্লুটুথ ও ওয়াই-ফাই রিসেট করা হয়েছে"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"মুছুন"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ই-সিম মুছুন"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"এটি মোবাইল পরিষেবার কোনও প্ল্যান বাতিল করবে না। পরিবর্ত সিম ডাউনলোড করতে আপনার পরিষেবা প্রদানকারীর সাথে যোগাযোগ করুন।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"সেটিংস রিসেট করুন"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"এই ডিভাইস আনলক করতে প্যাটার্নও ব্যবহার করুন"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"এই ডিভাইস আনলক করতে পিনও ব্যবহার করুন"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"এই ডিভাইস আনলক করতে পাসওয়ার্ডও ব্যবহার করুন"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"প্যাটার্ন যাচাই করুন"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"পিন যাচাই করুন"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"পাসওয়ার্ড যাচাই করুন"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"চালিয়ে যেতে, আপনার ডিভাইসের প্যাটার্ন ব্যবহার করুন"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"চালিয়ে যেতে আপনার ডিভাইসের পিন লিখুন"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"চালিয়ে যেতে আপনার ডিভাইসের পাসওয়ার্ড লিখুন"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ভুল পিন"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ভুল পাসওয়ার্ড"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ভুল প্যাটার্ন"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"অ্যাপ অনুযায়ী দেখুন"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"সিস্টেম অনুযায়ী দেখুন"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"শিপিংয়ের আগে কোয়ালিটি সংক্রান্ত পরীক্ষার কারণে, প্রথম ব্যবহারে সময় সাইকেল কাউন্ট শূন্য নাও হতে পারে"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"প্রক্রিয়ার পরিসংখ্যান"</string>
<string name="process_stats_summary" msgid="522842188571764699">"চলমান প্রক্রিয়াগুলি গিকি পরিসংখ্যান"</string>
<string name="app_memory_use" msgid="7559666138324410666">"মেমরি ব্যবহৃত"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"অতিথি অ্যাক্টিভিটি মুছবেন?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"এই অতিথি সেশন থেকে এখন অ্যাপ এবং ডেটা মুছে দেওয়া হবে ও আপনি প্রত্যেকবার \'অতিথি মোড\' ছেড়ে বেরিয়ে আসার সময় পরবর্তী সব অতিথি অ্যাক্টিভিটি মুছে যাবে"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"মোছা, অতিথি, অ্যাক্টিভিটি, সরানো, ডেটা, দর্শক, মোছা"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"অতিথিকে ফোন ব্যবহার করার অনুমতি দিন"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"গেস্টদের ফোন কল করতে দিন"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"কলের ইতিহাস এই অতিথির সাথে শেয়ার করা হবে"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ফোন কল এবং এসএমএস চালু করবেন?"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"এই ব্যবহারকারীকে অ্যাডমিন করুন"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"নেটওয়ার্ক, মোবাইল নেটওয়ার্কের অবস্থা, পরিষেবার অবস্থা, সিগন্যালের ক্ষমতা, মোবাইল নেটওয়ার্কের ধরন, রোমিং, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"সিরিয়াল নম্বর, হার্ডওয়্যার ভার্সন"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ব্যাটারি সংক্রান্ত তথ্য, তৈরির তারিখ, সাইকেল কাউন্ট, প্রথম ব্যবহার"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android নিরাপত্তা প্যাচের স্তর, বেসব্যান্ড ভার্সন, কার্নেল ভার্সন"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"থিম, লাইট, ডার্ক মোড. লাইট সেন্সিটিভিটি, ফোটোফোবিয়া, আলো কমানো, অন্ধকার করা, ডার্ক মোড, মাইগ্রেন"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"গাঢ় থিম"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ডিভাইসের ডিফল্ট"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ওভারলে প্রয়োগ করা যায়নি"</string>
<string name="special_access" msgid="1767980727423395147">"বিশেষ অ্যাপ অ্যাক্সেস"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি অ্যাপ অপরিমিত ডেটা ব্যবহার করতে পারে</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি অ্যাপ অপরিমিত ডেটা ব্যবহার করতে পারে</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"আরও দেখুন"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ব্যাকগ্রাউন্ডে দীর্ঘ চলা টাস্ক"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ব্যাকগ্রাউন্ডে দীর্ঘ চলা টাস্ককে অনুমতি দেওয়া"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"অ্যাপ মানানসই করা সম্পর্কিত পরিবর্তন টগল করুন"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ডিফল্ট হিসেবে চালু করা পরিবর্তন"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ডিফল্ট হিসেবে বন্ধ করে দেওয়া পরিবর্তন"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"অ্যাপ উপলভ্য নেই"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"অ্যাপ মানানসই করা সম্পর্কিত পরিবর্তন শুধুমাত্র ডিবাগ করা যাবে এমন অ্যাপগুলির ক্ষেত্রে প্রযোজ্য। ডিবাগ করা যাবে এমন একটি অ্যাপ ইনস্টল করে আবার চেষ্টা করুন।"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"অন্য একটি সেটিং-এর উপর নির্ভর করে"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"অ্যাকাউন্ট"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"চাইল্ড প্রসেস সংক্রান্ত বিধিনিষেধ বন্ধ করুন"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"অ্যাপের চাইল্ড প্রসেসের ক্ষেত্রে সিস্টেম রিসোর্স ব্যবহার সংক্রান্ত বিধিনিষেধ বন্ধ করুন"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes-এর কার্যকারিতার সংগ্রহ চালু করুন"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes-এর কার্যকারিতার সংগ্রহের মাধ্যমে নোট নেওয়ার সিস্টেমের ইন্টিগ্রেশন চালু করুন। Notes-এর কার্যকারিতার সংগ্রহ আগে থেকেই চালু করা থাকলে, কিছু করার প্রয়োজন নেই।"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes-এর কার্যকারিতার মাধ্যমে নোট নেওয়া সংক্রান্ত সিস্টেমের ইন্টিগ্রেশন চালু করুন। Notes-এর কার্যকারিতার সংগ্রহ আগে থেকেই চালু করা থাকলে, কিছু করার প্রয়োজন নেই। রিবুট করা প্রয়োজন।"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ব্রডকাস্ট"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ব্রডকাস্ট করুন"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"আপনার কাছে চলছে এমন ব্রডকাস্ট শুনুন"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index bda68fb..47e6b21 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth je uključen"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Prikaži sve"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pisaljka"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Zadana aplikacija za bilješke"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pritiskanje gornjeg dugmeta"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (radni profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Pisanje u poljima za tekst"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignoriranje svih pritisaka dugmeta za pisaljku"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pisaljka"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prvi dan u sedmici"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Postavke brojeva"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Koristite zadanu postavku aplikacije"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Koristi zadanu"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celzijus (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenhajt (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"nedjelja"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Osnovna verzija"</string>
<string name="build_number" msgid="9009733242117579826">"Broj verzije"</string>
<string name="module_version" msgid="1787518340082046658">"Ažuriranje sistema Google Playa"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacije o bateriji"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nije dostupno"</string>
<string name="storage_settings" msgid="7472188817781592677">"Pohrana"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Pohrana i keš memorija"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serijski broj"</string>
<string name="status_up_time" msgid="1274778533719495438">"Vrijeme aktivnosti"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Datum proizvodnje"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum prve upotrebe"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Broj ciklusa"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nedostupno"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Računanje…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Promijeni naziv"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montiraj"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ovo će vratiti sve zadane postavke WiFi-ja i Bluetootha. Ovu radnju ne možete opozvati."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Vrati na zadano"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth i WiFi su vraćeni na zadano"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Izbriši"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Potpuno izbriši eSIM-ove"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ovim se neće otkazati paketi mobilnih usluga. Da preuzmete zamjenske SIM-ove, kontaktirajte svog mobilnog operatera."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Vrati postavke na zadano"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Koristi i uzorak za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Koristi i PIN za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Koristi i lozinku za otključavanje uređaja"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Potvrdite uzorak"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Potvrdite PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Potvrdite lozinku"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Unesite uzorak za uređaj da nastavite"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Unesite PIN za uređaj da nastavite"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Unesite lozinku za uređaj da nastavite"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Pogrešan PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Pogrešna lozinka"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Pogrešan uzorak"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Pregled prema aplikacijama"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Pregled prema sistemima"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Zbog pregleda kvalitete prije isporuke, broj ciklusa možda neće biti nula prilikom prvog korištenja"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistika procesa"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky statistike o pokrenutim procesima"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Iskorištena memorija"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisati aktivnost gosta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove sesije gosta će se izbrisati sada, a sve buduće aktivnosti gosta će se izbrisati svaki put kada napustite način rada za gosta"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"izbrisati, gost, aktivnost, ukloniti, podaci, posjetilac, brisanje"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Dozvoli gostu da koristi telefon"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Dozvoli gostima da upućuju tel. pozive"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Historija poziva će se dijeliti s gostom"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključi telefonske pozive i SMS-ove"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Postavi korisnika kao administratora"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"mreža, stanje mobilne mreže, stanje usluge, jačina signala, vrsta mobilne mreže, roming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serijski broj, verzija hardvera"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacije o bateriji, datum proizvodnje, broj ciklusa, prva upotreba"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivo sigurnosne zakrpe za android, verzija nemoduliranog signala, osnovna verzija"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, svijetlo, tamno, način rada, osjetljivost na svjetlost, fotofobija, zatamniti, potamniti, tamni način rada, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tamna tema"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Zadana postavka uređaja"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Primjena preklapanja nije uspjela"</string>
<string name="special_access" msgid="1767980727423395147">"Poseban pristup za aplikacije"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aplikacija može koristiti neograničen prijenos podataka</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacije mogu koristiti neograničen prijenos podataka</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacija može koristiti neograničen prijenos podataka</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Prikaži više"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dugi zadaci u pozadini"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Dozvoli dugo izvršavanje zadataka u pozadini"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Uključivanje/isključivanje izmjena kompatibilnosti aplikacije"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Zadano omogućene izmjene"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Zadano onemogućene izmjene"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nema dostupnih apl."</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Promjene kompatibilnosti aplikacije je moguće izmijeniti isključivo kod aplikacija kod kojih je moguće izvršiti otklanjanje grešaka. Instalirajte aplikaciju kod koje je moguće izvršiti otklanjanje grešaka i pokušajte ponovo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Zavisi od druge postavke"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Račun"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Onemogući ograničenja podređenog procesa"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Onemogućite ograničenja u korištenju resursa sistema za podređene procese aplikacije"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Prisilno omogući ulogu Bilješke"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Omogućite integracije sistema za pisanje bilješki putem uloge Bilješke. Ako je uloga Bilješke već omogućena, neće se ništa dogoditi."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Omogućite integracije sistema za pisanje bilješki putem uloge Bilješke. Ako je uloga Bilješke već omogućena, neće se ništa dogoditi. Potrebno je ponovno pokretanje."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Emitirajte"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emitiraj aplikaciju <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Slušajte emitiranja koja se reproduciraju u vašoj blizini"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 44e58e4..c32c2f2 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"S\'ha activat el Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Mostra-ho tot"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Llapis òptic"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplicació de notes predeterminada"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Prem el botó del darrere"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de treball)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escriu als camps de text"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Omet la premuda repetida del botó de llapis òptic"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Llapis òptic"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primer dia de la setmana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferències de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Utilitza la configuració predeterminada de l\'app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Utilitza l\'opció predeterminada"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Diumenge"</string>
@@ -914,7 +915,7 @@
<string name="wifi_hotspot_speed_6g" msgid="3787697484862730500">"6 GHz"</string>
<string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"Velocitats màximes. Compatible amb pocs dispositius."</string>
<string name="wifi_hotspot_speed_summary_unavailable" msgid="7276080644693388756">"No està disponible al teu país o regió"</string>
- <string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"Si la teva freqüència preferida no està disponible, pot ser que el punt d\'accés Wi‑Fi en faci servir una altra. La configuració de seguretat del punt d\'accés Wi‑Fi pot canviar si modifiques la freqüència."</string>
+ <string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"Si la teva freqüència preferida no està disponible, pot ser que el punt d\'accés Wi‑Fi en faci servir una altra. La configuració de seguretat del punt d\'accés Wi‑Fi pot canviar si canvies la freqüència."</string>
<string name="wifi_hotspot_security_summary_unavailable" msgid="117582979310345853">"No està disponible amb 6 GHz"</string>
<string name="wifi_hotspot_security_footer" msgid="4608329688744949796">"La configuració de seguretat pot canviar si modifiques la freqüència del punt d\'accés Wi‑Fi"</string>
<string name="wifi_tether_starting" msgid="8879874184033857814">"S\'està activant el punt d\'accés Wi-Fi…"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versió de kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número de compilació"</string>
<string name="module_version" msgid="1787518340082046658">"Actualització del sistema de Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informació de la bateria"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"No disponible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Emmagatzematge"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Emmagatzematge i memòria cau"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adreça de Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de sèrie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Temps actiu"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data de fabricació"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data del primer ús"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Nombre de cicles"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"No disponible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"S\'està calculant..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Canvia el nom"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Activa"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Es restabliran totes les opcions de configuració del Bluetooth i de la Wi‑Fi. Aquesta acció no es pot desfer."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Restableix"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"S\'han restablert el Bluetooth i la Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Esborra"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Esborra les eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Aquesta acció no cancel·larà cap dels plans de serveis mòbils. Per baixar targetes SIM de substitució, contacta amb el teu operador."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Restableix la configuració"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Utilitza el patró per desbloquejar el disp."</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Utilitza el PIN per desbloquejar el disp."</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Utilitza la contrasenya per desbl. el disp."</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifica el patró"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifica el PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifica la contrasenya"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Utilitza el patró del dispositiu per continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Introdueix el PIN del dispositiu per continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Introdueix la contrasenya del dispositiu per continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorrecte"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Contrasenya incorrecta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Patró incorrecte"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Mostra per aplicacions"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Mostra per sistemes"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"A causa d\'inspeccions de qualitat prèvies a l\'enviament, és possible que el nombre de cicles no sigui zero en el primer ús"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estadístiques sobre processos"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estadístiques sobre els processos en execució"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Ús de la memòria"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Suprimir l\'activitat de convidat?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les aplicacions i les dades d\'aquesta sessió de convidat se suprimiran ara, i tota l\'activitat de convidat que facis en el futur se suprimirà cada vegada que surtis del mode de convidat"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"suprimir, convidat, activitat, eliminar, dades, visitant, esborrar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permet al convidat que utilitzi el telèfon"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permet fer trucades al convidat"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"L\'historial de trucades es compartirà amb l\'usuari convidat"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activa les trucades telefòniques i els SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Converteix aquest usuari en administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"xarxa, estat de la xarxa mòbil, estat del servei, intensitat del senyal, tipus de xarxa mòbil, itinerància, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de sèrie, versió de maquinari"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informació de la bateria, data de fabricació, nombre de cicles, primer ús"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivell de pedaç de seguretat d\'Android, versió de banda base, versió de kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, llum, fosc, mode, sensibilitat a la llum, fotofòbia, fer més fosc, enfosquir, mode fosc, migranya"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema fosc"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Opció predeterminada del dispositiu"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"No s\'ha pogut aplicar la superposició"</string>
<string name="special_access" msgid="1767980727423395147">"Accés especial d\'aplicacions"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplicacions poden utilitzar dades sense restricció</item>
- <item quantity="one">1 aplicació pot utilitzar dades sense restricció</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Mostra\'n més"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tasques llargues en segon pla"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permet les tasques de llarga durada en segon pla"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Commuta els canvis en la compatibilitat de les aplicacions"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Canvis activats de manera predeterminada"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Canvis desactivats de manera predeterminada"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No hi ha cap app disponible"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Els canvis en la compatibilitat de les aplicacions només poden modificar-se a les aplicacions depurables. Instal·la una aplicació depurable i torna-ho a provar."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depèn d\'una altra opció de configuració"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Compte"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desactiva les restriccions dels processos secundaris"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desactiva les restriccions de l\'ús dels recursos del sistema dels processos secundaris de les aplicacions"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Força l\'activació del rol Notes"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Activa les integracions del sistema per prendre notes mitjançant el rol Notes. Si aquest rol ja està activat, no fa res."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Activa les integracions dels sistema de presa de notes mitjançant la funció Notes. Si la funció Notes ja està activada, no fa res. Cal reiniciar."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Emissió"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emet <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Escolta emissions a prop teu"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index de8413b..0b5d5db 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth je zapnuto"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Zobrazit vše"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Dotykové pero"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Výchozí aplikace pro poznámky"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Stisknutí tlačítka dotykového pera"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (pracovní profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Psát do textových polí"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorovat všechna stisknutí tlačítka na dotykovém peru"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Dotykové pero"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Teplota"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"První den týdne"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Předvolby číslic"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Použít výchozí nastavení aplikace"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Použít výchozí"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Stupně Celsia (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Stupně Fahrenheita (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"neděle"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Verze jádra"</string>
<string name="build_number" msgid="9009733242117579826">"Číslo sestavení"</string>
<string name="module_version" msgid="1787518340082046658">"Aktualizace systému Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informace o baterii"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nedostupné"</string>
<string name="storage_settings" msgid="7472188817781592677">"Úložiště"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Úložiště a mezipaměť"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresa Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Sériové číslo"</string>
<string name="status_up_time" msgid="1274778533719495438">"Doba provozu"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Datum výroby"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum prvního použití"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Počet cyklů"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nedostupné"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Výpočet…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Přejmenovat"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Připojit"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tímto se resetuje veškeré nastavení sítí Wi-Fi a rozhraní Bluetooth. Tuto akci nebude možné vrátit."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetovat"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth a Wi-Fi byly resetovány"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Vymazat"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Vymazat eSIM karty"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Tímto krokem nezrušíte mobilní tarif. Pokud chcete stáhnout náhradní SIM karty, obraťte se na svého operátora."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Resetovat nastavení"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"K odemykání zařízení používat i gesto"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"K odemykání zařízení používat i PIN"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"K odemykání zařízení používat i heslo"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Ověřte gesto"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Ověřte PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Ověřte heslo"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Pokud chcete pokračovat, zadejte gesto zařízení"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Pokud chcete pokračovat, zadejte PIN zařízení"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Pokud chcete pokračovat, zadejte heslo zařízení"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Nesprávný kód PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Nesprávné heslo"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Nesprávné gesto"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Zobrazit podle aplikací"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Zobrazit podle systémů"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Vzhledem ke kontrolám kvality před odesláním nemusí být při prvním použití počet cyklů nula"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistiky procesů"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Podrobné statistiky běžících procesů"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Využití paměti"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Smazat aktivitu hosta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikace a data z této relace hosta budou nyní smazány a veškerá budoucí aktivita hostů bude smazána pokaždé, když opustíte režim hosta"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"smazat, host, aktivita, odstranit, data, návštěvník, vymazat"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Povolit hostovi používat telefon"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Povolit hostovi telefonovat"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"S hostem bude sdílena historie hovorů"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Zapnout telefonní hovory a SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Nastavení uživatele jako administrátora"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"síť, stav mobilní sítě, stav služby, síla signálu, typ mobilní sítě, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"sériové číslo, verze hardwaru"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informace o baterii, datum výroby, počet cyklů, první použití"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"úroveň opravy zabezpečení androidu, verze základního pásma, verze jádra"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"motiv, světlý, tmavý, citlivost na světlo, fotofobie, ztmavit, tmavý režim, migréna"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tmavý motiv"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Výchozí nastavení zařízení"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Překrytí se nepodařilo použít"</string>
<string name="special_access" msgid="1767980727423395147">"Speciální přístup aplikací"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikace mohou využívat neomezená data</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> aplikace může využívat neomezená data</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikací může využívat neomezená data</item>
- <item quantity="one">1 aplikace může využívat neomezená data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Zobrazit více"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dlouhé úkoly na pozadí"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Povolte dlouhé úkoly na pozadí"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Přepínat změny kompatibility aplikací"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Změny, které jsou ve výchozím nastavení povoleny"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Změny, které jsou ve výchozím nastavení zakázány"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Žádné aplikace"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Kompatibilitu lze upravovat pouze u laditelných aplikací. Nainstalujte laditelnou aplikaci a zkuste to znovu."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Závisí na jiném nastavení"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Účet"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Deaktivace omezení podřízených procesů"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Deaktivovat omezení využití zdrojů systému podřízenými procesy aplikace"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Vynutit aktivování role Poznámky"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktivovat integrace systému psaní poznámek prostřednictvím role Poznámky. Pokud je role Poznámky už aktivována, nic se nestane."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktivovat integrace systému psaní poznámek prostřednictvím role Poznámky. Pokud je role Poznámky už aktivována, nic se nestane. Vyžaduje restart."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Vysílání"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Vysílat v aplikaci <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Poslouchejte vysílání v okolí"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index f75f0e7..b48195b 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth er aktiveret"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Se alle"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Styluspen"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Standardapp til notetagning"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Ved tryk på knappen til styluspennen"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (arbejdsprofil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Skriv i tekstfelter"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorer alle trykker på knapper med styluspen"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Styluspen"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Ugens første dag"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Præferencer for tal"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Brug appens standard"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Brug standard"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Søndag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernesystem"</string>
<string name="build_number" msgid="9009733242117579826">"Buildnummer"</string>
<string name="module_version" msgid="1787518340082046658">"Systemopdatering til Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batterioplysninger"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ikke tilgængelig"</string>
<string name="storage_settings" msgid="7472188817781592677">"Lagerplads"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Lagerplads og cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-adresse"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serienummer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Oppetid"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Produktionsdato"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Dato for ibrugtagning"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Antal cyklusser"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ikke tilgængelig"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Beregner..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Omdøb"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Monter"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Denne handling nulstiller alle indstillinger for Wi‑Fi og Bluetooth. Denne handling kan ikke fortrydes."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Nulstil"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth og Wi‑Fi er blevet nulstillet"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Ryd"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Slet eSIM-kort"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Mobilabonnementer opsiges ikke. Kontakt dit mobilselskab for at downloade nye SIM-kort."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Nulstil indstillinger"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Brug også mønster til at låse enheden op"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Brug også pinkode til at låse enheden op"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Brug også adgangskode til at låse enheden op"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verificer mønster"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verificer pinkode"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verificer adgangskode"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Brug mønsteret til din enhed for at fortsætte"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Angiv pinkoden til din enhed for at fortsætte"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Angiv adgangskoden til din enhed for at fortsætte"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Forkert pinkode"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Forkert adgangskode"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Forkert mønster"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Vis efter apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Vis efter systemer"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"Mere end <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"På grund af kvalitetstjek inden afsending er cyklusantallet muligvis ikke nul, første gang du bruger enheden"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Processtatistikker"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Nørdede statistikker om kørende processer"</string>
<string name="app_memory_use" msgid="7559666138324410666">"hukommelse brugt"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vil du slette gæsteaktiviteten?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps og data fra denne gæstesession slettes nu, og al fremtidig gæsteaktivitet slettes, hver gang du afslutter gæstetilstand"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"slet, gæst, aktivitet, fjern, data, besøgende, ryd"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Giv gæsten lov til at bruge telefonen"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Tillad, at gæsten foretager telefonopkald"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Opkaldshistorikken deles med gæstebrugeren"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivér telefonopkald og sms"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Tildel denne bruger administratorrettigheder"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"netværk, mobilnetværkstilstand, tjenestetilstand, signalstyrke, mobilnetværkstype, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serienummer, hardwareversion"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batterioplysninger, produktionsdato, antal cyklusser, ibrugtagning"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"seneste sikkerhedsopdatering i Android, basebandversion, kernesystem"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, lyst, mørkt, tilstand, lysfølsomhed, fotofobi, gør mørkere, mørkere, mørk tilstand, migræne"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"mørkt tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Enhedens standardindstilling"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Overlejringen kunne ikke anvendes"</string>
<string name="special_access" msgid="1767980727423395147">"Særlig appadgang"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> app kan anvende ubegrænset data</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps kan anvende ubegrænset data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Se mere"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Lange baggrundsopgaver"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Tillad længerevarende opgaver i baggrunden"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Skift appens kompatibilitetsændringer"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Ændringer i standardvalg for aktiveret"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Ændringer i standardvalg for deaktiveret"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Der er ingen apps"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Det er kun apps med fejlretningsmuligheder, som kan få ændret appkompatibiliteten. Installer en app med fejlretningsmuligheder, og prøv igen."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Er afhængig af en anden indstilling"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Deaktiver begrænsningerne for underprocesser"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Deaktiver begrænsningerne for brugen af systemets ressourcer på underprocesser i appen"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Gennemtving aktivering af rollen notetagning"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktivér systemintegrationer til notetagning via rollen notetagning. Hvis rollen notetagning allerede er aktiveret, sker der ikke noget."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktivér systemintegrationer til notetagning via rollen notetagning. Hvis rollen notetagning allerede er aktiveret, sker der ikke noget. Kræver genstart."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Udsendelse"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Udsend <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Lyt til udsendelser, der afspilles i nærheden"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f7e9272..ea6b3d1 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth aktiviert"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Alle anzeigen"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Eingabestift"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Standard-Notizen-App"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Drücken der Eingabestifttaste"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Arbeitsprofil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Textfelder ausfüllen"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Alle Schaltflächenaktivierungen durch Eingabestift ignorieren"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Eingabestift"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Erster Tag der Woche"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Einstellungen für Zahlen"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Standard-App-Einstellungen verwenden"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Standard verwenden"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sonntag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel-Version"</string>
<string name="build_number" msgid="9009733242117579826">"Build-Nummer"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-Systemupdate"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Akkuinformationen"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nicht verfügbar"</string>
<string name="storage_settings" msgid="7472188817781592677">"Speicher"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Speicher und Cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-Adresse"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Seriennummer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Betriebszeit"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Herstellungsdatum"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum der ersten Verwendung"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Anzahl der Ladezyklen"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nicht verfügbar"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Wird berechnet..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Umbenennen"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Bereitstellen"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Dadurch werden alle WLAN- und Bluetooth-Einstellungen zurückgesetzt. Diese Aktion lässt sich nicht rückgängig machen."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Zurücksetzen"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth und WLAN wurden zurückgesetzt"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Löschen"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMs löschen"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Dein Mobilfunkvertrag wird dadurch nicht gekündigt. Wende dich an deinen Mobilfunkanbieter, um Ersatz-SIMs herunterzuladen."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Einstellungen zurücksetzen"</string>
@@ -1458,6 +1463,18 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Muster auch zum Entsperren verwenden"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"PIN auch zum Entsperren verwenden"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Passwort auch zum Entsperren verwenden"</string>
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_header (6669435143987988314) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_header (2585263648322879131) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_header (3064676176428495228) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_details (6187536224419477465) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_details (203022189107305807) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_details (4860219600771003873) -->
+ <skip />
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Falsche PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Falsches Passwort"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Falsches Muster"</string>
@@ -2326,6 +2343,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Nach Apps filtern"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Nach Systemen filtern"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Aufgrund von Qualitätsprüfungen vor dem Versand ist die Anzahl der Ladezyklen bei der ersten Verwendung möglicherweise nicht null"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Prozessstatistiken"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistiken zu laufenden Prozessen"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Arbeitsspeichernutzung"</string>
@@ -2703,7 +2721,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gastaktivität löschen?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps und Daten dieser Gastsitzung werden jetzt gelöscht und alle künftigen Gastaktivitäten werden jeweils beim Beenden des Gastmodus gelöscht"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"löschen, gast, aktivität, entfernen, daten, besucher, löschen"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Gast Nutzung von Telefon erlauben"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Gästen erlauben, zu telefonieren"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Anrufliste wird mit Gastnutzer geteilt"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefonieren & SMS zulassen"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Diesen Nutzer als Administrator festlegen"</string>
@@ -2929,6 +2947,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"netzwerk, status des mobilfunknetzes, status des dienstes, signalstärke, typ des mobilfunknetzes, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"seriennummer, hardwareversion"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"Akkuinformationen, Herstellungsdatum, Anzahl der Ladezyklen, erste Verwendung"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"stand der sicherheitsupdates android, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"Design, hell, dunkel, Modus, Lichtempfindlichkeit, Fotophobie, dunkler machen, abdunkeln, dunkler Modus, Migräne"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"Dunkles Design"</string>
@@ -3855,10 +3874,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Gemäß Standard fürs Gerät"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Overlay konnte nicht angewendet werden"</string>
<string name="special_access" msgid="1767980727423395147">"Spezieller App-Zugriff"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Apps dürfen uneingeschränkt Daten nutzen</item>
- <item quantity="one">1 App darf uneingeschränkt Daten nutzen</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Mehr anzeigen"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Lange Hintergrundaufgaben"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Lang andauernde Hintergrundaufgaben erlauben"</string>
@@ -4146,7 +4161,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Änderungen bei der Kompatibilität von Apps festlegen"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Standardmäßig aktivierte Änderungen"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Standardmäßig deaktivierte Änderungen"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Keine Apps verfügbar"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Die Kompatibilität kann nur bei debug-fähigen Apps geändert werden. Installiere eine debug-fähige App und versuch es noch einmal."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Hängt von einer anderen Einstellung ab"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4664,7 +4678,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Beschränkungen für Unterprozesse deaktivieren"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Beschränkungen für die Nutzung von Systemressourcen durch die untergeordneten App-Prozesse deaktivieren"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Funktion „Notizen“ zwingend aktivieren"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Systemintegrationen für Notizen lassen sich über die Funktion „Notizen“ aktivieren. Ist die Funktion „Notizen“ schon aktiviert, passiert nichts."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Systemintegrationen für Notizen lassen sich über die Funktion „Notizen“ aktivieren. Ist die Funktion „Notizen“ schon aktiviert, passiert nichts. Erfordert einen Neustart."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Übertragen"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> streamen"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Du kannst dir das anhören, was andere in deiner Nähe abspielen"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 50d7a86..a0c0ccc 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Ενεργοποιημένο Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Προβολή όλων"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Γραφίδα"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Προεπιλεγμένη εφαρμογή σημειώσεων"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Πάτημα κουμπιού πίσω μέρους"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Προφίλ εργασίας)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Γραφή σε πεδία κειμένου"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Παράβλεψη όλων των πατημάτων του κουμπιού γραφίδας"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Γραφίδα"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Θερμοκρασία"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Πρώτη ημέρα της εβδομάδας"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Προτιμήσεις για αριθμούς"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Χρήση προεπιλογής εφαρμογής"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Χρήση προεπιλογής"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Κελσίου (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Φαρενάιτ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Κυριακή"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Έκδοση Kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Αριθμός έκδοσης"</string>
<string name="module_version" msgid="1787518340082046658">"Ενημέρωση συστήματος Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Πληροφορίες μπαταρίας"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Δεν είναι διαθέσιμο"</string>
<string name="storage_settings" msgid="7472188817781592677">"Αποθηκευτικός χώρος"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Αποθηκευτικός χώρος και κρυφή μνήμη"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Διεύθυνση Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Σειριακός αριθμός"</string>
<string name="status_up_time" msgid="1274778533719495438">"Χρόνος από την τελευταία εκκίνηση"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Ημερομηνία κατασκευής"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Ημερομηνία πρώτης χρήσης"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Πλήθος κύκλων"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Δεν διατίθεται"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Υπολογισμός..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Μετονομασία"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Προσάρτηση"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Θα γίνει επαναφορά όλων των ρυθμίσεων Wi‑Fi και Bluetooth. Δεν μπορείτε να αναιρέσετε αυτή την ενέργεια."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Επαναφορά"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Έγινε επαναφορά των ρυθμίσεων Bluetooth και Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Διαγραφή"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Διαγραφή των eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Με αυτήν την ενέργεια, δεν θα ακυρωθεί κανένα πρόγραμμα υπηρεσιών κινητής τηλεφωνίας. Για τη λήψη SIM αντικατάστασης, επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Επαναφορά ρυθμίσεων"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Χρήση μοτίβου για ξεκλείδωμα της συσκευής"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Χρήση PIN για ξεκλείδωμα της συσκευής"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Χρήση κωδ. πρόσβ. για ξεκλείδωμα συσκευής"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Επαλήθευση μοτίβου"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Επαλήθευση κωδικού PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Επαλήθευση κωδικού πρόσβασης"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Χρησιμοποιήστε το μοτίβο της συσκευής σας για να συνεχίσετε"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Εισαγάγετε το PIN της συσκευής σας για να συνεχίσετε"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Εισαγάγετε τον κωδικό πρόσβασης της συσκευής σας για να συνεχίσετε"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Λανθασμένος κωδικός PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Λανθασμένος κωδικός πρόσβασης"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Λάθος μοτίβο"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Προβολή κατά εφαρμογές"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Προβολή κατά συστήματα"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Λόγω των ελέγχων ασφαλείας που πραγματοποιούνται πριν από την αποστολή, το πλήθος κύκλων μπορεί να μην είναι μηδέν κατά την πρώτη χρήση"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Στατιστικά στοιχεία διαδικασίας"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Χρήσιμα στατιστικά στοιχεία σχετικά με τις εκτελούμενες διαδικασίες"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Χρήση μνήμης"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Διαγραφή δραστηριότητας επισκέπτη;"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Οι εφαρμογές και τα δεδομένα από αυτήν την περίοδο σύνδεσης επισκέπτη θα διαγραφούν τώρα και όλη η μελλοντική δραστηριότητα επισκέπτη θα διαγράφεται κάθε φορά που εξέρχεστε από τη λειτουργία επισκέπτη"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"διαγραφή, προσκεκλημένος, δραστηριότητα, κατάργηση, δεδομένα, επισκέπτης, σβήσιμο"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Αποδοχή χρήσης τηλεφ. από προσκεκλημένο"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Να κάνει κλήσεις τηλεφώνου ο επισκέπτης"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Το ιστορικό κλήσεων θα κοινοποιηθεί στον προσκεκλημένο χρήστη"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ενεργοποίηση κλήσεων και SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Εκχώρηση δικαιωμ. διαχειριστή στον χρήστη"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"δίκτυο, κατάσταση δικτύου κινητής τηλεφωνίας, κατάσταση υπηρεσίας, ισχύς σήματος, τύπος δικτύου κινητής τηλεφωνίας, περιαγωγή, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"σειριακός αριθμός, έκδοση εξοπλισμού"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"πληροφορίες μπαταρίας, ημερομηνία κατασκευής, πλήθος κύκλων, πρώτη χρήση"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"επίπεδο ενημέρωσης κώδικα ασφαλείας Android, έκδοση βασικού φάσματος, έκδοση πυρήνα"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"θέμα, φως, λειτουργία χαμηλού φωτισμού, ευαισθησία στο φως, φωτοφοβία, πιο σκοτεινή, σκοτεινότερη, λειτουργία χαμηλού φωτισμού, ημικρανία"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"σκούρο θέμα"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Προεπιλογή συσκευής"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Η εφαρμογή της επικάλυψης απέτυχε"</string>
<string name="special_access" msgid="1767980727423395147">"Ειδική πρόσβαση εφαρμογής"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> εφαρμογές μπορούν να χρησιμοποιούν απεριόριστα δεδομένα</item>
- <item quantity="one">1 εφαρμογή μπορεί να χρησιμοποιεί απεριόριστα δεδομένα</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Δείτε περισσότερα"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Εργασ. στο παρασκ. μεγ. διαρκ."</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Να επιτρέπ. εργασίες στο παρασκήνιο μεγάλ. διάρκ."</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Εναλλαγή αλλαγών συμβατότητας εφαρμογών"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Αλλαγές που είναι ενεργοποιημένες από προεπιλογή"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Αλλαγές που είναι απενεργοποιημένες από προεπιλογή"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Καμία διαθέσ. εφαρμ."</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Οι αλλαγές στη συμβατότητα εφαρμογής μπορούν να τροποποιηθούν μόνο για εφαρμογές με δυνατότητα εντοπισμού σφαλμάτων. Εγκαταστήστε μια εφαρμογή με δυνατότητα εντοπισμού σφαλμάτων και δοκιμάστε ξανά."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Εξαρτάται από άλλη ρύθμιση"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Λογαριασμός"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Απενεργοπ. περιορισμών σε θυγατρικές διεργασίες"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Απενεργοποιήστε τους περιορισμούς στη χρήση πόρων συστήματος για τις θυγατρικές διεργασίες της εφαρμογής"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Επιβολή ενεργοποίησης ρόλου Σημειώσεις"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Ενεργοποιήστε τις ενσωματώσεις συστήματος για τη δημιουργία σημειώσεων μέσω του ρόλου Σημειώσεις. Εάν ο ρόλος Σημειώσεις είναι ήδη ενεργοποιημένος, δεν πραγματοποιείται καμία ενέργεια."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Ενεργοποιήστε τις ενσωματώσεις συστήματος για τη δημιουργία σημειώσεων μέσω του ρόλου Σημειώσεις. Εάν ο ρόλος Σημειώσεις είναι ήδη ενεργοποιημένος, δεν πραγματοποιείται καμία ενέργεια. Επαιτεί επανεκκίνηση."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Μετάδοση"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Μετάδοση με την εφαρμογή <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ακούστε μεταδόσεις που πραγματοποιούνται κοντά σας"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 063d5e5..deb71b8 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth turned on"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"See all"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default notes app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail button press"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Work profile)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Write in text fields"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignore all stylus button presses"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperature"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"First day of week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Use app default"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Use default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunday"</string>
@@ -898,7 +899,7 @@
<string name="wifi_hotspot_maximize_compatibility" msgid="6494125684420024058">"Extend compatibility"</string>
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"Helps other devices find this hotspot. Reduces hotspot connection speed."</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"Helps other devices find this hotspot. Increases battery usage."</string>
- <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed and compatibility"</string>
+ <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed & compatibility"</string>
<string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2.4 GHz / Compatible with most devices"</string>
<string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz / Compatible with many devices"</string>
<string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / Compatible with few devices"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel version"</string>
<string name="build_number" msgid="9009733242117579826">"Build number"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play system update"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Battery information"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Not available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage and cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth address"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Uptime"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Manufacture date"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date of first use"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Cycle count"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Unavailable"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculating..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rename"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"This will reset all Wi‑Fi & Bluetooth settings. You can’t undo this action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi have been reset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Erase"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Erase eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"This won’t cancel any mobile service plans. To download replacement SIMs, contact your operator."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset settings"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Also use pattern to unlock this device"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Also use PIN to unlock this device"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Also use password to unlock this device"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verify pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verify PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verify password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use your device pattern to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Enter your device PIN to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Enter your device password to continue"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Wrong PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Wrong password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Wrong pattern"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"View by apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"View by systems"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Due to quality inspections before delivery, the cycle count may not be zero on first use"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Process Stats"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky stats about running processes"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory use"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Allow guest to use phone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Allow guest to make phone calls"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Call history will be shared with guest user"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Make this user an admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, hardware version"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery info, manufacture date, cycle count, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dark theme"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Device default"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Failed to apply overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Special app access"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps can use unrestricted data</item>
- <item quantity="one">1 app can use unrestricted data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"See more"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Long background tasks"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Allow long-running background tasks"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Toggle app compatibility changes"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Default enabled changes"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Default disabled changes"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No apps available"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depends on another setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disable child process restrictions"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disable restrictions on the system resource usage of the app child processes"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force enable Notes role"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Enable note-taking system integrations via the notes role. If the notes role is already enabled, does nothing. Requires reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Broadcast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Listen to broadcasts that are playing near you"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index cbc8160..aed8553 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth turned on"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"See all"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default notes app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail button press"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Work profile)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Write in text fields"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignore all stylus button presses"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperature"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"First day of week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Use app default"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Use default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunday"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel version"</string>
<string name="build_number" msgid="9009733242117579826">"Build number"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play system update"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Battery information"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Not available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage and cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth address"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Up time"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Manufacture date"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date of first use"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Cycle count"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Unavailable"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculating…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rename"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"This will reset all Wi‑Fi & Bluetooth settings. You can’t undo this action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi have been reset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Erase"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Erase eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"This won’t cancel any mobile service plans. To download replacement SIMs, contact your carrier."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset settings"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Also use pattern to unlock this device"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Also use PIN to unlock this device"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Also use password to unlock this device"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verify pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verify PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verify password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use your device pattern to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Enter your device PIN to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Enter your device password to continue"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Wrong PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Wrong password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Wrong pattern"</string>
@@ -1776,7 +1787,7 @@
<string name="audio_category_title" msgid="5283853679967605826">"Audio"</string>
<string name="general_category_title" msgid="6298579528716834157">"General"</string>
<string name="display_category_title" msgid="6638191682294461408">"Display"</string>
- <string name="accessibility_color_and_motion_title" msgid="2323301706545305874">"Colour and motion"</string>
+ <string name="accessibility_color_and_motion_title" msgid="2323301706545305874">"Color and motion"</string>
<string name="accessibility_turn_screen_darker_title" msgid="5986223133285858349">"Turn screen darker"</string>
<string name="interaction_control_category_title" msgid="2696474616743882372">"Interaction controls"</string>
<string name="accessibility_tap_assistance_title" msgid="1058913033421048284">"Timing controls"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"View by apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"View by systems"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Due to quality inspections before shipping, the cycle count may not be zero on first use"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Process Stats"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky stats about running processes"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory use"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time you exit guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Allow guest to use phone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Allow guest to make phone calls"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Call history will be shared with guest user"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Make this user an admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, hardware version"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery info, manufacture date, cycle count, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dark theme"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Device default"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Failed to apply overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Special app access"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps can use unrestricted data</item>
- <item quantity="one">1 app can use unrestricted data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"See more"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Long background tasks"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Allow long-running background tasks"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Toggle app compatibility changes"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Default enabled changes"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Default disabled changes"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No apps available"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depends on another setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disable child process restrictions"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disable restrictions on the system resource usage of the app child processes"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force enable Notes role"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing. Requires reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Broadcast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Listen to broadcasts that are playing near you"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index a68a918..43b0c2c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth turned on"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"See all"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default notes app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail button press"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Work profile)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Write in text fields"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignore all stylus button presses"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperature"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"First day of week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Use app default"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Use default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunday"</string>
@@ -898,7 +899,7 @@
<string name="wifi_hotspot_maximize_compatibility" msgid="6494125684420024058">"Extend compatibility"</string>
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"Helps other devices find this hotspot. Reduces hotspot connection speed."</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"Helps other devices find this hotspot. Increases battery usage."</string>
- <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed and compatibility"</string>
+ <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed & compatibility"</string>
<string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2.4 GHz / Compatible with most devices"</string>
<string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz / Compatible with many devices"</string>
<string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / Compatible with few devices"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel version"</string>
<string name="build_number" msgid="9009733242117579826">"Build number"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play system update"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Battery information"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Not available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage and cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth address"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Uptime"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Manufacture date"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date of first use"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Cycle count"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Unavailable"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculating..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rename"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"This will reset all Wi‑Fi & Bluetooth settings. You can’t undo this action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi have been reset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Erase"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Erase eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"This won’t cancel any mobile service plans. To download replacement SIMs, contact your operator."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset settings"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Also use pattern to unlock this device"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Also use PIN to unlock this device"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Also use password to unlock this device"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verify pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verify PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verify password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use your device pattern to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Enter your device PIN to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Enter your device password to continue"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Wrong PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Wrong password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Wrong pattern"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"View by apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"View by systems"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Due to quality inspections before delivery, the cycle count may not be zero on first use"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Process Stats"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky stats about running processes"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory use"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Allow guest to use phone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Allow guest to make phone calls"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Call history will be shared with guest user"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Make this user an admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, hardware version"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery info, manufacture date, cycle count, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dark theme"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Device default"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Failed to apply overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Special app access"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps can use unrestricted data</item>
- <item quantity="one">1 app can use unrestricted data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"See more"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Long background tasks"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Allow long-running background tasks"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Toggle app compatibility changes"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Default enabled changes"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Default disabled changes"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No apps available"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depends on another setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disable child process restrictions"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disable restrictions on the system resource usage of the app child processes"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force enable Notes role"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Enable note-taking system integrations via the notes role. If the notes role is already enabled, does nothing. Requires reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Broadcast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Listen to broadcasts that are playing near you"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index f5bbd96..858c254 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth turned on"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"See all"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default notes app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail button press"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Work profile)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Write in text fields"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignore all stylus button presses"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperature"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"First day of week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Use app default"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Use default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunday"</string>
@@ -898,7 +899,7 @@
<string name="wifi_hotspot_maximize_compatibility" msgid="6494125684420024058">"Extend compatibility"</string>
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"Helps other devices find this hotspot. Reduces hotspot connection speed."</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"Helps other devices find this hotspot. Increases battery usage."</string>
- <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed and compatibility"</string>
+ <string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Speed & compatibility"</string>
<string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2.4 GHz / Compatible with most devices"</string>
<string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz / Compatible with many devices"</string>
<string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / Compatible with few devices"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel version"</string>
<string name="build_number" msgid="9009733242117579826">"Build number"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play system update"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Battery information"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Not available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage and cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth address"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Uptime"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Manufacture date"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date of first use"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Cycle count"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Unavailable"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculating..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rename"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"This will reset all Wi‑Fi & Bluetooth settings. You can’t undo this action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi have been reset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Erase"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Erase eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"This won’t cancel any mobile service plans. To download replacement SIMs, contact your operator."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset settings"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Also use pattern to unlock this device"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Also use PIN to unlock this device"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Also use password to unlock this device"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verify pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verify PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verify password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use your device pattern to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Enter your device PIN to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Enter your device password to continue"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Wrong PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Wrong password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Wrong pattern"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"View by apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"View by systems"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Due to quality inspections before delivery, the cycle count may not be zero on first use"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Process Stats"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky stats about running processes"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory use"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Allow guest to use phone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Allow guest to make phone calls"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Call history will be shared with guest user"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Make this user an admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, hardware version"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery info, manufacture date, cycle count, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dark theme"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Device default"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Failed to apply overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Special app access"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps can use unrestricted data</item>
- <item quantity="one">1 app can use unrestricted data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"See more"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Long background tasks"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Allow long-running background tasks"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Toggle app compatibility changes"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Default enabled changes"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Default disabled changes"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No apps available"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depends on another setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disable child process restrictions"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disable restrictions on the system resource usage of the app child processes"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force enable Notes role"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Enable note-taking system integrations via the notes role. If the notes role is already enabled, does nothing. Requires reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Broadcast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Listen to broadcasts that are playing near you"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 8f40e58..3455c1e 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth turned on"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"See all"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default notes app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail button press"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Work profile)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Write in text fields"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignore all stylus button presses"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperature"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"First day of week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Use app default"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Use default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunday"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel version"</string>
<string name="build_number" msgid="9009733242117579826">"Build number"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play system update"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Battery information"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Not available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage & cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth address"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Up time"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Manufacture date"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date of first use"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Cycle count"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Unavailable"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculating…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rename"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"This will reset all Wi‑Fi & Bluetooth settings. You can’t undo this action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi have been reset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Erase"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Erase eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"This won’t cancel any mobile service plans. To download replacement SIMs, contact your carrier."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset settings"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Also use pattern to unlock this device"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Also use PIN to unlock this device"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Also use password to unlock this device"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verify pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verify PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verify password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use your device pattern to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Enter your device PIN to continue"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Enter your device password to continue"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Wrong PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Wrong password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Wrong pattern"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"View by apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"View by systems"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Due to quality inspections before shipping, the cycle count may not be zero on first use"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Process Stats"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Geeky stats about running processes"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory use"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time you exit guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Allow guest to use phone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Allow guest to make phone calls"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Call history will be shared with guest user"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Make this user an admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, hardware version"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"battery info, manufacture date, cycle count, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, baseband version, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dark theme"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Device default"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Failed to apply overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Special app access"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps can use unrestricted data</item>
- <item quantity="one">1 app can use unrestricted data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"See more"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Long background tasks"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Allow long-running background tasks"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Toggle app compatibility changes"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Default enabled changes"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Default disabled changes"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No apps available"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depends on another setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disable child process restrictions"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disable restrictions on the system resource usage of the app child processes"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force enable Notes role"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing. Requires reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Broadcast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Listen to broadcasts that are playing near you"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c3c1aeb..e23f50d 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Se activó el Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todos"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pluma stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"App de notas predeterminada"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Presionar el botón de la pluma stylus"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de trabajo)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escribir en campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todas las pulsaciones del botón de la pluma stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pluma stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primer día de la semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferencias de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar la configuración predeterminada de la app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usar la configuración predeterminada"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versión de kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número de compilación"</string>
<string name="module_version" msgid="1787518340082046658">"Actualización del sistema de Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Información sobre la batería"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"No disponible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Almacenamiento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Almacenamiento y caché"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Dirección de Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de serie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tiempo de actividad"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Fecha de fabricación"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Fecha de primer uso"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Conteo de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"No disponible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculando…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Cambiar nombre"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Activar"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Esta acción restablecerá la configuración de Bluetooth y de Wi-Fi. No podrás deshacer esta acción."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Restablecer"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Se restablecieron el Bluetooth y el Wi-Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Borrar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Borrar eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Esta acción no cancelará ningún plan de servicio móvil. Para descargar tarjetas SIM de reemplazo, comunícate con tu proveedor."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Restablecer configuración"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Desbloquear este dispositivo con el patrón"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Desbloquear este dispositivo con el PIN"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Desbloquear este dispositivo con contraseña"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verificar patrón"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verificar PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verificar contraseña"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Para continuar, usa el patrón del dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Para continuar, ingresa el PIN del dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Para continuar, ingresa la contraseña del dispositivo"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorrecto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Contraseña incorrecta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Patrón incorrecto"</string>
@@ -2030,7 +2041,7 @@
<string name="accessibility_audio_description_summary" msgid="2554789094873781056">"Escucha una descripción de lo que ocurre en pantalla en películas y programas compatibles"</string>
<string name="keywords_audio_description" msgid="6202816411593281252">"audiodescripción, audio, descripción, persona con visión reducida"</string>
<string name="accessibility_summary_shortcut_enabled" msgid="4030427268146752644">"Combinación activada"</string>
- <string name="accessibility_summary_shortcut_disabled" msgid="564005462092499068">"Desactivada"</string>
+ <string name="accessibility_summary_shortcut_disabled" msgid="564005462092499068">"Combinación desactivada"</string>
<string name="accessibility_summary_state_enabled" msgid="1065431632216039369">"Activado"</string>
<string name="accessibility_summary_state_disabled" msgid="9173234532752799694">"Desactivado"</string>
<string name="accessibility_summary_state_stopped" msgid="2343602489802623424">"No funciona. Presiona para obtener información."</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ver por apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Ver por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Debido a la calidad de las inspecciones antes del envío, es posible que la cantidad de ciclos no sea igual a cero en el primer uso"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estadísticas de procesos"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estadísticas para geeks sobre procesos activos"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Uso de memoria"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"¿Borrar la actividad de invitado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Las apps y los datos de esta sesión de invitado se borrarán ahora, y toda la actividad futura correspondiente se borrará cada vez que salgas del modo de invitado."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"borrar, invitado, actividad, quitar, datos, visitante, eliminar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permite que el invitado use el teléfono"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Invitado puede realizar llamadas telef."</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Se compartirá el historial de llamadas con el usuario invitado"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar llamadas telefónicas y SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Convertir a este usuario en administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"red, estado de la red móvil, estado del servicio, potencia de la señal, tipo de red móvil, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de serie, versión de hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"información de la batería, fecha de fabricación, conteo de ciclos, primer uso"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivel de parche de seguridad de android, versión de banda base, versión de kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, claro, oscuro, modo, sensibilidad a la luz, fotofobia, oscurecer, modo oscuro, migraña"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema oscuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Opción predeterminada del dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Error al aplicar superposición"</string>
<string name="special_access" msgid="1767980727423395147">"Acceso especial de apps"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps pueden usar datos ilimitados</item>
- <item quantity="one">1 app puede usar datos ilimitados</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ver más"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tareas largas en segundo plano"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tareas largas en segundo plano"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Activa o desactiva los cambios de compatibilidad de la app"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Cambios habilitados de manera predeterminada"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Cambios inhabilitados de manera predeterminada"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"No hay apps disponibles"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Solo se pueden implementar cambios de compatibilidad para las apps depurables. Instala una app depurable y vuelve a intentarlo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depende de otra opción de configuración"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Cuenta"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Inhabilita restricciones de procesos secundarios"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Inhabilita las restricciones del uso de recursos del sistema para los procesos secundarios de la app."</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Fuerza el rol Notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Permite integraciones del sistema para tomar notas con el rol Notas. Si este rol ya está habilitado, no tiene ningún efecto."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Permite integraciones del sistema para tomar notas con el rol Notas. Si este rol ya está habilitado, no tiene ningún efecto. Requiere reiniciar el dispositivo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmisión"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmitir <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Escucha las transmisiones que se están reproduciendo cerca de ti"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index d752a4f..4a1d217 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth activado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todo"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Lápiz óptico"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplicación de notas predeterminada"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pulsar botón trasero"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de trabajo)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escribir en campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todas las pulsaciones del botón del lápiz óptico"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Lápiz óptico"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primer día de la semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferencias de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar la configuración predeterminada de la app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usar predeterminada"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -899,10 +900,10 @@
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"Ayuda a otros dispositivos a encontrar este punto de acceso. Reduce la velocidad de conexión del punto de acceso."</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"Ayuda a otros dispositivos a encontrar este punto de acceso. Aumenta el uso de la batería."</string>
<string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"Velocidad y compatibilidad"</string>
- <string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2,4 GHz / Compatible con la mayoría de dispositivos"</string>
+ <string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2,4 GHz: compatible con la mayoría de los dispositivos"</string>
<string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz: compatible con muchos dispositivos"</string>
- <string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / Compatible con pocos dispositivos"</string>
- <string name="wifi_hotspot_speed_summary_2g_and_5g" msgid="5931052946168943750">"2,4 y 5 GHz / Compatible con la mayoría de dispositivos"</string>
+ <string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz: compatible con pocos dispositivos"</string>
+ <string name="wifi_hotspot_speed_summary_2g_and_5g" msgid="5931052946168943750">"2,4 y 5 GHz: compatible con la mayoría de los dispositivos"</string>
<string name="wifi_hotspot_speed_intro" msgid="6973482196363758925">"Elige la frecuencia de tu punto de acceso. La frecuencia afecta a la velocidad de conexión y a los tipos de dispositivos que pueden encontrar tu punto de acceso."</string>
<string name="wifi_hotspot_speed_category" msgid="5265655850463630286">"Frecuencia preferida"</string>
<string name="wifi_hotspot_speed_2g" msgid="3400600834257664480">"2,4 GHz"</string>
@@ -912,7 +913,7 @@
<string name="wifi_hotspot_speed_2g_5g" msgid="9192756255938408285">"2,4 y 5 GHz"</string>
<string name="wifi_hotspot_speed_2g_5g_summary" msgid="8104575293617700173">"Velocidades rápidas. Este punto de acceso de doble banda es compatible con la mayoría de los dispositivos."</string>
<string name="wifi_hotspot_speed_6g" msgid="3787697484862730500">"6 GHz"</string>
- <string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"Velocidades aún más rápidas. Compatible con pocos dispositivos."</string>
+ <string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"Velocidades más rápidas. Compatible con pocos dispositivos."</string>
<string name="wifi_hotspot_speed_summary_unavailable" msgid="7276080644693388756">"No está disponible en tu país o zona"</string>
<string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"Si tu frecuencia preferida no está disponible, tu punto de acceso puede usar una diferente. La configuración de seguridad del punto de acceso puede cambiar si modificas la frecuencia."</string>
<string name="wifi_hotspot_security_summary_unavailable" msgid="117582979310345853">"No disponible con 6 GHz"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versión del kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número de compilación"</string>
<string name="module_version" msgid="1787518340082046658">"Actualización del sistema de Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Información de la batería"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"No disponible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Almacenamiento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Almacenamiento y caché"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Dirección de Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de serie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tiempo de actividad"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Fecha de fabricación"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Fecha del primer uso"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Número de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"No disponible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculando…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Cambiar nombre"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montar"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Se restablecerán todos los ajustes de Wi-Fi y Bluetooth. No podrás deshacer esta acción."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Restablecer"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"El Bluetooth y el Wi-Fi se han restablecido"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Borrar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Borrar eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"No se cancelará ningún plan de servicios móviles. Para descargar una tarjeta SIM de sustitución, ponte en contacto con tu operador."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Restablecer ajustes"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Usar el patrón también para desbloquear"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Usar el PIN también para desbloquear"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Usar la contraseña también para desbloquear"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifica el patrón"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifica el PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifica la contraseña"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Utiliza el patrón del dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Introduce el PIN del dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Introduce la contraseña del dispositivo para continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorrecto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Contraseña incorrecta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Patrón incorrecto"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ver por aplicaciones"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Ver por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Debido a las inspecciones de calidad realizadas antes del envío, puede que el recuento de ciclos no sea cero en el primer uso"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estadísticas de procesos"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estadísticas técnicas sobre procesos en ejecución"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Uso de memoria"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"¿Eliminar actividad de invitado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Se eliminarán las aplicaciones y datos de esta sesión de invitado ahora, y toda la actividad futura correspondiente se borrará cada vez que salgas del modo Invitado"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"eliminar, invitado, actividad, retirar, datos, visitante, borrar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permitir que el invitado use el teléfono"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permitir que el invitado haga llamadas"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"El historial de llamadas se compartirá con el usuario invitado"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar llamadas y SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Convertir a este usuario en administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"red, estado de la red móvil, estado del servicio, intensidad de la señal, tipo de red móvil, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de serie, versión de hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"información de la batería, fecha de fabricación, número de ciclos, primer uso"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivel del parche de seguridad de android, versión de banda base, versión de kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, claro, oscuro, modo, sensibilidad a la luz, fotofobia, hacer más oscuro, oscurecer, modo Oscuro, migraña"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema oscuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Opción predeterminada del dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"No se ha podido crear la superposición"</string>
<string name="special_access" msgid="1767980727423395147">"Acceso especial de aplicaciones"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplicaciones pueden utilizar datos sin restricción</item>
- <item quantity="one">1 aplicación puede utilizar datos sin restricción</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ver más"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tareas extensas en segundo plano"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tareas de larga duración en segundo plano"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Activa o desactiva los cambios de compatibilidad de aplicaciones"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Cambios habilitados de manera predeterminada"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Cambios inhabilitados de manera predeterminada"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Sin apps disponibles"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Los cambios en la compatibilidad de las aplicaciones solo se pueden modificar en aplicaciones depurables; instala una aplicación de este tipo e inténtalo de nuevo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depende de otra opción"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Cuenta"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Inhabilitar restricciones de procesos secundarios"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Inhabilita las restricciones del uso de recursos del sistema de los procesos secundarios de la aplicación"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forzar habilitación del rol Notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Habilita las integraciones del sistema para toma de notas por medio del rol Notas. Si el rol Notas ya está habilitado, no hace nada."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Habilita las integraciones del sistema para toma de notas por medio del rol de notas. Si el rol de notas ya está habilitado, no hace nada. Requiere reiniciar el dispositivo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Emisión"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emitir <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Escucha emisiones que estén cerca de ti"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 63f3b8c..5cb6caf 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth on sisse lülitatud"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Kuva kõik"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Elektronpliiats"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Märkmete tegemise vaikerakendus"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Taganupu vajutus"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (tööprofiil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Kirjutamine tekstiväljadele"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Elektronpliiatsi kõigi nupuvajutuste eiramine"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Elektronpliiats"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatuur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Nädala esimene päev"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbrite eelistused"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Kasuta rakenduse vaikeseadet"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Kasuta vaikerakendust"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Pühapäev"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Tuuma versioon"</string>
<string name="build_number" msgid="9009733242117579826">"Järgunumber"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play süsteemivärskendus"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Akuteave"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Pole saadaval"</string>
<string name="storage_settings" msgid="7472188817781592677">"Mäluruum"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Salvestusruum ja vahemälu"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetoothi aadress"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Seerianumber"</string>
<string name="status_up_time" msgid="1274778533719495438">"Talitlusaeg"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Tootmiskuupäev"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Esmakordse kasutamise kuupäev"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Tsüklite arv"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Pole saadaval"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Arvutamine ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Nimeta ümber"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Ühendamine"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"See lähtestab kõik WiFi ja Bluetoothi seaded. Seda toimingut ei saa tagasi võtta."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Lähtesta"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth ja WiFi on lähtestatud"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Kustuta"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM-ide kustutamine"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"See ei tühista mobiilsideteenuse pakette. Asendus-SIM-ide allalaadimiseks võtke ühendust operaatoriga."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Lähtesta seaded"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Kasuta mustrit ka selle seadme avamiseks"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Kasuta PIN-koodi ka selle seadme avamiseks"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Kasuta parooli ka selle seadme avamiseks"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Mustri kinnitamine"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN-koodi kinnitamine"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Parooli kinnitamine"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Jätkamiseks kasutage seadme mustrit"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Jätkamiseks sisestage seadme PIN-kood"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Jätkamiseks sisestage seadme parool"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Vale PIN-kood"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Vale parool"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Vale muster"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Kuva rakenduste kaupa"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Kuva süsteemide kaupa"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Enne saatmist tehtud kvaliteedikontrolli tõttu ei pruugi tsüklite arv esmakordsel kasutamisel olla null"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Protsessi statistika"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Tehnilised üksikasjad protsesside käitamise kohta"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Mälu kasutamine"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Kas kustutada külalise tegevus?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Selle külastajaseansi rakendused ja andmed kustutatakse kohe ning kõik tulevased külastajate tegevused kustutatakse külalisrežiimist väljumisel."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"kustuta, kustutamine, külaline, tegevus, tegevuse, eemalda, eemaldamine, kõrvalda, külalise"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Luba külalisel telefoni kasutada"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Luba külalistel helistada"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Külalisest kasutajaga jagatakse kõneajalugu"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Lülita telefonikõned ja SMS-id sisse"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Määra see kasutaja administraatoriks"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"võrk, mobiilsidevõrgu olek, teenuse olek, signaali tugevus, mobiilsidevõrgu tüüp, rändlus, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"seerianumber, riistvaraversioon"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"aku teave, tootmiskuupäev, tsüklite arv, esmakordne kasutamine"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"androidi turvapaiga tase, põhiribaversioon, tuuma versioon"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"teema, hele, tume, režiim, valgustundlikkus, fotofoobia, tumedamaks muutmine, tumendamine, tume režiim, migreen"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tume teema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Seadme vaikeseade"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Ülekatet ei õnnestunud rakendada"</string>
<string name="special_access" msgid="1767980727423395147">"Rakenduse erijuurdepääs"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> rakendusel on piiranguteta juurdepääs andmesidele</item>
- <item quantity="one">1 rakendusel on piiranguteta juurdepääs andmesidele</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Kuva rohkem"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Pikaajalised taustaülesanded"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Luba pikaajalised taustaülesanded"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Rakenduse ühilduvuse muudatuste lüliti"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Vaikimisi lubatud rakenduste muudatused"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Vaikimisi keelatud rakenduste muudatused"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Rakendusi pole"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Rakenduse ühilduvuse muudatusi saab muuta silutavate rakenduste puhul. Installige silutav rakendus ja proovige uuesti."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Oleneb teisest seadest"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Keela alamprotsesside piirangud"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Keelake rakenduste alamprotsesside puhul süsteemiressursside kasutuse piirangud"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Märkmete rolli sundlubamine"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Lubage märkmete rolli kaudu märkmete tegemise süsteemi integratsioonid. Kui märkmete roll on juba lubatud, ei tehta midagi."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Lubage märkmete rolli kaudu märkmete tegemise süsteemi integratsioonid. Kui märkmete roll on juba lubatud, ei tehta midagi. Nõuab taaskäivitamist."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Ülekanne"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Rakenduse <xliff:g id="CURRENTAPP">%1$s</xliff:g> ülekandmine"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Kuulake ülekandeid, mida teie läheduses esitatakse"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 89122969..6bec960 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Aktibatu da Bluetootha"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ikusi guztiak"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Arkatza"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Oharren aplikazio lehenetsia"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Muturreko botoia sakatzean"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (laneko profila)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Idatzi testu-eremuetan"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Egin ez ikusi arkatzarekin sakatzen diren botoi guztiei"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Arkatza"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Tenperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Asteko lehen eguna"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Zenbaki-hobespenak"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Erabili aplikazioaren hobespen lehenetsiak"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Erabili hobespen lehenetsia"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Igandea"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel bertsioa"</string>
<string name="build_number" msgid="9009733242117579826">"Konpilazio-zenbakia"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-ren sistemaren eguneratzea"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Bateriari buruzko informazioa"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ez dago erabilgarri"</string>
<string name="storage_settings" msgid="7472188817781592677">"Memoria"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Memoria eta cachea"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth bidez konektatzeko helbidea"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serie-zenbakia"</string>
<string name="status_up_time" msgid="1274778533719495438">"Berrabiarazi ondoren abian izandako denbora"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Fabrikatze-data"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Lehen erabileraren data"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Ziklo kopurua"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ez dago erabilgarri"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Kalkulatzen…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Aldatu izena"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Instalatu"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Wifiaren eta Bluetootharen ezarpen guztiak berrezarriko dira. Ezin da desegin ekintza."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Berrezarri"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Berrezarri dira Bluetootha eta wifia"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Ezabatu eduki guztia"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Ezabatu eSIMetako eduki guztia"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ez da utziko bertan behera mugikorretarako zerbitzu-planik. Ordezko SIMak deskargatzeko, jarri operadorearekin harremanetan."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Berrezarri ezarpenak"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Erabili eredua ere gailua desblokeatzeko"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Erabili PINa ere gailua desblokeatzeko"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Erabili pasahitza ere gailua desblokeatzeko"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Egiaztatu eredua"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Egiaztatu PINa"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Egiaztatu pasahitza"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Aurrera egiteko, marraztu gailuaren eredua"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Aurrera egiteko, idatzi gailuaren PINa"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Aurrera egiteko, idatzi gailuaren pasahitza"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PINa ez da zuzena"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Pasahitza ez da zuzena"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Eredua ez da zuzena"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ikusi aplikazioaren arabera"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Ikusi sistemaren arabera"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Bidali aurretik egin beharreko kalitate-ikuskapenak direla eta, baliteke ziklo kopurua zero ez izatea lehen erabileran"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Prozesu-estatistikak"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Exekutatzen ari diren prozesuei buruzko estatistika zehatzak"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memoriaren erabilera"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gonbidatuaren jarduerak ezabatu nahi dituzu?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Gonbidatuentzako saio honetako aplikazio eta datuak orain ezabatuko dira; bestalde, etorkizuneko gonbidatuen jarduera guztiak gonbidatu modutik irteten zaren bakoitzean ezabatuko dira"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ezabatu, gonbidatu, jarduera, kendu, datuak, bisitari"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Eman telefonoa erabiltzeko baimena gonbidatuari"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Utzi telefono-deiak egiten gonbidatuari"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Deien historia erabiltzaile gonbidatuarekin partekatuko da"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktibatu telefono-deiak eta SMSak"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Egin erabiltzaile hau administratzaile"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"sarea, sare mugikorraren egoera, zerbitzuaren egoera, seinalearen indarra, sare mugikor mota, ibiltaritza, iccid-a, eid-a"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid-a"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serie-zenbakia, hardware-bertsioa"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"bateriari buruzko informazioa, fabrikatze-data, ziklo kopurua, lehen erabilera"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android-en segurtasunaren adabaki-maila, oinarri-bandaren bertsioa, kernel bertsioa"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"gaia, argia, iluna, modua, argiarekiko sentikortasuna, fotofobia, ilundu, modu iluna, migraina"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"gai iluna"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Gailuaren balio lehenetsiak"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Ezin izan da aplikatu gainjartzea"</string>
<string name="special_access" msgid="1767980727423395147">"Aplikazio-baimen bereziak"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikaziok dute datuak mugarik gabe erabiltzeko aukera</item>
- <item quantity="one">1 aplikaziok du datuak mugarik gabe erabiltzeko aukera</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ikusi gehiago"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Atzeko planoko zeregin luzeak"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Eman atzeko planoko zeregin luzeak exekutatzeko baimena"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Aktibatu/Desaktibatu aplikazioaren bateragarritasun-aldaketak"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Gaitutako aldaketa lehenetsiak"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Desgaitutako aldaketa lehenetsiak"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Ez dago aplikaziorik erabilgarri"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Aratz daitezkeen aplikazioetan soilik egin daitezke bateragarritasun-aldaketak. Instalatu araz daitekeen aplikazio bat eta saiatu berriro."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Beste ezarpen baten araberakoa da"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Kontua"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desgaitu haurraren prozesamenduarekin lotutako murriztapenak"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desgaitu murriztapenak haurrak prozesatzen duen aplikazioari dagokion sistema-baliabideen erabileran"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Behartu Oharrak funtzioa gaitzera"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Gaitu sistemaren oharrak idazteko integrazioak Oharrak izeneko funtzioarekin. Oharrak funtzioa gaituta badago, ez da ezer aldatuko."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Gaitu sistemaren oharrak idazteko integrazioak Oharrak izeneko funtzioarekin. Oharrak funtzioa gaituta badago, ez da ezer aldatuko. Gailua berrabiarazi behar da."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Igorpena"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Igorri <xliff:g id="CURRENTAPP">%1$s</xliff:g> aplikazioaren audioa"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Entzun zure inguruan igortzen ari diren edukia"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 923d165..e296651 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"بلوتوث روشن شد"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"دیدن همه"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"قلم"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"برنامه پیشفرض یادداشتها"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"فشار دادن دکمه قلم"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (نمایه کاری)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"نوشتن در فیلدهای نوشتاری"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"نادیده گرفتن همه موارد فشردن دکمه قلم"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"قلم"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"دما"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"اولین روز هفته"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"اولویتهای اعداد"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"استفاده از پیشفرض برنامه"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"استفاده از اولویت پیشفرض"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"سلسیوس (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"فارنهایت (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"یکشنبه"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"نسخهٔ اصلی"</string>
<string name="build_number" msgid="9009733242117579826">"شمارهٔ ساخت"</string>
<string name="module_version" msgid="1787518340082046658">"بهروزرسانی سیستم Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"اطلاعات باتری"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"موجود نیست"</string>
<string name="storage_settings" msgid="7472188817781592677">"حافظه"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"فضای ذخیرهسازی و حافظه پنهان"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"آدرس بلوتوث"</string>
<string name="status_serial_number" msgid="9060064164331466789">"شمارهٔ سریال"</string>
<string name="status_up_time" msgid="1274778533719495438">"زمان فعالیت"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"تاریخ تولید"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"تاریخ اولین استفاده"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"تعداد چرخهها"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"دردسترس نیست"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"در حال محاسبه..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"تغییر نام دادن"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"قرار دادن"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"با این کار، همه تنظیمات Wi-Fi و بلوتوث بازنشانی خواهد شد. این کنش واگرد نمیشود."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"بازنشانی"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"بلوتوث و Wi‑Fi بازنشانی شدند"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"پاکسازی"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"پاک کردن سیمکارت داخلی"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"با این کار، هیچیک از طرحهای سرویس تلفن همراه لغو نمیشود. برای بارگیری سیمکارتهای جایگزین، با شرکت مخابراتیتان تماس بگیرید."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"بازنشانی تنظیمات"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"از الگو برای قفلگشایی این دستگاه نیز استفاده شود"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"از پین برای قفلگشایی این دستگاه نیز استفاده شود"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"از گذرواژه برای قفلگشایی این دستگاه نیز استفاده شود"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"تأیید الگو"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"تأیید پین"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"تأیید گذرواژه"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"برای ادامه دادن، الگوی دستگاه را وارد کنید"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"برای ادامه دادن، پین دستگاه را وارد کنید"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"برای ادامه دادن، گذرواژه دستگاه را وارد کنید"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"پین اشتباه است"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"گذرواژه اشتباه"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"الگوی اشتباه"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"مشاهده براساس برنامه"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"بازدید براساس سیستم"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"کمتراز <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"بهدلیل بررسی کیفیت پیشاز ارسال، ممکن است عدد دور در اولین استفاده صفر نباشد"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"آمار فرآیند"</string>
<string name="process_stats_summary" msgid="522842188571764699">"آمار دقیق برای فرآیندهای در حال اجرا"</string>
<string name="app_memory_use" msgid="7559666138324410666">"استفاده از حافظه"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"فعالیت مهمان حذف شود؟"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"برنامهها و دادههای این جلسه مهمان اکنون حذف خواهند شد و همه فعالیتهای آتی مهمان هربار که از حالت مهمان خارج شوید حذف خواهد شد"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"حذف، مهمان، فعالیت، برداشتن، داده، بازدیدکننده، پاک کردن"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"اجازه دادن به مهمان برای استفاده از تلفن"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"اجازه دادن به مهمان برای گرفتن تماس تلفنی"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"سابقه تماس با کاربر مهمان همرسانی خواهد شد"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"روشن کردن تماسهای تلفنی و پیامک"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"انتخاب این کاربر بهعنوان سرپرست"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"شبکه، وضعیت شبکه تلفن همراه، وضعیت سرویس، شدت سیگنال، نوع شبکه تلفن همراه، فراگردی، iccid و eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"سند شناسایی جاسازیشده (EID)"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"شماره سریال، نسخه سختافزار"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"اطلاعات باتری، تاریخ تولید، تعداد چرخه، اولین استفاده"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"سطح وصله امنیتی android، نسخه باند پایه، نسخه اصلی"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"زمینه، روشن، تاریک، حالت، حساسیت به نور، نورهراسی، تاریکتر کردن، تاریک کردن، حالت تاریک، میگرن"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"زمینه تیره"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"پیشفرض دستگاه"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"همپوشانی اعمال نشد"</string>
<string name="special_access" msgid="1767980727423395147">"دسترسی ویژه برنامهها"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> برنامه میتواند از داده نامحدود استفاده کند</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> برنامه میتواند از داده نامحدود استفاده کند</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"مشاهده محتوای بیشتر"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"کارهای طولانی در پسزمینه"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"مجاز کردن کارهای طولانیمدت در پسزمینه"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"روشن/خاموش کردن تغییرات سازگاری برنامه"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"تغییرات فعال پیشفرض"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"تغییرات غیرفعال پیشفرض"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"هیچ برنامهای دردسترس نیست"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"تغییرات سازگاری برنامه را فقط برای برنامههای قابل اشکالزدایی میتوان تغییر داد. برنامه قابل اشکالزدایی را نصب کنید و دوباره امتحان کنید."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"به تنظیم دیگری بستگی دارد"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"حساب"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"غیرفعال کردن محدودیتهای فرایندهای مربوط به کودک"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"غیرفعال کردن محدودیتهای استفاده فرایندهای مربوط به کودکِ برنامه از منابع سیستم"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"فعال کردن اجباری نقش «یادداشت»"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"فعال کردن ادغامهای سیستم یادداشتبرداری ازطریق نقش «یادداشت». اگر نقش «یادداشت» ازقبل فعال شده باشد، کاری انجام نمیشود."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"فعال کردن ادغامهای سیستم یادداشتبرداری ازطریق نقش «یادداشت». اگر نقش «یادداشت» ازقبل فعال شده باشد، کاری انجام نمیشود. به بازراهاندازی نیاز دارد."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"همهفرستی"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"همهفرستی <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"به همهفرستیهایی که اطراف شما درحال پخش هستند گوش دهید"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 0bc6900..5d883f1 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth käytössä"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Näytä kaikki"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Näyttökynä"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Oletusmuistiinpanosovellus"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Näyttökynäpainikkeen painallus"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (työprofiili)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Kirjoittaminen tekstikenttiin"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ohita kaikki näyttökynäpainikkeen painallukset"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Näyttökynä"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Lämpötila"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Viikon ensimmäinen päivä"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numeroasetukset"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Käytä sovelluksen oletusvaihtoehtoa"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Käytä oletusta"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunnuntai"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel-versio"</string>
<string name="build_number" msgid="9009733242117579826">"Ohjelmistoversion numero"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ‑järjestelmäpäivitys"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Akun tiedot"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ei käytettävissä"</string>
<string name="storage_settings" msgid="7472188817781592677">"Tallennustila"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Tallennustila ja välimuisti"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-osoite"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Sarjanumero"</string>
<string name="status_up_time" msgid="1274778533719495438">"Käynnissäoloaika"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Valmistuspäivä"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Ensimmäinen käyttöpäivä"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Syklien määrä"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ei saatavilla"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Lasketaan…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Nimeä uudelleen"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Ota käyttöön"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tämä nollaa kaikki Wi-Fi- ja Bluetooth-asetukset. Toimintoa ei voi kumota."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Nollaa"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth ja Wi-Fi on nollattu"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Tyhjennä"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMien poistaminen"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Tämä ei peru liittymäsopimustasi. Jos haluat ladata korvaavia SIM-kortteja, ota yhteyttä operaattoriin."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Nollaa asetukset"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Käytä myös kuviota laitteen avaamiseen"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Käytä myös PIN-koodia laitteen avaamiseen"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Käytä myös salasanaa laitteen avaamiseen"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Vahvista kuvio"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Vahvista PIN-koodi"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Vahvista salasana"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Jatka piirtämällä kuvio"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Jatka lisäämällä laitteesi PIN-koodi"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Jatka lisäämällä laitteesi salasana"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Väärä PIN-koodi"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Väärä salasana"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Väärä kuvio"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Näytä sovellusten mukaan"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Näytä järjestelmien mukaan"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Ennen lähetystä tehtyjen laaduntarkastusten vuoksi kierrosluku ei välttämättä ole nolla ensimmäisellä käyttökerralla."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Käsittelytiedot"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Käsittelyn tarkat tiedot"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Muistin käyttö"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Poistetaanko vierastoiminta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Tämän vierailija-käyttökerran sovellukset ja data poistetaan nyt. Kaikki tuleva vierastoiminta poistetaan aina, kun poistut vierailija-käyttökerrasta."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"poista, vieras, toiminta, data, kävijä, tyhjennä"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Salli vieraalle puhelimen käyttö"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Salli vieraan soittaa puheluita"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Soittohistoria jaetaan tälle käyttäjälle"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ota puhelut ja tekstiviestit käyttöön"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Tee tästä käyttäjästä järjestelmänvalvoja"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"verkko, mobiiliverkon tila, yhteyden tila, signaalin voimakkuus, mobiiliverkon tyyppi, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"sarjanumero, laitteistoversio"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"akun tiedot, valmistuspäivä, syklien määrä, ensimmäinen käyttökerta"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android-tietoturvakorjauksen taso, baseband-versio, kernel-versio"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"teema, valo, tumma, tila, valonarkuus, fotofobia, tee tummemmaksi, tummenna, tumma tila, migreeni"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tumma teema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Laitteen oletusasetus"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Peittokuvan piirto epäonnistui"</string>
<string name="special_access" msgid="1767980727423395147">"Erityisluvat"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sovelluksen datankäyttöä ei rajoiteta</item>
- <item quantity="one">1 sovelluksen datankäyttöä ei rajoiteta</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Katso lisää"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Pitkät taustatehtävät"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Salli pitkäkestoiset tehtävät taustalla"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Sovellusten yhteensopivuuden muutokset päälle/pois"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Oletusarvoisesti käyttöön otettujen muutokset"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Oletusarvoisesti käytöstä poistettujen muutokset"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Ei sovelluksia"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Sovelluksen yhteensopivuusmuutoksia voi tehdä vain virheenkorjausta tukevissa sovelluksissa. Asenna virheenkorjausta tukeva sovellus ja yritä uudelleen."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Toinen asetus vaikuttaa siihen."</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Tili"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Poista käytöstä alatason prosessirajoitukset"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Poista käytöstä rajoitukset, jotka liittyvät järjestelmäresurssin käyttöön sovelluksen alatason prosesseissa"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Pakota Muistiinpanot-rooli käyttöön"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Ota käyttöön muistiinpanojärjestelmän integraatioita Muistiinpanot-roolin avulla. Jos Muistiinpanot-rooli on jo käytössä, tämä ei vaikuta mitenkään."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Ota käyttöön muistiinpanojärjestelmän integraatioita Muistiinpanot-roolin avulla. Jos Muistiinpanot-rooli on jo käytössä, tämä ei vaikuta mitenkään. Vaatii uudelleenkäynnistystä."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Lähetä"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Lähetä <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Kuuntele lähellä olevia lähetyksiä"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0e1fab6..ae59af7 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth activé"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Tout afficher"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylet"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Application de prise de notes par défaut"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Appui du bouton supérieur"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (profil professionnel)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Écrire dans les champs de texte"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorer tous les appuis d\'un stylet sur les boutons"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylet"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Température"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Premier jour de la semaine"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Préférences relatives aux chiffres"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Utiliser la valeur par défaut de l\'application"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Utiliser la valeur par défaut"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Dimanche"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Version du noyau"</string>
<string name="build_number" msgid="9009733242117579826">"Numéro de version"</string>
<string name="module_version" msgid="1787518340082046658">"Mise à jour du système Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informations sur la pile"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Non disponible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Stockage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Stockage et mise en cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresse Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Numéro de série"</string>
<string name="status_up_time" msgid="1274778533719495438">"Durée d\'activité"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Date de fabrication"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date de la première utilisation"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Nombre de cycles"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Non accessible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calcul en cours"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Renommer"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Monter"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tous les paramètres Wi-Fi et Bluetooth seront réinitialisés. Vous ne pouvez pas annuler cette action."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Réinitialiser"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Le Bluetooth et le Wi-Fi ont été réinitialisés"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Effacer"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Effacer les cartes eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Cela n\'annulera aucun forfait de services cellulaires. Pour télécharger une carte SIM de remplacement, communiquez avec votre fournisseur de services."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Réinitialiser les paramètres"</string>
@@ -1458,6 +1463,18 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Utiliser un schéma pour déverr. l\'appareil"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Utiliser un NIP pour déverr. l\'appareil"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Utiliser un mot de passe pour déverr. l\'appareil"</string>
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_header (6669435143987988314) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_header (2585263648322879131) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_header (3064676176428495228) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_details (6187536224419477465) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_details (203022189107305807) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_details (4860219600771003873) -->
+ <skip />
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"NIP erroné"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Mot de passe incorrect"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Schéma erroné"</string>
@@ -2326,6 +2343,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Afficher par application"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Afficher par système"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"En raison des contrôles de qualité effectués avant l\'expédition, le nombre de cycles peut ne pas être égal à zéro lors de la première utilisation"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistiques des processus"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistiques détaillées sur les processus en cours d\'exécution"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Mémoire utilisée"</string>
@@ -2703,7 +2721,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Supprimer l\'activité d\'invité?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les applications et les données de cette session d\'invité seront supprimées maintenant, et toutes les activités d\'invité futures seront supprimées chaque fois que vous quitterez le mode Invité"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"supprimer, invité, activité, retirer, données, visiteur, effacer"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Autoriser l\'invité à utiliser le téléphone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permettre à l\'invité de passer des appels téléphoniques"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"L\'historique des appels sera partagé avec l\'utilisateur invité"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activer appels téléphoniques et textos"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Définir cet utilisateur comme administrateur"</string>
@@ -2929,6 +2947,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"réseau, état du réseau cellulaire, état du service, puissance du signal, type de réseau cellulaire, itinérance, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"numéro de série, version matérielle"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informations sur la pile, date de fabrication, nombre de cycles, première utilisation"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"niveau du correctif de sécurité android, version de la bande de base, version du noyau"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"thème, luminosité, sombre, mode, sensibilité à la lumière, photophobie, assombrir, rendre sombre, mode sombre, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"thème sombre"</string>
@@ -3855,10 +3874,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Valeurs par défaut de l\'appareil"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Impossible d\'appliquer la superposition"</string>
<string name="special_access" msgid="1767980727423395147">"Accès spécial des applications"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> application peut utiliser les données sans restriction</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> applications peuvent utiliser les données sans restriction</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"En voir plus"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Longues tâches en arrière-plan"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Autoriser les longues tâches en arrière-plan"</string>
@@ -4146,7 +4161,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Basculez les changements de compatibilité des applications"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Changements activés par défaut"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Changements désactivés par défaut"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Aucune application"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Les modifications de compatibilité des applications peuvent uniquement être modifiées pour les applications débogables. Installez une application débogable, puis réessayez."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Dépend d\'un autre paramètre"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Compte"</string>
@@ -4664,7 +4678,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Désactiver les restrict. pour les processus enfant"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Désactivez les restrictions sur l\'utilisation des ressources système pour les processus d\'application relatifs aux profils pour enfants"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forcer l\'activation de la fonction Notes"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Activez les intégrations de systèmes de prise de notes par le biais de la fonction Notes. Si la fonction Notes est déjà activée, aucune action n\'est nécessaire."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Activez les intégrations de systèmes de prise de notes par le biais de la fonction Notes. Si la fonction Notes est déjà activée, aucune action n\'est nécessaire. Nécessite un redémarrage."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Diffusion"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Diffuser <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Écoutez les diffusions en cours à proximité"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 88feadc..cf0e2b8 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth activé"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Tout afficher"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylet"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Appli de prise de notes par défaut"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Appui sur le bouton du stylet"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profil professionnel)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Écrire dans les champs de texte"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorer toutes les pressions sur les boutons du stylet"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylet"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Température"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Premier jour de la semaine"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Préférences liées aux chiffres"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Utiliser le paramètre par défaut de l\'appli"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Utiliser l\'option par défaut"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Dimanche"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Version de noyau"</string>
<string name="build_number" msgid="9009733242117579826">"Numéro de build"</string>
<string name="module_version" msgid="1787518340082046658">"Mise à jour du système Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informations sur la batterie"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Non disponible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Stockage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Espace de stockage et cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresse Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Numéro de série"</string>
<string name="status_up_time" msgid="1274778533719495438">"Durée d\'activité"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Date de fabrication"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Date de première utilisation"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Nombre de cycles"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Non disponible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calcul en cours"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Renommer"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Installer"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tous les paramètres Wi‑Fi et Bluetooth seront réinitialisés. Cette action est irréversible."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Réinitialiser"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Le Bluetooth et le Wi‑Fi ont été réinitialisés"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Effacer"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Effacer les eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Cela n\'entraînera la résiliation d\'aucun forfait mobile. Pour télécharger des SIM de remplacement, contactez votre opérateur."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Réinitialiser les paramètres"</string>
@@ -1302,7 +1307,7 @@
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="6110241048260139633">"Point d\'accès activé, partage de connexion"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="5057598961245943644">"Point d\'accès activé"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="7181518138494995888">"Partage de connexion"</string>
- <string name="tether_settings_disabled_on_data_saver" msgid="9054069463426952689">"Impossible de partager la connexion ou d\'utiliser des points d\'accès mobiles lorsque la fonction Économiseur de données est activée"</string>
+ <string name="tether_settings_disabled_on_data_saver" msgid="9054069463426952689">"Impossible de partager la connexion ou d\'utiliser des points d\'accès mobiles lorsque la sauvegarde des données est activée"</string>
<string name="tether_settings_summary_hotspot_only" msgid="8529008147731140279">"Point d\'accès uniquement"</string>
<string name="tether_settings_summary_usb_tethering_only" msgid="6351624505239356221">"USB uniquement"</string>
<string name="tether_settings_summary_bluetooth_tethering_only" msgid="1451008625343274930">"Bluetooth uniquement"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Utiliser aussi schéma pour déverrouiller appareil"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Utiliser aussi le code pour déverrouiller"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Utiliser aussi mot de passe pour déverrouiller appareil"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Valider le schéma"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Valider le code"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Valider le mot de passe"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Utilisez le schéma de l\'appareil pour continuer."</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Saisissez le code de l\'appareil pour continuer."</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Saisissez le mot de passe de l\'appareil pour continuer."</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Code d\'accès incorrect."</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Mot de passe incorrect."</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Schéma incorrect"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Afficher par : applis"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Afficher par : systèmes"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"En raison du contrôle qualité avant livraison, il est possible que le nombre de cycles ne soit pas nul à la première utilisation"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistiques relatives aux processus"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistiques détaillées relatives aux processus en cours d\'exécution"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Utilisation de la mémoire"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Supprimer l\'activité ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les applis et données de cette session Invité seront immédiatement supprimées, et toute l\'activité des futures sessions sera supprimée à chaque fois que vous quitterez le mode Invité"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"supprimer, invité, activité, enlever, données, visiteur, effacer"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Autoriser les invités à téléphoner"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Autoriser l\'invité à passer des appels"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"L\'historique des appels sera partagé avec l\'utilisateur invité"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activer les appels téléphoniques et les SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Définir cet utilisateur comme administrateur"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"réseau, état du réseau mobile, état du service, force du signal, type de réseau mobile, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"numéro de série, version logicielle"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"infos sur la batterie, date de fabrication, nombre de cycles, première utilisation"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"mise à jour du correctif de sécurité Android, version de bande de base, version de noyau"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"thème, luminosité, mode sombre, sensibilité à la lumière, photophobie, assombrir, plus sombre, mode sombre, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"thème sombre"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Par défaut"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Échec de l\'application de la superposition"</string>
<string name="special_access" msgid="1767980727423395147">"Accès spéciaux des applis"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> application peut utiliser les données sans restrictions</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> applications peuvent utiliser les données sans restrictions</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"En savoir plus"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tâches longues en arrière-plan"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Autoriser les tâches longues en arrière-plan"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Activer/Désactiver les changements de compatibilité des applications"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Modifications activées par défaut"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Modifications désactivées par défaut"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Aucune appli dispo"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Vous ne pouvez modifier la compatibilité des applications que si celles-ci sont débogables. Installez une application débogable, puis réessayez."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Dépend d\'un autre paramètre"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Compte"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Désactiver les limites pour les processus enfant"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Désactiver les limites d\'utilisation des ressources système pour les processus enfant des applis"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forcer l\'activation du rôle \"Notes\""</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Active les intégrations de systèmes de prise de notes via le rôle \"Notes\". N\'a aucun effet si ce rôle est déjà activé."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Active les intégrations de systèmes de prise de notes via le rôle \"Notes\". N\'a aucun effet si ce rôle est déjà activé. Un redémarrage est nécessaire."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Diffuser"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Diffuser <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Écoutez les contenus diffusés à proximité"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 08916e0..3ebf47c 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"O Bluetooth está activado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todo"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Lapis óptico"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplicación de notas predeterminada"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Presión do botón do lapis óptico"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de traballo)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escribir en campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todas as presións de botóns do lapis óptico"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Lapis óptico"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primeiro día da semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferencias de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar configuración predeterminada da aplicación"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usa a opción predeterminada"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versión de kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número de compilación"</string>
<string name="module_version" msgid="1787518340082046658">"Actualización do sistema de Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Información sobre a batería"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Non dispoñible"</string>
<string name="storage_settings" msgid="7472188817781592677">"Almacenamento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Almacenamento e memoria caché"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Enderezo Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de serie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tempo activo"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data de fabricación"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data do primeiro uso"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Número de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Non dispoñible"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculando..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Cambiar nome"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Inserir"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Restableceranse todas as opcións de configuración da wifi e do Bluetooth. Non se poderá desfacer esta acción."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Restablecer"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Restablecéronse o Bluetooth e a wifi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Borrar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Borrar eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Non se cancelará ningún dos plans de servizos móbiles que teñas. Para descargar tarxetas SIM de substitución, ponte en contacto co teu operador."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Restablecer configuración"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Usar tamén padrón para desbloquear"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Usar tamén PIN para desbloquear"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Usar tamén contrasinal para desbloquear"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifica o padrón"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifica o PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifica o contrasinal"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Utiliza o padrón do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Escribe o PIN do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Escribe o contrasinal do dispositivo para continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorrecto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Contrasinal incorrecto"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Padrón incorrecto"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ver por aplicacións"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Ver por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Pode que, cando vaias usar a batería por primeira vez, o reconto de ciclos non sexa cero, o cal se debe ás inspeccións de calidade previas ao envío"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estatísticas de procesos"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estatísticas frikis sobre procesos en execución"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Uso da memoria"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eliminar actividade do convidado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"As aplicacións e os datos desta sesión de convidado eliminaranse agora, e toda actividade de convidados futura eliminarase cada vez que se saia do modo de convidado"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"eliminar, convidado, actividade, quitar, datos, visitante, borrar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permitir ao convidado usar o teléfono"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permitir que o convidado faga chamadas"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"O historial de chamadas compartirase co usuario convidado"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar chamadas telefónicas e SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Converter este usuario en administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rede, estado da rede de telefonía móbil, estado do servizo, intensidade do sinal, tipo de rede de telefonía móbil, itinerancia, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de serie, versión do hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"información da batería, data de fabricación, número de ciclos, primeiro uso"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivel do parche de seguranza de android, versión de banda base, versión de kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, claro, escuro, modo, sensibilidade á luz, fotofobia, escurecer, ensombrecer, modo escuro, xaqueca"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema escuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Configuración predeterminada do dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Produciuse un erro ao aplicar a superposición"</string>
<string name="special_access" msgid="1767980727423395147">"Acceso especial das aplicacións"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplicacións poden usar datos sen restricións</item>
- <item quantity="one">1 aplicación pode usar datos sen restricións</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ver máis"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tarefas longas (segundo plano)"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tarefas longas en segundo plano"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Activa/desactiva os cambios de compatibilidade das aplicacións"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Cambios activados de modo predeterminado"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Cambios desactivados de modo predeterminado"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Sen apps dispoñibles"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Os cambios na compatibilidade das aplicacións só se poden modificar para aplicacións que se poden depurar. Instala unha aplicación deste tipo e téntao de novo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depende doutra opción de configuración"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Conta"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desactivar as restricións de procesos secundarios"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desactiva as restricións no uso de recursos do sistema por parte dos procesos secundarios da aplicación"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forzar a activación da función de notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Activa as integracións do sistema para a toma de notas a través da función de notas. Se esta función xa está activada, non se leva a cabo ningunha acción."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Activa as integracións do sistema para a toma de notas a través da función de notas. Se esta función xa está activada, non se levará a cabo ningunha acción. Será necesario reiniciar o dispositivo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Difusión"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emitir <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Escoita difusións que se estean reproducindo preto de ti"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 2ef107b..edb4618 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"બ્લૂટૂથ ચાલુ કર્યું"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"બધા ડિવાઇસ જુઓ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"સ્ટાઇલસ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ડિફૉલ્ટ નોંધ ઍપ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ટેઇલ બટન દબાવો"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ઑફિસની પ્રોફાઇલ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ટેક્સ્ટ ફીલ્ડમાં લખો"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"તમામ સ્ટાઇલસ બટન દબાવવાને અવગણો"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"સ્ટાઇલસ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"તાપમાન"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"અઠવાડિયાનો પહેલો દિવસ"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"નંબરની પસંદગીઓ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ઍપ ડિફૉલ્ટનો ઉપયોગ કરો"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ડિફૉલ્ટનો ઉપયોગ કરો"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"સેલ્સિયસ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ફૅરન્હાઇટ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"રવિવાર"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"કર્નલ વર્ઝન"</string>
<string name="build_number" msgid="9009733242117579826">"બિલ્ડ નંબર"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play સિસ્ટમ અપડેટ"</string>
+ <string name="battery_info" msgid="7873528123969546728">"બૅટરી માહિતી"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ઉપલબ્ધ નથી"</string>
<string name="storage_settings" msgid="7472188817781592677">"સ્ટોરેજ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"સ્ટોરેજ અને કૅશ મેમરી"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"બ્લૂટૂથ ઍડ્રેસ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"અનુક્રમ નંબર"</string>
<string name="status_up_time" msgid="1274778533719495438">"ચાલુ થયાનો સમય"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"નિર્માણની તારીખ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"પહેલી વાર ઉપયોગ કર્યાની તારીખ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ચક્રની સંખ્યા"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ઉપલબ્ધ નથી"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ગણતરી કરી રહ્યું છે..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"નામ બદલો"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"માઉન્ટ કરો"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"આનાથી વાઇ-ફાઇ અને બ્લૂટૂથના બધા સેટિગ રીસેટ થશે. તમે આ ક્રિયા માટે કરેલો છેલ્લો ફેરફાર રદ કરી શકશો નહીં."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"રીસેટ કરો"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"બ્લૂટૂથ અને વાઇ-ફાઇ રીસેટ કર્યું છે"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"કાઢી નાખો"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM કાઢી નાખો"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"આનાથી કોઈપણ મોબાઇલ સેવા પ્લાન રદ થશે નહીં. બદલીના સિમ કાર્ડ ડાઉનલોડ કરવા માટે, તમારા મોબાઇલ ઑપરેટરનો સંપર્ક કરો."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"સેટિંગ રીસેટ કરો"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ડિવાઇસને અનલૉક કરવા પૅટર્નનો પણ ઉપયોગ કરો"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ડિવાઇસને અનલૉક કરવા પિનનો પણ ઉપયોગ કરો"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ડિવાઇસને અનલૉક કરવા પાસવર્ડનો પણ ઉપયોગ કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"પૅટર્નની ચકાસણી કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"પિનની ચકાસણી કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"પાસવર્ડની ચકાસણી કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ચાલુ રાખવા માટે તમારી ડિવાઇસ પૅટર્નનો ઉપયોગ કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ચાલુ રાખવા માટે તમારા ડિવાઇસનો પિન દાખલ કરો"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ચાલુ રાખવા માટે તમારા ડિવાઇસનો પાસવર્ડ દાખલ કરો"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ખોટો પિન"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ખોટો પાસવર્ડ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ખોટી પૅટર્ન"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ઍપ દ્વારા જુઓ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"સિસ્ટમ દ્વારા જુઓ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"રવાના કરતા પહેલાં કરેલી ક્વૉલિટી માટેની તપાસના કારણે પહેલી વાર ઉપયોગ વખતે ચક્રની સંખ્યા શૂન્ય ન હોય એમ બને"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"પ્રક્રિયા આંકડા"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ચાલુ પ્રક્રિયાઓ વિશેનાં અવ્યવસ્થિત આંકડાઓ"</string>
<string name="app_memory_use" msgid="7559666138324410666">"મેમરીનો ઉપયોગ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"શું અતિથિની પ્રવૃત્તિ ડિલીટ કરીએ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"આ અતિથિ સત્રમાંની તમામ ઍપ અને ડેટા હમણાં ડિલીટ કરવામાં આવશે તેમજ ભવિષ્યમાં જ્યારે પણ તમે અતિથિ મોડમાંથી બહાર નીકળો, ત્યારે તમામ અતિથિ પ્રવૃત્તિ ડિલીટ કરવામાં આવશે"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ડિલીટ કરો, અતિથિ, પ્રવૃત્તિ, કાઢી નાખો, ડેટા, મુલાકાતી, કાઢો"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"અતિથિને ફોનનો ઉપયોગ કરવાની મંજૂરી આપો"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"અતિથિને ફોન કૉલ કરવાની મંજૂરી આપો"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"કૉલ ઇતિહાસ અતિથિ વપરાશકર્તા સાથે શેર કરવામાં આવશે"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ફોન કૉલ અને SMS ચાલુ કરો"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"આ વપરાશકર્તાને ઍડમિન બનાવો"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"નેટવર્ક, મોબાઇલ નેટવર્કની સ્થિતિ, સેવાની સ્થિતિ, સિગ્નલની પ્રબળતા, મોબાઇલ નેટવર્કનો પ્રકાર, રોમિંગ, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"અનુક્રમ નંબર, હાર્ડવેર વર્ઝન"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"બૅટરી માહિતી, નિર્માણની તારીખ, ચક્રની સંખ્યા, પહેલી વાર ઉપયોગ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android સુરક્ષા પૅચ સ્તર, બેઝબૅન્ડ વર્ઝન, કર્નેલ વર્ઝન"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"થીમ, લાઇટ, ઘેરો મોડ, પ્રકાશની સંવેદિતા, ફોટોફોબિયા, વધુ ઘેરી કરો, ઘેરી કરો, ઘેરો મોડ, આધાશીશી"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ઘેરી થીમ"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ડિવાઇસ ડિફૉલ્ટ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ઓવરલે લાગુ કરવામાં નિષ્ફળ થયાં"</string>
<string name="special_access" msgid="1767980727423395147">"વિશેષ ઍપનો ઍક્સેસ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ઍપ અપ્રતિબંધિત ડેટાનો ઉપયોગ કરી શકે છે</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ઍપ અપ્રતિબંધિત ડેટાનો ઉપયોગ કરી શકે છે</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"વધુ જુઓ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"બૅકગ્રાઉન્ડમાં લાંબા કાર્યો"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"બૅકગ્રાઉન્ડમાં લાંબો સમય ચાલતા કાર્યોને મંજૂરી આપો"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ઍપ સુસંગતતાના ફેરફારો ટૉગલ કરો"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ડિફૉલ્ટ રીતે ચાલુ કરેલા ફેરફારો"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ડિફૉલ્ટ રીતે બંધ કરેલા ફેરફારો"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"કોઈ ઍપ ઉપલબ્ધ નથી"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ફક્ત ડિબગ કરી શકાય તેવી ઍપ માટે જ ઍપની સુસંગતતામાંના ફેરફારોમાં બદલાવ કરી શકાય છે. ડિબગ કરી શકાય તેવી ઍપ ઇન્સ્ટૉલ કરો અને ફરી પ્રયાસ કરો."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"અન્ય સેટિંગ પર આધાર રાખે છે"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"એકાઉન્ટ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"બાળક દ્વારા પ્રક્રિયા પરના પ્રતિબંધો બંધ કરો"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"બાળક જે ઍપ પર પ્રક્રિયા કરે છે તેના દ્વારા સિસ્ટમના સંસાધનના ઉપયોગ પરના પ્રતિબંધોને બંધ કરો"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"નોંધ લેવાની ઇકોસિસ્ટમ ફરજિયાત રીતે ચાલુ કરો"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"નોંધ લેવાની ઇકોસિસ્ટમ મારફતે નોંધ લેવાની એકીકરણ પ્રક્રિયા ચાલુ કરો. જો નોંધ લેવાની ઇકોસિસ્ટમ પહેલેથી ચાલુ કરવામાં આવી હોય, તો કોઈ પગલું લેવામાં આવશે નહીં."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"નોંધ લેવાની ઇકોસિસ્ટમ મારફતે નોંધ લેવાની એકીકરણ પ્રક્રિયા ચાલુ કરો. જો નોંધ લેવાની ઇકોસિસ્ટમ પહેલેથી ચાલુ કરવામાં આવી હોય, તો કોઈ પગલું લેવામાં આવશે નહીં. રીબૂટ કરવાની જરૂર છે."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"બ્રોડકાસ્ટ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> બ્રોડકાસ્ટ કરો"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"તમારી નજીક ચલાવવામાં આવી રહેલા બ્રોડકાસ્ટ સાંભળો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 4e78854..bb4a297 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ब्लूटूथ चालू किया गया"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"सभी देखें"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"स्टाइलस"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"नोट लेने की सुविधा देने वाला डिफ़ॉल्ट ऐप्लिकेशन"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"स्टाइलस बटन को दबाएं"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (वर्क प्रोफ़ाइल)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"टेक्स्ट फ़ील्ड में कुछ लिखें"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"स्टाइलस के बटन के सभी इनपुट को नज़रअंदाज़ करें"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"स्टाइलस"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"तापमान"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"हफ़्ते का पहला दिन"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"नंबर की प्राथमिकताएं"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ऐप्लिकेशन की डिफ़ॉल्ट सेटिंग का इस्तेमाल करें"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"डिफ़ॉल्ट सेटिंग का इस्तेमाल करें"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"सेल्सियस (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"फ़ैरनहाइट (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"रविवार"</string>
@@ -904,7 +905,7 @@
<string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / यह सुविधा कुछ डिवाइसों के साथ काम करती है"</string>
<string name="wifi_hotspot_speed_summary_2g_and_5g" msgid="5931052946168943750">"2.4 और 5 GHz / यह सुविधा ज़्यादातर डिवाइसों के साथ काम करती है"</string>
<string name="wifi_hotspot_speed_intro" msgid="6973482196363758925">"अपने हॉटस्पॉट के लिए कोई फ़्रीक्वेंसी चुनें. कनेक्शन की स्पीड और आपके हॉटस्पॉट को किस तरह के डिवाइस ढूंढ सकते हैं, इन दोनों बातों पर फ़्रीक्वेंसी का असर पड़ता है."</string>
- <string name="wifi_hotspot_speed_category" msgid="5265655850463630286">"अपनी पसंद की फ़्रीक्वेंसी चुनें"</string>
+ <string name="wifi_hotspot_speed_category" msgid="5265655850463630286">"अपनी पसंद की फ़्रीक्वेंसी"</string>
<string name="wifi_hotspot_speed_2g" msgid="3400600834257664480">"2.4 गीगाहर्ट्ज़"</string>
<string name="wifi_hotspot_speed_2g_summary" msgid="6930273933810520155">"वाई-फ़ाई हॉटस्पॉट की धीमी स्पीड. यह सुविधा ज़्यादातर डिवाइसों के साथ काम करती है."</string>
<string name="wifi_hotspot_speed_5g" msgid="4058116867148848395">"5 गीगाहर्ट्ज़"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel वर्शन"</string>
<string name="build_number" msgid="9009733242117579826">"बिल्ड नंबर"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play का सिस्टम अपडेट"</string>
+ <string name="battery_info" msgid="7873528123969546728">"बैटरी की जानकारी"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"उपलब्ध नहीं"</string>
<string name="storage_settings" msgid="7472188817781592677">"स्टोरेज"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"स्टोरेज और कैश"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ब्लूटूथ पता"</string>
<string name="status_serial_number" msgid="9060064164331466789">"सीरियल नंबर"</string>
<string name="status_up_time" msgid="1274778533719495438">"चालू रहने का समय"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"बनाए जाने की तारीख"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"पहली बार इस्तेमाल किए जाने की तारीख"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"बैटरी कितनी बार पूरी इस्तेमाल की गई"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"उपलब्ध नहीं है"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"गिनती हो रही है..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"नाम बदलें"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"माउंट करें"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"इससे वाई-फ़ाई और ब्लूटूथ की सभी सेटिंग रीसेट हो जाएंगी. इस कार्रवाई को पहले जैसा नहीं किया जा सकता."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"रीसेट करें"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ब्लूटूथ और वाई-फ़ाई को रीसेट कर दिया गया है"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"हमेशा के लिए मिटाएं"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ई-सिम का डेटा हमेशा के लिए मिटाएं"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"इससे मोबाइल सेवा का कोई भी प्लान रद्द नहीं होगा. दूसरे सिम डाउनलोड करने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"सेटिंग रीसेट करें"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"पैटर्न की मदद से, इस डिवाइस को अनलॉक करें"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"पिन की मदद से, इस डिवाइस को अनलॉक करें"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"पासवर्ड की मदद से, इस डिवाइस को अनलॉक करें"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"पैटर्न की पुष्टि करें"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"पिन की पुष्टि करें"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"पासवर्ड की पुष्टि करें"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"जारी रखने के लिए, अपने डिवाइस के पैटर्न का इस्तेमाल करें"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"जारी रखने के लिए अपने डिवाइस का पिन डालें"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"जारी रखने के लिए अपने डिवाइस का पासवर्ड डालें"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"गलत पिन"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"गलत पासवर्ड"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"गलत पैटर्न डाला गया है"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ऐप्लिकेशन के हिसाब से देखें"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"सिस्टम के हिसाब से देखें"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"शिपिंग से पहले होने वाली क्वालिटी की जांच की वजह से, पहली बार इस्तेमाल करने पर बैटरी के चार्ज होने की साइकल की वैल्यू शून्य नहीं हो सकती"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"प्रोसेस के आंकड़े"</string>
<string name="process_stats_summary" msgid="522842188571764699">"चल रही प्रक्रिया के बारे में आकंड़े"</string>
<string name="app_memory_use" msgid="7559666138324410666">"मेमोरी उपयोग"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"मेहमान मोड की गतिविधि को मिटाना है?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"मेहमान के तौर पर ब्राउज़ किए गए इस सेशन में मौजूद डेटा और इस्तेमाल किए गए ऐप्लिकेशन को मिटा दिया जाएगा. इसके अलावा, आने वाले समय में हर बार मेहमान मोड से बाहर निकलने पर, उस दौरान की गई गतिविधियां मिटा दी जाएंगी"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"मिटाएं, मेहमान, गतिविधि, हटाएं, डेटा, वेबसाइट पर आने या जाने वाले, हमेशा के लिए मिटाएं"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"मेहमान को फ़ोन से कॉल करने दें"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"मेहमान को फ़ोन कॉल करने की अनुमति दें"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"कॉल का इतिहास, मेहमान के साथ शेयर किया जाएगा"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फ़ोन कॉल और मैसेज (एसएमएस) चालू करें"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"इस व्यक्ति को एडमिन बनाएं"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"नेटवर्क, मोबाइल नेटवर्क किस राज्य का है, सेवा किस राज्य में ली जा रही है, सिग्नल की क्वालिटी, मोबाइल नेटवर्क टाइप, रोमिंग, आईसीसीआईडी, ईआईडी"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"ईआईडी"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"सीरियल नंबर, हार्डवेयर वर्शन"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"बैटरी की जानकारी, बनाए जाने की तारीख, बैटरी कितनी बार पूरी इस्तेमाल की गई, और पहली बार इस्तेमाल किए जाने की तारीख"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android सुरक्षा पैच लेवल, मोबाइल रेडियो (बेसबैंड वर्शन), kernel वर्शन"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"थीम, हल्का रंग, गहरा रंग, मोड, लाइट सेंसिटिविटी, फ़ोटोफ़ोबिया, रंग गहरा करना, गहरा रंग करना, गहरे रंग वाला मोड, माइग्रेन"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"गहरे रंग वाली थीम"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"डिवाइस की डिफ़ॉल्ट सेटिंग"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ओवरले लागू नहीं किया जा सका"</string>
<string name="special_access" msgid="1767980727423395147">"ऐप्लिकेशन के लिए खास ऐक्सेस"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ऐप्लिकेशन पाबंदी के बिना डेटा का इस्तेमाल कर सकता है</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ऐप्लिकेशन पाबंदी के बिना डेटा का इस्तेमाल कर सकते हैं</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"और देखें"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"लंबे बैकग्राउंड टास्क"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"लंबे बैकग्राउंड टास्क करने की अनुमति दें"</string>
@@ -4023,7 +4032,7 @@
<string name="blocked_by_restricted_settings_title" msgid="7334715011474037399">"प्रतिबंधित सेटिंग"</string>
<string name="toast_allows_restricted_settings_successfully" msgid="1219116121291466102">"<xliff:g id="APP_NAME">%s</xliff:g> के लिए पाबंदी वाली सेटिंग की अनुमति दी गई"</string>
<string name="blocked_by_restricted_settings_content" msgid="3628660029601161080">"आपकी सुरक्षा के लिए, यह सेटिंग फ़िलहाल उपलब्ध नहीं है."</string>
- <string name="financed_privacy_settings" msgid="2575114436197204145">"फ़ाइनेंस किए गए डिवाइस की जानकारी"</string>
+ <string name="financed_privacy_settings" msgid="2575114436197204145">"फ़ाइनैंस किए गए डिवाइस की जानकारी"</string>
<string name="financed_privacy_intro" msgid="7836497475568741579">"क्रेडिट सेवा देने वाली कंपनी, डिवाइस के सेट अप के दौरान उसकी सेटिंग में बदलाव कर सकती है और उस पर सॉफ़्टवेयर इंस्टॉल कर सकती है.\n\nअगर आपसे कोई पेमेंट छूट जाता है, तो क्रेडिट सेवा देने वाली कंपनी आपका डिवाइस लॉक कर सकती है और उसकी सेटिंग में बदलाव कर सकती है.\n\nज़्यादा जानने के लिए, क्रेडिट सेवा देने वाली कंपनी से संपर्क करें."</string>
<string name="financed_privacy_restrictions_category" msgid="2472659467919651602">"डिवाइस को फ़ाइनैंस किया गया है, तो ये काम नहीं किए जा सकते:"</string>
<string name="financed_privacy_install_apps" msgid="7381718005710210851">"Play Store के बाहर से ऐप्लिकेशन इंस्टॉल करना"</string>
@@ -4043,7 +4052,7 @@
<string name="financed_privacy_fully_paid_category" msgid="9221763928564246923">"पूरी रकम देने के बाद:"</string>
<string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"डिवाइस से सभी पाबंदियों को हटा दिया जाता है"</string>
<string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"क्रेडिटर के ऐप्लिकेशन को अनइंस्टॉल किया जा सकता है"</string>
- <string name="financed_device_info" msgid="3871860346697308342">"फ़ाइनेंस किए गए डिवाइस की जानकारी"</string>
+ <string name="financed_device_info" msgid="3871860346697308342">"फ़ाइनैंस किए गए डिवाइस की जानकारी"</string>
<string name="default_camera_app_title" msgid="6546248868519965998">"{count,plural, =1{कैमरा ऐप्लिकेशन}one{कैमरा ऐप्लिकेशन}other{कैमरा ऐप्लिकेशन}}"</string>
<string name="default_calendar_app_title" msgid="1870095225089706093">"Calendar ऐप्लिकेशन"</string>
<string name="default_contacts_app_title" msgid="7740028900741944569">"संपर्क ऐप्लिकेशन"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"काम करने के लिए ऐप्लिकेशन में किए गए बदलावों को टॉगल करें"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"डिफ़ॉल्ट रूप से चालू किए गए बदलाव"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"डिफ़ॉल्ट रूप से बंद किए गए बदलाव"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"डीबग करने लायक कोई ऐप्लिकेशन उपलब्ध नहीं है"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ऐप्लिकेशन के साथ काम करने के लिए किए जाने वाले बदलाव, सिर्फ़ डीबग करने लायक ऐप्लिकेशन में किए जा सकते हैं. डीबग करने लायक किसी ऐप्लिकेशन को इंस्टॉल करें और फिर से कोशिश करें."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"यह किसी दूसरी सेटिंग पर निर्भर है"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"खाता"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"चाइल्ड प्रोसेस पर लगी पाबंदियां बंद करें"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ऐप्लिकेशन में किसी प्रोसेस की वजह से चालू हुई दूसरी प्रोसेस के लिए, सिस्टम के संसाधन के इस्तेमाल पर लगी पाबंदियां बंद करें"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"नोट्स रोल की सुविधा हर हाल में चालू करें"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"नोट्स रोल की सुविधा का इस्तेमाल करके, नोट लेने के सिस्टम के इंटिग्रेशन चालू करें. अगर नोट्स रोल की सुविधा पहले से ही चालू है, तो कुछ और करने की ज़रूरत नहीं है."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes रोल (सुविधाओं का संग्रह) का इस्तेमाल करके, नोट बनाने के सिस्टम इंटिग्रेशन को चालू करें. अगर Notes रोल की सुविधा पहले से ही चालू है, तो कुछ और करने की ज़रूरत नहीं है. हालांकि, डिवाइस को फिर से चालू करना होगा."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ब्रॉडकास्ट"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> पर ब्रॉडकास्ट करें"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"अपने आस-पास चल रहे ब्रॉडकास्ट को सुनें"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index eba416f..806084b 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth je uključen"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Prikaži sve"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pisaljka"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Zadana aplikacija za bilješke"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pritisak na stražnji gumb"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (poslovni profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Pisanje u tekstualnim poljima"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Zanemari sve pritiske pisaljke na gumb"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pisaljka"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prvi dan u tjednu"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Postavke brojeva"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Koristi zadanu vrijednost aplikacije"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Koristi zadano"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celzij (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Nedjelja"</string>
@@ -276,7 +277,7 @@
<string name="security_settings_face_enroll_education_start" msgid="8830924400907195590">"Započnite"</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_message" msgid="2965952386172202665">"Ako je otključavanje licem za pristupačnost isključeno, neki koraci za postavljanje možda neće pravilno funkcionirati s TalkBackom."</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_negative" msgid="7872647360361245461">"Natrag"</string>
- <string name="security_settings_face_enroll_education_accessibility_dialog_positive" msgid="3148077647572203458">"Nastavi s postavljanjem"</string>
+ <string name="security_settings_face_enroll_education_accessibility_dialog_positive" msgid="3148077647572203458">"Nastavi postavljanje"</string>
<string name="security_settings_face_enroll_introduction_accessibility" msgid="5748221179069430975">"Koristi postav. za pristupačnost"</string>
<string name="security_settings_face_enroll_introduction_accessibility_diversity" msgid="2774962371839179206"></string>
<string name="security_settings_face_enroll_introduction_accessibility_vision" msgid="7700394302162170363"></string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Verzija jezgre"</string>
<string name="build_number" msgid="9009733242117579826">"Broj međuverzije"</string>
<string name="module_version" msgid="1787518340082046658">"Ažuriranje sustava s Google Playa"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacije o bateriji"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nije dostupno"</string>
<string name="storage_settings" msgid="7472188817781592677">"Pohrana"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Pohrana i predmemorija"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serijski broj"</string>
<string name="status_up_time" msgid="1274778533719495438">"Vrijeme aktivnosti"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Datum proizvodnje"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum prve upotrebe"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Broj ciklusa"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nedostupno"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Izračun u tijeku..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Preimenuj"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Učitaj"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Time će se poništiti sve postavke Wi‑Fija i Bluetootha. Ta se radnja ne može poništiti."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Poništi"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth i Wi‑Fi su poništeni"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Izbriši"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Brisanje eSIM-ova"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Time se neće poništiti ugovori o mobilnim uslugama. Za preuzimanje zamjenskih SIM-ova obratite se mobilnom operateru."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Poništi postavke"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Koristite i uzorak za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Koristite i PIN za otključavanje uređaja"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Koristite i zaporke za otključavanje uređaja"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Potvrdite uzorak"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Potvrdite PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Potvrdite zaporku"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Unesite uzorak uređaja da biste nastavili"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Unesite PIN uređaja da biste nastavili"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Unesite zaporku uređaja da biste nastavili"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Pogrešan PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Pogrešna zaporka"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Pogrešan uzorak"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Pregled po aplikacijama"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Pregled po sustavima"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Zbog pregleda kvalitete prije otpreme, broj ciklusa kod prve upotrebe možda neće biti nula"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistički podaci o procesima"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Detaljni statistički podaci o trenutačnim procesima"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Upotreba memorije"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisati aktivnost gosta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove gostujuće sesije izbrisat će se odmah, a sve buduće aktivnosti gostujuće sesije izbrisat će se svaki put kad napustite način rada za goste."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"izbrisati, gost, aktivnost, ukloniti, podaci, posjetitelj, ukloniti"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Dopusti gostu upotrebu telefona"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Dopustite gostima upućivanje poziva"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Povijest poziva dijelit će se s gostom"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključi telefonske pozive i SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Dodijeli ovom korisniku status administratora"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"mreža, stanje mobilne mreže, stanje usluge, jačina signala, vrsta mobilne mreže, roaming, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serijski broj, verzija hardvera"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacije o bateriji, datum proizvodnje, broj ciklusa, prva upotreba"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"razina Androidove sigurnosne zakrpe, verzija osnovnog frekvencijskog pojasa, verzija jezgre"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, svijetlo, tamno, način, osjetljivost na svjetlo, fotofobija, učiniti tamnijim, zatamniti, tamni način rada, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tamna tema"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Zadana postavka uređaja"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Primjena preklapanja nije uspjela"</string>
<string name="special_access" msgid="1767980727423395147">"Poseban pristup za aplikacije"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aplikacija može upotrebljavati neograničene podatke</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacije mogu upotrebljavati neograničene podatke</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacija može upotrebljavati neograničene podatke</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Prikaži više"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dugački zadaci u pozadini"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Dopusti dugotrajne zadatke u pozadini"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Prebacivanje promjena kompatibilnosti aplikacije"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Zadane omogućene promjene"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Zadane onemogućene promjene"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nema aplikacija"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Promjene kompatibilnosti aplikacija moguće su samo za aplikacije s mogućnošću otklanjanja pogrešaka. Instalirajte aplikaciju s mogućnošću otklanjanja pogrešaka i pokušajte ponovo."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Ovisi o drugoj postavci"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Račun"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Onemogući ograničenja za podređene postupke"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Onemogućite ograničenja upotrebe resursa sustava za podređene postupke aplikacija"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Prisilno omogući ulogu Bilješke"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Omogućite integracije sustava za bilježenje u okviru uloge Bilješke. Ako je uloga Bilješke već omogućena, ništa se neće dogoditi."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Omogućite integracije sustava bilježenja putem uloge Bilješke. Ako je uloga Bilješke već omogućena, ne trebate ništa. Potrebno je ponovno pokretanje."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Emitiranje"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Emitiranje aplikacije <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Slušajte emitiranja koja se reproduciraju u blizini"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 1662d69..eebf908 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth bekapcsolva"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Az összes megtekintése"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Érintőceruza"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Alapértelmezett jegyzetkészítési alkalmazás"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Az érintőceruza végén lévő gomb megnyomása"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (munkaprofil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Írás a szövegmezőkben"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Az érintőceruza összes gombnyomásának figyelmen kívül hagyása"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Érintőceruza"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Hőmérséklet"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"A hét első napja"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Számbeállítások"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Az appok alapértelmezett beállításának használata"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Alapértelmezett használata"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Vasárnap"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel verziója"</string>
<string name="build_number" msgid="9009733242117579826">"Buildszám"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-rendszerfrissítés"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Akkumulátoradatok"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nem érhető el"</string>
<string name="storage_settings" msgid="7472188817781592677">"Tárhely"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Tárhely és gyorsítótár"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-cím"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Sorozatszám"</string>
<string name="status_up_time" msgid="1274778533719495438">"Futásidő"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Gyártási dátum"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Első használat dátuma"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Ciklusok száma"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nem áll rendelkezésre"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Számítás..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Átnevezés"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Csatlakoztatás"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"A művelettel az összes Wi‑Fi- és Bluetooth-beállítást visszaállítja. Ez a művelet nem vonható vissza."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Alaphelyzet"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"A Bluetooth és a Wi‑Fi visszaállítása megtörtént"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Törlés"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"e-SIM-ek törlése"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ezzel nem szűnik meg egyetlen mobil-előfizetési csomag sem. Csere-SIM letöltése érdekében forduljon szolgáltatójához."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Beállítások visszaállítása"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Használhat mintát is az eszköz feloldására"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Használhat PIN-kódot is az eszközfeloldásra"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Használhat jelszót is az eszköz feloldására"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Minta ellenőrzése"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN-kód ellenőrzése"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Jelszó ellenőrzése"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"A folytatáshoz használja eszköze feloldó mintáját"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"A folytatáshoz írja be eszköze PIN-kódját"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"A folytatáshoz írja be eszköze jelszavát"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Helytelen PIN-kód"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Helytelen jelszó"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Helytelen minta"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Megtekintés alkalmazások szerint"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Megtekintés rendszerek szerint"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"<<xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"A szállítás előtti minőség-ellenőrzések miatt előfordulhat, hogy a ciklusszám nem nulla lesz az első használatkor"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Folyamatstatisztikák"</string>
<string name="process_stats_summary" msgid="522842188571764699">"A futó folyamatok statisztikái"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memóriahasználat"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Törli a vendégtevékenységeket?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Az ebből a vendégmunkamenetből származó alkalmazások és adatok azonnal törlődnek, és az összes jövőbeli, vendég módban végzett tevékenység törlődik minden olyan alkalomkor, amikor kilép a vendég módból"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"törlés, vendég, tevékenység, eltávolítás, adatok, látogató, kitörlés"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"A vendég használhatja a telefont"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Telefonhívások engedélyezése vendégeknek"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"A rendszer megosztja a híváslistát ezzel a vendég felhasználóval."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Hívások és SMS-ek engedélyezése"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"A felhasználó beállítása adminisztrátorként"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"hálózat, mobilhálózat állapota, szolgáltatás állapota, jelerősség, mobilhálózat típusa, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"sorozatszám, hardververzió"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"akkumulátoradatok, gyártási dátum, ciklusok száma, első használat"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"androidos biztonsági javítókészlet szintje, alapsáv verziója, kernel verziója"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"téma, fény, sötét, mód, fényérzékenység, fotofóbia, sötétítés, elsötétítés, sötét mód, fejfájás"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"sötét téma"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Alapértelmezett"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Nem sikerült alkalmazni a fedvényt"</string>
<string name="special_access" msgid="1767980727423395147">"Különleges alkalmazás-hozzáférés"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> alkalmazás rendelkezik korlátlan adathozzáféréssel</item>
- <item quantity="one">1 alkalmazás rendelkezik korlátlan adathozzáféréssel</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Továbbiak megjelenítése"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Hosszan futó háttérfeladatok"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"A háttérben hosszan futó feladatok engedélyezése"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Az alkalmazás kompatibilitási változtatásainak be- és kikapcsolása"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Alapértelmezett engedélyezett változtatások"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Alapértelmezett letiltott változtatások"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nem található app"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Az alkalmazáskompatibilitás csak a hibaelhárításra alkalmas alkalmazásoknál módosítható. Telepítsen hibaelhárításra alkalmas alkalmazást, és próbálja újra."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Másik beállítástól függ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Fiók"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Alárendelt folyamatok korlátozásánk kikapcsolása"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"A rendszererőforrások alárendelt alkalmazásfolyamatok általi használatát érintő korlátozások kikapcsolása"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Jegyzetek szerepkör engedélyezésének kényszerítése"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Engedélyezi a jegyzetelési rendszerintegrációkat a Jegyzetek szerepkörrel. Ha a Jegyzetek szerepkör már engedélyezve van, akkor nem végez műveletet."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Engedélyezi a jegyzetelési rendszerintegrációkat a Jegyzetek szerepkörrel. Ha a Jegyzetek szerepkör már engedélyezve van, akkor nem végez műveletet. Újraindítás szükséges hozzá."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Közvetítés"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> közvetítése"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Az Ön közelében sugárzott közvetítések meghallgatása"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 7c86dee..fea4d26 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth-ը միացված է"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Տեսնել բոլորը"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Ստիլուս"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Նշումների կանխադրված հավելված"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Ստիլուսի կոճակի սեղմում"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (աշխատանքային պրոֆիլ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Գրել տեքստային դաշտերում"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Անտեսել կոճակների ստիլուսով սեղմումները"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Ստիլուս"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Ջերմաստիճան"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Շաբաթվա առաջին օրը"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Թվերի կարգավորումներ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Օգտագործել հավելվածի կանխադրված պարամետրը"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Օգտագործել կանխադրվածը"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Ցելսիուս (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Ֆարենհայտ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Կիրակի"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Միջուկի տարբերակը"</string>
<string name="build_number" msgid="9009733242117579826">"Կառուցման համարը"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-ի համակարգային թարմացում"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Տեղեկություններ մարտկոցի մասին"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Անհասանելի է"</string>
<string name="storage_settings" msgid="7472188817781592677">"Տարածք"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Հիշողություն և քեշ"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth հասցե"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Հերթական համարը"</string>
<string name="status_up_time" msgid="1274778533719495438">"Աշխատած ժամանակը"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Արտադրման ամսաթիվը"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Առաջին օգտագործման ամսաթիվը"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Շրջափուլերի թիվը"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Հասանելի չէ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Հաշվարկում…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Վերանվանել"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Միացնել"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Bluetooth-ի և Wi‑Fi-ի բոլոր կարգավորումները կզրոյացվեն։ Այս գործողությունը չեք կարող հետարկել։"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Զրոյացնել"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth-ի և Wi‑Fi-ի կարգավորումները զրոյացվել են"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Ջնջել"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Ջնջել eSIM քարտերը"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Բջջային կապի սակագնային պլանները չեն չեղարկվի։ Նոր SIM քարտ ներբեռնելու համար դիմեք ձեր օպերատորին։"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Զրոյացնել կարգավորումները"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Սարքն ապակողպել նաև նախշի միջոցով"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Սարքն ապակողպել նաև PIN կոդի միջոցով"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Սարքն ապակողպել նաև գաղտնաբառի միջոցով"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Հաստատեք նախշը"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Հաստատեք PIN կոդը"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Հաստատեք գաղտնաբառը"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Շարունակելու համար օգտագործեք սարքի նախշը"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Շարունակելու համար մուտքագրեք սարքի PIN կոդը"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Շարունակելու համար մուտքագրեք սարքի գաղտնաբառը"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN կոդը սխալ է"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Գաղտնաբառը սխալ է"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Նախշը սխալ է"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Հավելվածներ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Համակարգեր"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Առաքումից առաջ որակի ստուգումների պատճառով լիցքավորման շրջափուլերի թիվը կարող է չլինել զրո առաջին օգտագործման ժամանակ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Գործընթացի վիճակագրություն"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Ընթացիկ գործընթացների տեխնիկական վիճակագրություն"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Օգտագործվող հիշողություն"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ջնջե՞լ հյուրի պատմությունը"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Հյուրի այս աշխատաշրջանի հավելվածներն ու տվյալները հիմա կջնջվեն։ Հետագայում պատմությունը կջնջվի ամեն անգամ հյուրի ռեժիմից դուրս գալիս։"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ջնջել, հյուր, գործողություններ, հեռացնել, տվյալներ, այցելու, ջնջել"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Թույլատրել հյուրին օգտվել հեռախոսից"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Թույլատրել հյուրին զանգեր կատարել"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Զանգերի պատմությունը հասանելի կլինի հյուրին"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Միացնել զանգերն ու SMS-ները"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Դարձնել այս օգտատիրոջը ադմինիստրատոր"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ցանց, բջջային ցանցի կարգավիճակ, բջջային ցանցի հասանելիություն, ազդանշանի հզորություն, բջջային ցանցի տեսակ, ռոումինգ, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"սերիական համար, սարքակազմի տարբերակ"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"տեղեկություններ մարտկոցի մասին, արտադրման ամսաթիվ, շրջափուլերի թիվ, առաջին օգտագործում"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android-ի խոցելիության շտկման մակարդակ, Baseband-ի տարբերակ, միջուկի տարբերակ"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"թեմա, բաց, մուգ, ռեժիմ, լուսազգայունություն, լուսավախություն, մգեցնել, մգեցում, մուգ ռեժիմ, միգրեն"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"մուգ թեմա"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Կանխադրված տարբերակ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Չհաջողվեց կիրառել վրադրում"</string>
<string name="special_access" msgid="1767980727423395147">"Հատուկ հասանելիություն"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հավելված կարող է անսահմանափակ տվյալներ օգտագործել</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հավելված կարող է անսահմանափակ տվյալներ օգտագործել</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Տեսնել ավելին"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Երկարատև ֆոնային առաջադրանքներ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Թույլատրել երկարատև ֆոնային առաջադրանքները"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Թաքցնել/ցուցադրել հավելվածների համատեղելիության փոփոխությունները"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Ըստ կանխադրման միացված փոփոխություններ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Ըստ կանխադրման անջատված փոփոխություններ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Հավելվածներ չկան"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Համատեղելիության փոփոխություններ հնարավոր է կատարել միայն վրիպազերծելի հավելվածներում։ Տեղադրեք վրիպազերծելի հավելված և նորից փորձեք։"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Այս կարգավորումը կախված է այլ պարամետրերից"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Հաշիվ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Անջատել ենթագործընթացների սահմանափակումները"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Անջատել համակարգի ռեսուրսների օգտագործման սահմանափակումները հավելվածի ենթագործընթացների համար"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"«Նշումներ» դերի հարկադրաբար միացում"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Միացնել գրառումներ կատարելու համակարգի ինտեգրումը «Նշումներ» դերի միջոցով։ Եթե «Նշումներ» դերն արդեն միացված է, ոչինչ անել պետք չէ։"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Միացրեք գրառումներ կատարելու համակարգի ինտեգրումը «Նշումներ» դերի միջոցով։ Եթե «Նշումներ» դերն արդեն միացված է, ոչինչ անելու անհրաժեշտություն չկա։ Անհրաժեշտ է վերագործարկել սարքը։"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Հեռարձակում"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Հեռարձակել <xliff:g id="CURRENTAPP">%1$s</xliff:g> հավելվածը"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Լսեք հեռարձակումներ, որոնք նվագարկվում են ձեր մոտակայքում"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 8917bae..733514f 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth diaktifkan"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Lihat semua"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplikasi catatan default"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tombol stilus ditekan"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profil kerja)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Menulis di kolom teks"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Abaikan semua penekanan tombol dengan stilus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Suhu"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Hari pertama dalam seminggu"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferensi angka"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Gunakan default aplikasi"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Gunakan default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Minggu"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versi kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Nomor build"</string>
<string name="module_version" msgid="1787518340082046658">"Update sistem Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informasi baterai"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Tidak tersedia"</string>
<string name="storage_settings" msgid="7472188817781592677">"Penyimpanan"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Penyimpanan & cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Alamat bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Nomor seri"</string>
<string name="status_up_time" msgid="1274778533719495438">"Waktu aktif"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Tanggal perakitan"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Tanggal penggunaan pertama"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Jumlah siklus"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Tidak tersedia"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Menghitung..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Ganti nama"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Pasang"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tindakan ini akan mereset semua setelan Wi‑Fi & Bluetooth. Anda tidak dapat mengurungkan tindakan ini."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi‑Fi telah direset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Hapus"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Hapus eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Tindakan ini tidak akan membatalkan paket layanan seluler apa pun. Untuk mendownload SIM pengganti, hubungi operator Anda."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reset setelan"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Juga gunakan pola untuk membuka kunci perangkat ini"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Juga gunakan PIN untuk membuka kunci perangkat ini"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Juga gunakan sandi untuk membuka kunci perangkat ini"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifikasi pola"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifikasi PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifikasi sandi"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Gunakan pola perangkat untuk melanjutkan"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Masukkan PIN perangkat untuk melanjutkan"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Masukkan sandi perangkat untuk melanjutkan"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN Salah"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Sandi salah"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Pola salah"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Lihat menurut aplikasi"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Lihat menurut sistem"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Karena inspeksi kualitas sebelum pengiriman, jumlah siklus mungkin bukan nol saat penggunaan pertama"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistik Proses"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistik teknis tentang proses yang berjalan"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Penggunaan memori"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Hapus aktivitas tamu?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikasi dan data dari sesi tamu ini akan dihapus sekarang, dan semua aktivitas tamu mendatang akan dihapus setiap kali Anda keluar dari mode tamu"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"hapus, tamu, aktivitas, buang, data, pengunjung"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Izinkan tamu menggunakan ponsel"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Izinkan tamu melakukan panggilan telepon"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Histori panggilan akan dibagikan kepada pengguna tamu"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktifkan panggilan telepon & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Jadikan pengguna ini sebagai admin"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"jaringan, status jaringan seluler, status layanan, kekuatan sinyal, jenis jaringan seluler, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"nomor seri, versi hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"info baterai, tanggal perakitan, jumlah siklus, penggunaan pertama"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"level patch keamanan android, versi pita basis, versi kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, terang, gelap, mode, sensitivitas cahaya, fotofobia, buat lebih gelap, gelapkan, mode gelap, migrain"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema gelap"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Default perangkat"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Gagal menerapkan overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Akses aplikasi khusus"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikasi dapat menggunakan data tanpa dibatasi</item>
- <item quantity="one">1 aplikasi dapat menggunakan data tanpa dibatasi</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Lihat lainnya"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tugas latar belakang lama"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Izinkan tugas latar belakang yang berjalan lama"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Ubah setelan kompatibilitas aplikasi"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Perubahan aktif default"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Perubahan nonaktif default"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Aplikasi tidak tersedia"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Perubahan kompatibilitas aplikasi hanya dapat diubah untuk aplikasi yang dapat di-debug. Instal aplikasi yang dapat di-debug dan coba lagi."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Bergantung pada setelan lain"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Akun"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Nonaktifkan batasan proses turunan"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Nonaktifkan batasan penggunaan resource sistem pada proses turunan aplikasi"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Aktifkan paksa peran Catatan"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktifkan integrasi sistem pembuatan catatan melalui peran Catatan. Jika peran Catatan telah diaktifkan, setelan ini tidak melakukan apa pun."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktifkan integrasi sistem pembuatan catatan melalui peran Catatan. Jika peran Catatan telah diaktifkan, setelan ini tidak melakukan apa pun. Memerlukan reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Siaran"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Siarkan <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Dengarkan siaran yang diputar di dekat Anda"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 5da5664..f22c32a 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Kveikt á Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Sjá allt"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Penni"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Sjálfgefið glósuforrit"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Ýtt á pennahnapp"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (vinnusnið)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Skrifa í textareiti"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Hunsa þegar ýtt er á pennahnapp"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Penni"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Hitastig"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Fyrsti dagur vikunnar"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Kjörstillingar númera"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Nota sjálfgefnar stillingar forrits"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Nota sjálfgefið"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsíus (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sunnudagur"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kjarnaútgáfa"</string>
<string name="build_number" msgid="9009733242117579826">"Útgáfunúmer smíðar"</string>
<string name="module_version" msgid="1787518340082046658">"Kerfisuppfærsla Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Upplýsingar um rafhlöðu"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ekki tiltækt"</string>
<string name="storage_settings" msgid="7472188817781592677">"Geymsla"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Geymslurými og skyndiminni"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-vistfang"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Raðnúmer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Uppitími"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Framleiðsludagur"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Dagsetning fyrstu notkunar"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Fjöldi endurhleðslna"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ekki tiltækt"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Reiknar út…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Endurnefna"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Tengja"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Þetta endurstillir allar stillingar Wi‑Fi og Bluetooth. Ekki er hægt að afturkalla þessa aðgerð."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Endurstilla"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth og Wi‑Fi hafa verið endurstillt"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Hreinsa"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Eyða eSIM-kortum"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Þetta segir ekki upp neinni áskrift hjá símafyrirtæki. Til að sækja ný SIM-kort þarftu að hafa samband við símafyrirtækið þitt."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Endurstilla"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Nota líka mynstur til að opna þetta tæki"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Nota líka PIN-númer til að opna þetta tæki"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Nota líka aðgangsorð til að opna þetta tæki"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Staðfestu mynstrið"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Staðfestu PIN-númerið"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Staðfestu aðgangsorðið"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Teiknaðu mynstur tækisins til að halda áfram"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Sláðu inn PIN-númer tækisins til að halda áfram"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Sláðu inn aðgangsorðið tækisins til að halda áfram"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Rangt PIN-númer"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Rangt aðgangsorð"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Rangt mynstur"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Skoða eftir forritum"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Skoða eftir kerfum"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Vegna gæðaskoðana fyrir afhendingu er ekki víst að hleðslulotufjöldinn sé núll við fyrstu notkun"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Tölfræði vinnsluferla"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Nördaleg tölfræði um opin vinnsluferli"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Minnisnotkun"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eyða aðgerðum úr gestalotu?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Forritum og gögnum úr þessari gestalotu verður eytt núna og öllum aðgerðum úr síðari gestalotum verður eytt í hvert skipti sem gestastillingu er lokað"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"eyða, gestur, virkni, fjarlægja, gögn, gestur, eyða"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Leyfa gestasímtöl"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Leyfa gestum að hringja símtöl"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Símtalaferli verður deilt með gestanotanda"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Kveikja á símtölum og SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Gera þennan notanda að stjórnanda"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"símkerfi, netkerfi, staða farsímakerfis, staða þjónustu, sendistyrkur, tegund farsímakerfis, reiki, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"raðnúmer, vélbúnaðarútgáfa"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"upplýsingar um rafhlöðu, framleiðsludagur, fjöldi endurhleðslna, fyrsta notkun"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"stig Android öryggisplásturs, grunnbandsútgáfa, kjarnaútgáfa"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"þema, ljóst, dökkt, stilling, ljósnæmi, ljósfælni, dekkja, myrkva, dökk stilling, mígreni"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"dökkt þema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Sjálfgefin stilling tækis"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Ekki tókst að nota yfirlögn"</string>
<string name="special_access" msgid="1767980727423395147">"Sérstakur forritaaðgangur"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> forrit getur notað ótakmörkuð gögn</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> forrit geta notað ótakmörkuð gögn</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Sjá meira"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Löng bakgrunnsverk"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Leyfa langvarandi bakgrunnsverk"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Víxla samhæfisbreytingum forrits"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Sjálfgefnar virkar breytingar"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Sjálfgefnar óvirkar breytingar"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Engin forrit í boði"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Aðeins er hægt að gera breytingar á samhæfi forrita fyrir forrit sem hægt er að villuleita. Settu upp forrit sem hægt er að villuleita og reyndu aftur."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Hún er háð annarri stillingu"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Reikningur"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Slökkva á takmörkunum á undirvinnslu forrits"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Slökkva á takmörkunum á notkun undirvinnslu forrits á gögnum kerfisins"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Þvinga virkjun hlutverksins „Glósur“"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Virkja samþættingu glósukerfa í gegnum hlutverkið „Glósur“. Ef hlutverkið „Glósur“ er þegar virkt gerist ekkert."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Virkja samþættingu glósukerfa í gegnum hlutverkið „Glósur“. Ef hlutverkið „Glósur“ er þegar virkt gerist ekkert. Krefst endurræsingar."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Senda út"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Senda út <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Hlustaðu á útsendingar sem eru í gangi í nágrenni við þig"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 9048059..5a68f58 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth attivato"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Mostra tutti"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilo"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"App per le note predefinita"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pressione del pulsante dello stilo"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profilo di lavoro)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Scrivi nei campi di testo"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignora tutti i pulsanti premuti con lo stilo"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilo"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primo giorno della settimana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferenze per i numeri"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usa valore predefinito dell\'app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usa impostazione predefinita"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domenica"</string>
@@ -914,7 +915,7 @@
<string name="wifi_hotspot_speed_6g" msgid="3787697484862730500">"6 GHz"</string>
<string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"Velocità massime. Compatibile con pochi dispositivi."</string>
<string name="wifi_hotspot_speed_summary_unavailable" msgid="7276080644693388756">"Non disponibile nel tuo paese o nella tua regione"</string>
- <string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"Se la tua frequenza preferita non è disponibile, l\'hotspot potrebbe utilizzarne una diversa. Le impostazioni di sicurezza dell\'hotspot potrebbero cambiare se modifichi la frequenza."</string>
+ <string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"Se la tua frequenza preferita non è disponibile, l\'hotspot potrebbe utilizzarne una diversa. Le impostazioni di sicurezza dell\'hotspot potrebbero cambiare se si cambia la frequenza."</string>
<string name="wifi_hotspot_security_summary_unavailable" msgid="117582979310345853">"Non disponibile con 6 GHz"</string>
<string name="wifi_hotspot_security_footer" msgid="4608329688744949796">"Le impostazioni di sicurezza potrebbero cambiare se modifichi la frequenza dell\'hotspot"</string>
<string name="wifi_tether_starting" msgid="8879874184033857814">"Attivazione hotspot…"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versione kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Numero build"</string>
<string name="module_version" msgid="1787518340082046658">"Aggiornamento di sistema Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informazioni batteria"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Non disponibile"</string>
<string name="storage_settings" msgid="7472188817781592677">"Spazio di archiviazione"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Spazio di archiviazione e cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Indirizzo Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Numero di serie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tempo di attività"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data di produzione"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data del primo utilizzo"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Conteggio dei cicli"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Non disponibile"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calcolo…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Rinomina"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Monta"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ripristinerà tutte le impostazioni Bluetooth e Wi-Fi. L\'operazione non può essere annullata."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reimposta"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth e Wi-Fi sono stati reimpostati"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Resetta"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Resetta eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Gli eventuali piani tariffari non verranno annullati. Per scaricare SIM sostitutive, contatta il tuo operatore."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Reimposta"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Usa sequenza per sbloccare dispositivo"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Usa PIN per sbloccare dispositivo"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Usa password per sbloccare dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifica sequenza"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifica PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifica password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Per continuare devi inserire la sequenza del dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Per continuare devi inserire il PIN del dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Per continuare devi inserire la password del dispositivo"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN errato"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Password errata"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Sequenza errata"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Visualizza per app"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Visualizza per sistemi"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"A causa dei controlli di qualità prima della spedizione, il conteggio dei cicli potrebbe non essere pari a zero al primo utilizzo"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistiche sui processi"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistiche tecniche sui processi in esecuzione"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memoria usata"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vuoi eliminare l\'attività Ospite?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Le app e i dati di questa sessione Ospite verranno eliminati subito e ogni volta che uscirai dalla modalità Ospite verrà eliminata tutta l\'attività Ospite"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"eliminare, ospite, attività, rimuovere, dati, visitatore, cancellare"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Consenti all\'ospite di usare il telefono"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Consenti all\'ospite di fare telefonate"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"La cronologia chiamate verrà condivisa con l\'utente ospite"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Attiva chiamate e SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Imposta questo utente come amministratore"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rete, stato rete mobile, stato servizio, intensità segnale, tipo di rete mobile, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"numero di serie, versione hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informazioni sulla batteria, data di produzione, conteggio dei cicli, primo utilizzo"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"livello patch di sicurezza android, versione banda di base, versione kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, chiaro, buio, modalità, sensibilità alla luce, fotofobia, scurire, oscuramento, modalità Buio, emicrania"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema scuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Predefinito in base al dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Applicazione dell\'overlay non riuscita"</string>
<string name="special_access" msgid="1767980727423395147">"Accesso speciale per le app"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> app possono usare dati senza limitazioni</item>
- <item quantity="one">1 app può usare dati senza limitazioni</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Altro"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Attività in background lunghe"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Consenti attività in background lunghe"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Attiva/disattiva le modifiche di compatibilità delle app"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Modifiche attivate per impostazione predefinita"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Modifiche disattivate per impostazione predefinita"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nessuna app disponibile"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Le modifiche alla compatibilità delle app possono essere cambiate solo per le app di cui è possibile eseguire il debug. Installa un\'app di cui è possibile eseguire il debug e riprova."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Dipende da un\'altra impostazione"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4662,9 +4670,9 @@
<string name="ingress_rate_limit_dialog_title" msgid="5359461052422633789">"Configura il limite di velocità di download della rete"</string>
<string name="ingress_rate_limit_no_limit_entry" msgid="8741098826008012163">"Nessun limite"</string>
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Disattiva limitazioni per i processi secondari"</string>
- <string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disattiva le limitazioni relative all\'utilizzo delle risorse di sistema per i processi figlio delle app"</string>
+ <string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Disattiva le limitazioni relative all\'utilizzo delle risorse di sistema per i processi secondari delle app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forza attivazione del ruolo Note"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Attiva le integrazioni di sistema per la creazione di note tramite il ruolo Note. Se il ruolo Note è già attivo, non succederà nulla."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Attiva le integrazioni di sistema per la creazione di note tramite il ruolo Note. Se il ruolo Note è già attivo, non succederà nulla. Richiede il riavvio."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Trasmissione"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Trasmetti l\'app <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ascolta le trasmissioni in riproduzione nelle vicinanze"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 8f78e6d..a0bca5d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth הופעל"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"הצגת כל המכשירים"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"סטיילוס"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"אפליקציית הפתקים שמוגדרת כברירת מחדל"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"לחיצה על הלחצן האחורי"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (פרופיל העבודה)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"כתיבה בשדות טקסט"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"התעלמות מכל הלחיצות של הסטיילוס"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"סטיילוס"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"טמפרטורה"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"היום הראשון של השבוע"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"העדפות שקשורות למספרים"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"שימוש בברירת המחדל של האפליקציה"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"שימוש בברירת המחדל"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"צלזיוס (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"פרנהייט (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ראשון"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"גרסת ליבה"</string>
<string name="build_number" msgid="9009733242117579826">"מספר Build"</string>
<string name="module_version" msgid="1787518340082046658">"עדכון מערכת של Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"מידע על הסוללה"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"לא זמין"</string>
<string name="storage_settings" msgid="7472188817781592677">"אחסון"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"אחסון ומטמון"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"כתובת Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"מספר סידורי"</string>
<string name="status_up_time" msgid="1274778533719495438">"זמן פעולה"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"תאריך הייצור"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"תאריך השימוש הראשון"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"מספר מחזורי הטעינה"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"לא זמין"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"החישוב מתבצע…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"שינוי שם"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"טעינה"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"הפעולה הזו תאפס את כל ההגדרות של חיבורי Wi‑Fi ו-Bluetooth. לא ניתן לבטל את הפעולה הזו."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"איפוס"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"חיבורי Bluetooth ו-Wi‑Fi אופסו"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"מחיקה"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"מחיקה של כרטיסי ה-eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"הפעולה הזו לא תבטל אף חבילת גלישה. כדי להוריד כרטיסי SIM חלופיים, יש לפנות לספק חבילת הסלולר."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"איפוס הגדרות"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"שימוש בקו ביטול הנעילה גם במכשיר הזה"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"שימוש בקוד אימות גם לביטול הנעילה במכשיר הזה"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"שימוש בסיסמה גם לביטול הנעילה במכשיר הזה"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"אימות של קו ביטול הנעילה"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"אימות של קוד הגישה"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"אימות הסיסמה"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"צריך להשתמש בקו ביטול הנעילה של המכשיר כדי להמשיך"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"צריך להזין את קוד הגישה של המכשיר כדי להמשיך"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"צריך להזין את סיסמת המכשיר כדי להמשיך"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"קוד גישה שגוי"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"סיסמה שגויה"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"קו ביטול נעילה שגוי"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"הצגה לפי אפליקציות"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"הצגה לפי מערכות"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"בגלל בדיקות איכות שנערכות לפני המשלוח, מספר מחזורי הטעינה עשוי שלא להיות אפס בשימוש הראשון"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"סטטיסטיקה של תהליך"</string>
<string name="process_stats_summary" msgid="522842188571764699">"סטטיסטיקה של מומחי מחשבים על התהליכים הפועלים"</string>
<string name="app_memory_use" msgid="7559666138324410666">"זיכרון בשימוש"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"למחוק את הפעילות במצב אורח?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"האפליקציות והנתונים מהגלישה הזו במצב אורח יימחקו עכשיו, וכל פעילות עתידית במצב אורח תימחק בכל יציאה ממצב זה"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"מחיקה, פעילות, אורח, הסרה, נתונים, מבקר, למחוק"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"לאפשר לאורח להשתמש בטלפון?"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"מתן אפשרות לאורחים לבצע שיחות"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"היסטוריית השיחות תשותף עם המשתמש האורח"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"הפעלת שיחות טלפון ו-SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"הגדרת המשתמש הזה כאדמין"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"רשת, מצב הרשת הסלולרית, מצב השירות, עוצמת האות, סוג הרשת הסלולרית, נדידה, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID "</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"מספר סידורי, גרסת חומרה"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"מידע על הסוללה, תאריך הייצור, מספר המחזורים, השימוש הראשון"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"רמת תיקון האבטחה ב-Android, גרסת פס בסיס, גרסת ליבה"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"עיצוב, בהיר, כהה, מצב, רגישות לאור, פוטופוביה, שינוי לגוון כהה יותר, גוון כהה יותר, מצב כהה, מיגרנה"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"עיצוב כהה"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ברירת המחדל של המכשיר"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"נכשלה החלה של שכבת-על"</string>
<string name="special_access" msgid="1767980727423395147">"גישה מיוחדת"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> אפליקציות יכולות להשתמש בנתונים בלתי מוגבלים</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> אפליקציות יכולות להשתמש בנתונים בלתי מוגבלים</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> אפליקציות יכולות להשתמש בנתונים בלתי מוגבלים</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"תכונות נוספות"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"משימות ארוכות ברקע"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ההגדרה הזו מאפשרת להריץ משימות ארוכות ברקע"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"החלפת המצב של שינויים בתאימות של אפליקציות"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"השינויים מופעלים כברירת מחדל"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"השינויים מושבתים כברירת מחדל"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"אין אפליקציות זמינות"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ניתן לבצע שינויים בתאימות האפליקציה רק עבור אפליקציות שניתנות לניפוי באגים. יש להתקין אפליקציה שניתנת לניפוי באגים ולנסות שוב."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"תלויה בהגדרה אחרת"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"חשבון"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"השבתת ההגבלות על תהליכי הצאצא"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"השבתת הגבלות השימוש במשאבי המערכת של תהליכי הצאצא של האפליקציה"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"אילוץ הפעלה של פונקציית ההערות"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"הפעלת שילובי מערכת של כתיבת הערות דרך הפונקציה \'הערות\'. אם פונקציית ההערות כבר מופעלת, לא יקרה דבר."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"הפעלת שילובי מערכת של כתיבת הערות דרך הפונקציה \'הערות\'. אם פונקציית ההערות כבר מופעלת, שום דבר לא יקרה. נדרשת הפעלה מחדש."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"שידור"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"שידור תוכן מאפליקציית <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"האזנה לפודקאסטים שמושמעים בסביבה שלך"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 878e62b..f5f6307 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth を ON にしました"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"すべて表示"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"タッチペン"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"デフォルトのメモアプリ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"テールボタンを押す"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g>(仕事用プロファイル)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"テキスト フィールドに入力"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"タッチペンのボタン押下をすべて無視する"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"タッチペン"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"温度"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"週最初の曜日"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Numbers の設定"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"アプリのデフォルトを使用する"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"デフォルトを使用"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"摂氏(°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"華氏(°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"日曜日"</string>
@@ -899,24 +900,24 @@
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"他のデバイスにこのアクセス ポイントが公開されます。アクセス ポイント接続速度が低下します。"</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"他のデバイスにこのアクセス ポイントが公開されます。バッテリー使用量が増えます。"</string>
<string name="wifi_hotspot_speed_title" msgid="8629448084180512685">"速度と互換性"</string>
- <string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2.4 GHz / ほとんどのデバイスに対応"</string>
- <string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz / 対応デバイスは多数"</string>
- <string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / 対応デバイスはまだ少数"</string>
- <string name="wifi_hotspot_speed_summary_2g_and_5g" msgid="5931052946168943750">"2.4 / 5 GHz / ほとんどのデバイスに対応"</string>
+ <string name="wifi_hotspot_speed_summary_2g" msgid="5063438001736234858">"2.4 GHz / ほとんどのデバイスと互換性あり"</string>
+ <string name="wifi_hotspot_speed_summary_5g" msgid="6221158936983135040">"5 GHz / 多くのデバイスと互換性あり"</string>
+ <string name="wifi_hotspot_speed_summary_6g" msgid="8863992901226595544">"6 GHz / ごく一部のデバイスのみと互換性あり"</string>
+ <string name="wifi_hotspot_speed_summary_2g_and_5g" msgid="5931052946168943750">"2.4 / 5 GHz / ほとんどのデバイスと互換性あり"</string>
<string name="wifi_hotspot_speed_intro" msgid="6973482196363758925">"アクセス ポイントの周波数を選択してください。周波数は、接続速度と、アクセス ポイントを検出できるデバイスの種類に影響します。"</string>
<string name="wifi_hotspot_speed_category" msgid="5265655850463630286">"優先周波数"</string>
<string name="wifi_hotspot_speed_2g" msgid="3400600834257664480">"2.4 GHz"</string>
- <string name="wifi_hotspot_speed_2g_summary" msgid="6930273933810520155">"速度が遅くなります。ほとんどのデバイスに対応しています。"</string>
+ <string name="wifi_hotspot_speed_2g_summary" msgid="6930273933810520155">"速度が遅くなります。ほとんどのデバイスと互換性があります。"</string>
<string name="wifi_hotspot_speed_5g" msgid="4058116867148848395">"5 GHz"</string>
- <string name="wifi_hotspot_speed_5g_summary" msgid="562987935924535694">"高速です。多数のデバイスに対応しています。"</string>
+ <string name="wifi_hotspot_speed_5g_summary" msgid="562987935924535694">"高速です。多くのデバイスと互換性があります。"</string>
<string name="wifi_hotspot_speed_2g_5g" msgid="9192756255938408285">"2.4 / 5 GHz"</string>
- <string name="wifi_hotspot_speed_2g_5g_summary" msgid="8104575293617700173">"高速です。このデュアルバンドのアクセス ポイントはほとんどのデバイスに対応しています。"</string>
+ <string name="wifi_hotspot_speed_2g_5g_summary" msgid="8104575293617700173">"高速です。このデュアルバンドのアクセス ポイントはほとんどのデバイスと互換性があります。"</string>
<string name="wifi_hotspot_speed_6g" msgid="3787697484862730500">"6 GHz"</string>
- <string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"速度が最も速くなります。対応デバイスはまだ少数です。"</string>
+ <string name="wifi_hotspot_speed_6g_summary" msgid="8675262219242174548">"速度が最も速くなります。ごく一部のデバイスのみと互換性があります。"</string>
<string name="wifi_hotspot_speed_summary_unavailable" msgid="7276080644693388756">"お住まいの国や地域では利用できません"</string>
<string name="wifi_hotspot_speed_footer" msgid="8846939503916795002">"優先周波数を利用できない場合、アクセス ポイントは別の周波数を使用する可能性があります。周波数を変更すると、アクセス ポイントのセキュリティ設定が変更される可能性があります。"</string>
<string name="wifi_hotspot_security_summary_unavailable" msgid="117582979310345853">"6 GHz には対応していません"</string>
- <string name="wifi_hotspot_security_footer" msgid="4608329688744949796">"アクセス ポイントの周波数を変更すると、セキュリティ設定が変更される可能性があります"</string>
+ <string name="wifi_hotspot_security_footer" msgid="4608329688744949796">"アクセス ポイントの周波数を変更すると、アクセス セキュリティ設定が変更される可能性があります"</string>
<string name="wifi_tether_starting" msgid="8879874184033857814">"アクセスポイントをONにしています…"</string>
<string name="wifi_tether_stopping" msgid="4416492968019409188">"アクセスポイントをOFFにしています…"</string>
<string name="wifi_tether_carrier_unsupport_dialog_title" msgid="3089432578433978073">"テザリングは利用できません"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"カーネル バージョン"</string>
<string name="build_number" msgid="9009733242117579826">"ビルド番号"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play システム アップデート"</string>
+ <string name="battery_info" msgid="7873528123969546728">"バッテリー情報"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"該当なし"</string>
<string name="storage_settings" msgid="7472188817781592677">"ストレージ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ストレージとキャッシュ"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth アドレス"</string>
<string name="status_serial_number" msgid="9060064164331466789">"シリアル番号"</string>
<string name="status_up_time" msgid="1274778533719495438">"稼働時間"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"製造日"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"初回使用日"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"サイクル回数"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"使用不可"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"計算中..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"名前を変更"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"マウント"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"すべての Wi-Fi と Bluetooth の設定をリセットします。この操作を元に戻すことはできません。"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"リセット"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth と Wi-Fi をリセットしました"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"消去"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM を消去"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"この操作でモバイルのサービスプランが解約されることはありません。別の eSIM をダウンロードするには、携帯通信会社にお問い合わせください。"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"設定をリセット"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"パターンでこのデバイスのロックも解除されます"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"PIN でこのデバイスのロックも解除されます"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"パスワードでこのデバイスのロックも解除されます"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"パターンの確認"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN の確認"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"パスワードの確認"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"続行するにはデバイスのパターンを使用してください"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"続行するにはデバイスの PIN を入力してください"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"続行するにはデバイスのパスワードを入力してください"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PINが正しくありません"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"パスワードが正しくありません"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"パターンが正しくありません"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"アプリ別に表示"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"システム別に表示"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"出荷前の品質検査により、初回使用時にサイクル回数がゼロになっていない場合があります"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"プロセスの統計情報"</string>
<string name="process_stats_summary" msgid="522842188571764699">"プロセスの実行に関する独自の統計情報"</string>
<string name="app_memory_use" msgid="7559666138324410666">"メモリ使用"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ゲストのアクティビティを削除しますか?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"今回のゲスト セッションのアプリとデータが今すぐ削除され、今後のゲストのアクティビティはすべて、ゲストモードを終了するたびに削除されます"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"削除, ゲスト, アクティビティ, 消す, データ, ビジター, 消去"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"スマートフォンの利用をゲストに許可する"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ゲストに通話を許可する"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"発信履歴がゲストユーザーと共有されます。"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"通話と SMS を ON"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"このユーザーを管理者にする"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ネットワーク, モバイル ネットワークの状態, サービスの状態, 電波強度, モバイル ネットワークの種類, ローミング, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"シリアル番号, ハードウェア バージョン"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"バッテリー情報, 製造日, サイクル回数, 初回使用"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android セキュリティ パッチ レベル, ベースバンド バージョン, カーネル バージョン"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"テーマ, ライト, ダーク, モード, 光 過敏, 羞明, 切り替え 暗く, 暗くする, ダーク モード, 頭痛"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ダークモード"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"デバイスのデフォルト"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"オーバーレイを適用できませんでした"</string>
<string name="special_access" msgid="1767980727423395147">"特別なアプリアクセス"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個のアプリがモバイルデータを無制限に使用可能</item>
- <item quantity="one">1 個のアプリがモバイルデータを無制限に使用可能</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"詳細"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"長いバックグラウンド タスク"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"長時間実行のバックグラウンド タスクを許可"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"「アプリの互換性の変更」を切り替えます"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"デフォルトで有効な変更"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"デフォルトで無効な変更"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"利用できるアプリはありません"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"アプリの互換性の変更は、デバッグ可能アプリでのみ行えます。デバッグ可能アプリをインストールしてから、もう一度お試しください。"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"別の設定に依存しています"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"アカウント"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"子プロセスの制限を無効にする"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"アプリの子プロセスのシステム リソース使用量に関する制限を無効にします"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"メモのロールを強制的に有効にする"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"メモのロールを通じてメモ作成システムの統合を行えるようにします。メモのロールがすでに有効の場合、処理は行われません。"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"メモのロールを通じてメモ作成システムの統合を行えるようにします。メモのロールがすでに有効の場合、処理は行われません。再起動が必要です。"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ブロードキャスト"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> をブロードキャスト"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"近くで再生されているブロードキャストを聴きます"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index f00b911..fd2c347 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth ჩაირთო"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ყველას ნახვა"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"სტილუსი"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ჩანიშვნების ნაგულისხმევი აპი"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"კუდის ღილაკზე დაჭერა"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (სამსახურის პროფილი)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"დაწერეთ ტექსტურ ველებში"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"იგნორირება გაუკეთეთ სტილუსის ღილაკების ყველა დაჭერას"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"სტილუსი"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ტემპერატურა"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"კვირის პირველი დღე"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ნომრების უპირატესობები"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"გამოიყენე აპის ნაგულისხმევი პარამეტრები"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ნაგულისხმევის გამოყენება"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ცელსიუსი (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ფარენჰაიტი (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"კვირა"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"kernel-ის ვერსია"</string>
<string name="build_number" msgid="9009733242117579826">"ანაწყობის ნომერი"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play სისტემის განახლება"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ინფორმაცია ბატარეის შესახებ"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"მიუწვდომელი"</string>
<string name="storage_settings" msgid="7472188817781592677">"მეხსიერება"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"მეხსიერება და ქეში"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth მისამართი"</string>
<string name="status_serial_number" msgid="9060064164331466789">"სერიული ნომერი"</string>
<string name="status_up_time" msgid="1274778533719495438">"მუშაობის დრო"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"წარმოების თარიღი"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"პირველი გამოყენების თარიღი"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ციკლების რაოდენობა"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"მიუწვდომელია"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"გამოთვლა…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"გადარქმევა"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"მიერთება"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ამის შედეგად გადაიტვირთება Wi‑Fi-ისა და Bluetooth-ის ყველა პარამეტრი. ამ მოქმედებას ვერ გააუქმებთ."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"გადაყენება"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth და Wi‑Fi გადატვირთულია"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ამოშლა"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM-ების ამოშლა"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ეს არ გააუქმებს მობილური სერვისის მოქმედ გეგმებს. ჩამნაცვლებელი SIM-ების ჩამოსატვირთად დაუკავშირდით თქვენს ოპერატორს."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"პარამეტრების ჩამოყრა"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ამ მოწყობილობის განბლოკვისთვის ასევე ნიმუში გამოიყენეთ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ამ მოწყობილობის განბლოკვისთვის ასევე PIN-კოდი გამოიყენეთ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ამ მოწყობილობის განბლოკვისთვის ასევე პაროლი გამოიყენეთ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"განმბლოკავი ნიმუშის დადასტურება"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN-კოდის დადასტურება"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"პაროლის დადასტურება"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"გასაგრძელებლად, გამოიყენეთ თქვენი მოწყობილობის ნიმუში"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"გასაგრძელებლად, შეიყვანეთ თქვენი მოწყობილობის PIN-კოდი"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"გასაგრძელებლად, შეიყვანეთ თქვენი მოწყობილობის პაროლი"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"არასწორი PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"არასწორი პაროლი"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"არასწორი ნიმუში"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"აპების მიხედვით ნახვა"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"სისტემების მიხედვით ნახვა"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"მიწოდებამდე ხარისხის შემოწმების გამო, შესაძლოა, ციკლის მაჩვენებელი არ იყოს ნული პირველად გამოყენებისას"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"პროცესის სტატისტიკა"</string>
<string name="process_stats_summary" msgid="522842188571764699">"მიმდინარე პროცესების შემაჯამებელი სტატისტიკა"</string>
<string name="app_memory_use" msgid="7559666138324410666">"გამოყენებული მეხსიერება"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"გსურთ სტუმრის აქტივობის წაშლა?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"აპები და მონაცემები სტუმრის ამ სესიიდან წაიშლება ახლავე, ხოლო სტუმრის ყველა მომავალი აქტივობა წაიშლება ყოველთვის, როცა სტუმრის რეჟიმიდან გახვალთ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"წაშლა, სტუმარი, აქტივობა, წაშლა, მონაცემები, ვიზიტორი, წაშლა"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"სტუმრისთვის ტელეფონის გამოყენების ნების დართვა"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"დართეთ ნება სტუმარს ტელეფონით დასარეკად"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"საუბრის ისტორია გაზიარდება სტუმარ მომხმარებელთან."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"სატელ. ზარების და SMS-ის ჩართვა"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"დაინიშნოს ეს მომხმარებელი ადმინისტრატორად"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ქსელი, მობილური ქსელის მდგომარეობა, სერვისის მდგომარეობა, სიგნალის სიძლიერე, მობილური ქსელის ტიპი, როუმინგი, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"სერიული ნომერი, აპარატურის ვერსია"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ბატარეის ინფორმაცია, წარმოების თარიღი, ციკლების რაოდენობა, პირველი გამოყენება"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android-ის უსაფრთხოების ჩასწორების დონე, baseband-ის ვერსია, kernel-ის ვერსია"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"თემა, განათება, მუქი რეჟიმი, მგრძნობელობა სინათლის მიმართ, ფოტოფობია, გამუქება, ჩაბნელება, მუქი რეჟიმი, შაკიკი"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"მუქი თემა"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"მოწყობილობის ნაგულისხმევი"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"გადაფარვის მისადაგება ვერ მოხერხდა"</string>
<string name="special_access" msgid="1767980727423395147">"აპების სპეციალური წვდომა"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">მონაცემთა შეუზღუდავად გამოყენება <xliff:g id="COUNT">%d</xliff:g> აპს შეუძლია</item>
- <item quantity="one">მონაცემთა შეუზღუდავად გამოყენება 1 აპს შეუძლია</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"მეტის ნახვა"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ხანგრძლივი ფონური პროცესები"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ხანგრძლივი ფონური პროცესების ნების დართვა"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"აპის თავსებადობის ცვლილებების გადართვა"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ნაგულისხმევი ჩართული ცვლილებები"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ნაგულისხმევი გათიშული ცვლილებები"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ხელმისაწვდომი აპები არ არის"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"აპის თავსებადობის ცვლილებები მხოლოდ გამართვადი აპლიკაციებისთვის შეიძლება განხორციელდეს დააინსტალირეთ გამართვადი აპი და ხელახლა ცადეთ."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"დამოკიდებულია სხვა პარამეტრზე"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ანგარიში"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ქვე პროცესის შეზღუდვის გამორთვა"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"გამორთეთ შეზღუდვები აპის ქვე დამუშავების სისტემის რესურსების გამოყენების შესახებ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"ჩანიშვნების როლის იძულებით ჩართვა"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"ჩართეთ ჩანიშვნის სისტემის ინტეგრაციები შენიშვნების როლიდან. თუ ჩანიშვნების როლი უკვე ჩართულია, არაფერს მოიმოქმედებს."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"ჩართეთ ჩანიშვნების შექმნის სისტემის ინტეგრაციები ჩანიშვნების როლიდან. თუ ჩანიშვნების როლი უკვე ჩართულია, არაფერს მოიმოქმედებს. საჭიროებს გადატვირთვას."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ტრანსლაცია"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g>-ის ტრანსლაცია"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"მოუსმინეთ ტრანსლაციებს თქვენთან ახლოს"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index a459942..3bc4d1c 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth қосылды"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Барлығын көру"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Стилус"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Әдепкі ескертпелер қолданбасы"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Стилус түймесін басу"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (жұмыс профилі)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Мәтін өрістеріне жазу"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Стилуспен басқан барлық түймені елемеу"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Стилус"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Аптаның бірінші күні"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Сан параметрлері"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Қолданбаның әдепкі параметрлерін пайдалану"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Әдепкісінше пайдалану"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Цельсий (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренгейт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Жексенбі"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Ядро нұсқасы"</string>
<string name="build_number" msgid="9009733242117579826">"Құрама нөмірі"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play арқылы жүйені жаңарту"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Батарея ақпараты"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Қолжетімсіз"</string>
<string name="storage_settings" msgid="7472188817781592677">"Жад"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Жад және кэш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth мекенжайы"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Сериялық нөмірі"</string>
<string name="status_up_time" msgid="1274778533719495438">"Қосылғаннан бергі жұмыс уақыты"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Жасалған уақыты"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Алғаш пайдаланылған уақыты"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Цикл саны"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Жоқ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Есептеуде…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Атын өзгерту"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"контентті картадан жүктеу"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Барлық Wi‑Fi мен Bluetooth параметрі бастапқы қалпына келеді. Бұл әрекет кері қайтарылмайды."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Бастапқы қалпына келтіру"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth пен Wi‑Fi қайта орнатылды."</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Өшіру"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM карталарын тазарту"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Бұл әрекет тарифтік жоспарлардың күшін жоймайды. Жаңа SIM карталарын жүктеп алу үшін операторға хабарласыңыз."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Параметрлерді бастапқы күйге қайтару"</string>
@@ -1458,6 +1463,18 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Құрылғының құлпын ашу үшін өрнекті пайдалану"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Құрылғының құлпын ашу үшін PIN кодын пайдалану"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Құрылғының құлпын ашу үшін құпия сөзді пайдалану"</string>
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_header (6669435143987988314) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_header (2585263648322879131) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_header (3064676176428495228) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_details (6187536224419477465) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_details (203022189107305807) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_details (4860219600771003873) -->
+ <skip />
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Қате PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Қате құпия сөз"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Қате өрнек"</string>
@@ -2326,6 +2343,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Қолданбалар бойынша көру"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Жүйелер бойынша көру"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Жөнелту алдында сапа тексерістері орындалатындықтан, алғаш пайдалану кезінде цикл саны нөлге тең болмауы мүмкін."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Үрдіс статистикалары"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Қосылған үрдістерге қатысты статистикалар"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Жад қолдану"</string>
@@ -2703,7 +2721,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Қонақ әрекетін жою керек пе?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Осы қонақ сеансындағы қолданбалар мен деректер қазір жойылады және қонақ режимінен шыққан сайын қонақтың барлық әрекеті өшіп отырады."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"жою, қонақ, әрекет, өшіру, деректер, кіруші, тазарту"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Қонаққа телефонды пайдалануға рұқсат ету"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Қонаққа қоңырау шалуға рұқсат беру"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Қоңыраулар тарихы осы қонақ пайдаланушыға көрсетіледі."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Телефон қоңырауларын және SMS қосу"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Осы пайдаланушыны әкімші ету"</string>
@@ -2929,6 +2947,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"желі, мобильдік желі күйі, қызмет күйі, сигнал күші, мобильдік желі түрі, роуминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"сериялық нөмір, жабдық нұсқасы"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"батарея ақпараты, жасалған уақыты, цикл саны, алғаш пайдаланылған уақыты"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android қауіпсіздік түзетуінің деңгейі, тікелей тарату нұсқасы, ядро нұсқасы"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тақырып, жарық, қараңғы, режим, жарықсезгіштік, фотофобия, қараңғылау, қараңғы ету, қараңғы режим, бас сақинасы ауруы"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"қараңғы режим"</string>
@@ -3855,10 +3874,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Құрылғының әдепкі параметрі"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Қабаттастыру мүмкін болмады."</string>
<string name="special_access" msgid="1767980727423395147">"Арнайы рұқсат"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> қолданба деректерді шексіз пайдалана алады</item>
- <item quantity="one">1 қолданба деректерді шексіз пайдалана алады</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Толығырақ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Ұзақ фондық тапсырмалар"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Ұзақ фондық тапсырмаларды орындауға рұқсат беру"</string>
@@ -4146,7 +4161,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Қолданбалардың үйлесімділігін реттеудегі өзгерісті көрсету"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Қосылған әдепкі өзгерістер"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Өшірілген әдепкі өзгерістер"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Қолданба жоқ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Үйлесімділік параметрлері түзетілетін қолданбаларда ғана реттеледі. Түзетілетін қолданбаларды орнатып, әрекетті қайталап көріңіз."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Басқа параметрге тәуелді"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Аккаунт"</string>
@@ -4664,7 +4678,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Туынды процеске қатысты шектеулерді өшіру"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Қолданбаның туынды процестерінің жүйе ресурсын пайдалануына қатысты шектеулерді өшіру"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"\"Ескертпелер\" жинағын мәжбүрлі түрде қосу"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"\"Ескертпелер\" жинағы арқылы ескертпе жасау жүйесін қосады. \"Ескертпелер\" жинағы қосулы болса, ештеңе істемейді."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"\"Ескертпелер\" жинағы арқылы ескертпе жасау жүйесін қосады. \"Ескертпелер\" жинағы қосулы болса, ештеңе істемейді. Қайта жүктеу қажет."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Тарату"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> қолданбасын тарату"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Маңайыңызда таратылып жатқан медиамазмұндарды тыңдауға болады."</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 0b655ad..db60a74 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"បានបើកប៊្លូធូស"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"មើលទាំងអស់"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ប៊ិក"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"កម្មវិធីកំណត់ចំណាំលំនាំដើម"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ការចុចប៊ូតុងកន្ទុយ"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (កម្រងព័ត៌មានការងារ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"សរសេរក្នុងកន្លែងបញ្ចូលអក្សរ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"កុំអើពើនឹងការសង្កត់ប៊ូតុងប៊ិកទាំងអស់"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ប៊ិក"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"សីតុណ្ហភាព"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ថ្ងៃដំបូងនៃសប្ដាហ៍"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ចំណូលចិត្តលេខ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ប្រើលំនាំដើមកម្មវិធី"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ប្រើលំនាំដើម"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"អង្សាសេ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"អង្សាហ្វារិនហៃ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"អាទិត្យ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"កំណែខឺណែល"</string>
<string name="build_number" msgid="9009733242117579826">"លេខកំណែបង្កើត"</string>
<string name="module_version" msgid="1787518340082046658">"បច្ចុប្បន្នភាពប្រព័ន្ធ Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ព័ត៌មានថ្ម"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"មិនមាន"</string>
<string name="storage_settings" msgid="7472188817781592677">"ទំហំផ្ទុក"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ទំហំផ្ទុក និងឃ្លាំងបម្រុង"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"អាសយដ្ឋានប៊្លូធូស"</string>
<string name="status_serial_number" msgid="9060064164331466789">"លេខស៊េរី"</string>
<string name="status_up_time" msgid="1274778533719495438">"រយៈពេលបើក"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"កាលបរិច្ឆេទផលិត"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"កាលបរិច្ឆេទនៃការប្រើដំបូង"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ចំនួនវដ្ដ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"មិនមានទេ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"កំពុងគណនា..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"ប្ដូរឈ្មោះ"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ភ្ជាប់"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"បែបនេះនឹងកំណត់ការកំណត់ Wi‑Fi និងប៊្លូធូសទាំងអស់ឡើងវិញ។ អ្នកមិនអាចត្រឡប់សកម្មភាពនេះវិញបានទេ។"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"កំណត់ឡើងវិញ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ប៊្លូធូស និង Wi-Fi ត្រូវបានកំណត់ឡើងវិញ"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"លុប"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"លុប eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"សកម្មភាពនេះនឹងមិនបោះបង់គម្រោងសេវាទូរសព្ទចល័តណាមួយឡើយ។ ដើម្បីទាញយកស៊ីមជំនួស សូមទាក់ទងក្រុមហ៊ុនសេវាទូរសព្ទរបស់អ្នក។"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"កំណត់ការកំណត់ឡើងវិញ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ប្រើលំនាំដើម្បីដោះសោឧបករណ៍នេះផងដែរ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ប្រើកូដ PIN ដើម្បីដោះសោឧបករណ៍នេះផងដែរ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ប្រើពាក្យសម្ងាត់ដើម្បីដោះសោឧបករណ៍នេះផងដែរ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ផ្ទៀងផ្ទាត់លំនាំ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ផ្ទៀងផ្ទាត់កូដPIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ផ្ទៀងផ្ទាត់ពាក្យសម្ងាត់"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ប្រើលំនាំឧបករណ៍របស់អ្នកដើម្បីបន្ត"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"បញ្ចូលកូដ PIN ឧបករណ៍របស់អ្នកដើម្បីបន្ត"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"បញ្ចូលពាក្យសម្ងាត់ឧបករណ៍របស់អ្នកដើម្បីបន្ត"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"កូដ PIN មិនត្រឹមត្រូវ"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ពាក្យសម្ងាត់មិនត្រឹមត្រូវ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"លំនាំមិនត្រឹមត្រូវ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"មើលតាមកម្មវិធី"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"មើលតាមប្រព័ន្ធ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ដោយសារមានការត្រួតពិនិត្យមុនពេលដឹកជញ្ជូន ចំនួនវដ្តប្រហែលមិនស្មើសូន្យនៅពេលប្រើលើកដំបូងទេ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ស្ថិតិដំណើរការ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ស្ថិតិ Geeky អំពីដំណើរការ"</string>
<string name="app_memory_use" msgid="7559666138324410666">"ការប្រើអង្គចងចាំ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"លុបសកម្មភាពភ្ញៀវឬ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"កម្មវិធី និងទិន្នន័យពីវគ្គភ្ញៀវនេះនឹងត្រូវបានលុបឥឡូវនេះ ហើយសកម្មភាពភ្ញៀវនាពេលអនាគតទាំងអស់នឹងត្រូវបានលុប នៅរាល់ពេលដែលអ្នកចាកចេញពីមុខងារភ្ញៀវ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"លុប, ភ្ញៀវ, សកម្មភាព, ដកចេញ, ទិន្នន័យ, អ្នកចូលមើល, លុបចេញ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"អនុញ្ញាតឱ្យភ្ញៀវប្រើទូរសព្ទ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"អនុញ្ញាតឱ្យភ្ញៀវហៅទូរសព្ទ"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ប្រវត្តិហៅទូរសព្ទនឹងត្រូវបានចែករំលែកជាមួយអ្នកប្រើជាភ្ញៀវ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"បើកការហៅទូរសព្ទ និងសារ SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ផ្ដល់សិទ្ធិជាអ្នកគ្រប់គ្រងឱ្យអ្នកប្រើប្រាស់នេះ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"បណ្ដាញ, ស្ថានភាពបណ្ដាញទូរសព្ទចល័ត, ស្ថានភាពសេវាកម្ម, កម្លាំងសញ្ញា, ប្រភេទបណ្ដាញទូរសព្ទចល័ត, រ៉ូមីង, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"លេខស៊េរី កំណែផ្នែករឹង"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ព័ត៌មានថ្ម កាលបរិច្ឆេទផលិត ចំនួនវដ្ត ការប្រើដំបូង"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"កម្រិតផេឆសុវត្ថិភាព android, កំណែមូលដ្ឋាន, កំណែខឺណែល"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"រចនាប័ទ្ម ពន្លឺ ងងឹត មុខងារ កម្រិតពន្លឺ ប្រតិកម្មនឹងពន្លឺ ធ្វើឱ្យកាន់តែងងឹត ធ្វើឱ្យងងឹត មុខងារងងឹត ឈឺក្បាលប្រកាំង"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ទម្រង់រចនាងងឹត"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"លំនាំដើមរបស់ឧបករណ៍"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"មិនអាចប្រើការដាក់ត្រួតគ្នាបានទេ"</string>
<string name="special_access" msgid="1767980727423395147">"ការចូលប្រើប្រាស់កម្មវិធីពិសេស"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">កម្មវិធី <xliff:g id="COUNT">%d</xliff:g> អាចប្រើទិន្នន័យដែលគ្មានការដាក់កំហិត</item>
- <item quantity="one">កម្មវិធី 1 អាចប្រើទិន្នន័យដែលគ្មានការដាក់កំហិត</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"មើលច្រើនទៀត"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"កិច្ចការនៅផ្ទៃខាងក្រោយដែលប្រើពេលយូរ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"អនុញ្ញាតកិច្ចការនៅផ្ទៃខាងក្រោយដែលដំណើរការដោយប្រើពេលយូរ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"បិទ/បើកការផ្លាស់ប្ដូរភាពត្រូវគ្នានៃកម្មវិធី"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ការផ្លាស់ប្ដូរដែលបានបើកតាមលំនាំដើម"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ការផ្លាស់ប្ដូរដែលបានបិទតាមលំនាំដើម"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"មិនមានកម្មវិធីទេ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ការផ្លាស់ប្ដូរភាពត្រូវគ្នានៃកម្មវិធីអាចត្រូវបានកែប្រែសម្រាប់តែកម្មវិធីដែលអាចជួសជុលបានប៉ុណ្ណោះ។ ដំឡើងកម្មវិធីដែលអាចជួសជុលបាន រួចព្យាយាមម្ដងទៀត។"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ផ្អែកលើការកំណត់ផ្សេងទៀត"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"គណនី"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"បិទការដាក់កំហិតលើដំណើរការសម្រាប់កុមារ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"បិទការដាក់កំហិតលើការប្រើប្រាស់ធនធានប្រព័ន្ធសម្រាប់ដំណើរការកម្មវិធីសម្រាប់កុមារ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"បង្ខំឱ្យបើកតួនាទីកំណត់ចំណាំ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"បើកការរួមបញ្ចូលប្រព័ន្ធកត់ចំណាំតាមរយៈតួនាទីកំណត់ចំណាំ។ ប្រសិនបើតួនាទីកំណត់ចំណាំត្រូវបានបើករួចហើយ សូមកុំធ្វើអ្វីទាំងអស់។"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"បើកការរួមបញ្ចូលប្រព័ន្ធកត់ចំណាំតាមរយៈតួនាទីកំណត់ចំណាំ។ ប្រសិនបើតួនាទីកំណត់ចំណាំត្រូវបានបើករួចហើយ សូមកុំធ្វើអ្វីទាំងអស់។ តម្រូវឱ្យចាប់ផ្ដើមឡើងវិញ។"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ការផ្សាយ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"ការផ្សាយ <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ស្ដាប់ការផ្សាយដែលកំពុងចាក់នៅជិតអ្នក"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 5f15f8c..1dbf4d5 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -119,11 +119,12 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ಸ್ಟೈಲಸ್"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ಡೀಫಾಲ್ಟ್ ಟಿಪ್ಪಣಿಗಳು ಆ್ಯಪ್"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ಟೈಲ್ ಬಟನ್ ಒತ್ತಿರಿ"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ಪಠ್ಯ ಫೀಲ್ಡ್ಗಳಲ್ಲಿ ಬರೆಯಿರಿ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ಎಲ್ಲಾ ಸ್ಟೈಲಸ್ ಬಟನ್ ಒತ್ತುವಿಕೆಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ಸ್ಟೈಲಸ್"</string>
- <string name="date_and_time" msgid="1788358029823431692">"ದಿನಾಂಕ ಮತ್ತು ಸಮಯ"</string>
+ <string name="date_and_time" msgid="1788358029823431692">"ದಿನಾಂಕ & ಸಮಯ"</string>
<string name="proxy_settings_title" msgid="4201866858226087066">"ಪ್ರಾಕ್ಸಿ"</string>
<string name="proxy_clear_text" msgid="6529658759984031149">"ತೆರವುಗೊಳಿಸಿ"</string>
<string name="proxy_port_label" msgid="4647357286461712574">"ಪ್ರಾಕ್ಸಿ ಪೋರ್ಟ್"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ತಾಪಮಾನ"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ವಾರದ ಮೊದಲ ದಿನ"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ಸಂಖ್ಯೆಗಳ ಆದ್ಯತೆಗಳು"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ಆ್ಯಪ್ ಡೀಫಾಲ್ಟ್ ಬಳಸಿ"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ಡೀಫಾಲ್ಟ್ ಬಳಸಿ"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ಸೆಲ್ಸಿಯಸ್ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ಫ್ಯಾರನ್ಹೀಟ್ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ಭಾನುವಾರ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"ಕೆರ್ನಲ್ ಆವೃತ್ತಿ"</string>
<string name="build_number" msgid="9009733242117579826">"ಬಿಲ್ಡ್ ಸಂಖ್ಯೆ"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ಸಿಸ್ಟಂ ಅಪ್ಡೇಟ್"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ಬ್ಯಾಟರಿ ಮಾಹಿತಿ"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="storage_settings" msgid="7472188817781592677">"ಸಂಗ್ರಹಣೆ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ಸಂಗ್ರಹಣೆ ಮತ್ತು ಕ್ಯಾಷ್"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ಬ್ಲೂಟೂತ್ ವಿಳಾಸ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"ಕ್ರಮ ಸಂಖ್ಯೆ"</string>
<string name="status_up_time" msgid="1274778533719495438">"ಕಾರ್ಯನಿರತ ಸಮಯ"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"ಉತ್ಪಾದನಾ ದಿನಾಂಕ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ಮೊದಲು ಬಳಸಿದ ದಿನಾಂಕ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ಸೈಕಲ್ ಎಣಿಕೆ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ಎಣಿಕೆ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"ಮರುಹೆಸರಿಸಿ"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ಅಳವಡಿಸಿ"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ಇದು ಎಲ್ಲಾ ವೈ-ಫೈ ಮತ್ತು ಬ್ಲೂಟೂತ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ರೀಸೆಟ್ ಮಾಡುತ್ತದೆ. ನೀವು ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ರೀಸೆಟ್ ಮಾಡಿ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ಬ್ಲೂಟೂತ್ ಮತ್ತು ವೈ-ಫೈ ಅನ್ನು ರೀಸೆಟ್ ಮಾಡಲಾಗಿದೆ"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ಅಳಿಸಿ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM ಗಳನ್ನು ಅಳಿಸಿಹಾಕಿ"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ಇದು ಯಾವುದೇ ಮೊಬೈಲ್ ಸೇವಾ ಪ್ಲಾನ್ಗಳನ್ನು ರದ್ದುಗೊಳಿಸುವುದಿಲ್ಲ. ಬದಲಾಯಿಸಿದ SIM ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿಕೊಳ್ಳಲು, ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ಈ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಪ್ಯಾಟರ್ನ್ ಬಳಸಿ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ಈ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಿನ್ ಸಹ ಬಳಸಿ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ಈ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಪಾಸ್ವರ್ಡ್ ಬಳಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ಪ್ಯಾಟರ್ನ್ ಪರಿಶೀಲಿಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ಪಿನ್ ಪರಿಶೀಲಿಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ಪಾಸ್ವರ್ಡ್ ಪರಿಶೀಲಿಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಸಾಧನದ ಪ್ಯಾಟರ್ನ್ ಬಳಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಸಾಧನದ ಪಿನ್ ನಮೂದಿಸಿ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಸಾಧನದ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ತಪ್ಪಾದ ಪಿನ್"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ತಪ್ಪು ಪಾಸ್ವರ್ಡ್"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ಪ್ಯಾಟರ್ನ್ ತಪ್ಪಾಗಿದೆ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ಆ್ಯಪ್ಗಳ ಮೂಲಕ ವೀಕ್ಷಿಸಿ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ಸಿಸ್ಟಮ್ಗಳ ಮೂಲಕ ವೀಕ್ಷಿಸಿ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ಶಿಪ್ಪಿಂಗ್ಗೆ ಮೊದಲು ಗುಣಮಟ್ಟದ ತಪಾಸಣೆಗಳ ಕಾರಣದಿಂದಾಗಿ, ಮೊದಲ ಬಳಕೆಯಲ್ಲಿ ಆವರ್ತನದ ಎಣಿಕೆ ಶೂನ್ಯವಾಗಿರಬಹುದು"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ಪ್ರಕ್ರಿಯೆಯ ಅಂಕಿಅಂಶಗಳು"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ಚಾಲನೆಯಲ್ಲಿರುವ ಪ್ರಕ್ರಿಯೆಗಳ ಕುರಿತು Geeky ಅಂಕಿಅಂಶಗಳು"</string>
<string name="app_memory_use" msgid="7559666138324410666">"ಸ್ಮರಣೆ ಬಳಕೆ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ಅಥಿತಿ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಬೇಕೆ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ಈ ಅತಿಥಿ ಸೆಶನ್ನಿಂದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಈಗ ಅಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನೀವು ಅತಿಥಿ ಮೋಡ್ನಿಂದ ನಿರ್ಗಮಿಸಿದ ಪ್ರತಿ ಬಾರಿ ಭವಿಷ್ಯದ ಎಲ್ಲಾ ಅತಿಥಿ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ಅಳಿಸಿ, ಅತಿಥಿ, ಚಟುವಟಿಕೆ, ತೆಗೆದುಹಾಕಿ, ಡೇಟಾ, ಸಂದರ್ಶಕರು, ಅಳಿಸಿಹಾಕಿ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ಫೋನ್ ಬಳಸಲು ಅತಿಥಿಗೆ ಅವಕಾಶ ನೀಡಿ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಅತಿಥಿಗೆ ಅನುಮತಿಸಿ"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ಕರೆ ಇತಿಹಾಸವನ್ನು ಅತಿಥಿ ಬಳಕೆದಾರರ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ಫೋನ್ ಕರೆಗಳು ಮತ್ತು ಎಸ್ಎಂಎಸ್ ಆನ್ ಮಾಡಿ"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ಈ ಬಳಕೆದಾರರನ್ನು ನಿರ್ವಾಹಕರನ್ನಾಗಿ ಮಾಡಿ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ನೆಟ್ವರ್ಕ್, ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಸ್ಥಿತಿ, ಸೇವಾ ಸ್ಥಿತಿ, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ, ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಪ್ರಕಾರ, ರೋಮಿಂಗ್, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"ಕ್ರಮ ಸಂಖ್ಯೆ, ಹಾರ್ಡ್ವೇರ್ ಆವೃತ್ತಿ"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ಬ್ಯಾಟರಿ ಮಾಹಿತಿ, ಉತ್ಪಾದನಾ ದಿನಾಂಕ, ಸೈಕಲ್ ಎಣಿಕೆ, ಮೊದಲ ಬಳಕೆ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android ಭದ್ರತೆ ಪ್ಯಾಚ್ ಮಟ್ಟ, ಬೇಸ್ಬ್ಯಾಂಡ್ ಆವೃತ್ತಿ, ಕೆರ್ನಲ್ ಆವೃತ್ತಿ"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ಥೀಮ್, ಲೈಟ್, ಗಾಢ, ಮೋಡ್, ಬೆಳಕಿನ ಸೂಕ್ಷ್ಮತೆ, ಫೋಟೊಫೋಬಿಯಾ, ಗಾಢವಾಗಿಸಿ, ಗಾಢವಾಗಿಸಿ, ಡಾರ್ಕ್ ಮೋಡ್, ಮೈಗ್ರೇನ್"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ಗಾಢವಾದ ಥೀಮ್"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ಸಾಧನದ ಡೀಫಾಲ್ಟ್"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ಓವರ್ಲೇ ಅನ್ನು ಅನ್ವಯಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
<string name="special_access" msgid="1767980727423395147">"ವಿಶೇಷ ಆ್ಯಪ್ ಆ್ಯಕ್ಸೆಸ್"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಅನಿರ್ಬಂಧಿತ ಡೇಟಾ ಬಳಸಬಹುದು</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಅನಿರ್ಬಂಧಿತ ಡೇಟಾ ಬಳಸಬಹುದು</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ಇನ್ನಷ್ಟು ನೋಡಿ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ದೀರ್ಘ ಹಿನ್ನೆಲೆ ಕಾರ್ಯಗಳು"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ದೀರ್ಘಕಾಲ ರನ್ ಆಗುವ ಹಿನ್ನೆಲೆ ಕಾರ್ಯಗಳನ್ನು ಅನುಮತಿಸಿ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ಆ್ಯಪ್ ಹೊಂದಾಣಿಕೆ ಬದಲಾವಣೆಗಳನ್ನು ಟಾಗಲ್ ಮಾಡಿ"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ಬದಲಾವಣೆಗಳ ಡೀಫಾಲ್ಟ್"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾದ ಬದಲಾವಣೆಗಳ ಡೀಫಾಲ್ಟ್"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ಯಾವುದೇ ಆ್ಯಪ್ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ಆ್ಯಪ್ ಹೊಂದಾಣಿಕೆ ಬದಲಾವಣೆಗಳನ್ನು, ಡೀಬಗ್ ಮಾಡಬಹುದಾದ ಆ್ಯಪ್ಗಳಲ್ಲಿ ಮಾತ್ರ ಮಾರ್ಪಡಿಸಬಹುದು. ಡೀಬಗ್ ಮಾಡಬಹುದಾದ ಆ್ಯಪ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ಇನ್ನೊಂದು ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ಖಾತೆ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ಮಕ್ಕಳ ಪ್ರಕ್ರಿಯೆಯ ನಿರ್ಬಂಧಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ಮಕ್ಕಳು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿದ ಆ್ಯಪ್ನ ಸಿಸ್ಟಂ ಮಾಹಿತಿಯ ಮೂಲದ ಬಳಕೆಯ ಮೇಲಿನ ನಿರ್ಬಂಧಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"ಟಿಪ್ಪಣಿಗಳ ಪಾತ್ರವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಒತ್ತಾಯಿಸಿ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"ಟಿಪ್ಪಣಿಗಳ ಪಾತ್ರವನ್ನು ಬಳಸಿಕೊಂಡು ಸಿಸ್ಟಮ್ನಲ್ಲಿ ಟಿಪ್ಪಣಿ-ತೆಗೆದುಕೊಳ್ಳುವ ಸಂಯೋಜನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಟಿಪ್ಪಣಿಗಳ ಪಾತ್ರವನ್ನು ಈಗಾಗಲೇ ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ, ಏನನ್ನೂ ಮಾಡುವುದಿಲ್ಲ."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"ಟಿಪ್ಪಣಿಗಳ ರೋಲ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಟಿಪ್ಪಣಿ-ತೆಗೆದುಕೊಳ್ಳುವ ಸಿಸ್ಟಮ್ ಸಂಯೋಜನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಟಿಪ್ಪಣಿಗಳ ರೋಲ್ ಅನ್ನು ಈಗಾಗಲೇ ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ, ಏನನ್ನೂ ಮಾಡುವುದಿಲ್ಲ. ರೀಬೂಟ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ಪ್ರಸಾರ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ಅನ್ನು ಪ್ರಸಾರ ಮಾಡಿ"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ನಿಮ್ಮ ಹತ್ತಿರ ಪ್ಲೇ ಆಗುತ್ತಿರುವ ಪ್ರಸಾರಗಳನ್ನು ಆಲಿಸಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index e7a0c31..c579601 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"블루투스가 사용 설정됨"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"전체 보기"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"스타일러스"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"기본 메모 앱"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"테일 버튼 누르기"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g>(직장 프로필)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"텍스트 입력란에 작성"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"스타일러스 버튼 누름 모두 무시"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"스타일러스"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"온도"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"일주일 중 첫날"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"숫자 환경설정"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"앱 기본값 사용"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"기본값 사용"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"섭씨(°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"화씨(°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"일요일"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"커널 버전"</string>
<string name="build_number" msgid="9009733242117579826">"빌드 번호"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play 시스템 업데이트"</string>
+ <string name="battery_info" msgid="7873528123969546728">"배터리 정보"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"표시할 수 없음"</string>
<string name="storage_settings" msgid="7472188817781592677">"저장용량"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"저장용량 및 캐시"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"블루투스 주소"</string>
<string name="status_serial_number" msgid="9060064164331466789">"일련번호"</string>
<string name="status_up_time" msgid="1274778533719495438">"가동 시간"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"제조일자"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"최초 사용일"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"사이클 수"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"사용 불가"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"계산 중..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"이름 바꾸기"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"마운트"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Wi-Fi 및 블루투스 설정이 초기화됩니다. 이 작업은 실행취소할 수 없습니다."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"초기화"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"블루투스 및 Wi-Fi가 초기화됨"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"삭제"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"e-SIM 삭제"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"SIM을 삭제해도 모바일 서비스 요금제는 취소되지 않습니다. 교체 SIM을 다운로드하려면 이동통신사에 문의하세요."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"설정 초기화"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"또한 패턴을 사용하여 이 기기를 잠금 해제하세요."</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"또한 PIN을 사용하여 이 기기를 잠금 해제하세요."</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"또한 비밀번호를 사용하여 이 기기를 잠금 해제하세요."</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"패턴 확인"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN 확인"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"비밀번호 확인"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"계속하려면 기기 패턴을 사용하세요."</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"계속하려면 기기 PIN을 입력하세요."</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"계속하려면 기기 비밀번호를 입력하세요."</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"잘못된 PIN입니다."</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"잘못된 비밀번호입니다."</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"잘못된 패턴입니다."</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"앱별로 보기"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"시스템별로 보기"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"발송 전 품질 검사로 인해 처음 사용 시 사이클 수가 0이 아닐 수 있습니다."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"프로세스 통계"</string>
<string name="process_stats_summary" msgid="522842188571764699">"프로세스 실행에 관한 통계"</string>
<string name="app_memory_use" msgid="7559666138324410666">"메모리 사용량"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"게스트 활동을 삭제하시겠습니까?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"현재 게스트 세션의 앱과 데이터가 지금 삭제되고 이후 모든 게스트 활동은 게스트 모드를 종료할 때마다 삭제됩니다."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"삭제, 게스트, 활동, 제거, 데이터, 방문자, 지우기"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"게스트가 전화를 사용하도록 허용"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"게스트가 전화를 걸 수 있도록 허용"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"통화 기록이 이 게스트 사용자와 공유됩니다."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"통화 및 SMS 기능 사용"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"이 사용자에게 관리자 권한 부여"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"네트워크, 모바일 네트워크 상태, 서비스 상태, 신호 강도, 모바일 네트워크 유형, 로밍, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"일련번호, 하드웨어 버전"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"배터리 정보, 제조일자, 사이클 수, 최초 사용"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android 보안 패치 수준, 베이스밴드 버전, 커널 버전"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"테마, 밝기, 어두운 모드, 광과민성, 광선공포증, 밝기 낮추기, 어둡게, 어두운 모드, 편두통"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"어두운 테마"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"기기 기본값"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"오버레이 적용 실패"</string>
<string name="special_access" msgid="1767980727423395147">"특수 앱 액세스"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">앱 <xliff:g id="COUNT">%d</xliff:g>개에서 무제한 데이터 사용 가능</item>
- <item quantity="one">앱 1개에서 무제한 데이터 사용 가능</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"더보기"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"오래 걸리는 백그라운드 작업"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"오래 걸리는 백그라운드 작업 허용"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"앱 호환성 변경사항 전환"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"기본적으로 사용 설정된 앱의 변경사항"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"기본적으로 사용 중지된 앱의 변경사항"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"사용 가능한 앱 없음"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"디버그 가능한 앱의 경우에만 앱 호환성 변경사항을 수정할 수 있습니다. 디버그 가능한 앱을 설치하고 다시 시도해 보세요."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"다른 설정을 변경해야 함"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"계정"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"하위 프로세스 제한 사용 중지"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"앱 하위 프로세스의 시스템 리소스 사용에 대한 제한을 사용 중지하세요."</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"메모 역할 강제 사용 설정"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"메모 역할을 통해 메모 작성 시스템 통합을 사용 설정합니다. 메모 역할이 이미 사용 설정되어 있다면 아무 작업도 하지 않습니다."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"메모 역할을 통해 메모 작성 시스템 통합을 사용 설정합니다. 메모 역할이 이미 사용 설정되어 있다면 아무 작업도 하지 않습니다. 재부팅이 필요합니다."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"방송"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> 방송"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"근처에서 재생 중인 방송을 듣습니다."</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 3ed5319..528eb80 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth күйгүзүлдү"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Баарын көрүү"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Стилус"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Кыска жазуулар үчүн демейки колдонмо"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Стилус баскычын басуу"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Жумуш профили)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Текст жазылчу жерлерге кол менен жазуу"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Стилус баскычындагы басууларды этибарга албоо"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Стилус"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Аптанын биринчи күнү"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Сан параметрлери"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Колдонмонун демейки параметрлерин колдонуу"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Демейкини колдонуу"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Цельсий (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренгейт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Жекшемби"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Өзөктүн версиясы"</string>
<string name="build_number" msgid="9009733242117579826">"Курама номери"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play тутуму качан жаңырган"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Батарея жөнүндө маалымат"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Жеткиликтүү эмес"</string>
<string name="storage_settings" msgid="7472188817781592677">"Сактагыч"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Сактагыч жана кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth дареги"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Сериялык номери"</string>
<string name="status_up_time" msgid="1274778533719495438">"Түзмөк күйгүзүлгөндөн берки убакыт"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Өндүрүлгөн күнү"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Биринчи жолу колдонулган күнү"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Циклдердин саны"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Жеткиликсиз"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Эсептелүүдө…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Аталышын өзгөртүү"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Кошуу"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ушуну менен бардык Wi‑Fi жана Bluetooth параметрлери баштапкы абалга келтирилет. Бул аракетти артка кайтара албайсыз."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Баштапкы абалга келтирүү"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth жана Wi‑Fi баштапкы абалга келтирилди"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Тазалоо"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM-карталарын өчүрүү"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Тарифтик пландарыңыз өзгөрбөйт. Башка SIM-карталарды жүктөп алуу үчүн байланыш операторуна кайрылыңыз."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Параметрлерди кайра коюу"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Кулпусун графикалык ачкыч менен да ачуу"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Кулпусун PIN код менен да ачуу"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Кулпусун сырсөз менен да ачуу"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Графикалык ачкычты ырастоо"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN кодду ырастоо"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Сырсөздү ырастоо"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Улантуу үчүн түзмөгүңүздүн графикалык ачкычын колдонуңуз"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Улантуу үчүн түзмөгүңүздүн PIN кодун киргизиңиз"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Улантуу үчүн түзмөгүңүздүн сырсөзүн киргизиңиз"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN код туура эмес"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Сырсөз туура эмес"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Үлгү туура эмес"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Колдонмолор боюнча иргөө"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Системалар боюнча иргөө"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Жөнөтүүдөн мурун талап кылынган сапат боюнча текшерүүлөрдөн улам батареянын циклдеринин саны биринчи колдонууда нөлгө барабар болбошу мүмкүн"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Процесстин статистикасы"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Иштеп жаткан процесстердин өзгөчө статистикасы"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Эс системанын пайдаланылышы"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Коноктун аракеттери өчүрүлсүнбү?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Бул конок сеансындагы бардык колдонмолор жана башка нерселер өчүрүлөт жана кийин конок режиминен чыккан сайын бардык аракеттер тазаланып турат."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"жок кылуу, конок, аракеттер, өчүрүү, маалымат, конок, тазалоо"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Конокко телефондон чалууга уруксат берүү"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Конокко телефон чалууга уруксат берүү"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Конок режиминдеги колдонуучу чалуулар таржымалын көрө алат"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Чалуулар менен SMS иштетүү"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Бул колдонуучуну админ кылуу"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"тармак, мобилдик тармактын абалы, кызматтын абалы, сигналдын күчү, мобилдик тармактын түрү, роуминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"сериялык номер, аппараттык камсыздоонун версиясы"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"батарея жөнүндө маалымат, өндүрүлгөн күнү, циклдердин саны, биринчи жолу колдонулган күнү"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android коопсуздугун жаңыртуу деңгээли, байланыш модулунун версиясы, өзөктүн версиясы"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, жарык, караңгы, режим, жарыкты сезгичтик, фотофобия, караңгылатуу, караңгы тема, баш ооруу"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"караңгы тема"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Түзмөктүн демейки параметри"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Үстүнө коюлган жок"</string>
<string name="special_access" msgid="1767980727423395147">"Атайын мүмкүнчүлүк"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> колдонмо маалыматтарды чектөөсүз өткөрө алат</item>
- <item quantity="one">1 колдонмо маалыматтарды чектөөсүз өткөрө алат</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Дагы көрүү"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Фондогу узак тапшырмалар"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Узак тапшырмаларды фондо аткарууга уруксат берүү"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Колдонмонун шайкештигине киргизилген өзртүүлөрдү өчүрүү/күйгүзүү"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Демейки күйгүзүлгөн өзгөртүүлөр"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Демейки өчүрүлгөн өзгөртүүлөр"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Колдонмолор жок"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Шайкештик параметрлерин мүчүлүштүктөрүн оңдоого мүмкүн болгон колдонмолор үчүн гана өзгөртүүгө болот. Ушундай колдонмо орнотуп туруп, кайталап көрүңүз."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Башка жөндөөгө көз каранды"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Аккаунт"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Колдонмонун экинчи нускасындагы чектөөлөрдү өчүрүү"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Колдонмонун экинчи нускасын колдонуу үчүн системанын ресурстарындагы чектөөлөрдү өчүрүңүз"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Эскертмелердеги ролду мажбурлап иштетүү"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Эскертмелердеги роль аркылуу интеграцияланган эскертмелерди алууну иштетиңиз. Эгер Эскертмелердеги роль мурунтан эле иштетилген болсо, эч нерсе кылуунун кереги жок."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Эскертмелердин ролу аркылуу интеграцияланган эскертмелерди алууну иштетиңиз. Эгер Эскертмелердин ролу мурунтан эле иштетилген болсо, эч нерсе кылуунун кереги жок. Өчүрүп-күйгүзүү талап кылынат."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Кабарлоо"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> колдонмосунда кабарлоо"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Жакын жерде угузулган кабарларды угуңуз"</string>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 858d579..9d0ca48 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ເປີດ Bluetooth ແລ້ວ"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ເບິ່ງທັງໝົດ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ປາກກາ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ແອັບຈົດບັນທຶກເລີ່ມຕົ້ນ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ມີການກົດປຸ່ມຄ້າງ"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ຂຽນໃນຊ່ອງຂໍ້ຄວາມ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ບໍ່ຕ້ອງສົນໃຈການກົດປຸ່ມປາກກາທັງໝົດ"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ປາກກາ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ອຸນຫະພູມ"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ມື້ທຳອິດຂອງອາທິດ"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ການຕັ້ງຄ່າຕົວເລກ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ໃຊ້ຄ່າເລີ່ມຕົ້ນຂອງແອັບ"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ໃຊ້ຄ່າເລີ່ມຕົ້ນ"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ເຊວຊຽສ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ຟາເຣນຮາຍ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ວັນອາທິດ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"ເວີຊັນຂອງເຄີນເນວ"</string>
<string name="build_number" msgid="9009733242117579826">"ໝາຍເລກ Build"</string>
<string name="module_version" msgid="1787518340082046658">"ການອັບເດດລະບົບ Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ຂໍ້ມູນແບັດເຕີຣີ"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ຍັງບໍ່ສາມາດໃຊ້ໄດ້"</string>
<string name="storage_settings" msgid="7472188817781592677">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ບ່ອນຈັດເກັບຂໍ້ມູນ ແລະ ແຄສ"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ທີ່ຢູ່ Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"ໝາຍເລກຊີຣຽວ"</string>
<string name="status_up_time" msgid="1274778533719495438">"ເວລາເປີດນຳໃຊ້"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"ວັນທີທີ່ຜະລິດ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ວັນທີທີ່ນຳໃຊ້ເທື່ອທຳອິດ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ຈຳນວນຮອບ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ບໍ່ພ້ອມໃຫ້ນຳໃຊ້"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ກຳລັງຄຳນວນ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"ປ່ຽນຊື່"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ຕໍ່ໃສ່"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ການດຳເນີນການນີ້ຈະຣີເຊັດການຕັ້ງຄ່າ Wi-Fi ແລະ Bluetooth ທັງໝົດ. ໂດຍທ່ານຈະບໍ່ສາມາດຍົກເລີກຄຳສັ່ງນີ້ໄດ້."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ຣີເຊັດ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ຣີເຊັດ Bluetooth ແລະ Wi-Fi ແລ້ວ"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ລຶບ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ລຶບ eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ນີ້ຈະບໍ່ເປັນການຍົກເລີກແພັກເກດບໍລິການມືຖືໃດໆ. ເພື່ອດາວໂຫຼດຊິມທົດແທນ, ໃຫ້ຕິດຕໍ່ຫາຜູ້ໃຫ້ບໍລິການຂອງທ່ານ."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ຣີເຊັດການຕັ້ງຄ່າ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ຍັງໃຊ້ຮູບແບບເພື່ອປົດລັອກອຸປະກອນນີ້ນຳ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ຍັງໃຊ້ PIN ເພື່ອປົດລັອກອຸປະກອນນີ້ນຳ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ຍັງໃຊ້ລະຫັດຜ່ານເພື່ອປົດລັອກອຸປະກອນນີ້ນຳ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ຢັ້ງຢືນຮູບແບບ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ຢັ້ງຢືນ PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ຢັ້ງຢືນລະຫັດຜ່ານ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ໃຊ້ຮູບແບບຂອງອຸປະກອນຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ລະບຸ PIN ຂອງອຸປະກອນຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ລະບຸລະຫັດຜ່ານຂອງອຸປະກອນຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN ບໍ່ຖືກຕ້ອງ"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ຮູບແບບປົດລັອກບໍ່ຖືກຕ້ອງ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ເບິ່ງຕາມແອັບ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ເບິ່ງຕາມລະບົບ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ເນື່ອງຈາກມີການກວດສອບຄຸນນະພາບກ່ອນຈັດສົ່ງ, ຈຳນວນຮອບຈຶ່ງອາດບໍ່ເປັນສູນເມື່ອນຳໃຊ້ເທື່ອທຳອິດ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ສະຖິຕິໂປຣເຊສ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ສະຖານະ Geeky ກ່ຽວກັບໂປຣເຊສທີ່ກຳລັງເຮັດວຽກຢູ່"</string>
<string name="app_memory_use" msgid="7559666138324410666">"ໜ່ວຍຄວາມຈຳທີ່ໃຊ້"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ລຶບການເຄື່ອນໄຫວແຂກບໍ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ແອັບ ແລະ ຂໍ້ມູນຈາກເຊດຊັນແຂກຈະຖືກລຶບອອກຕອນນີ້ ແລະ ການເຄື່ອນໄຫວແຂກໃນອະນາຄົດທັງໝົດຈະຖືກລຶບອອກໃນແຕ່ລະເທື່ອທີ່ທ່ານອອກຈາກໂໝດແຂກ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ລຶບ, ຜູ້ຢ້ຽມຢາມ, ການເຄື່ອນໄຫວ, ລຶບອອກ, ຂໍ້ມູນ, ແຂກຜູ້ຢ້ຽມຢາມ, ລຶບ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ອະນຸຍາດໃຫ້ແຂກໃຊ້ໂທລະສັບໄດ້"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ອະນຸຍາດໃຫ້ແຂກໂທອອກໄດ້"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ປະຫວັດການໂທຈະຖືກແບ່ງປັນໃຫ້ກັບຜູ້ໃຊ້ແຂກ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ເປີດໂທລະສັບ ແລະ SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ຕັ້ງໃຫ້ຜູ້ໃຊ້ຄົນນີ້ເປັນຜູ້ເບິ່ງແຍງລະບົບ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ເຄືອຂ່າຍ, ສະຖານະເຄືອຂ່າຍມືຖື, ສະຖານະບໍລິການ, ຄວາມແຮງຂອງສັນຍານ, ປະເພດເຄືອຂ່າຍມືຖື, ໂຣມມິງ, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"ໝາຍເລກຊີຣຽວ, ເວີຊັນຮາດແວ"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ຂໍ້ມູນແບັດເຕີຣີ, ວັນທີທີ່ຜະລິດ, ຈຳນວນຮອບ, ການນຳໃຊ້ເທື່ອທຳອິດ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android security patch level, ເວີຊັນ baseband, ເວີຊັນ kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ຮູບແບບສີສັນ, ແຈ້ງ, ໂໝດມືດ, ໄວແສງ, ຢ້ານແສງ, ເຮັດໃຫ້ມືດລົງ, ມືດລົງ, ໂໝດມືດ, ໄມເກຣນ"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ສີສັນໜ້າຕາແບບມືດ"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ຄ່າເລີ່ມຕົ້ນອຸປະກອນ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ນຳໃຊ້ຮູບຊ້ອນບໍ່ສຳເລັດ"</string>
<string name="special_access" msgid="1767980727423395147">"ສິດການເຂົ້າເຖິງແອັບພິເສດ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ແອັບສາມາດໃຊ້ຂໍ້ມູນທີ່ບໍ່ຖືກຈຳກັດໄດ້</item>
- <item quantity="one">1 ແອັບສາມາດໃຊ້ຂໍ້ມູນທີ່ບໍ່ຖືກຈຳກັດໄດ້</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ເບິ່ງເພີ່ມເຕີມ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ໜ້າວຽກໃນພື້ນຫຼັງທີ່ໃຊ້ເວລາດົນ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ອະນຸຍາດໜ້າວຽກທີ່ເອີ້ນໃຊ້ໃນພື້ນຫຼັງເຊິ່ງໃຊ້ເວລາດົນ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ສະຫຼັບການປ່ຽນແປງຄວາມເຂົ້າກັນໄດ້ຂອງແອັບ"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ການປ່ຽນແປງທີ່ເປີດການນຳໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ການປ່ຽນແປງທີ່ປິດການນຳໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ບໍ່ມີແອັບທີ່ໃຊ້ໄດ້"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ສາມາດແກ້ໄຂການປ່ຽນແປງຄວາມເຂົ້າກັນໄດ້ຂອງແອັບສຳລັບແອັບທີ່ດີບັກໄດ້ເທົ່ານັ້ນ. ກະລຸນາຕິດຕັ້ງແອັບທີ່ສາມາດດີບັກໄດ້ແລ້ວລອງໃໝ່."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ຂຶ້ນກັບການຕັ້ງຄ່າອື່ນ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ບັນຊີ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ປິດການຈຳກັດການປະມວນຜົນຂໍ້ມູນຍ່ອຍ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ປິດການຈຳກັດການໃຊ້ຊັບພະຍາກອນລະບົບໃນປະມວນຜົນຍ່ອຍຂອງແອັບ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"ບັງຄັບເປີດໃຊ້ບົດບາດບັນທຶກ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"ເປີດໃຊ້ການເຊື່ອມໂຍງລະບົບການຈົດບັນທຶກຜ່ານບົດບາດບັນທຶກ. ຫາກບົດບາດບັນທຶກຖືກເປີດໃຊ້ໄວ້ຢູ່ແລ້ວ, ກໍບໍ່ຕ້ອງດຳເນີນການໃດໆ."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"ເປີດໃຊ້ການເຊື່ອມໂຍງລະບົບການຈົດບັນທຶກຜ່ານບົດບາດບັນທຶກ. ຫາກບົດບາດບັນທຶກຖືກເປີດໃຊ້ໄວ້ຢູ່ແລ້ວ, ກໍບໍ່ຕ້ອງດຳເນີນການໃດໆ. ຕ້ອງມີການປິດເປີດໃໝ່."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ອອກອາກາດ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"ອອກອາກາດ <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ຟັງການອອກອາກາດທີ່ກຳລັງຫຼິ້ນໃກ້ທ່ານ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6ff5664..5bdb168 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"„Bluetooth“ įjungtas"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Žr. viską"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Rašiklis"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Numatytoji užrašų programa"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Rašiklio mygtuko paspaudimas"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (darbo profilis)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Rašymas teksto laukuose"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Visų rašiklio mygtuko paspaudimų nepaisymas"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Rašiklis"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatūra"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Pirma savaitės diena"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Skaičių nuostatos"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Naudoti numatytąją programą"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Naudoti numatytąjį"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsijaus laipsnis (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenheito laipsnis (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Sekmadienis"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"„Kernel“ versija"</string>
<string name="build_number" msgid="9009733242117579826">"Versijos numeris"</string>
<string name="module_version" msgid="1787518340082046658">"„Google Play“ sistemos naujinys"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Akumuliatoriaus informacija"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Negalima"</string>
<string name="storage_settings" msgid="7472188817781592677">"Saugykla"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Saugykla ir talpykla"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"„Bluetooth“ adresas"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serijos numeris"</string>
<string name="status_up_time" msgid="1274778533719495438">"Veikimo laikas"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Pagaminimo data"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Pirmo naudojimo data"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Ciklų skaičius"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nepasiekiama"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Skaičiuojama..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Pervardyti"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Įdėti"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Bus iš naujo nustatyti „Wi‑Fi“ ir „Bluetooth“ nustatymai. Negalite anuliuoti šio veiksmo."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Nustatyti iš naujo"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"„Bluetooth“ ir „Wi‑Fi“ ryšiai nustatyti iš naujo"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Ištrinti"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Ištrinti eSIM korteles"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Šiuo veiksmu neatšauksite jokio mobiliųjų paslaugų plano. Jei norite atsisiųsti pakaitinių SIM kortelių, susisiekite su operatoriumi."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Nustatyti iš naujo"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Įrenginį atrakinkite ir atrakinimo piešiniu"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Įrenginį atrakinkite ir PIN kodu"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Įrenginį atrakinkite ir slaptažodžiu"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Patvirtinkite atrakinimo piešinį"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Patvirtinkite PIN kodą"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Patvirtinkite slaptažodį"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Jei norite tęsti, naudokite įrenginio atrakinimo piešinį"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Jei norite tęsti, įveskite įrenginio PIN kodą"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Jei norite tęsti, įveskite įrenginio slaptažodį"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Netinkamas PIN kodas"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Netinkamas slaptažodis"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Netinkamas piešinys"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Peržiūrėti pagal programas"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Peržiūrėti pagal sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Dėl kokybės patikros prieš siunčiant ciklų skaičius gali būti ne nulis pirmą kartą naudojant"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Procesų statistika"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Entuziastų pateikta statistika apie vykstančius procesus"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Naudojama atmintis"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ištrinti svečio veiklą?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Šios svečio sesijos programos ir duomenys bus ištrinti dabar, o visa būsima svečio veikla bus ištrinta kiekvieną kartą, kai išeisite iš svečio režimo"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ištrinti, svečias, veikla, pašalinti, duomenys, lankytojas, trynimas"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Leidimas svečiui naudoti telefoną"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Leidimas svečiui skambinti telefonu"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Skambučių istorija bus bendrinama su naudotoju svečiu"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Įjungti telefono skambučius ir SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Nustatyti šį naudotoją kaip administratorių"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"tinklas, mobiliojo ryšio tinklo būsena, paslaugos būsena, signalo stiprumas, mobiliojo ryšio tinklo tipas, tarptinklinis ryšys, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serijos numeris, aparatinės įrangos versija"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"akumuliatoriaus informacija, pagaminimo data, ciklų skaičius, pirmas naudojimas"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"„Android“ saugos pataisos lygis, nemoduliuotų signalų įrangos versija, branduolio versija"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, šviesus, tamsus, režimas, jautrumas šviesai, fotofobija, padaryti tamsesnį, patamsinti, tamsus režimas, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"Tamsi tema"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Numatytasis įrenginio nustatymas"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Nepavyko pritaikyti perdangos"</string>
<string name="special_access" msgid="1767980727423395147">"Spec. prieiga prie prog."</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> programa gali naudoti neribotus duomenis</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> programos gali naudoti neribotus duomenis</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> programos gali naudoti neribotus duomenis</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> programų gali naudoti neribotus duomenis</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Žr. daugiau"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Ilgai trunkančios užduotys fone"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Leisti ilgai trunkančias užduotis fone"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Perjungti programos suderinamumo pakeitimus"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Numatytieji įgalinti pakeitimai"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Numatytieji išjungti pakeitimai"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Programų nėra"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Galima keisti tik derinamų programų suderinamumą. Įdiekite derinamą programą ir bandykite dar kartą."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Priklauso nuo kito nustatymo"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Paskyra"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Antrinių procesų apribojimų išjungimas"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Išjungti programos antrinių procesų sistemos išteklių naudojimo apribojimus"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Priverstinis pastabų vaidmens įgalinimas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Įgalinkite pastabų rašymo sistemos integravimą priskirdami pastabų vaidmenį. Jei pastabų vaidmuo jau įgalintas, nereikia atlikti jokių veiksmų."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Įgalinkite pastabų rašymo sistemos integravimą priskirdami pastabų vaidmenį. Jei pastabų vaidmuo jau įgalintas, nereikia atlikti jokių veiksmų. Reikia paleisti iš naujo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transliacija"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transliuoti „<xliff:g id="CURRENTAPP">%1$s</xliff:g>“"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Klausykite netoliese leidžiamų transliacijų"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a7105a7..6a576aa 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth savienojums ir ieslēgts"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Skatīt visas"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Skārienekrāna pildspalva"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Noklusējuma piezīmju lietotne"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Skārienekrāna pildspalvas pogas nospiešana"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (darba profils)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Rakstīšana teksta laukos"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Vienmēr ignorēt skārienekrāna pildspalvas pogu nospiešanu"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Skārienekrāna pildspalva"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatūra"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Pirmā nedēļas diena"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Skaitļu preferences"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Izmantot lietotnes noklusējuma iestatījumus"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Izmantot noklusējumu"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsija skala (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fārenheita skala (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Svētdiena"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel versija"</string>
<string name="build_number" msgid="9009733242117579826">"Būvējuma numurs"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play sistēmas atjauninājums"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informācija par akumulatoru"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nav pieejams"</string>
<string name="storage_settings" msgid="7472188817781592677">"Krātuve"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Krātuve un kešatmiņa"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth adrese"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Sērijas numurs"</string>
<string name="status_up_time" msgid="1274778533719495438">"Darbības laiks"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Izgatavošanas datums"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Pirmās lietošanas reizes datums"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Ciklu skaits"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nav pieejams"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Notiek aprēķināšana..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Pārdēvēt"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Pievienot"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tādējādi tiks atiestatīti visi Wi‑Fi un Bluetooth iestatījumi. Šo darbību nevar atsaukt."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Atiestatīt"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth un Wi‑Fi iestatījumi ir atiestatīti"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Dzēst"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Dzēst eSIM kartes"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ar šo darbību netiks anulēti mobilo sakaru pakalpojumu plāni. Lai lejupielādētu nomaiņas SIM kartes, sazinieties ar mobilo sakaru operatoru."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Atiestatīt iestatījumus"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Atbloķēt šo ierīci arī ar kombināciju"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Atbloķēt šo ierīci arī ar PIN"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Atbloķēt šo ierīci arī ar paroli"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verificējiet kombināciju"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verificējiet PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verificējiet paroli"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Lai turpinātu, izmantojiet ierīces kombināciju."</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Lai turpinātu, ievadiet ierīces PIN."</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Lai turpinātu, ievadiet ierīces paroli."</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Nepareizs PIN kods"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Nepareiza parole"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Nepareiza kombinācija"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Skatīt pēc lietotnes"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Skatīt pēc sistēmas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Pirmajā lietošanas reizē ciklu skaits var nebūt nulle, jo pirms piegādes tiek veiktas kvalitātes pārbaudes"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Procesu statistika"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistika par darbības procesiem"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Atmiņas lietojums"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vai dzēst viesa darbības?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Šīs viesa sesijas darbības un dati tagad tiks dzēsti, un turpmākās viesu darbības tiks dzēstas katru reizi, kad iziesiet no viesa režīma."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"dzēst, viesis, darbība, noņemt, dati, apmeklētājs, izdzēst"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Atļauja viesim izmantot tālruni"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Atļaut viesim veikt tālruņa zvanus"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Ar viesa lietotāju tiks kopīgota zvanu vēsture."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ieslēgt tālruņa zvanus un īsziņas"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Iestatīt šo lietotāju kā administratoru"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"tīkls, mobilā tīkla statuss, pakalpojuma statuss, signāla stiprums, mobilā tīkla veids, viesabonēšana, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"sērijas numurs, aparatūras versija"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informācija par akumulatoru, izgatavošanas datums, ciklu skaits, pirmās lietošanas reizes datums"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android drošības ielāpa līmenis, pamatjoslas versija, kodola versija"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"motīvs, gaišs, tumšs, režīms, jutīgums pret gaismu, fotofobija, padarīt tumšāku, aptumšot, tumšais režīms, migrēna"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tumšs motīvs"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Ierīces noklusējuma iestatījums"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Neizdevās lietot pārklājumu"</string>
<string name="special_access" msgid="1767980727423395147">"Īpaša lietotņu piekļuve"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> lietotnēs var izmantot neierobežotu datu apjomu</item>
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> lietotnē var izmantot neierobežotu datu apjomu</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> lietotnēs var izmantot neierobežotu datu apjomu</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Skatīt vairāk"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Ilgi uzdevumi fonā"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Atļaut ilgus uzdevumus fonā"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Pārslēdziet lietotņu saderības iestatījumu izmaiņas"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Pēc noklusējuma iespējotās izmaiņas"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Pēc noklusējuma atspējotās izmaiņas"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nav lietotņu"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Lietotņu saderības izmaiņas var pārveidot tikai atkļūdojamām lietotnēm. Instalējiet atkļūdojamu lietotni un mēģiniet vēlreiz."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Atkarīgs no cita iestatījuma"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konts"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Atspējot pakārtoto procesu ierobežojumus"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Atspējot ierobežojumus, kas attiecas uz sistēmas resursu izmantošanu lietotņu pakārtotajiem procesiem"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Iespējot piezīmju funkcionalitāti piespiedu kārtā"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Iespējot piezīmju veikšanas sistēmas integrāciju, izmantojot piezīmju funkcionalitāti. Ja piezīmju funkcionalitāte jau ir iespējota, netiek veiktas nekādas darbības."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Iespējot piezīmju veikšanas sistēmas integrāciju, izmantojot piezīmju funkcionalitāti. Ja piezīmju funkcionalitāte jau ir iespējota, netiek veiktas nekādas darbības. Nepieciešama atkārtota palaišana."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Apraide"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Lietotnes <xliff:g id="CURRENTAPP">%1$s</xliff:g> apraide"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Klausieties tuvumā atskaņotas apraides."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index b126a85..f5690d1 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth е вклучен"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Прикажи ги сите"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Пенкало"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Стандардна апликација за белешки"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Притискање на копчето со пенкало"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (работен профил)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Пишувајте во текстуалните полиња"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Игнорирајте ги сите притискања на копчето на пенкалото"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Пенкало"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Прв ден од седмицата"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Поставки за бројки"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Користи ги стандардните поставки на апликацијата"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Користи ја стандардната поставка"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Целзиус (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренхајт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Недела"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Верзија на кернел"</string>
<string name="build_number" msgid="9009733242117579826">"Број на верзија"</string>
<string name="module_version" msgid="1787518340082046658">"Системско ажурирање од Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Информации за батеријата"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Не е достапна"</string>
<string name="storage_settings" msgid="7472188817781592677">"Капацитет"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Капацитет и кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Адреса на Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Сериски број"</string>
<string name="status_up_time" msgid="1274778533719495438">"Време од последно рестартирање"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Датум на производство"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Датум на прво користење"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Број на циклуси"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Недостапно"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Пресметување..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Преименувај"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Монтирај"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ова ќе ги ресетира сите поставки за Wi‑Fi и Bluetooth. Ова дејство не може да се врати."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Ресетирај"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth и Wi‑Fi се ресетирани"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Избриши"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Избриши ги eSIM-картичките"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Ова нема да ги откаже пакетите за мобилни услуги. За да преземете SIM-картички за замена, контактирајте со операторот."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Ресетирај поставки"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Користи ја шемата и за отклуч. на уредов"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Користи го PIN-кодот и за отклуч. на уредов"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Користи ја лозинката и за отклуч. на уредов"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Потврдете ја шемата"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Потврдете го PIN-кодот"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Потврдете ја лозинката"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Внесете ја шемата на уредот за да продолжите"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Внесете го PIN-кодот на уредот за да продолжите"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Внесете ја лозинката на уредот за да продолжите"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Погрешен PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Погрешна лозинка"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Погрешна шема"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Прикажи по апликации"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Прикажи по системи"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Поради контроли на квалитетот пред испораката, бројот на циклуси при првото користење може да не биде нула"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статистика на процес"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Паметна статистика за процеси кои се извршуваат"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Употреба на меморија"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Да се избрише активноста на гостин?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Апликациите и податоците од оваа гостинска сесија ќе се избришат сега, а целата идна активност на гостите ќе се брише секој пат кога ќе излезете од режимот на гостин"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"бриши, гостин, активност, отстрани, податоци, посетител, избриши"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Дозволете гостин да го користи телефонот"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Доз. му на гост. да воспост. тел. повици"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Историјата на повици ќе се сподели со гостинскиот корисник"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Вклучи телефонски повици и SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Постави го корисников како администратор"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"мрежа, состојба на мобилна мрежа, состојба на услуга, јачина на сигнал, тип мобилна мрежа, роаминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"сериски број, верзија на хардвер"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"информации за батеријата, датум на производство, број на циклуси, прво користење"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"ниво на безбедносна лепенка на Android, верзија на радиомодул, верзија на кернел"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, светла, темна, режим, чувствителност на светлина, фотофобија, затемнување, потемно, темен режим, мигрена"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"темна тема"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Стандардни поставки за уредот"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Не успеа да се примени прекривка"</string>
<string name="special_access" msgid="1767980727423395147">"Посебен пристап"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> апликација може да користи неограничен мобилен интернет</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апликации може да користат неограничен мобилен интернет</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Видете повеќе"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Долги задачи во заднина"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Дозволи извршување долги задачи во заднина"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Вклучување/исклучување на промените за компатибилност на апликациите"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Стандардно овозможени промени"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Стандардно оневозможени промени"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Нема апликации"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Промени во компатибилноста на апликациите може да се вршат само за апликации во кои може да се отстрануваат грешки. Инсталирајте апликација во која може да се отстрануваат грешки и обидете се повторно."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Зависи од друга поставка"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Сметка"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Оневозможи ги ограничувањата за подредени процеси"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Ги оневозможува ограничувањата за користење системски ресурси за подредените процеси на апликациите"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Присилно овозможување на улогата „Белешки“"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Овозможува системски интеграции за фаќање белешки преку улогата „Белешки“. Ако улогата „Белешки“ е веќе овозможена, не се презема никакво дејство."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Овозможете системски интеграции за фаќање белешки преку улогата „Белешки“. Ако улогата „Белешки“ е веќе овозможена, не правете ништо. Потребно е рестартирање."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Емитување"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Емитување на <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слушајте емитувања во ваша близина"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index a70289d..004aeeb 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth ഓണാക്കി"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"എല്ലാം കാണുക"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"സ്റ്റൈലസ്"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ഡിഫോൾട്ട് കുറിപ്പ് ആപ്പ്"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ടെയിൽ ബട്ടൺ അമർത്തുക"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ഔദ്യോഗിക പ്രൊഫൈൽ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ടെക്സ്റ്റ് ഫീൽഡുകളിൽ എഴുതുക"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"സ്റ്റൈലസ് ബട്ടൺ അമർത്തൽ ഒഴിവാക്കുക"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"സ്റ്റൈലസ്"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"താപനില"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ആഴ്ചയിലെ ആദ്യ ദിവസം"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"സംഖ്യാ മുൻഗണനകൾ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ആപ്പിന്റെ ഡിഫോൾട്ട് മുൻഗണന ഉപയോഗിക്കുക"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ഡിഫോൾട്ട് ഉപയോഗിക്കുക"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"സെൽഷ്യസ് (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ഫാരൻഹീറ്റ് (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ഞായർ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"പ്രധാന പതിപ്പ്"</string>
<string name="build_number" msgid="9009733242117579826">"ബിൽഡ് നമ്പർ"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play സിസ്റ്റം അപ്ഡേറ്റ്"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ബാറ്ററി വിവരം"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ലഭ്യമല്ല"</string>
<string name="storage_settings" msgid="7472188817781592677">"സ്റ്റോറേജ്"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"സ്റ്റോറേജും കാഷെയും"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth വിലാസം"</string>
<string name="status_serial_number" msgid="9060064164331466789">"സീരിയല് നമ്പര്"</string>
<string name="status_up_time" msgid="1274778533719495438">"പ്രവർത്തിക്കുന്ന സമയം"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"നിർമ്മാണ തീയതി"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ആദ്യ ഉപയോഗ തീയതി"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"സൈക്കിളിന്റെ എണ്ണം"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ലഭ്യമല്ല"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"കണക്കാക്കുന്നു..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"പേര് മാറ്റുക"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"മൗണ്ടുചെയ്യുക"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ഇത് എല്ലാ വൈഫൈ, Bluetooth ക്രമീകരണവും റീസെറ്റ് ചെയ്യും. ഈ പ്രവർത്തനം നിങ്ങൾക്ക് പഴയപടിയാക്കാനാകില്ല."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"റീസെറ്റ് ചെയ്യുക"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth-ഉം വൈഫൈയും റീസെറ്റ് ചെയ്തു"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"മായ്ക്കുക"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ഇ-സിമ്മുകൾ മായ്ക്കുക"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ഇത്, ഒരു മൊബെെൽ സേവന പ്ലാനുകളും റദ്ദാക്കില്ല. പകരം ഉപയോഗിക്കാനുള്ള സിമ്മുകൾ ഡൗൺലോഡ് ചെയ്യാൻ നിങ്ങളുടെ സേവനദാതാവിനെ ബന്ധപ്പെടുക."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ക്രമീകരണം റീസെറ്റ് ചെയ്യുക"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ഈ ഉപകരണം അൺലോക്ക് ചെയ്യാനും പാറ്റേൺ നൽകൂ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ഈ ഉപകരണം അൺലോക്ക് ചെയ്യാനും പിൻ നൽകൂ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ഈ ഉപകരണം അൺലോക്ക് ചെയ്യാനും പാസ്വേഡ് നൽകൂ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"പാറ്റേൺ പരിശോധിച്ചുറപ്പിക്കുക"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"പിൻ പരിശോധിക്കുക"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"പാസ്വേഡ് പരിശോധിച്ചുറപ്പിക്കുക"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"തുടരാൻ ഉപകരണ പാറ്റേൺ ഉപയോഗിക്കുക"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"തുടരാൻ ഉപകരണ പിൻ നൽകുക"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"തുടരാൻ നിങ്ങളുടെ ഉപകരണ പാസ്വേഡ് നൽകുക"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"പിൻ തെറ്റാണ്"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"പാസ്വേഡ് തെറ്റാണ്"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"പാറ്റേൺ തെറ്റാണ്"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ആപ്പുകളുടെ അടിസ്ഥാനത്തിൽ കാണുക"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"സിസ്റ്റങ്ങളുടെ അടിസ്ഥാനത്തിൽ കാണുക"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ഷിപ്പിംഗിന് മുമ്പുള്ള ഗുണമേന്മാ പരിശോധനകൾ കാരണം, ആദ്യ ഉപയോഗത്തിൽ സൈക്കിൾ എണ്ണം പൂജ്യമായേക്കില്ല"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"പ്രോസസ്സ് സ്ഥിതിവിവരക്കണക്കുകൾ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"പ്രവർത്തന പ്രോസസ്സുകളെക്കുറിച്ചുള്ള Geeky സ്ഥിതിവിവരക്കണക്കുകൾ"</string>
<string name="app_memory_use" msgid="7559666138324410666">"മെമ്മറി ഉപയോഗം"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"അതിഥി ആക്റ്റിവിറ്റി ഇല്ലാതാക്കണോ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ഈ അതിഥി സെഷനിൽ നിന്നുള്ള ആപ്പുകളും ഡാറ്റയും ഇപ്പോൾ ഇല്ലാതാക്കും, അതിഥി മോഡിൽ നിന്ന് നിങ്ങൾ പുറത്തുകടക്കുമ്പോഴെല്ലാം ഭാവിയിലെ എല്ലാ അതിഥി ആക്റ്റിവിറ്റിയും ഇല്ലാതാക്കും"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ഇല്ലാതാക്കുക, അതിഥി, ആക്റ്റിവിറ്റി, നീക്കം ചെയ്യുക, ഡാറ്റ, സന്ദർശകർ, മായ്ക്കുക"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ഫോൺ ഉപയോഗിക്കാൻ അതിഥിയെ അനുവദിക്കൂ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ഫോൺ കോളുകൾ ചെയ്യാൻ അതിഥിയെ അനുവദിക്കുക"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"അതിഥി ഉപയോക്താവുമായി കോൾ ചരിത്രം പങ്കിടും"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ഫോൺ കോളുകൾ, SMS എന്നിവ ഓണാക്കുക"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ഈ ഉപയോക്താവിനെ അഡ്മിനാക്കുക"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"നെറ്റ്വർക്ക്, മൊബൈൽ നെറ്റ്വർക്ക് നില, സേവന നില, സിഗ്നൽ ശക്തി, മൊബൈൽ നെറ്റ്വർക്ക് തരം, റോമിംഗ്, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"സീരിയൽ നമ്പർ, ഹാർഡ്വെയർ പതിപ്പ്"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ബാറ്ററി വിവരം, നിർമ്മാണ തീയതി, സൈക്കിളിന്റെ എണ്ണം, ആദ്യ ഉപയോഗം"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android സുരക്ഷാ പാച്ച് നില, ബേസ്ബാൻഡ് പതിപ്പ്, കെർണൽ പതിപ്പ്"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"തീം, പ്രകാശം, ഇരുട്ട്, മോഡ്, പ്രകാശ സെൻസിറ്റിവിറ്റി, ഫോട്ടോഫോബിയ, ഇരുണ്ടതാക്കുക, ഇരുണ്ടതാക്കുക, ഡാർക്ക് മോഡ്, ചെന്നിക്കുത്ത്"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ഡാർക്ക് തീം"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ഉപകരണ ഡിഫോള്ട്ട്"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ഓവർലേ പ്രയോഗിക്കുന്നതിൽ പരാജയപ്പെട്ടു"</string>
<string name="special_access" msgid="1767980727423395147">"പ്രത്യേക ആപ്പ് ആക്സസ്"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ആപ്പുകൾക്ക് നിയന്ത്രണമില്ലാതെ ഡാറ്റ ഉപയോഗിക്കാം</item>
- <item quantity="one">1 ആപ്പിന് നിയന്ത്രണമില്ലാതെ ഡാറ്റ ഉപയോഗിക്കാം</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"കൂടുതൽ കാണുക"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ദൈർഘ്യമേറിയ പശ്ചാത്തല ടാസ്കുകൾ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ദീർഘസമയം റൺ ചെയ്യുന്ന പശ്ചാത്തല ടാസ്ക് അനുവദിക്കൂ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ആപ്പ് അനുയോജ്യതാ മാറ്റങ്ങൾ ടോഗിൾ ചെയ്യുക"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ഡിഫോൾട്ട് ആയ, പ്രവർത്തനക്ഷമമാക്കിയ മാറ്റങ്ങൾ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ഡിഫോൾട്ട് ആയ, പ്രവർത്തനരഹിതമാക്കിയ മാറ്റങ്ങൾ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ആപ്പുകൾ ലഭ്യമല്ല"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ഡീബഗ് ചെയ്യാവുന്ന ആപ്പുകൾക്ക് വേണ്ടി മാത്രമേ ആപ്പ് അനുയോജ്യതാ മാറ്റങ്ങൾ പരിഷ്കരിക്കാൻ കഴിയൂ. ഡീബഗ് ചെയ്യാവുന്ന ആപ്പ് ഇന്സ്റ്റാള് ചെയ്ത് വീണ്ടും ശ്രമിക്കുക."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"മറ്റൊരു ക്രമീകരണത്തെ ആശ്രയിച്ചിരിക്കുന്നു"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"അക്കൗണ്ട്"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ചൈൽഡ് പ്രോസസ് നിയന്ത്രണങ്ങൾ പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"സിസ്റ്റം റിസോഴ്സ് ഉപയോഗിക്കുന്നതുമായി ബന്ധപ്പെട്ട ആപ്പിന്റെ ചൈൽഡ് പ്രോസസുകൾ, നിയന്ത്രണങ്ങൾ പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes റോൾ നിർബന്ധമായി പ്രവർത്തനക്ഷമമാക്കുക"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes റോൾ വഴി കുറിപ്പെടുക്കൽ സിസ്റ്റം ഇന്റഗ്രേഷനുകൾ പ്രവർത്തനക്ഷമമാക്കുക. Notes റോൾ ഇതിനകം തന്നെ പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഒന്നും ചെയ്യേണ്ടതില്ല."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes റോൾ വഴി കുറിപ്പെടുക്കൽ സിസ്റ്റം ഇന്റഗ്രേഷനുകൾ പ്രവർത്തനക്ഷമമാക്കുക. Notes റോൾ മുമ്പേ തന്നെ പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഒന്നും ചെയ്യില്ല. റീബൂട്ട് ചെയ്യേണ്ടത് ആവശ്യമാണ്."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ബ്രോഡ്കാസ്റ്റ്"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ബ്രോഡ്കാസ്റ്റ് ചെയ്യുക"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"നിങ്ങൾക്ക് സമീപം പ്ലേ ചെയ്യുന്ന ബ്രോഡ്കാസ്റ്റുകൾ കേൾക്കുക"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 1d426fc..a2f1a22 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth-г асаасан"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Бүгдийг харах"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Мэдрэгч үзэг"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Өгөгдмөл тэмдэглэлийн апп"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Арын товчийг дарах"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Ажлын профайл)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Текстийн талбарт бичих"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Бүх мэдрэгч үзгийн товчлуур даралтыг үл хэрэгсэнэ үү"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Мэдрэгч үзэг"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температур"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Долоо хоногийн эхний өдөр"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Тооны сонголт"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Аппын өгөгдмөлийг ашиглах"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Өгөгдмөлийг ашиглах"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Цельс (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренгейт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Ням"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Кернел хувилбар"</string>
<string name="build_number" msgid="9009733242117579826">"Хийцийн дугаар"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-н систем шинэчлэлт"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Батарейн мэдээлэл"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Боломжгүй"</string>
<string name="storage_settings" msgid="7472188817781592677">"Хадгалах сан"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Хадгалах сан ба завсрын санах ой"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth хаяг"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Серийн дугаар"</string>
<string name="status_up_time" msgid="1274778533719495438">"Асаалттай байсан хугацаа"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Үйлдвэрлэсэн огноо"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Анх ашигласан огноо"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Мөчлөгийн тоо"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Боломжгүй"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Тооцоолж байна…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Нэр өөрчлөх"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Залгах"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Энэ нь Wi‑Fi ба Bluetooth-н бүх тохиргоог шинэчилнэ. Та энэ үйлдлийг буцаах боломжгүй."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Шинэчлэх"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth ба Wi‑Fi-г шинэчилсэн"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Устгах"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM-үүдийг устгах"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Энэ нь мобайл үйлчилгээний ямар ч багцыг цуцлахгүй. Орлуулах SIM татахын тулд оператор компанитайгаа холбогдоно уу."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Дахин тохируулах"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Мөн энэ төхөөрөмжийн түгжээг тайлахад хээ ашиглах"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Мөн энэ төхөөрөмжийн түгжээг тайлахад ПИН ашиглах"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Мөн энэ төхөөрөмжийн түгжээг тайлахад нууц үг ашиглах"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Хээг баталгаажуулах"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ПИН баталгаажуулах"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Нууц үг баталгаажуулах"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Үргэлжлүүлэхийн тулд төхөөрөмжийнхөө хээг ашиглана уу"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Үргэлжлүүлэхийн тулд төхөөрөмжийнхөө ПИН-г оруулна уу"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Үргэлжлүүлэхийн тулд төхөөрөмжийнхөө нууц үгийг оруулна уу"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ПИН код буруу байна"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Нууц үг буруу байна"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Хээ буруу байна"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Аппуудаар харах"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Системүүдээр харах"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Тээвэрлэхээс өмнөх чанарын шалгалтын улмаас анхны ашиглалтын мөчлөгийн тоо тэг биш байж магадгүй"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Процессын статус"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Ажиллаж байгаа процессуудын талаарх статус"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Санах ойн ашиглалт"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Зочны үйл ажиллагааг устгах уу?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Энэ зочны харилцан үйлдлийн аппууд болон өгөгдлийг одоо устгах бөгөөд ирээдүйн бүх зочны үйл ажиллагааг таныг зочны горимоос гарах бүрд устгана"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"устгах, зочин, үйл ажиллагаа, хасах, өгөгдөл, зочин, устгах"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Зочинд утас ашиглахыг зөвшөөрөх"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Зочинд утасны дуудлага хийхийг зөвшөөрөх"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Дуудлагын түүхийг зочин хэрэглэгчтэй хуваалцана"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Утасны дуудлага, SMS идэвхжүүлэх"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Энэ хэрэглэгчийг админ болгох"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"сүлжээ, мобайл сүлжээний төлөв, үйлчилгээний төлөв, дохионы хүч, мобайл сүлжээний төрөл, роуминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"серийн дугаар, техник хангамжийн хувилбар"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"батарейн мэдээлэл, үйлдвэрлэсэн огноо, мөчлөгийн тоо, анхны ашиглалт"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"андройдын аюулгүй байдлын засварын түвшин, долгион баригчийн хувилбар, кернел хувилбар"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"загвар, гэрэл, бараан, горим, гэрэлд мэдрэмтгий байдал, фотофрофи, илүү бараан болгох, бараан болгох, бараан горим, мигрень"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"бараан загвар"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Төхөөрөмжийн өгөгдмөл"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Давхарлаж чадсангүй"</string>
<string name="special_access" msgid="1767980727423395147">"Тусгай аппын хандалт"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">Хязгааргүй датаг <xliff:g id="COUNT">%d</xliff:g> апп ашиглах боломжтой</item>
- <item quantity="one">Хязгааргүй датаг 1 апп ашиглах боломжтой</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Дэлгэрэнгүй харах"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Дэвсгэрийн урт хугацааны ажил"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Дэвсгэрт урт хугацаанд ажиллах ажлуудыг зөвшөөрөх"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Аппын тохирох байдлын өөрчлөлтийг идэвхгүй болгох/идэвхжүүлэх"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Өгөгдмөл тохиргоогоор идэвхжүүлсэн өөрчлөлт"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Өгөгдмөл тохиргоогоор идэвхгүй болгосон өөрчлөлт"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Боломжтой апп алга"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Аппын тохирох өөрчлөлтийг зөвхөн дебаг хийх боломжтой аппуудад хийх боломжтой. Дебаг хийх боломжтой аппыг суулгаад, дахин оролдож үзнэ үү."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Өөр тохиргооноос шалтгаална"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Бүртгэл"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Дэд боловсруулалтын хязгаарлалтыг идэвхгүй болгох"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Аппын дэд боловсруулалтын системийн нөөцийн ашиглалтын хязгаарлалтыг идэвхгүй болгох"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Тэмдэглэлийн үүргийг хүчээр идэвхжүүлэх"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Тэмдэглэлийн үүргээр тэмдэглэл хөтлөх системийн нэгтгэлийг идэвхжүүлнэ үү. Хэрэв Тэмдэглэлийн үүргийг аль хэдийн идэвхжүүлсэн бол юу ч битгий хийгээрэй."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Тэмдэглэлийн үүргээр тэмдэглэл хөтлөх системийн нэгтгэлийг идэвхжүүлнэ үү. Хэрэв Тэмдэглэлийн үүргийг аль хэдийн идэвхжүүлсэн бол юу ч битгий хийгээрэй. Дахин асаах шаардлагатай."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Нэвтрүүлэлт"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g>-г нэвтрүүлэх"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Таны ойролцоо тоглуулж буй нэвтрүүлэлтийг сонсоорой"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index aa03bff..9d90e21 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ब्लूटूथ सुरू केले"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"सर्व पहा"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"स्टायलस"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"टिपांसाठी डीफॉल्ट अॅप"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"टेल बटण प्रेस करा"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (कार्य प्रोफाइल)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"मजकूर फील्डमध्ये लिहा"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"सर्व स्टायलस बटण दाबण्याकडे दुर्लक्ष करा"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"स्टायलस"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"तापमान"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"आठवड्याचा पहिला दिवस"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"क्रमांकांची प्राधान्ये"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"अॅपमधील डीफॉल्ट वापरा"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"डीफॉल्ट वापरा"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"सेल्सियस (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"फेरनहाइट (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"रविवार"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"कर्नेल आवृत्ती"</string>
<string name="build_number" msgid="9009733242117579826">"बिल्ड नंबर"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play सिस्टीम अपडेट"</string>
+ <string name="battery_info" msgid="7873528123969546728">"बॅटरी संबंधित माहिती"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"उपलब्ध नाही"</string>
<string name="storage_settings" msgid="7472188817781592677">"स्टोरेज"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"स्टोरेज आणि कॅशे"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ब्लूटूथ ॲड्रेस"</string>
<string name="status_serial_number" msgid="9060064164331466789">"सिरीअल नंबर"</string>
<string name="status_up_time" msgid="1274778533719495438">"सुरू असल्याचा कालावधी"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"निर्माण केल्याची तारीख"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"पहिल्या वापराची तारीख"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"चार्ज/डिस्चार्ज चक्राची संख्या"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"उपलब्ध नाही"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"गणना करत आहे..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"नाव बदला"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"माउंट करा"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"यामुळे सर्व वाय-फाय आणि ब्लूटूथ सेटिंग्ज रीसेट होतील. तुम्ही ही कृती पहिल्यासारखी करू शकत नाही."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"रीसेट करा"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ब्लूटूथ आणि वाय-फाय रीसेट केले गेले आहे"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"मिटवा"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMs मिटवा"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"यामुळे कोणतेही मोबाइल सेवा प्लॅन रद्द होणार नाहीत. बदललेले SIM डाउनलोड करण्यासाठी तुमच्या वाहकाशी संपर्क साधा."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"सेटिंग्ज रीसेट करा"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"डिव्हाइस अनलॉक करण्यासाठी पॅटर्नही वापरा"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"डिव्हाइस अनलॉक करण्यासाठी पिनही वापरा"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"डिव्हाइस अनलॉक करण्यासाठी पासवर्डही वापरा"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"पॅटर्नची पडताळणी करा"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"पिनची पडताळणी करा"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"पासवर्डची पडताळणी करा"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"पुढे सुरू ठेवण्यासाठी तुमच्या डिव्हाइसचा पॅटर्न वापरा"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"पुढे सुरू ठेवण्यासाठी तुमच्या डिव्हाइसचा पिन एंटर करा"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"पुढे सुरू ठेवण्यासाठी तुमच्या डिव्हाइसचा पासवर्ड एंटर करा"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"चुकीचा पिन"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"चुकीचा पासवर्ड"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"चुकीचा पॅटर्न"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ॲप्सनुसार पहा"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"सिस्टीमनुसार पहा"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"शिपिंगपूर्वीच्या गुणवत्ता तपासण्यांमुळे, चक्राची संख्या पहिल्या वापराच्या वेळी शून्य असू शकत नाही"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"प्रक्रिया आकडेवारी"</string>
<string name="process_stats_summary" msgid="522842188571764699">"चालत असलेल्या प्रक्रियांबद्दल गीकी आकडेवारी"</string>
<string name="app_memory_use" msgid="7559666138324410666">"मेमरी वापर"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"अतिथी अॅक्टिव्हिटी हटवायची का?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"या अतिथी सत्रातील अॅप्स आणि डेटा आता हटवला जाईल व प्रत्येक वेळी तुम्ही अतिथी मोडमधून बाहेर पडाल, तेव्हा भविष्यातील सर्व अतिथी अॅक्टिव्हिटी हटवली जाईल"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"हटवा, अतिथी, अॅक्टिव्हिटी, काढून टाका, डेटा, मिटवा"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"अतिथीला फोन वापरण्याची अनुमती द्या"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"अतिथींना फोन कॉल करण्याची अनुमती द्या"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"कॉल इतिहास अतिथी वापरकर्त्यासोबत शेअर केला जाईल"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फोन कॉल आणि एसएमएस सुरू करा"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"या वापरकर्त्याला ॲडमिन करा"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"नेटवर्क, मोबाइल नेटवर्कची स्थिती, सेवेची स्थिती, सिग्नलची तीव्रता, मोबाइल नेटवर्कचा प्रकार, रोमिंग, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"सीरीअल नंबर, हार्डवेअर आवृत्ती"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"बॅटरी संबंधित माहिती, निर्माण केल्याची तारीख, चार्ज/डिस्चार्ज चक्राची संख्या, पहिला वापर"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android सुरक्षितता पॅच पातळी, बेसबँड आवृत्ती, कर्नल आवृत्ती"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"थीम, फिकट, गडद, मोड, प्रकाशाची संवेदनशीलता, फोटोफोबिया, आणखी गडद करा, गडद केलेले, गडद मोड, मायग्रेन"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"गडद थीम"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"डिव्हाइस डीफॉल्ट"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ओव्हरले लागू करता आले नाही"</string>
<string name="special_access" msgid="1767980727423395147">"विशेष अॅप अॅक्सेस"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> अॅप्स अनिर्बंधित डेटा वापरू शकतात</item>
- <item quantity="one">1 अॅप अनिर्बंधित डेटा वापरू शकते</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"आणखी पहा"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"दीर्घ कालावधी बॅकग्राउंड टास्क"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"दीर्घ कालावधीच्या बॅकग्राउंड टास्कना अनुमती द्या"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ॲप कंपॅटिबिलिटी बदल टॉगल करा"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"डीफॉल्ट सुरू केलेले बदल"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"डीफॉल्ट बंद केलेले बदल"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"अॅप्स उपलब्ध नाहीत"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ॲप कंपॅटिबिलिटी संबंधित बदलांमध्ये फक्त डीबग करण्यायोग्य ॲप्सवरून बदल केले जाऊ शकतात. डीबग करण्यायोग्य ॲप इंस्टॉल करा आणि पुन्हा प्रयत्न करा."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"दुसऱ्या सेटिंगवर अवलंबून आहे"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"खाते"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"लहान मुलाच्या अॅप वापरावरील निर्बंध बंद करा"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"लहान मूल जे अॅप वापरत आहे त्या अॅपच्या सिस्टीम स्रोतांच्या वापरावरील निर्बंध बंद करा"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"टिपा ही भूमिका सक्तीने सुरू करा"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"टिपा या भूमिकेद्वारे टिपा घेणाऱ्या सिस्टीमशी संबंधित इंटिग्रेशन सुरू करा. टिपा ही भूमिका आधीच सुरू केलेली असल्यास, काहीही करण्याची गरज नाही."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"टिपा या भूमिकेद्वारे टिपा घेणाऱ्या सिस्टीमशी संबंधित इंटिग्रेशन सुरू करा. टिपा ही भूमिका आधीच सुरू केलेली असल्यास, काहीही करण्याची गरज नाही. रीबूट करणे आवश्यक आहे."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ब्रॉडकास्ट करा"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ब्रॉडकास्ट करा"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"तुमच्या जवळपास प्ले होत असलेली ब्रॉडकास्ट ऐका"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index f422b9c..70f3ae9 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth dihidupkan"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Lihat semua"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Apl nota lalai"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tekan butang hujung"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profil kerja)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Tulis dalam medan teks"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Abaikan semua tekanan butang stilus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Suhu"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Hari pertama dalam minggu"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Pilihan nombor"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Gunakan ciri lalai apl"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Gunakan tetapan lalai"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Ahad"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versi inti"</string>
<string name="build_number" msgid="9009733242117579826">"Nombor binaan"</string>
<string name="module_version" msgid="1787518340082046658">"Kemaskinian sistem Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Maklumat bateri"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Tidak tersedia"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storan"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storan & cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Alamat Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Nombor siri"</string>
<string name="status_up_time" msgid="1274778533719495438">"Masa hidup"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Tarikh pembuatan"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Tarikh penggunaan kali pertama"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Kiraan kitaran"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Tidak tersedia"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Mengira..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Namakan semula"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Lekap"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Tindakan ini akan menetapkan semula semua tetapan Wi-Fi & Bluetooth. Tindakan ini tidak boleh dibuat asal."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Tetapkan semula"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth & Wi-Fi telah ditetapkan semula"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Padam"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Padam eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Tindakan ini tidak akan membatalkan mana-mana pelan perkhidmatan mudah alih. Untuk memuat turun SIM gantian, hubungi pembawa anda."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Tetapkan semula tetapan"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Gunakan juga corak untuk membuka kunci"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Gunakan juga PIN untuk membuka kunci"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Gunakan kata laluan untuk membuka kunci"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Sahkan corak"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Sahkan PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Sahkan kata laluan"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Gunakan corak peranti anda untuk meneruskan"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Masukkan PIN peranti anda untuk meneruskan"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Masukkan kata laluan peranti anda untuk meneruskan"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN salah"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Kata laluan salah"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Corak salah"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Lihat mengikut apl"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Lihat mengikut sistem"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Atas sebab pemeriksaan kualiti sebelum penghantaran, kiraan kitaran mungkin bukan sifar untuk penggunaan kali pertama"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistik Proses"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistik skema tentang proses yang sedang berjalan"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Penggunaan memori"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Padamkan aktiviti tetamu?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apl dan data daripada sesi tetamu ini akan dipadamkan sekarang dan semua aktiviti tetamu pada masa hadapan akan dipadamkan setiap kali anda keluar daripada mod tetamu"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"buang, tetamu, aktiviti, alih keluar, data, pelawat, padam"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Benarkan tetamu menggunakan telefon"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Benarkan tetamu buat panggilan telefon"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Sejarah panggilan akan dikongsi dengan pengguna tetamu"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Hidupkan panggilan telefon & SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Jadikan pengguna ini pentadbir"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rangkaian, keadaan rangkaian mudah alih, keadaan perkhidmatan, kekuatan isyarat, jenis rangkaian mudah alih, perayauan, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"nombor siri, versi perkakasan"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"maklumat bateri, tarikh pembuatan, kiraan kitaran, penggunaan pertama"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"tahap tampung keselamatan android, versi jalur dasar, versi inti"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, cerah, gelap, mod, kepekaan cahaya, fotofobia, jadikan lebih gelap, gelapkan, mod gelap, migrain"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema gelap"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Lalai peranti"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Gagal menggunakan tindanan"</string>
<string name="special_access" msgid="1767980727423395147">"Akses apl khas"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apl boleh menggunakan data tanpa had</item>
- <item quantity="one">1 apl boleh menggunakan data tanpa had</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Lihat lagi"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tugas latar yang panjang"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Benarkan tugas latar yang berjalan dalam tempoh masa yang panjang"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Togol perubahan keserasian apl"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Perubahan didayakan tetapan lalai"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Perubaan dilumpuhkan tetapan lalai"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Tiada apl tersedia"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Perubahan keserasian aplikasi hanya boleh diubah suai untuk apl boleh dinyahpepijat. Pasang apl boleh dinyahpepijat dan cuba lagi."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Bergantung pada tetapan lain"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Akaun"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Lumpuhkan sekatan proses anak"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Lumpuhkan sekatan pada penggunaan sumber sistem oleh proses anak apl"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Dayakan peranan Nota secara paksa"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Dayakan penyepaduan sistem pengambilan nota melalui peranan Nota. Jika peranan Nota sudah didayakan, tiada apa-apa yang berlaku."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Dayakan penyepaduan sistem pengambilan nota melalui peranan Nota. Jika peranan Nota sudah didayakan, tiada apa-apa yang berlaku. Memerlukan but semula."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Siarkan"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Siarkan <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Dengarkan siaran yang dimainkan berdekatan anda"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 39610aa..6703b55 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ဘလူးတုသ် ဖွင့်ထားသည်"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"အားလုံး ကြည့်ရန်"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"စတိုင်လပ်စ်"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"မူလ မှတ်စုရေးသောအက်ပ်"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"စွတ်ကြောင်းခလုတ်ကို နှိပ်လျှင်"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (အလုပ်ပရိုဖိုင်)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"စာသားအကွက်များတွင် ရေးခြင်း"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"စတိုင်လပ်စ်ခလုတ်နှိပ်ခြင်းအားလုံးကို လစ်လျူရှုခြင်း"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"စတိုင်လပ်စ်"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"အပူချိန်"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ရက်သတ္တပတ်၏ ပထမဆုံးနေ့"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"နံပါတ် သတ်မှတ်ချက်များ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"အက်ပ်၏မူရင်းအတိုင်း သုံးရန်"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"မူရင်းသတ်မှတ်ချက် သုံးရန်"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"စင်တီဂရိတ် (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ဖာရင်ဟိုက် (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"တနင်္ဂနွေ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel ဗားရှင်း"</string>
<string name="build_number" msgid="9009733242117579826">"တည်ဆောက်ပုံ နံပါတ်"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play စနစ် အပ်ဒိတ်"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ဘက်ထရီအချက်အလက်"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"မရရှိနိုင်ပါ"</string>
<string name="storage_settings" msgid="7472188817781592677">"သိုလှောင်ခန်း"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"သိုလှောင်ခန်းနှင့် ကက်ရှ်"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ဘလူးတုသ်လိပ်စာ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"စက်မှတ်ပုံတင်နံပါတ်"</string>
<string name="status_up_time" msgid="1274778533719495438">"ဖွင့်ထားသောအချိန်"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"ထုတ်လုပ်သည့်ရက်စွဲ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ပထမဆုံးအကြိမ် အသုံးပြုခဲ့သည့်ရက်"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"သုံးစွဲမှု အကြိမ်ရေ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"မရနိုင်ပါ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"တွက်ချက်နေသည်"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"အမည်ပြောင်းရန်"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"တပ်ဆင်ရန်"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"၎င်းက Wi‑Fi နှင့် ဘလူးတုသ်ဆက်တင် အားလုံးကို ပြင်ဆင်သတ်မှတ်ပါမည်။ ဤလုပ်ဆောင်ချက်ကို ပြန်ပြင်၍ မရပါ။"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ပြင်ဆင်သတ်မှတ်ရန်"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ဘလူးတုသ်နှင့် Wi‑Fi ပြင်ဆင်သတ်မှတ်လိုက်ပြီ"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ဖျက်ရန်"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM များဖျက်ရန်"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"၎င်းက မိုဘိုင်းဝန်ဆောင်မှု အစီအစဉ်များကို ပယ်ဖျက်မည်မဟုတ်ပါ။ အစားထိုး ဆင်းမ်ကတ်များ ဒေါင်းလုဒ်လုပ်ရန် သင့်ဝန်ဆောင်မှုပေးသူကို ဆက်သွယ်ပါ။"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ဆက်တင်များ ပြင်ဆင်သတ်မှတ်ရန်"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ဤစက်ဖွင့်ရန် ပုံဖော်ခြင်းလည်း သုံးနိုင်သည်"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ဤစက်ဖွင့်ရန် ပင်နံပါတ်လည်း သုံးနိုင်သည်"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ဤစက်ဖွင့်ရန် စကားဝှက်လည်း သုံးနိုင်သည်"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ပုံဖော်ခြင်းကို အတည်ပြုပါ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ပင်နံပါတ်ကို အတည်ပြုပါ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"စကားဝှက်ကို အတည်ပြုပါ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ရှေ့ဆက်ရန် သင့်စက်တွင် ပုံဖော်ခြင်းကို အသုံးပြုပါ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ရှေ့ဆက်ရန် သင့်စက်ပစ္စည်း၏ ပင်နံပါတ်ကို ရိုက်ထည့်ပါ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ရှေ့ဆက်ရန် သင့်စက်ပစ္စည်းစကားဝှက်ကို ရိုက်ထည့်ပါ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ပင် နံပါတ်အမှား"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"စကားဝှက်အမှား"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ပုံစံအမှား"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"အက်ပ်အလိုက်ကြည့်ရန်"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"စနစ်အလိုက်ကြည့်ရန်"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ပစ္စည်းမပို့မီ အရည်အသွေး စစ်ဆေးမှုများကြောင့် ပထမဆုံး သုံးရာတွင် သုံးစွဲမှု အကြိမ်ရေသည် သုည ဖြစ်မည်မဟုတ်ပါ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"လုပ်ငန်းစဉ်ကိန်းဂဏန်းများ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"အလုပ်လုပ်ခြင်းလုပ်ငန်းစဉ်များအကြောင်း ပညာရှင်အဆင့်စာရင်း"</string>
<string name="app_memory_use" msgid="7559666138324410666">"မှတ်ဉာဏ်သုံးခြင်း"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ဧည့်သည်လုပ်ဆောင်ချက် ဖျက်မလား။"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ဤဧည့်သည် စက်ရှင်မှ အက်ပ်နှင့် ဒေတာများကို ယခုဖျက်လိုက်မည်ဖြစ်ပြီး လာမည့်ဧည့်သည် လုပ်ဆောင်ချက်အားလုံးကို ဧည့်သည်မုဒ်မှ ထွက်ချိန်တိုင်းတွင် ဖျက်လိုက်ပါမည်"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ဖျက်ရန်၊ ဧည့်သည်၊ လုပ်ဆောင်ချက်၊ ဖယ်ရှားရန်၊ ဒေတာ၊ ဝင်ကြည့်သူ၊ ဖျက်ရန်"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ဧည့်သည်ကို ဖုန်းသုံးခွင့်ပြုရန်"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ဧည့်သည်ကို ဖုန်းခေါ်ဆိုခွင့်ပြုရန်"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ခေါ်ဆိုမှုမှတ်တမ်းကို ဧည့်သည်အသုံးပြုသူနှင့် မျှဝေမည်"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ဖုန်းခေါ်ဆိုမှုနှင့် SMS ဖွင့်ရန်"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ဤအသုံးပြုသူကို စီမံခန့်ခွဲသူအဖြစ် သတ်မှတ်ပါ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ကွန်ရက်၊ မိုဘိုင်းကွန်ရက်အခြေအနေ၊ ဝန်ဆောင်မှုအခြေအနေ၊ လိုင်းဆွဲအား၊ မိုဘိုင်းကွန်ရက် အမျိုးအစား၊ ပြင်ပကွန်ရက်သုံးခြင်း၊ iccid၊ eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"အမှတ်စဉ်၊ ဟာ့ဒ်ဝဲ ဗားရှင်း"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ဘက်ထရီအချက်အလက်၊ ထုတ်လုပ်သည့်ရက်စွဲ၊ သုံးစွဲမှု အကြိမ်ရေ၊ ပထမဆုံးအကြိမ် အသုံးပြုမှု"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android လုံခြုံရေး ပက်ချ် အဆင့်၊ baseband ဗားရှင်း၊ kernel ဗားရှင်း"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"အပြင်အဆင်၊ အလင်း၊ အမှောင်၊ မုဒ်၊ အလင်းသိမ်မွေ့မှု၊ အလင်းကြောက်ခြင်း၊ ပိုမှောင်အောင်လုပ်ခြင်း၊ မှောင်မည်းလာခြင်း၊ အမှောင်မုဒ်၊ ခေါင်းတစ်ခြမ်းကိုက်ခြင်း"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"အမှောင်နောက်ခံ"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"စက်ပစ္စည်းမူရင်း"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ထပ်ပိုးလွှာထည့်၍ မရပါ"</string>
<string name="special_access" msgid="1767980727423395147">"အထူးသုံးခွင့်ရ အက်ပ်"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">အက်ပ် <xliff:g id="COUNT">%d</xliff:g> ခုက ဒေတာကို အကန့်အသတ်မရှိ သုံးနိုင်သည်</item>
- <item quantity="one">အက်ပ် ၁ ခုက ဒေတာကို အကန့်အသတ်မရှိ သုံးနိုင်သည်</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"နောက်ထပ်ကြည့်ပါ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ကြာသော နောက်ခံလုပ်ဆောင်စရာများ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"အချိန်ကြာသော နောက်ခံလုပ်ဆောင်စရာများ ခွင့်ပြုရန်"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"တွဲဖက်သုံးနိုင်သော အက်ပ်အပြောင်းအလဲများကို အဖွင့်အပိတ်လုပ်ရန်"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"မူလစနစ်အရ ဖွင့်ထားသော အပြောင်းအလဲများ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"မူရင်းစနစ်အရ ပိတ်ထားသော အပြောင်းအလဲများ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"မည်သည့်အက်ပ်မျှ မရှိ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"အမှားရှာပြင်ကိရိယာအက်ပ်များ အတွက်သာလျှင် တွဲဖက်သုံးနိုင်သော အက်ပ် အပြောင်းအလဲများကို ပြုပြင်နိုင်သည်။ အမှားရှာပြင်ကိရိယာအက်ပ်တစ်ခု ထည့်သွင်းပြီး ထပ်စမ်းကြည့်ပါ။"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"အခြားဆက်တင်တစ်ခုအပေါ် မူတည်ပါသည်"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"အကောင့်"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"လုပ်ငန်းစဉ်ခွဲ ကန့်သတ်ချက်များကို ပိတ်ခြင်း"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"အက်ပ်အခွဲ လုပ်ငန်းစဉ်များ၏ စနစ်ရင်းမြစ်သုံးစွဲမှုအပေါ် ကန့်သတ်ချက်များကို ပိတ်နိုင်သည်"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"‘မှတ်စု’ တာဝန်ကို မဖြစ်မနေဖွင့်ခြင်း"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"မှတ်စုရေးသည့် စနစ်ပေါင်းစည်းမှုများကို ‘မှတ်စု’ တာဝန်ဖြင့် ဖွင့်သည်။ ‘မှတ်စု’ တာဝန်ကို ဖွင့်ပြီးဖြစ်ပါက ဘာမှမလုပ်ပါ။"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"မှတ်စုရေးသည့် စနစ်ပေါင်းစည်းမှုများကို ‘မှတ်စု’ တာဝန်ဖြင့် ဖွင့်ပါ။ ‘မှတ်စု’ တာဝန်ကို ဖွင့်ပြီးဖြစ်ပါက ဘာမှမလုပ်ပါနှင့်။ ပြန်လည်စတင်ရန် လိုအပ်သည်။"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ထုတ်လွှင့်မှု"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ထုတ်လွှင့်ခြင်း"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"သင့်အနီး ထုတ်လွှင့်နေသည်များကို နားထောင်ရန်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 9503299..7c91e49 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth er på"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Se alle"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pekepenn"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Standard notatapp"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Trykk på bakre knapp"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (jobbprofil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Skriv i tekstfelt"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorer alle knappetrykk med pekepenn"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pekepenn"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Første dag i uken"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Tallpreferanser"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Bruk appstandard"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Bruk standardverdien"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"søndag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kjerneversjon"</string>
<string name="build_number" msgid="9009733242117579826">"Delversjonsnummer"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-systemoppdatering"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batteriinformasjon"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ikke tilgjengelig"</string>
<string name="storage_settings" msgid="7472188817781592677">"Lagring"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Lagring og buffer"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-adresse"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serienummer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Oppetid"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Produksjonsdato"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Dato for første bruk"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Syklusantall"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ikke tilgjengelig"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Beregner …"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Gi nytt navn"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montér"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Dette tilbakestiller alle wifi- og Bluetooth-innstillinger. Denne handlingen kan ikke angres."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Tilbakestill"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth og wifi er tilbakestilt"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Slett"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Slett eSIM-kort"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Dette fører ikke til at du sier opp noen mobilabonnementer. Kontakt operatøren din for å laste ned erstatnings-SIM-kort."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Tilbakestill innstillingene"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Bruk også mønster for å låse opp enheten"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Bruk også PIN-kode for å låse opp enheten"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Bruk også passord for å låse opp enheten"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Bekreft mønsteret"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Bekreft PIN-koden"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Bekreft passordet"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Tegn mønsteret for å fortsette"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Skriv inn PIN-koden til enheten for å fortsette"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Skriv inn enhetspassordet for å fortsette"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Feil PIN-kode"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Feil passord"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Feil mønster"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Se etter apper"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Se etter systemer"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"På grunn av kvalitetskontroller før forsendelse er syklustelleren kanskje ikke null ved første gangs bruk"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Prosess-statistikk"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Nerdete statistikk om prosesser som er i gang"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Minnebruk"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vil du slette gjesteaktivitet?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apper og data fra denne gjesteøkten slettes nå, og all fremtidig gjesteaktivitet slettes hver gang du avslutter gjestemodus"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"slett, gjest, aktivitet, fjern, data, besøkende, tøm"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"La gjester bruke telefonen"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"La gjester starte telefonanrop"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Anropsloggen deles med gjestebrukeren"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Slå på telefonsamtaler og SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Gjør denne brukeren til administrator"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"nettverk, status for mobilnettverk, tjenestestatus, signalstyrke, mobilnettverkstype, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serienummer, maskinvareversjon"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batteriinformasjon, produksjonsdato, syklusantall, første bruk"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivå av sikkerhetsoppdatering i Android, basisbåndversjon, kjerneversjon"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, lys, mørk, modus, lyssensitivitet, fotofobi, gjør mørkere, mørkne, mørk modus, migrene"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"mørkt tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Standard for enheten"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Kunne ikke bruke overlegg"</string>
<string name="special_access" msgid="1767980727423395147">"Spesiell apptilgang"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apper kan bruke ubegrenset med data</item>
- <item quantity="one">1 app kan bruke ubegrenset med data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Se mer"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Lange bakgrunnsoppgaver"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Tillat bakgrunnsoppgaver som kjører lenge"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Slå endringer av appkompatibilitet på/av"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Endringer som er aktivert som standard"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Endringer som er deaktivert som standard"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Ingen tilgj. apper"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Endringer av appkompatibilitet kan bare modifiseres for feilsøkbare apper. Installer en feilsøkbar app og prøv igjen."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Er avhengig av en annen innstilling"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Slå av begrensninger for underordnede prosesser"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Slå av begrensningene for hvor mange systemressurser som kan brukes av underordnede approsesser"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Tving aktivering av Notater-rollen"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktiver systemintegreringer for notater via Notater-rollen. Hvis Notater-rollen er aktivert allerede, skjer det ingenting."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktiver systemintegreringer for notater via Notater-rollen. Hvis Notater-rollen er aktivert allerede, skjer det ingenting. Krever omstart."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Kringkast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Kringkast <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Lytt til kringkastinger som spilles av i nærheten"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index c48deb4..362fbf1 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ब्लुटुथ अन गरियो"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"सबै हेर्नुहोस्"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"स्टाइलस"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"डिफल्ट नोट एप"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"पुछारको बटन थिच्नुहोस्"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (कार्य प्रोफाइल)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"टेक्स्ट फिल्डमा लेख्नुहोस्"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"स्टाइलसमार्फत थिचिने सबै बटन बेवास्ता गरियोस्"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"स्टाइलस"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"तापक्रम"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"हप्ताको पहिलो दिन"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"नम्बरसम्बन्धी प्राथमिकताहरू"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"एपको डिफल्ट प्राथमिकता प्रयोग गर्नुहोस्"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"डिफल्ट विधि प्रयोग गरियोस्"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"सेल्सियस (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"फरेनहाइट (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"आइतवार"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"कर्नेलको संस्करण"</string>
<string name="build_number" msgid="9009733242117579826">"बिल्ड नम्बर"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play को सिस्टम अपडेट"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ब्याट्रीसम्बन्धी जानकारी"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"अनुपलब्ध"</string>
<string name="storage_settings" msgid="7472188817781592677">"भण्डारण"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"भण्डारण र क्यास"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ब्लुटुथ एड्रेस"</string>
<string name="status_serial_number" msgid="9060064164331466789">"क्रम संख्या"</string>
<string name="status_up_time" msgid="1274778533719495438">"सक्रिय समय"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"बनेको मिति"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"पहिलो पटक प्रयोग गरिएको मिति"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"चार्ज हुने र डिस्चार्ज हुने क्रमको गणना"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"उपलब्ध छैन"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"गणना गर्दै ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"पुन: नामाकरण गर्नुहोस्"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"माउन्ट गर्नुहोस्"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"तपाईंले यसो गर्नुभयो भने Wi-Fi तथा ब्लुटुथसम्बन्धी सबै सेटिङ रिसेट हुने छन्। तपाईं यो कार्य अन्डू गर्न सक्नुहुन्न।"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"रिसेट गर्नुहोस्"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ब्लुटुथ र Wi-Fi रिसेट गरिएका छन्"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"मेटाउनुहोस्"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM हरू मेटाउनुहोस्"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"यसो गर्दा मोबाइल सेवाका कुनै पनि योजना रद्द हुने छैनन्। अर्को सिम डाउनलोड गर्न आफ्नो मोबाइल सेवा प्रदायकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"सेटिङहरू रिसेट गर्नुहोस्"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"यो डिभाइस अनलक गर्न प्याटर्न पनि प्रयोग गरियोस्"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"यो डिभाइस अनलक गर्न PIN पनि प्रयोग गरियोस्"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"यो डिभाइस अनलक गर्न पासवर्ड पनि प्रयोग गरियोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"प्याटर्न पुष्टि गर्नुहोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN पुष्टि गर्नुहोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"पासवर्ड पुष्टि गर्नुहोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"जारी राख्न आफ्नो डिभाइसको प्याटर्न प्रयोग गर्नुहोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"जारी राख्न आफ्नो डिभाइसको PIN हाल्नुहोस्"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"जारी राख्न आफ्नो डिभाइसको पासवर्ड हाल्नुहोस्"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"गलत PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"गलत पासवर्ड"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"प्याटर्न मिलेन"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"एपअनुसार हेर्नुहोस्"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"सिस्टमअनुसार हेर्नुहोस्"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ढुवानी गर्नुअघि उत्पादनको गुणस्तर जाँचिने भएकाले पहिलो पटक प्रयोग गर्दा साइकल काउन्ट शून्य नहुन सक्छ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"प्रक्रिया तथ्याङ्क"</string>
<string name="process_stats_summary" msgid="522842188571764699">"चालु रहने प्रक्रियाहरूको बारेको geeky तथ्याङ्क"</string>
<string name="app_memory_use" msgid="7559666138324410666">"मेमोरी प्रयोग"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"अतिथि सत्रका क्रियाकलाप मेटाउने हो?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"यो अतिथि सत्रका एप तथा डेटा अहिले नै मेटाइने छ र भविष्यमा तपाईं अतिथि मोडबाट बाहिरिँदा हरेक पटक अतिथि सत्रमा गरिने सबै क्रियाकलाप मेटाइने छन्"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"मेट्नुहोस्, अतिथि, क्रियाकलाप, हटाउनुहोस्, डेटा, पाहुना, मेटाउनुहोस्"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"अतिथिलाई फोन प्रयोग गर्न दिइयोस्"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"अतिथिहरूलाई फोन कल गर्ने अनुमति दिनुहोस्"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"अतिथि प्रयोगकर्तासँग कल हिस्ट्री सेयर गरिने छ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फोन कल तथा SMS सक्षम पार्नुहोस्"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"यी प्रयोगकर्तालाई एड्मिन बनाउनुहोस्"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"नेटवर्क, मोबाइल नेटवर्कको स्थिति, सेवाको स्थिति, सिग्नलको क्षमता, मोबाइल नेटवर्कको प्रकार, रोमिङ, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"क्रम संख्या, हार्डवेयरको संस्करण"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ब्याट्रीसम्बन्धी जानकारी, बनेको मिति, चार्ज हुने र डिस्चार्ज हुने क्रमको गणना, पहिलो पटक प्रयोग गरिएको मिति"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android को सुरक्षासम्बन्धी प्याचको स्तर, बेसब्यान्डको संस्करण, कर्नेलको संस्करण"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"थिम, उज्यालो, अँध्यारो मोड, प्रकाशको संवेदनशीलता, फोटोफोबिया, अझ अँध्यारो बनाउनुहोस्, अँध्यारो बनाउनुहोस्, अँध्यारो मोड, माइग्रेन"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"अँध्यारो थिम"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"डिफल्ट डिभाइस"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ओभरले लागू गर्न सकिएन"</string>
<string name="special_access" msgid="1767980727423395147">"एपलाई दिइएको विशेष एक्सेस"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> एपले असीमित डेटा प्रयोग गर्न सक्छन्</item>
- <item quantity="one">१ एपले असीमित डेटा प्रयोग गर्न सक्छ</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"थप हेर्नुहोस्"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"लामो समयसम्म ब्याकग्राउन्डमा चलिरहेका कार्यहरू"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"लामो समयसम्म ब्याकग्राउन्डमा चलिरहने कार्यहरूलाई अनुमति दिनुहोस्"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"एपको कम्प्याटिबिलिटीमा गरिएको परिवर्तन टगल गर्नुहोस्"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"डिफल्ट रूपमा सक्षम पारिएका परिवर्तनहरू"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"असक्षम पारिएका डिफल्ट परिवर्तनहरू"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"कुनै पनि एप उपलब्ध छैन"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"डिबग गर्न मिल्ने एपहरूमा मात्र एपको कम्प्याटिबिलिटीसँग सम्बन्धित परिवर्तनहरू गर्न सकिन्छ। कुनै डिबग गर्न मिल्ने एप इन्स्टल गरी फेरि प्रयास गर्नुहोस्।"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"अर्को सेटिङमा भर पर्छ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"खाता"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"चाइल्ड प्रोसेसमा लगाइएका प्रतिबन्ध हटाइयोस्"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"एपका चाइल्ड प्रोसेसहरूलाई सिस्टमका कुन कुन स्रोत प्रयोग गर्न दिने भन्ने कुराका सम्बन्धमा लगाइएका प्रतिबन्धहरू हटाउनुहोस्"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes चलाउने भूमिका जबरजस्ती अन गरियोस्"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes भूमिकामार्फत नोट बनाउने सिस्टम इन्टिग्रेसनहरू अन गर्नुहोस्। Notes भूमिका अन गरिसकिएको छ भने केही पनि हुँदैन।"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes भूमिकामार्फत नोट बनाउने सिस्टम इन्टिग्रेसनहरू अन गर्नुहोस्। Notes भूमिका अन गरिसकिएको छ भने केही पनि हुँदैन। रिबुट गर्नु पर्ने हुन्छ।"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"प्रसारण"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ब्रोडकास्ट गर्नुहोस्"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"आफू नजिकै प्ले भइरहेका प्रसारणहरू सुन्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 17819ef..647f5ef 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth staat aan"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Alles tonen"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Standaard notitie-app"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Knop bovenop indrukken"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (werkprofiel)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Schrijven in tekstvelden"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Alle drukken op knoppen met stylus negeren"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatuur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Eerste dag van de week"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Cijfervoorkeuren"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"App-standaard gebruiken"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Standaard gebruiken"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"zondag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel-versie"</string>
<string name="build_number" msgid="9009733242117579826">"Buildnummer"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play-systeemupdate"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batterij-informatie"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Niet beschikbaar"</string>
<string name="storage_settings" msgid="7472188817781592677">"Opslagruimte"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Opslag en cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-adres"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serienummer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Bedrijfstijd"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Productiedatum"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum van eerste gebruik"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Aantal cyclussen"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Niet beschikbaar"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Berekenen…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Naam wijzigen"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Koppelen"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Hiermee worden alle wifi- en bluetooth-instellingen gereset. Je kunt deze actie niet ongedaan maken."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetten"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth en wifi zijn gereset"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Wissen"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"E-simkaarten wissen"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Hiermee zeg je geen mobiele abonnementen op. Neem contact op met je provider als je vervangende simkaarten wilt downloaden."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Instellingen resetten"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Ook patroon gebruiken om dit apparaat te ontgrendelen"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Ook pincode gebruiken om dit apparaat te ontgrendelen"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Ook wachtwoord gebruiken om dit apparaat te ontgrendelen"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Patroon verifiëren"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Pincode verifiëren"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Wachtwoord verifiëren"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Teken het patroon van je apparaat om door te gaan"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Voer de pincode van het apparaat in om door te gaan"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Voer het wachtwoord van je apparaat in om door te gaan"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Onjuiste pincode"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Onjuist wachtwoord"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Onjuist patroon"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Bekijken per app"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Bekijken per systeem"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"&lt, <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Vanwege kwaliteitscontroles vóór de verzending is de cyclustelling misschien niet 0 bij het eerste gebruik"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Processtatistieken"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistieken voor nerds over actieve processen"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Geheugengebruik"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gastactiviteit verwijderen?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps en gegevens van deze gastsessie worden nu verwijderd en alle toekomstige gastactiviteit wordt verwijderd telkens wanneer je de gastmodus afsluit"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"verwijderen, gast, activiteit, wissen, gegevens, bezoeker, weggooien"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Gast toestaan telefoon te gebruiken"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Gast toestaan te bellen"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"De gespreksgeschiedenis wordt met de gastgebruiker gedeeld"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefoonoproepen en sms aanzetten"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Deze gebruiker beheerder maken"</string>
@@ -2767,7 +2779,7 @@
<string name="call_manager_title" msgid="3397433159509629466">"Oproepbeheer"</string>
<!-- no translation found for call_manager_summary (2558839230880919191) -->
<skip />
- <string name="cell_broadcast_settings" msgid="2416980110093867199">"Mobiele noodmeldingen"</string>
+ <string name="cell_broadcast_settings" msgid="2416980110093867199">"Noodmeldingen"</string>
<string name="network_operators_settings" msgid="5105453353329748954">"Netwerkproviders"</string>
<string name="access_point_names" msgid="5768430498022188057">"Namen van toegangspunten"</string>
<string name="enhanced_4g_lte_mode_title" msgid="6624700245232361149">"VoLTE"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"netwerk, status mobiel netwerk, servicestatus, signaalsterkte, type mobiel netwerk, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serienummer, hardwareversie"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batterij-informatie, productiedatum, aantal cyclussen, eerste gebruik"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"niveau van android-beveiligingspatch, smalbandversie, kernel-versie"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"thema, licht, donker, modus, lichtgevoeligheid, fotofobie, donkerder maken, donkerder, donkere modus, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"donker thema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Apparaatstandaard"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Toepassen van overlay mislukt"</string>
<string name="special_access" msgid="1767980727423395147">"Speciale app-toegang"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps kunnen onbeperkt data gebruiken</item>
- <item quantity="one">1 app kan onbeperkt data gebruiken</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Meer tonen"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Lange achtergrondtaken"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Uitvoeren van lange achtergrondtaken toestaan"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Zet app-compatibiliteitswijzigingen aan/uit"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Standaard aangezette wijzigingen"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Standaard uitgezette wijzigingen"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Geen apps"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Wijzigingen in app-compatibiliteit kunnen alleen worden aangepast voor apps waarin fouten kunnen worden opgespoord. Installeer een app waarin fouten kunnen worden opgespoord en probeer het opnieuw."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Is afhankelijk van een andere instelling"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Beperkingen voor onderliggende processen uitzetten"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Zet beperkingen voor het gebruik van systeembronnen voor onderliggende app-processen uit"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Aanzetten van de rol Notities afdwingen"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Zet systeemintegraties voor notities maken aan via de rol Notities. Als de rol Notities al aanstaat, gebeurt er niets."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Zet systeemintegraties voor notities maken aan via de rol Notities. Als de rol Notities al aanstaat, gebeurt er niets. Vereist opnieuw opstarten."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Uitzenden"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> uitzenden"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Luister naar uitzendingen die bij je in de buurt worden afgespeeld"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 96f25a4..b085ac2 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ବ୍ଲୁ-ଟୁଥ୍ ଅନ୍ କରାଗଲା"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ସବୁ ଦେଖନ୍ତୁ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ଷ୍ଟାଇଲସ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ଡିଫଲ୍ଟ ନୋଟ୍ସ ଆପ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ଟେଲ ବଟନ ଦବାଯାଇଛି"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ୱାର୍କ ପ୍ରୋଫାଇଲ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ଟେକ୍ସଟ ଫିଲ୍ଡଗୁଡ଼ିକରେ ଲେଖନ୍ତୁ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ସମସ୍ତ ଷ୍ଟାଇଲସ ବଟନ ଦାବିବାକୁ ଅଣଦେଖା କରନ୍ତୁ"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ଷ୍ଟାଇଲସ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ତାପମାତ୍ରା"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ସପ୍ତାହର ପ୍ରଥମ ଦିନ"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ନମ୍ବର ପସନ୍ଦଗୁଡ଼ିକ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ଆପ ଡିଫଲ୍ଟ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ଡିଫଲ୍ଟକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ସେଲସିୟସ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ଫାରେନହାଇଟ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ରବିବାର"</string>
@@ -967,7 +968,7 @@
<string name="accessibility_category_clone" msgid="7893383448944567885">"କ୍ଲୋନ ପ୍ରୋଫାଇଲ ଆକାଉଣ୍ଟଗୁଡ଼ିକ"</string>
<string name="accessibility_work_account_title" msgid="7622485151217943839">"କାର୍ଯ୍ୟ ଆକାଉଣ୍ଟ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="8535265881509557013">"ବ୍ୟକ୍ତିଗତ ଆକାଉଣ୍ଟ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="7573686516434589771">"ସର୍ଚ୍ଚ କରନ୍ତୁ"</string>
+ <string name="search_settings" msgid="7573686516434589771">"ସନ୍ଧାନ କରନ୍ତୁ"</string>
<string name="display_settings" msgid="7197750639709493852">"ଡିସପ୍ଲେ"</string>
<string name="accelerometer_title" msgid="7745991950833748909">"ଅଟୋ-ରୋଟେଟ ସ୍କ୍ରିନ"</string>
<string name="auto_rotate_option_off" msgid="2788096269396290731">"ବନ୍ଦ ଅଛି"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"କର୍ଣ୍ଣେଲ ସଂସ୍କରଣ"</string>
<string name="build_number" msgid="9009733242117579826">"ବିଲ୍ଡ ନମ୍ବର"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ସିଷ୍ଟମ୍ ଅପ୍ଡେଟ୍"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ବେଟେରୀ ସୂଚନା"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="storage_settings" msgid="7472188817781592677">"ଷ୍ଟୋରେଜ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ଷ୍ଟୋରେଜ୍ & କେଚ୍"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ବ୍ଲୁଟୁଥ ଠିକଣା"</string>
<string name="status_serial_number" msgid="9060064164331466789">"କ୍ରମିକ ନମ୍ବର"</string>
<string name="status_up_time" msgid="1274778533719495438">"ଚାଲୁ ରହିଥିବାର ସମୟ"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"ଉତ୍ପାଦନ ତାରିଖ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ପ୍ରଥମ ବ୍ୟବହାରର ତାରିଖ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ସାଇକେଲ ସଂଖ୍ୟା"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ଅନୁପଲବ୍ଧ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ଗଣନା କରାଯାଉଛି…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"ରିନେମ କରନ୍ତୁ"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ମାଉଣ୍ଟ କରନ୍ତୁ"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ଏହା ୱାଇ-ଫାଇ ଓ ବ୍ଲୁଟୁଥର ସମସ୍ତ ସେଟିଂସକୁ ରିସେଟ କରିବ। ଆପଣ ଏହି କାର୍ଯ୍ୟକୁ ପୂର୍ବବତ କରିପାରିବେ ନାହିଁ।"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ରିସେଟ କରନ୍ତୁ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ବ୍ଲୁଟୁଥ ଓ ୱାଇ-ଫାଇକୁ ରିସେଟ କରାଯାଇଛି"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ଖାଲି କରନ୍ତୁ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMଗୁଡ଼ିକୁ ଇରେଜ କରନ୍ତୁ"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ଏହା କୌଣସି ମୋବାଇଲ ସେବା ପ୍ଲାନକୁ ବାତିଲ କରିବ ନାହିଁ। ରିପ୍ଲେସମେଣ୍ଟ SIMଗୁଡ଼ିକୁ ଡାଉନଲୋଡ କରିବା ପାଇଁ ଆପଣଙ୍କ କ୍ୟାରିଅର ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ସେଟିଂସ ରିସେଟ କରନ୍ତୁ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ଏ ଡିଭାଇସ ଅନଲକ ପାଇଁ ପାଟର୍ନ ମଧ୍ୟ ବ୍ୟବହାର କର"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ଏ ଡିଭାଇସ ଅନଲକ ପାଇଁ PIN ମଧ୍ୟ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ଏ ଡିଭାଇସ ଅନଲକ ପାଇଁ ପାସୱାର୍ଡ ମଧ୍ୟ ବ୍ୟବହାର କର"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ପାଟର୍ନ ଯାଞ୍ଚ କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN ଯାଞ୍ଚ କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ପାସୱାର୍ଡ ଯାଞ୍ଚ କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସ ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସ PIN ଲେଖନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସ ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ଭୁଲ୍ PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ଭୁଲ ପାସ୍ୱର୍ଡ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ଭୁଲ ପାଟର୍ନ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ଆପ୍ସ ଅନୁସାରେ ଦେଖନ୍ତୁ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ସିଷ୍ଟମଗୁଡ଼ିକ ଅନୁସାରେ ଦେଖନ୍ତୁ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ସିପିଂ ପୂର୍ବରୁ ଗୁଣବତ୍ତା ନିରୀକ୍ଷଣ ଯୋଗୁଁ ପ୍ରଥମ ବ୍ୟବହାରରେ ସାଇକେଲ ଗଣନା ଶୂନ ହୋଇନପାରେ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ପ୍ରକ୍ରିୟା ଷ୍ଟାଟସ୍"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ଚାଲୁଥିବା ପ୍ରକ୍ରିୟା ବିଷୟରେ ଗିକୀ ଷ୍ଟେଟସ୍"</string>
<string name="app_memory_use" msgid="7559666138324410666">"ମେମୋରୀ ବ୍ୟବହାର"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ଅତିଥି କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରିବେ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ବର୍ତ୍ତମାନ ଏହି ଅତିଥି ସେସନରୁ ଆପ୍ସ ଏବଂ ଡାଟା ଡିଲିଟ ହୋଇଯିବ ଏବଂ ଆପଣ ପ୍ରତ୍ୟେକ ଥର ଅତିଥି ମୋଡରୁ ବାହାରକୁ ଗଲେ ଭବିଷ୍ୟତର ସମସ୍ତ ଅତିଥି କାର୍ଯ୍ୟକଳାପ ଡିଲିଟ ହୋଇଯିବ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ଡିଲିଟ କରନ୍ତୁ, ଅତିଥି, କାର୍ଯ୍ୟକଳାପ, କାଢ଼ି ଦିଅନ୍ତୁ, ଡାଟା, ଭିଜିଟର, ଇରେଜ କରନ୍ତୁ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ଅତିଥିଙ୍କୁ ଫୋନ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଅ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ଫୋନ କଲ କରିବାକୁ ଅତିଥିଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ଅତିଥି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ସହ କଲ ଇତିହାସ ସେୟାର କରାଯିବ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ଫୋନ୍ କଲ୍ ଓ SMS ଚାଲୁ କରନ୍ତୁ"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ଏହି ୟୁଜରଙ୍କୁ ଜଣେ ଆଡମିନ କରନ୍ତୁ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ନେଟୱାର୍କ, ମୋବାଇଲ ନେଟୱାର୍କ ସ୍ଥିତି, ସେବା ସ୍ଥିତି, ସିଗନାଲ କ୍ଷମତା, ମୋବାଇଲ ନେଟୱାର୍କ ପ୍ରକାର, ରୋମିଂ, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"କ୍ରମିକ ସଂଖ୍ୟା, ହାର୍ଡୱେର୍ ଭର୍ସନ୍"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ବେଟେରୀ ସୂଚନା, ଉତ୍ପାଦନ ତାରିଖ, ସାଇକେଲ ସଂଖ୍ୟା, ପ୍ରଥମ ବ୍ୟବହାର"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android ସୁରକ୍ଷା ପ୍ୟାଚ୍ ସ୍ତର, ବେସ୍ବ୍ୟାଣ୍ଡ ଭର୍ସନ୍, କର୍ନେଲ୍ ଭର୍ସନ୍"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ଥିମ୍, ଲାଇଟ୍, ଡାର୍କ, ମୋଡ୍, ଆଲୋକ ପ୍ରତି ସମ୍ବେଦନଶୀଳତା, ଫଟୋଫୋବିଆ, ଅଧିକ ଗାଢ଼ା କରନ୍ତୁ, ଗାଢ଼ା କରନ୍ତୁ, ଡାର୍କ ମୋଡ୍, ମାଇଗ୍ରେନ୍"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ଗାଢ଼ା ଥିମ୍"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ଡିଭାଇସ୍ ଡିଫଲ୍ଟ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ଓଭର୍ଲେ ଲାଗୁ କରିବାରେ ବିଫଳ"</string>
<string name="special_access" msgid="1767980727423395147">"ସ୍ୱତନ୍ତ୍ର ଆପ୍ ଆକ୍ସେସ୍"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>ଟି ଆପ୍, ଅପ୍ରତିବନ୍ଧିତ ଡାଟା ବ୍ୟବହାର କରିପାରନ୍ତି</item>
- <item quantity="one">1ଟି ଆପ୍, ଅପ୍ରତିବନ୍ଧିତ ଡାଟା ବ୍ୟବହାର କରିପାରେ</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ଅଧିକ ଦେଖନ୍ତୁ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ଅଧିକ ସମୟର ପୃଷ୍ଠପଟ ଟାସ୍କଗୁଡ଼ିକ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ଅଧିକ ସମୟ-ଚାଲୁଥିବା ପୃଷ୍ଠପଟର ଟାସ୍କଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅ"</string>
@@ -4097,7 +4106,7 @@
<string name="debug_autofill_category" msgid="5998163555428196185">"ଅଟୋଫିଲ୍"</string>
<string name="autofill_logging_level_title" msgid="3733958845861098307">"ଲଗିଂ ସ୍ତର"</string>
<string name="autofill_max_partitions" msgid="7342195529574406366">"ପ୍ରତି ସେସନରେ ସର୍ବାଧିକ ଅନୁରୋଧ"</string>
- <string name="autofill_max_visible_datasets" msgid="4970201981694392229">"ସର୍ବାଧିକ ଦେଖାଯାଉଥିବା ଡାଟାସେଟଗୁଡ଼ିକ"</string>
+ <string name="autofill_max_visible_datasets" msgid="4970201981694392229">"ସର୍ବାଧିକ ଦେଖାଯାଉଥିବା ଡାଟାସେଟ୍ଗୁଡିକ"</string>
<string name="autofill_reset_developer_options" msgid="6425613608979498608">"ଡିଫଲ୍ଟ ମୂଲ୍ୟକୁ ରିସେଟ୍ କରନ୍ତୁ"</string>
<string name="autofill_reset_developer_options_complete" msgid="1276741935956594965">"ଅଟୋଫିଲ୍ ଡେଭଲପର୍ ବିକଳ୍ପଗୁଡିକ ରିସେଟ୍ ହୋଇଛି"</string>
<string name="location_category" msgid="3496759112306219062">"ଲୋକେସନ୍"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ଆପ କମ୍ପାଟିବିଲିଟୀ ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ଟୋଗଲ କରନ୍ତୁ"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ଡିଫଲ୍ଟ ଭାବେ ସକ୍ଷମ କରାଯାଇଥିବା ପରିବର୍ତ୍ତନଗୁଡ଼ିକ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ଡିଫଲ୍ଟ ଭାବେ ଅକ୍ଷମ କରାଯାଇଥିବା ପରିବର୍ତ୍ତନଗୁଡ଼ିକ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ଆପ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ଆପ୍ କମ୍ପାଟିବିଲିଟୀ ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ କେବଳ ଡିବଗ୍ କରାଯାଇପାରୁଥିବା ଆପଗୁଡ଼ିକ ପାଇଁ ସଂଶୋଧନ କରାଯାଇପାରିବ। ଏକ ଡିବଗ୍ କରାଯାଇପାରୁଥିବା ଆପ୍ ଇନଷ୍ଟଲ୍ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ଅନ୍ୟଏକ ସେଟିଙ୍ଗ ଉପରେ ନିର୍ଭର କରିଥାଏ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ଆକାଉଣ୍ଟ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ଚାଇଲ୍ଡ ପ୍ରକ୍ରିୟା ପ୍ରତିବନ୍ଧକଗୁଡ଼ିକୁ ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ଆପର ଚାଇଲ୍ଡ ପ୍ରକ୍ରିୟାର ସିଷ୍ଟମ ରିସୋର୍ସ ବ୍ୟବହାର ପ୍ରତିବନ୍ଧକଗୁଡ଼ିକୁ ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"ନୋଟ୍ସ ଭୂମିକା ସକ୍ଷମ କରିବାକୁ ଫୋର୍ସ କରନ୍ତୁ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"ନୋଟ୍ସ ଭୂମିକା ମାଧ୍ୟମରେ ନୋଟ-ଟେକିଂ ସିଷ୍ଟମ ଇଣ୍ଟିଗ୍ରେସନକୁ ସକ୍ଷମ କରନ୍ତୁ। ଯଦି ନୋଟ୍ସ ଭୂମିକାକୁ ପୂର୍ବରୁ ସକ୍ଷମ କରାଯାଇଛି, ତେବେ କିଛି କରନ୍ତୁ ନାହିଁ।"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"ନୋଟ୍ସ ଭୂମିକା ମାଧ୍ୟମରେ ନୋଟ-ଟେକିଂ ସିଷ୍ଟମ ଇଣ୍ଟିଗ୍ରେସନକୁ ସକ୍ଷମ କରନ୍ତୁ। ଯଦି ନୋଟ୍ସ ଭୂମିକାକୁ ପୂର୍ବରୁ ସକ୍ଷମ କରାଯାଇଛି, ତେବେ କିଛି କରନ୍ତୁ ନାହିଁ। ରିବୁଟ କରିବା ଆବଶ୍ୟକ।"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ବ୍ରଡକାଷ୍ଟ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ବ୍ରଡକାଷ୍ଟ କରନ୍ତୁ"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ଆପଣଙ୍କ ଆଖପାଖରେ ଚାଲୁଥିବା ବ୍ରଡକାଷ୍ଟଗୁଡ଼ିକୁ ଶୁଣନ୍ତୁ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 1e8945e..02677e4 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ਬਲੂਟੁੱਥ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ਸਭ ਦੇਖੋ"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ਸਟਾਈਲਸ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ਨੋਟ-ਕਥਨਾਂ ਵਾਲੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਐਪ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"ਟੇਲ ਬਟਨ ਦਬਾਓ"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ਲਿਖਤ ਖੇਤਰਾਂ ਵਿੱਚ ਲਿਖੋ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ਸਟਾਈਲਸ ਨਾਲ ਦਬਾਏ ਗਏ ਸਾਰੇ ਬਟਨਾਂ ਨੂੰ ਅਣਡਿੱਠ ਕਰੋ"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ਸਟਾਈਲਸ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ਤਾਪਮਾਨ"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ਹਫ਼ਤੇ ਦਾ ਪਹਿਲਾ ਦਿਨ"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ਨੰਬਰਾਂ ਸੰਬੰਧੀ ਤਰਜੀਹਾਂ"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ਐਪ ਦੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਜੋਂ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਰਤੋ"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"ਸੈਲਸੀਅਸ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ਫ਼ਾਰਨਹਾਈਟ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ਐਤਵਾਰ"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"ਕਰਨਲ ਵਰਜਨ"</string>
<string name="build_number" msgid="9009733242117579826">"ਬਿਲਡ ਨੰਬਰ"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ਸਿਸਟਮ ਅੱਪਡੇਟ"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ਬੈਟਰੀ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="storage_settings" msgid="7472188817781592677">"ਸਟੋਰੇਜ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ਸਟੋਰੇਜ ਅਤੇ ਕੈਸ਼ੇ"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ਬਲੂਟੁੱਥ ਪਤਾ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"ਸੀਰੀਅਲ ਨੰਬਰ"</string>
<string name="status_up_time" msgid="1274778533719495438">"ਚਾਲੂ ਰਹਿਣ ਦਾ ਸਮਾਂ"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"ਬਣਾਉਣ ਦੀ ਤਾਰੀਖ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"ਪਹਿਲੀ ਵਰਤੋਂ ਦੀ ਤਾਰੀਖ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"ਸਾਈਕਲ ਗਿਣਤੀ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ਗਣਨਾ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"ਨਾਮ ਬਦਲੋ"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ਮਾਉਂਟ ਕਰੋ"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ਇਸ ਨਾਲ ਸਾਰੀਆਂ ਵਾਈ-ਫਾਈ ਅਤੇ ਬਲੂਟੁੱਥ ਸੈਟਿੰਗਾਂ ਰੀਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ। ਤੁਸੀਂ ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਅਣਕੀਤਾ ਨਹੀਂ ਕਰ ਸਕਦੇ।"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"ਬਲੂਟੁੱਥ ਅਤੇ ਵਾਈ-ਫਾਈ ਨੂੰ ਰੀਸੈੱਟ ਕੀਤਾ ਗਿਆ ਹੈ"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ਮਿਟਾਓ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMs ਨੂੰ ਮਿਟਾਓ"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ਇੰਝ ਕਰਨ ਨਾਲ ਕੋਈ ਮੋਬਾਈਲ ਸੇਵਾ ਪਲਾਨ ਰੱਦ ਨਹੀਂ ਹੋਵੇਗਾ। ਬਦਲਵੇਂ ਸਿਮ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ, ਆਪਣੇ ਕੈਰੀਅਰ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ਸੈਟਿੰਗਾਂ ਰੀਸੈੱਟ ਕਰੋ"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਪੈਟਰਨ ਵੀ ਵਰਤੋ"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਿੰਨ ਵੀ ਵਰਤੋ"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਵੀ ਵਰਤੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ਪੈਟਰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ਪਿੰਨ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਦਾ ਪੈਟਰਨ ਵਰਤੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਦਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣਾ ਡੀਵਾਈਸ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"ਗਲਤ ਪਿੰਨ"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"ਗਲਤ ਪਾਸਵਰਡ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ਗਲਤ ਪੈਟਰਨ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ਐਪਾਂ ਮੁਤਾਬਕ ਦੇਖੋ"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ਸਿਸਟਮਾਂ ਮੁਤਾਬਕ ਦੇਖੋ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ਸ਼ਿੱਪ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਕੁਆਲਿਟੀ ਜਾਂਚਾਂ ਦੇ ਕਾਰਨ, ਪਹਿਲੀ ਵਾਰ ਵਰਤੇ ਜਾਣ \'ਤੇ ਸਾਈਕਲ ਗਿਣਤੀ ਸ਼ਾਇਦ ਜ਼ੀਰੋ ਨਾ ਹੋਵੇ"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ਪ੍ਰਕਿਰਿਆ ਸਟੈਟਸ"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ਚੱਲ ਰਹੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਬਾਰੇ Geeky ਸਟੈਟਸ"</string>
<string name="app_memory_use" msgid="7559666138324410666">"ਮੈਮਰੀ ਵਰਤੋਂ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ਕੀ ਮਹਿਮਾਨ ਦੀ ਸਰਗਰਮੀ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ਇਸ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਦੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟੇ ਨੂੰ ਹੁਣੇ ਮਿਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਮਹਿਮਾਨ ਦੀ ਸਾਰੀ ਭਵਿੱਖੀ ਸਰਗਰਮੀ ਨੂੰ ਤੁਹਾਡੇ ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਹਰ ਵਾਰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ਮਿਟਾਓ, ਮਹਿਮਾਨ, ਸਰਗਰਮੀ, ਹਟਾਓ, ਡਾਟਾ, ਦਰਸ਼ਕ, ਮਿਟਾਓ"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ਮਹਿਮਾਨ ਨੂੰ ਫ਼ੋਨ ਵਰਤਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ਮਹਿਮਾਨ ਨੂੰ ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ਕਾਲ ਇਤਿਹਾਸ ਨੂੰ ਮਹਿਮਾਨ ਵਰਤੋਂਕਾਰ ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ਫ਼ੋਨ ਕਾਲਾਂ ਅਤੇ SMS ਚਾਲੂ ਕਰੋ"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਓ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ਨੈੱਟਵਰਕ, ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਸਥਿਤੀ, ਸੇਵਾ ਸਥਿਤੀ, ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ, ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ, ਰੋਮਿੰਗ, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"ਸੀਰੀਅਲ ਨੰਬਰ, ਹਾਰਡਵੇਅਰ ਵਰਜਨ"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ਬੈਟਰੀ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ, ਬਣਾਉਣ ਦੀ ਤਾਰੀਖ, ਸਾਈਕਲ ਗਿਣਤੀ, ਪਹਿਲੀ ਵਰਤੋਂ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android ਸੁਰੱਖਿਆ ਪੈਚ ਪੱਧਰ, ਬੇਸਬੈਂਡ ਵਰਜਨ, ਕਰਨਲ ਵਰਜਨ"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ਥੀਮ, ਹਲਕਾ, ਗੂੜ੍ਹਾ, ਮੋਡ, ਰੋਸ਼ਨੀ ਤੋਂ ਸੰਵੇਦਨਸ਼ੀਲਤਾ, ਫ਼ੋਟੋਫ਼ੋਬੀਆ, ਹੋਰ ਗੂੜ੍ਹਾ ਕਰੋ, ਗੂੜ੍ਹਾ ਕਰੋ, ਗੂੜ੍ਹਾ ਮੋਡ, ਸਿਰਦਰਦ"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ਗੂੜ੍ਹਾ ਥੀਮ"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ਡੀਵਾਈਸ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ਓਵਰਲੇ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
<string name="special_access" msgid="1767980727423395147">"ਵਿਸ਼ੇਸ਼ ਐਪ ਪਹੁੰਚ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਐਪ ਅਣ-ਪ੍ਰਤਿਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀ ਹੈ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਐਪਾਂ ਅਣ-ਪ੍ਰਤਿਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀਆਂ ਹਨ</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ਹੋਰ ਦੇਖੋ"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"ਲੰਬੇ ਬੈਕਗ੍ਰਾਊਂਡ ਕਾਰਜ"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"ਲੰਬਾ ਸਮਾਂ ਚੱਲਣ ਵਾਲੇ ਬੈਕਗ੍ਰਾਊਂਡ ਕਾਰਜਾਂ ਨੂੰ ਆਗਿਆ ਦਿਓ"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ਐਪ ਅਨੁਰੂਪਤਾ ਤਬਦੀਲੀਆਂ ਨੂੰ ਟੌਗਲ ਕਰੋ"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਚਾਲੂ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਤ \'ਤੇ ਬੰਦ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ਕੋਈ ਐਪ ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ਐਪ ਅਨੁਰੂਪਤਾ ਸੰਬੰਧੀ ਤਬਦੀਲੀਆਂ ਸਿਰਫ਼ ਡੀਬੱਗਯੋਗ ਐਪਾਂ ਲਈ ਸੋਧੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ। ਡੀਬੱਗਯੋਗ ਐਪ ਨੂੰ ਸਥਾਪਤ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ਹੋਰ ਸੈਟਿੰਗ \'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ਖਾਤਾ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ਉੱਪ-ਪ੍ਰਕਿਰਿਆ \'ਤੇ ਲੱਗੀਆਂ ਪਾਬੰਦੀਆਂ ਬੰਦ ਕਰੋ"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ਐਪ ਦੀਆਂ ਉੱਪ-ਪ੍ਰਕਿਰਿਆਵਾਂ ਲਈ ਸਿਸਟਮ ਸਰੋਤਾਂ ਦੀ ਵਰਤੋਂ \'ਤੇ ਲੱਗੀਆਂ ਪਾਬੰਦੀਆਂ ਬੰਦ ਕਰੋ"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes ਦੀ ਭੂਮਿਕਾ ਨੂੰ ਜ਼ਬਰਦਸਤੀ ਚਾਲੂ ਕਰੋ"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes ਦੀ ਭੂਮਿਕਾ ਰਾਹੀਂ ਨੋਟ ਬਣਾਉਣ ਵਾਲੇ ਸਿਸਟਮ ਏਕੀਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰੋ। ਜੇ Notes ਦੀ ਭੂਮਿਕਾ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਤਾਂ ਕੁਝ ਵੀ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes ਦੀ ਭੂਮਿਕਾ ਰਾਹੀਂ ਨੋਟ ਬਣਾਉਣ ਵਾਲੇ ਸਿਸਟਮ ਏਕੀਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰੋ। ਜੇ Notes ਦੀ ਭੂਮਿਕਾ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਚਾਲੂ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਤਾਂ ਕੁਝ ਵੀ ਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਰੀਬੂਟ ਕਰਨਾ ਲੋੜੀਂਦਾ ਹੈ।"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ਪ੍ਰਸਾਰਨ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ਦਾ ਪ੍ਰਸਾਰਨ ਕਰੋ"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ਉਨ੍ਹਾਂ ਪ੍ਰਸਾਰਨਾਂ ਨੂੰ ਸੁਣੋ ਜੋ ਤੁਹਾਡੇ ਨੇੜੇ ਚੱਲ ਰਹੇ ਹਨ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 0c2e018..3b61a1a2 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth włączony"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Pokaż wszystkie"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Rysik"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Domyślna aplikacja do notatek"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Długie naciśnięcie przycisku"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (profil służbowy)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Pisz w polach tekstowych"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignoruj wszystkie naciśnięcia przycisku rysika"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Rysik"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Pierwszy dzień tygodnia"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferencje dotyczące liczb"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Użyj domyślnych ustawień aplikacji"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Użyj opcji domyślnej"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Stopnie Celsjusza (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Stopnie Fahrenheita (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Niedziela"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Wersja jądra"</string>
<string name="build_number" msgid="9009733242117579826">"Numer kompilacji"</string>
<string name="module_version" msgid="1787518340082046658">"Aktualizacja systemowa Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacje o baterii"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Niedostępny"</string>
<string name="storage_settings" msgid="7472188817781592677">"Pamięć wewnętrzna"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Pamięć wewnętrzna i podręczna"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adres Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Numer seryjny"</string>
<string name="status_up_time" msgid="1274778533719495438">"Czas działania"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data produkcji"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data pierwszego użycia"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Liczba cykli"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Niedostępna"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Obliczanie..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Zmień nazwę"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Podłącz"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Wszystkie ustawienia Wi‑Fi i Bluetooth zostaną zresetowane. Tej czynności nie można cofnąć."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetuj"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth i Wi‑Fi zostały zresetowane"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Usuń"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Wykasuj karty eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Nie spowoduje to anulowania Twoich abonamentów. Aby pobrać zastępcze karty SIM, skontaktuj się z operatorem."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Zresetuj ustawienia"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Użyj też wzoru do odblokowania urządzenia"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Użyj też PIN-u do odblokowania urządzenia"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Użyj też hasła do odblokowania urządzenia"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Zweryfikuj wzór"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Zweryfikuj PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Zweryfikuj hasło"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Aby kontynuować, podaj wzór używany na urządzeniu"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Aby kontynuować, podaj kod PIN używany na urządzeniu"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Aby kontynuować, podaj hasło używane na urządzeniu"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Nieprawidłowy kod PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Nieprawidłowe hasło"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Nieprawidłowy wzór"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Wyświetl według aplikacji"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Wyświetl według systemów"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Ze względu na kontrolę jakości przed wysyłką liczba cykli przy pierwszym użyciu może być różna od zera"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statystyki procesów"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Rozbudowane statystyki uruchomionych procesów"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Użycie pamięci"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Usunąć aktywność gościa?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacje i dane z tej sesji gościa zostaną teraz usunięte. Cała przyszła aktywność gościa będzie usuwana podczas zamykania trybu gościa."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"usuwać, gość, aktywność, usuwanie, dane, użytkownik zewnętrzny, wykasować"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Zezwalaj na to, żeby gość korzystał z telefonu"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Zezwól gościom na połączenia telefoniczne"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Historia połączeń zostanie udostępniona gościowi"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Włącz rozmowy telefoniczne i SMS-y"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Przyznaj uprawnienia administratora"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"sieć, stan sieci komórkowej, stan usługi, moc sygnału, typ sieci komórkowej, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"numer seryjny, wersja sprzętu"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacje o baterii, data produkcji, liczba cykli, pierwsze użycie"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"stan aktualizacji zabezpieczeń Androida, wersja pasma podstawowego, wersja jądra"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"motyw, jasny, ciemny, tryb, światłowstręt, fotofobia, przyciemnij, przyciemnienie, tryb ciemny, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ciemny motyw"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Ustawienie domyślne urządzenia"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Nie udało się zastosować nakładki"</string>
<string name="special_access" msgid="1767980727423395147">"Aplikacje ze specjalnym dostępem"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacje mogą używać nieograniczonej ilości danych</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> aplikacji może używać nieograniczonej ilości danych</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacji może używać nieograniczonej ilości danych</item>
- <item quantity="one">1 aplikacja może używać nieograniczonej ilości danych</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Pokaż więcej"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Długotrwałe zadania w tle"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Zezwól na długotrwałe zadania w tle"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Przełączanie zmian zgodności aplikacji"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Zmiany domyślnie włączonych"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Zmiany domyślnie zablokowanych"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Brak aplikacji"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Kompatybilność aplikacji można zmieniać tylko w aplikacjach z możliwością debugowania. Zainstaluj aplikację z możliwością debugowania i spróbuj ponownie."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Zależy od innego ustawienia"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4361,8 +4367,8 @@
<string name="force_desktop_mode_summary" msgid="4587416867846930479">"Wymuś eksperymentalny tryb pulpitu na dodatkowych ekranach"</string>
<string name="enable_non_resizable_multi_window" msgid="6832903754625404477">"Włącz brak możliwości zmiany rozmiaru w trybie wielu okien"</string>
<string name="enable_non_resizable_multi_window_summary" msgid="3275763753261901999">"Zezwala na wyświetlanie aplikacji bez możliwości zmiany rozmiaru w trybie wielu okien"</string>
- <string name="hwui_force_dark_title" msgid="4256904905631994219">"Wymuszaj tryb ciemny"</string>
- <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Wymuszanie trybu ciemnego zawsze będzie włączone"</string>
+ <string name="hwui_force_dark_title" msgid="4256904905631994219">"Zastępuj wymuszanie trybu ciemnego"</string>
+ <string name="hwui_force_dark_summary" msgid="6515748781487952769">"Zastępuje ustawienie zawsze włączonej funkcji wymuszania trybu ciemnego"</string>
<string name="privacy_dashboard_title" msgid="6845403825611829558">"Prywatność"</string>
<string name="privacy_dashboard_summary" msgid="5775090172422786808">"Uprawnienia, aktywność na koncie, dane osobiste"</string>
<string name="privacy_controls_title" msgid="1383047169455206604">"Ustawienia"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Wyłącz ograniczenia procesów podrzędnych aplikacji"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Wyłącz ograniczenia dotyczące wykorzystywania zasobów systemowych w procesach podrzędnych aplikacji"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Wymuszaj włączenie roli Notatki"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Włącz integracje systemowe do robienia notatek w ramach roli Notatki. Jeśli rola Notatki jest już włączona, nie jest wymagane żadne działanie."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Włącz integracje systemowe do robienia notatek w ramach roli Notatki. Jeśli rola Notatki jest już włączona, to ustawienie nie będzie miało żadnego wpływu. Wymaga ponownego uruchomienia."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Komunikat"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmituj aplikację <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Posłuchaj komunikatów odtwarzanych w pobliżu"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index c7484e4..3eb5376 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth ativado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todos"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"App de notas padrão"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pressionar o botão da stylus"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de trabalho)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escreva nos campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todos os pressionamentos de botão com a stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primeiro dia da semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferências de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar o padrão do app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usar padrão"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versão do kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número da versão"</string>
<string name="module_version" msgid="1787518340082046658">"Atualização do sistema do Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informações da bateria"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Não disponível"</string>
<string name="storage_settings" msgid="7472188817781592677">"Armazenamento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Armazenamento e cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de série"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tempo em atividade"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data de fabricação"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data do primeiro uso"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Contagem de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Indisponível"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculando..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Renomear"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montar"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Todas as configurações de Wi-Fi e Bluetooth serão redefinidas. Não é possível desfazer essa ação."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reiniciar"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"O Bluetooth e o Wi-Fi foram redefinidos"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Limpar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Limpar eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Isso não cancelará nenhum plano de serviços móveis. Para fazer o download de chips substitutos, entre em contato com a operadora."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Redefinir configurações"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Também usar o padrão para o desbloqueio"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Também usar o PIN para o desbloqueio"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Também usar a senha para o desbloqueio"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verificar padrão"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verificar PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verificar senha"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use o padrão do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Insira o PIN do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Insira a senha do dispositivo para continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorreto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Senha incorreta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Padrão incorreto"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Visualizar por apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Visualizar por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"Menos de <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Devido a inspeções de qualidade realizadas antes do envio, a contagem de ciclos pode não estar zerada no primeiro uso"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estatísticas de processo"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estatísticas detalhadas sobre os processos em execução"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Uso da memória"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Excluir atividade do convidado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Os apps e dados desta sessão de convidado serão excluídos agora e toda a atividade futura será excluída sempre que você sair do modo convidado"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"excluir, convidado, atividade, remover, dados, visitante, apagar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permitir que o visitante use o telefone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permitir que o convidado faça ligações"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"O histórico de ligações será compartilhado com o usuário visitante"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefônicas e SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Tornar esse usuário um administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rede, estado da rede móvel, status do serviço, potência do sinal, tipo de rede móvel, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de série, versão do hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informações da bateria, data de fabricação, contagem de ciclos, primeiro uso"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nível do patch de segurança do android, versão da banda de base, versão do kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, claro, escuro, modo, sensibilidade à luz, fotofobia, escurecer, deixar mais escuro, modo escuro, enxaqueca"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema escuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Padrão do dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Falha ao aplicar sobreposição"</string>
<string name="special_access" msgid="1767980727423395147">"Acesso especial para apps"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> app pode usar dados ilimitados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps podem usar dados ilimitados</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ver mais"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tarefas em segundo plano longas"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tarefas em segundo plano de longa duração"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Alternar mudanças de compatibilidade do app"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Mudanças ativadas padrão"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Mudanças desativadas padrão"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nenhum app dispon."</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"As mudanças na compatibilidade de apps só podem ser modificadas para apps depuráveis. Instale um app depurável e tente novamente."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depende de outra configuração"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Conta"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desativar restrições de processos filhos"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desativar as restrições no uso de recursos do sistema dos processos filhos do app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forçar a ativação da função Notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Permitir integrações do sistema de anotações pela função Notas. Se essa função já estiver ativada, nada será feito."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Permitir integrações do sistema de anotações pela função Notas. Se essa função já estiver ativada, nada será feito. É necessário reinicializar o dispositivo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmitir"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmitir <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ouça transmissões que estão perto de você"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 8c790e3..3d9ffeb 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -53,7 +53,7 @@
<string name="bluetooth_device_name" msgid="1294669733490268384">"Nome do dispositivo"</string>
<string name="bluetooth_rename_device" msgid="4219655243836021443">"Mudar o nome deste dispositivo"</string>
<string name="bluetooth_rename_button" msgid="9162500408570289545">"Mudar o nome"</string>
- <string name="bluetooth_disconnect_title" msgid="4581951246357823044">"Quer desl. o dispositivo?"</string>
+ <string name="bluetooth_disconnect_title" msgid="4581951246357823044">"Pretende desl. o dispositivo?"</string>
<string name="bluetooth_pairing_pref_title" msgid="3497193027590444598">"Sincronizar novo dispositivo"</string>
<string name="keywords_add_bt_device" msgid="4533191164203174011">"Bluetooth"</string>
<string name="bluetooth_pair_right_ear_button" msgid="3979894494803078852">"Sincr. ouv. direito"</string>
@@ -85,10 +85,10 @@
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"Bluetooth desativado"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"Toque para o ativar."</string>
<string name="device_picker" msgid="2427027896389445414">"Escolher dispositivo Bluetooth"</string>
- <string name="bluetooth_ask_enablement" msgid="1529030199895339199">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar o Bluetooth"</string>
- <string name="bluetooth_ask_disablement" msgid="1879788777942714761">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> quer desativar o Bluetooth"</string>
- <string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Uma aplicação quer ativar o Bluetooth"</string>
- <string name="bluetooth_ask_disablement_no_name" msgid="382299750909188822">"Uma aplicação quer desativar o Bluetooth"</string>
+ <string name="bluetooth_ask_enablement" msgid="1529030199895339199">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar o Bluetooth"</string>
+ <string name="bluetooth_ask_disablement" msgid="1879788777942714761">"A aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> pretende desativar o Bluetooth"</string>
+ <string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Uma aplicação pretende ativar o Bluetooth"</string>
+ <string name="bluetooth_ask_disablement_no_name" msgid="382299750909188822">"Uma aplicação pretende desativar o Bluetooth"</string>
<string name="bluetooth_turning_on" msgid="3842613808709024730">"A ligar o Bluetooth..."</string>
<string name="bluetooth_turning_off" msgid="7406309124247701148">"Desativar o Bluetooth…"</string>
<string name="bluetooth_connection_permission_request" msgid="8793131019383198861">"Pedido de ligação Bluetooth"</string>
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth ativado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todos"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Caneta stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"App de notas predefinida"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Botão da caneta stylus premido"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de trabalho)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escrever em campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todos os botões premidos com a caneta stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Caneta stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primeiro dia da semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferências de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar predefinição da app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usar predefinição"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -446,15 +447,15 @@
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="352947044008973812">"Ignorar configur. de impressão digital?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="4876965433600560365">"Optou por utilizar a sua impressão digital como uma forma de desbloquear o telemóvel. Se ignorar agora, terá de configurar esta opção mais tarde. A configuração demora apenas alguns minutos."</string>
<string name="lock_screen_skip_setup_title" msgid="6979006375138175111">"Ignorar configuração para <xliff:g id="OPTIONS">%s</xliff:g>?"</string>
- <string name="lock_screen_pin_skip_title" msgid="6853866579893458111">"Quer ignorar a configuração do PIN?"</string>
+ <string name="lock_screen_pin_skip_title" msgid="6853866579893458111">"Pretende ignorar a configuração do PIN?"</string>
<string name="lock_screen_pin_skip_face_title" msgid="8810770395309512358">"Ignorar configuração de PIN e rosto?"</string>
<string name="lock_screen_pin_skip_fingerprint_title" msgid="371214283158750976">"Ignorar configuração de PIN e impressão digital?"</string>
<string name="lock_screen_pin_skip_biometrics_title" msgid="1082066572914073311">"Ignorar configuração de PIN, rosto e impressão digital?"</string>
- <string name="lock_screen_password_skip_title" msgid="8891463713793185768">"Quer ignorar configuração da palavra-passe?"</string>
+ <string name="lock_screen_password_skip_title" msgid="8891463713793185768">"Pretende ignorar configuração da palavra-passe?"</string>
<string name="lock_screen_password_skip_face_title" msgid="8166210519462164998">"Ignorar configuração de palavra-passe e rosto?"</string>
<string name="lock_screen_password_skip_fingerprint_title" msgid="2506392546016772170">"Ignorar configuração de palavra-passe e impressão digital?"</string>
<string name="lock_screen_password_skip_biometrics_title" msgid="900281322095862009">"Não configurar pal.-passe, face e imp. digital?"</string>
- <string name="lock_screen_pattern_skip_title" msgid="7214938393640060932">"Quer ignorar a configuração do padrão?"</string>
+ <string name="lock_screen_pattern_skip_title" msgid="7214938393640060932">"Pretende ignorar a configuração do padrão?"</string>
<string name="lock_screen_pattern_skip_face_title" msgid="145100333454316334">"Ignorar configuração de padrão e rosto?"</string>
<string name="lock_screen_pattern_skip_fingerprint_title" msgid="2513110208722100495">"Ignorar configuração de padrão e impressão digital?"</string>
<string name="lock_screen_pattern_skip_biometrics_title" msgid="2434258106825380187">"Ignorar configuração de padrão, rosto e impressão digital?"</string>
@@ -659,7 +660,7 @@
<string name="bluetooth_multuple_devices_mac_address" msgid="4974301550897923376">"Endereço Bluetooth do dispositivo:\n<xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="6943633443716052995">"Esquecer dispositivo?"</string>
<string name="remove_association_button" msgid="5004208145998061135">"Remover associação"</string>
- <string name="bluetooth_companion_app_remove_association_dialog_title" msgid="1344518601377991897">"Quer desassociar a app?"</string>
+ <string name="bluetooth_companion_app_remove_association_dialog_title" msgid="1344518601377991897">"Pretende desassociar a app?"</string>
<string name="bluetooth_companion_app_body" msgid="8442643629075687761">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> deixará de estar associada ao seu <xliff:g id="DEVICE_NAME">%2$s</xliff:g>"</string>
<string name="device_details_leaudio_toggle_summary" msgid="7684848254433230809">"Experimental. Melhora qualidade de áudio"</string>
<string name="bluetooth_unpair_dialog_forget_confirm_button" msgid="9184489424930549015">"Esquecer dispositivo"</string>
@@ -697,8 +698,8 @@
<string name="tx_link_speed" msgid="3071955184703668113">"<xliff:g id="TRANSMIT_LINK_SPEED">%1$d</xliff:g> Mbps"</string>
<string name="rx_link_speed" msgid="6292229178855567783">"<xliff:g id="RECEIVE_LINK_SPEED">%1$d</xliff:g> Mbps"</string>
<string name="link_speed" msgid="931786745741016446">"<xliff:g id="LINK_SPEED">%1$d</xliff:g> Mbps"</string>
- <string name="wifi_ask_enable" msgid="6860056048266810769">"<xliff:g id="REQUESTER">%s</xliff:g> quer ativar o Wi-Fi"</string>
- <string name="wifi_ask_disable" msgid="1663208096020309639">"<xliff:g id="REQUESTER">%s</xliff:g> quer desativar o Wi-Fi"</string>
+ <string name="wifi_ask_enable" msgid="6860056048266810769">"<xliff:g id="REQUESTER">%s</xliff:g> pretende ativar o Wi-Fi"</string>
+ <string name="wifi_ask_disable" msgid="1663208096020309639">"<xliff:g id="REQUESTER">%s</xliff:g> pretende desativar o Wi-Fi"</string>
<string name="art_verifier_for_debuggable_title" msgid="1926445785190030479">"Validar bytecode/aplicações depuráveis"</string>
<string name="art_verifier_for_debuggable_summary" msgid="4802875841862652879">"Permitir que o ART valide o bytecode para aplicações depuráveis"</string>
<string name="show_refresh_rate" msgid="5742688821872354973">"Mostrar taxa de atualização"</string>
@@ -796,7 +797,7 @@
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Verifique a ligação e tente novamente."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Escolha a rede"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Para ligar o seu dispositivo, escolha uma rede"</string>
- <string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Quer adicionar este dispositivo a “<xliff:g id="SSID">%1$s</xliff:g>”?"</string>
+ <string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Pretende adicionar este dispositivo a “<xliff:g id="SSID">%1$s</xliff:g>”?"</string>
<string name="wifi_dpp_wifi_shared_with_device" msgid="4484366631307204949">"Rede Wi‑Fi partilhada com o dispositivo"</string>
<string name="wifi_dpp_add_another_device" msgid="3307575293580739604">"Adicionar outro dispositivo"</string>
<string name="wifi_dpp_choose_different_network" msgid="8963625819804792157">"Escolher outra rede"</string>
@@ -824,11 +825,11 @@
<string name="wifi_ssid_too_long" msgid="5961719058705013875">"O nome da rede é demasiado longo."</string>
<string name="wifi_no_domain_warning" msgid="1452133316532366772">"É necessário especificar um domínio."</string>
<string name="wifi_no_user_cert_warning" msgid="8466376918835248956">"Certificado obrigatório."</string>
- <string name="wifi_scan_always_turnon_message" msgid="2165909441512029921">"Para melhorar a precisão da localização e para outros fins, <xliff:g id="APP_NAME">%1$s</xliff:g> quer ativar a verificação de redes, mesmo quando o Wi-Fi está desativado.\n\nPermitir esta opção para todas as aplicações que querrem verificar?"</string>
- <string name="wifi_scan_always_turn_on_message_unknown" msgid="4903345360745717385">"Para melhorar a precisão da localização e outros fins, uma app desconhecida quer ativar a procura de redes, mesmo quando o Wi-Fi está desativado.\n\nPermitir para todas as apps que querrem procurar?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="2165909441512029921">"Para melhorar a precisão da localização e para outros fins, <xliff:g id="APP_NAME">%1$s</xliff:g> pretende ativar a verificação de redes, mesmo quando o Wi-Fi está desativado.\n\nPermitir esta opção para todas as aplicações que pretenderem verificar?"</string>
+ <string name="wifi_scan_always_turn_on_message_unknown" msgid="4903345360745717385">"Para melhorar a precisão da localização e outros fins, uma app desconhecida pretende ativar a procura de redes, mesmo quando o Wi-Fi está desativado.\n\nPermitir para todas as apps que pretenderem procurar?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="4154200627800959777">"Permitir"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6997087934558839256">"Recusar"</string>
- <string name="no_internet_access_text" msgid="3611993143350310936">"Esta rede não tem acesso à Internet. Quer manter a ligação?"</string>
+ <string name="no_internet_access_text" msgid="3611993143350310936">"Esta rede não tem acesso à Internet. Pretende manter a ligação?"</string>
<string name="partial_connectivity_text" msgid="8874614799723694554">"Algumas aplicações e serviços podem não funcionar devido a conetividade limitada. Usar mesmo assim?"</string>
<string name="no_internet_access_remember" msgid="5113610157731269258">"Não perguntar novamente para esta rede"</string>
<string name="lost_internet_access_title" msgid="9032463989950384698">"A rede Wi-Fi não está ligada à Internet."</string>
@@ -885,7 +886,7 @@
<string name="wifi_p2p_disconnect_message" msgid="1208761239498807208">"Se desligar, a ligação com <xliff:g id="PEER_NAME">%1$s</xliff:g> será terminada."</string>
<string name="wifi_p2p_disconnect_multiple_message" msgid="4490648217799144078">"Se desligar, a ligação com <xliff:g id="PEER_NAME">%1$s</xliff:g> e <xliff:g id="PEER_COUNT">%2$s</xliff:g> outros aparelhos será terminada."</string>
<string name="wifi_p2p_cancel_connect_title" msgid="8476985132989357041">"Cancelar convite?"</string>
- <string name="wifi_p2p_cancel_connect_message" msgid="2409074184473879809">"Quer cancelar o convite para se ligar a <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
+ <string name="wifi_p2p_cancel_connect_message" msgid="2409074184473879809">"Pretende cancelar o convite para se ligar a <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="4880242270742385699">"Esquecer este grupo?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="1549663436920597006">"Zona Wi-Fi"</string>
<string name="wifi_hotspot_off_subtext" msgid="2751383134504362078">"Não está a partilhar Internet nem conteúdo com outros dispositivos"</string>
@@ -923,11 +924,11 @@
<string name="wifi_tether_carrier_unsupport_dialog_content" msgid="5920421547607921112">"Contacte o seu operador para obter mais detalhes"</string>
<string name="wifi_tether_enabled_subtext" msgid="5085002421099821056">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> está ativa"</string>
<string name="wifi_tether_configure_ssid_default" msgid="1709397571393179300">"AndroidHotspot"</string>
- <string name="wifi_add_app_single_network_title" msgid="8911612806204065225">"Quer guardar esta rede?"</string>
+ <string name="wifi_add_app_single_network_title" msgid="8911612806204065225">"Pretende guardar esta rede?"</string>
<string name="wifi_add_app_single_network_saving_summary" msgid="7366337245410388895">"A guardar…"</string>
<string name="wifi_add_app_single_network_saved_summary" msgid="7135016314713158289">"Guardado"</string>
<string name="wifi_add_app_network_save_failed_summary" msgid="7223817782309294652">"Não é possível guardar. Tente novamente."</string>
- <string name="wifi_add_app_networks_title" msgid="4384594865433042851">"Quer guardar as redes?"</string>
+ <string name="wifi_add_app_networks_title" msgid="4384594865433042851">"Pretende guardar as redes?"</string>
<string name="wifi_add_app_networks_saving_summary" msgid="577680250954742033">"A guardar <xliff:g id="NUMBER">%d</xliff:g> redes…"</string>
<string name="wifi_add_app_networks_saved_summary" msgid="1648417628665152905">"Redes guardadas."</string>
<string name="wifi_calling_settings_title" msgid="264665264535884440">"Chamadas Wi-Fi"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versão do kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número de compilação"</string>
<string name="module_version" msgid="1787518340082046658">"Atualização do sistema do Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informações da bateria"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Não disponível"</string>
<string name="storage_settings" msgid="7472188817781592677">"Armazenamento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Armazenamento e cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de série"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tempo de actividade"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data de fabrico"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data da primeira utilização"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Número de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Indisponível"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"A calcular..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Mudar o nome"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montar"</string>
@@ -1182,7 +1188,7 @@
<string name="storage_internal_format_details" msgid="2399034372813686846">"Pode formatar este cartão SD para armazenar fotos, vídeos, música e muito mais, bem como aceder a esses conteúdos noutros dispositivos. \n\n"<b>"Todos os dados neste cartão SD são apagados."</b>" \n\n"<b>"Antes da formatação"</b>" \n\n"<b>"Faça uma cópia de segurança das fotos e de outros conteúdos multimédia"</b>" \nMova os seus ficheiros multimédia para um armazenamento alternativo neste dispositivo ou transfira-os para um computador com um cabo USB. \n\n"<b>"Faça uma cópia de segurança das apps"</b>" \nTodas as apps armazenadas neste <xliff:g id="NAME">^1</xliff:g> são desinstaladas e os respetivos dados são apagados. Para manter estas apps, mova-as para um armazenamento alternativo neste dispositivo."</string>
<string name="storage_internal_unmount_details" msgid="487689543322907311"><b>"Quando ejetar este <xliff:g id="NAME_0">^1</xliff:g>, as aplicações armazenadas no mesmo deixam de funcionar e os ficheiros multimédia armazenados deixam de estar disponíveis até voltar a inseri-lo."</b>" \n\nEste <xliff:g id="NAME_1">^1</xliff:g> está formatado para funcionar apenas neste dispositivo. Não funciona em mais nenhum."</string>
<string name="storage_internal_forget_details" msgid="5606507270046186691">"Para utilizar as aplicações, as fotos ou os dados incluídos em <xliff:g id="NAME">^1</xliff:g>, insira-o novamente. \n\nEm alternativa, pode optar por esquecer este armazenamento se o mesmo não estiver disponível. \n\nSe optar por esquecê-lo, todos os dados presentes no dispositivo são eliminados permanentemente. \n\nPode reinstalar as aplicações posteriormente, mas os dados armazenados neste dispositivo são eliminados."</string>
- <string name="storage_internal_forget_confirm_title" msgid="379238668153099015">"Quer esquecer <xliff:g id="NAME">^1</xliff:g>?"</string>
+ <string name="storage_internal_forget_confirm_title" msgid="379238668153099015">"Pretende esquecer <xliff:g id="NAME">^1</xliff:g>?"</string>
<string name="storage_internal_forget_confirm" msgid="5752634604952674123">"Todas as apps, as fotos e os dados armazenados neste <xliff:g id="NAME">^1</xliff:g> são eliminados definitivamente."</string>
<string name="storage_detail_dialog_system" msgid="7461009051858709479">"O sistema inclui ficheiros utilizados para executar a versão <xliff:g id="VERSION">%s</xliff:g> do Android"</string>
<string name="storage_wizard_guest" msgid="5813419895687733649">"Não pode formatar cartões SD no Modo convidado"</string>
@@ -1269,14 +1275,13 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Esta ação repõe todas as definições de Wi‑Fi e Bluetooth. Não é possível anular esta ação."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Repor"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"O Bluetooth e o Wi-Fi foram repostos"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Apagar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Apagar eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Esta ação não cancela qualquer plano de serviços móveis. Para transferir SIMs de substituição, contacte o seu operador."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Repor definições"</string>
- <string name="reset_network_final_desc" msgid="5304365082065278425">"Quer repor todas as definições de rede? Não é possível anular esta ação."</string>
+ <string name="reset_network_final_desc" msgid="5304365082065278425">"Pretende repor todas as definições de rede? Não é possível anular esta ação."</string>
<string name="reset_network_final_desc_esim" msgid="1129251284212847939">"Repor todas as definições de rede e apagar os eSIMs? Não é possível anular esta ação."</string>
<string name="reset_network_final_button_text" msgid="2433867118414000462">"Repor definições"</string>
- <string name="reset_network_confirm_title" msgid="913014422184481270">"Quer repor?"</string>
+ <string name="reset_network_confirm_title" msgid="913014422184481270">"Pretende repor?"</string>
<string name="network_reset_not_available" msgid="1966334631394607829">"A reposição de rede não está disponível para este utilizador"</string>
<string name="reset_network_complete_toast" msgid="1367872474130621115">"As definições de rede foram repostas"</string>
<string name="reset_esim_error_title" msgid="4670073610967959597">"Não é possível apagar os SIMs"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Usar padrão para desbloquear o dispositivo"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Usar PIN para desbloquear o dispositivo"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Usar palavra-passe p/ desbloq. dispositivo"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Valide o padrão"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Valide o PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Valide a palavra-passe"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use o padrão do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Introduza o PIN do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Introduza a palavra-passe do dispositivo para continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorreto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Palavra-passe incorreta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Padrão incorreto"</string>
@@ -1495,7 +1506,7 @@
<string name="lock_settings_profile_screen_lock_title" msgid="3776275029218681815">"Bloqueio de ecrã do perfil de trabalho"</string>
<string name="lock_settings_profile_unification_title" msgid="5777961097706546513">"Usar um bloqueio"</string>
<string name="lock_settings_profile_unification_summary" msgid="1317553536289481654">"Usar um bloqueio para o perfil de trabalho e o ecrã do dispositivo"</string>
- <string name="lock_settings_profile_unification_dialog_title" msgid="5163178097464820825">"Quer utilizar um bloqueio?"</string>
+ <string name="lock_settings_profile_unification_dialog_title" msgid="5163178097464820825">"Pretende utilizar um bloqueio?"</string>
<string name="lock_settings_profile_unification_dialog_body" msgid="1222905637428672355">"O dispositivo irá utilizar o bloqueio de ecrã do seu perfil de trabalho. As políticas de trabalho serão aplicadas a ambos os bloqueios."</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="8844682343443755895">"O bloqueio do perfil de trabalho não cumpre os requisitos de segurança da sua entidade. Pode utilizar o mesmo bloqueio para o ecrã do dispositivo e o perfil de trabalho, mas serão aplicadas todas as políticas do bloqueio de trabalho."</string>
<string name="lock_settings_profile_unification_dialog_confirm" msgid="6276915393736137843">"Usar um bloqueio"</string>
@@ -1812,7 +1823,7 @@
<string name="accessibility_magnification_area_settings_full_screen_summary" msgid="2728962784113713010">"Ecrã inteiro"</string>
<string name="accessibility_magnification_area_settings_window_screen_summary" msgid="9191632962955877019">"Parte do ecrã"</string>
<string name="accessibility_magnification_area_settings_all_summary" msgid="8107511976748799455">"Alterne entre ecrã inteiro e parte do ecrã"</string>
- <string name="accessibility_magnification_mode_dialog_title" msgid="9151027667059878578">"Escolha como quer ampliar"</string>
+ <string name="accessibility_magnification_mode_dialog_title" msgid="9151027667059878578">"Escolha como pretende ampliar"</string>
<string name="accessibility_magnification_mode_dialog_option_full_screen" msgid="4892487869954032029">"Ampliar ecrã inteiro"</string>
<string name="accessibility_magnification_mode_dialog_option_window" msgid="4492443201099153362">"Ampliar parte do ecrã"</string>
<string name="accessibility_magnification_mode_dialog_option_switch" msgid="561043521011229424">"Alternar entre ecrã inteiro e parte do ecrã"</string>
@@ -2165,7 +2176,7 @@
<string name="power_charge_remaining" msgid="7046064326172265116">"<xliff:g id="UNTIL_CHARGED">%1$s</xliff:g> a cobrar"</string>
<string name="low_battery_summary" msgid="4458925347316501953">"Bateria fraca"</string>
<string name="background_activity_summary" msgid="3817376868497046016">"Permitir que a aplicação seja executada em segundo plano"</string>
- <string name="background_activity_warning_dialog_title" msgid="3449566823290744823">"Quer limitar a atividade em segundo plano?"</string>
+ <string name="background_activity_warning_dialog_title" msgid="3449566823290744823">"Pretende limitar a atividade em segundo plano?"</string>
<string name="background_activity_warning_dialog_text" msgid="8202776985767701095">"Se limitar a atividade em segundo plano de uma aplicação, esta pode apresentar um comportamento anormal."</string>
<string name="background_activity_disabled_dialog_text" msgid="4053170297325882494">"A app não está def. p/ otimizar a bateria, não a pode restringir.\n\nP/ restringir a app, ative a otimiz. da bateria."</string>
<string name="manager_battery_usage_unrestricted_title" msgid="2426486290463258032">"Sem restrições"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ver por apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Ver por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Devido a inspeções de qualidade antes do envio, a contagem de ciclos pode não ser zero na primeira utilização"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estatísticas do Processo"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estatísticas de peritos acerca dos processos em execução"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Utilização da memória"</string>
@@ -2427,7 +2439,7 @@
<string name="certificate_management_app_description" msgid="8507306554200869005">"Os certificados vão validar a sua identidade quando utilizar as apps e os URLs abaixo"</string>
<string name="uninstall_certs_credential_management_app" msgid="4945883254446077354">"Desinstalar certificados"</string>
<string name="remove_credential_management_app" msgid="6089291496976812786">"Remover app"</string>
- <string name="remove_credential_management_app_dialog_title" msgid="5713525435104706772">"Quer remover esta app?"</string>
+ <string name="remove_credential_management_app_dialog_title" msgid="5713525435104706772">"Pretende remover esta app?"</string>
<string name="remove_credential_management_app_dialog_message" msgid="7739474298063646935">"Esta app não gere certificados, mas permanece no dispositivo. Quaisquer certificados instalados pela app serão desinstalados."</string>
<string name="number_of_urls" msgid="1128699121050872188">"{count,plural, =1{# URL}other{# URLs}}"</string>
<string name="emergency_tone_title" msgid="6673118505206685168">"Sinal para marcação de emergência"</string>
@@ -2448,7 +2460,7 @@
<string name="backup_configure_account_default_summary" msgid="5323225330966306690">"Actualmente, nenhuma conta está a armazenar dados com cópia de segurança"</string>
<string name="backup_erase_dialog_title" msgid="5892431263348766484"></string>
<string name="backup_erase_dialog_message" msgid="2250872501409574331">"Deixar de fazer cópia de segurança de palavras-passe de rede Wi-Fi, marcadores, outras definições e dados da aplicação, bem como apagar todas as cópias nos servidores da Google?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2379053988557486162">"Quer parar de fazer cópias de segurança dos dados do dispositivo (como palavras-passe de Wi-Fi e o histórico de chamadas) e dos dados das aplicações (como as definições e os ficheiros armazenados pelas aplicações) e apagar todas as cópias nos servidores remotos?"</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2379053988557486162">"Pretende parar de fazer cópias de segurança dos dados do dispositivo (como palavras-passe de Wi-Fi e o histórico de chamadas) e dos dados das aplicações (como as definições e os ficheiros armazenados pelas aplicações) e apagar todas as cópias nos servidores remotos?"</string>
<string name="fullbackup_data_summary" msgid="971587401251601473">"Faça cópias de segurança automáticas dos dados do dispositivo (como palavras-passe de Wi-Fi e o histórico de chamadas) e dos dados das aplicações (como as definições e os ficheiros armazenados pelas aplicações) remotamente.\n\nQuando ativa a cópia de segurança automática, os dados do dispositivo e das aplicações são guardados remotamente de forma periódica. Os dados das aplicações podem ser quaisquer dados que uma aplicação tenha guardado (com base nas definições do programador), incluindo dados potencialmente confidenciais como contactos, mensagens e fotos."</string>
<string name="device_admin_settings_title" msgid="31392408594557070">"Definições de administração do dispositivo"</string>
<string name="active_device_admin_msg" msgid="7744106305636543184">"App administração do dispositivo"</string>
@@ -2602,12 +2614,12 @@
<string name="vpn_edit" msgid="5862301148429324911">"Editar perfil VPN"</string>
<string name="vpn_forget" msgid="2913950864877236737">"Esquecer"</string>
<string name="vpn_connect_to" msgid="216709261691085594">"Ligar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
- <string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Quer desligar esta VPN?"</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="6344167191984400976">"Versão"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
- <string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Quer substituir a VPN existente?"</string>
- <string name="vpn_set_vpn_title" msgid="1667539483005810682">"Quer definir a VPN como sempre ativa?"</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>
<string name="vpn_first_always_on_vpn_message" msgid="2769478310633047870">"Quando esta definição estiver ativada, não terá uma ligação à Internet até a VPN estabelecer ligação com êxito."</string>
<string name="vpn_replace_always_on_vpn_enable_message" msgid="9154843462740876652">"A sua VPN existente será substituída e não terá uma ligação à Internet até a VPN estabelecer ligação com êxito."</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="4299175336198481106">"Já está ligado a uma VPN sempre ativa. Se ligar a outra, a VPN existente será substituída e o modo sempre ativo será desativado."</string>
@@ -2626,7 +2638,7 @@
<string name="vpn_always_on_summary_active" msgid="175877594406330387">"Sempre ativada"</string>
<string name="vpn_insecure_summary" msgid="4450920215186742859">"Não segura"</string>
<string name="vpn_require_connection" msgid="1027347404470060998">"Bloquear ligações sem VPN"</string>
- <string name="vpn_require_connection_title" msgid="4186758487822779039">"Quer exigir uma ligação VPN?"</string>
+ <string name="vpn_require_connection_title" msgid="4186758487822779039">"Pretende exigir uma ligação VPN?"</string>
<string name="vpn_insecure_dialog_subtitle" msgid="1857621742868835300">"Insegura. Atualize para uma VPN IKEv2"</string>
<string name="vpn_lockdown_summary" msgid="4700625960550559029">"Selecione um perfil de VPN para permanecer sempre ligado. O tráfego de rede só será permitido quando ligado a esta VPN."</string>
<string name="vpn_lockdown_none" msgid="455915403560910517">"Nenhuma"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eliminar a atividade de convidado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"As apps e os dados desta sessão de convidado vão ser eliminados agora e toda a atividade de convidado futura é eliminada sempre que sair do modo convidado"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"eliminar, convidado, atividade, remover, dados, visitante, apagar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permitir que o convidado use o telemóvel"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permitir que o convidado faça chamadas"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"O histórico de chamadas vai ser partilhado com o utilizador convidado"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefónicas e SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Definir este utilizador como um administrador"</string>
@@ -2759,7 +2771,7 @@
<string name="extreme_threats_summary" msgid="3560742429496902008">"Receber alertas de ameaças extremas à vida e à propriedade"</string>
<string name="severe_threats_title" msgid="8962959394373974324">"Ameaças graves"</string>
<string name="severe_threats_summary" msgid="4982256198071601484">"Receber alertas para ameaças graves à vida e à propriedade"</string>
- <string name="amber_alerts_title" msgid="5238275758191804575">"Alertas AMBER"</string>
+ <string name="amber_alerts_title" msgid="5238275758191804575">"Alertas ÂMBAR"</string>
<string name="amber_alerts_summary" msgid="5755221775246075883">"Receber boletins acerca do rapto de crianças"</string>
<string name="repeat_title" msgid="8676570486899483606">"Repetir"</string>
<string name="call_manager_enable_title" msgid="1214301265395158720">"Ativar gestor de chamadas"</string>
@@ -2779,8 +2791,8 @@
<string name="nr_advanced_calling_summary" msgid="6926192539172030330">"Utilize o 5G para chamadas de voz"</string>
<string name="contact_discovery_opt_in_title" msgid="8708034790649773814">"Enviar contactos para o operador"</string>
<string name="contact_discovery_opt_in_summary" msgid="6539010458256667300">"Envie os números de telefone dos seus contactos para fornecer funcionalidades melhoradas."</string>
- <string name="contact_discovery_opt_in_dialog_title" msgid="2230536282911854114">"Quer enviar os contactos para o operador <xliff:g id="CARRIER">%1$s</xliff:g>?"</string>
- <string name="contact_discovery_opt_in_dialog_title_no_carrier_defined" msgid="2028983133745990320">"Quer enviar os contactos para o seu operador?"</string>
+ <string name="contact_discovery_opt_in_dialog_title" msgid="2230536282911854114">"Pretende enviar os contactos para o operador <xliff:g id="CARRIER">%1$s</xliff:g>?"</string>
+ <string name="contact_discovery_opt_in_dialog_title_no_carrier_defined" msgid="2028983133745990320">"Pretende enviar os contactos para o seu operador?"</string>
<string name="contact_discovery_opt_in_dialog_message" msgid="8818310894782757538">"Os números de telefone dos seus contactos serão enviados periodicamente para o operador <xliff:g id="CARRIER">%1$s</xliff:g>.<xliff:g id="EMPTY_LINE">
</xliff:g>Estas informações identificam se os seus contactos podem utilizar determinadas funcionalidades, como videochamadas ou algumas funcionalidades de mensagens."</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rede, estado da rede móvel, estado do serviço, intensidade do sinal, tipo de rede móvel, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de série, versão de hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informações da bateria, data de fabrico, número de ciclos, primeira utilização"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nível de patch de segurança android, versão da banda de base, versão do kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, luz, modo, escuro, sensibilidade à luz, fotofobia, tornar mais escuro, escurecer, modo escuro, enxaqueca"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema escuro"</string>
@@ -3107,7 +3120,7 @@
<string name="zen_onboarding_current_setting_title" msgid="5024603685220407195">"Sem som de notificações"</string>
<string name="zen_onboarding_new_setting_summary" msgid="7695808354942143707">"Não vê nem ouve notificações. São permitidas chamadas de contactos marcados com uma estrela ou de autores de chamadas repetentes."</string>
<string name="zen_onboarding_current_setting_summary" msgid="8864567406905990095">"(Definição atual)"</string>
- <string name="zen_onboarding_dnd_visual_disturbances_header" msgid="8639698336231314609">"Quer alterar as definições de notificação do modo Não incomodar?"</string>
+ <string name="zen_onboarding_dnd_visual_disturbances_header" msgid="8639698336231314609">"Pretende alterar as definições de notificação do modo Não incomodar?"</string>
<string name="sound_work_settings" msgid="752627453846309092">"Sons do perfil de trabalho"</string>
<string name="work_use_personal_sounds_title" msgid="7729428677919173609">"Usar sons do perfil pessoal"</string>
<string name="work_use_personal_sounds_summary" msgid="608061627969077231">"Utilize os mesmos sons que o seu perfil pessoal"</string>
@@ -3193,7 +3206,7 @@
<string name="lock_screen_notifications_interstitial_title" msgid="1360388192096354315">"Ecrã de bloqueio"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8373401288962523946">"Mostre todo o conteúdo de notificações de trabalho"</string>
<string name="lock_screen_notifications_summary_hide_profile" msgid="2183455323048921579">"Ocultar conteúdo de trabalho confidencial"</string>
- <string name="lock_screen_notifications_interstitial_message_profile" msgid="1456262034599029028">"Como quer que as notificações do perfil sejam apresentadas quando o dispositivo estiver bloqueado?"</string>
+ <string name="lock_screen_notifications_interstitial_message_profile" msgid="1456262034599029028">"Como pretende que as notificações do perfil sejam apresentadas quando o dispositivo estiver bloqueado?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="6950124772255324448">"Notificações do perfil"</string>
<string name="notifications_title" msgid="4221655533193721131">"Notificações"</string>
<string name="app_notifications_title" msgid="248374669037385148">"Notificações de apps"</string>
@@ -3583,7 +3596,7 @@
<string name="battery_summary" msgid="2491764359695671207">"Utilizou <xliff:g id="PERCENTAGE">%1$s</xliff:g> desde o último carregamento completo"</string>
<string name="battery_summary_24hr" msgid="7656033283282656551">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> de utilização nas últimas 24 horas"</string>
<string name="no_battery_summary" msgid="5769159953384122003">"Não utilizou bateria desde o último carregamento completo"</string>
- <string name="share_remote_bugreport_dialog_title" msgid="1575283098565582433">"Quer partilhar o relatório de erro?"</string>
+ <string name="share_remote_bugreport_dialog_title" msgid="1575283098565582433">"Pretende partilhar o relatório de erro?"</string>
<string name="share_remote_bugreport_dialog_message_finished" msgid="4869053468609007680">"O seu gestor de TI solicitou um relatório de erro para ajudar na resolução de problemas deste dispositivo. As aplicações e os dados podem ser partilhados."</string>
<string name="share_remote_bugreport_dialog_message" msgid="8714439220818865391">"O seu gestor de TI solicitou um relatório de erro para ajudar na resolução de problemas deste dispositivo. As aplicações e os dados podem ser partilhados e o dispositivo pode tornar-se temporariamente mais lento."</string>
<string name="sharing_remote_bugreport_dialog_message" msgid="3523877008096439251">"Este relatório de erro está a ser partilhado com o seu gestor de TI. Contacte-o para obter mais detalhes."</string>
@@ -3651,7 +3664,7 @@
<string name="zen_access_warning_dialog_title" msgid="6323325813123130154">"Permitir o acesso a Não incomodar para <xliff:g id="APP">%1$s</xliff:g>?"</string>
<string name="zen_access_warning_dialog_summary" msgid="8468714854067428987">"A app conseguirá ligar e desligar o modo Não incomodar e fazer alterações nas definições relacionadas."</string>
<string name="zen_access_disabled_package_warning" msgid="6565908224294537889">"Tem de permanecer ativado porque o acesso às notificações está ativado"</string>
- <string name="zen_access_revoke_warning_dialog_title" msgid="7377261509261811449">"Quer revogar o acesso a Não incomodar do <xliff:g id="APP">%1$s</xliff:g>?"</string>
+ <string name="zen_access_revoke_warning_dialog_title" msgid="7377261509261811449">"Pretende revogar o acesso a Não incomodar do <xliff:g id="APP">%1$s</xliff:g>?"</string>
<string name="zen_access_revoke_warning_dialog_summary" msgid="8689801842914183595">"Todas as regras Não incomodar criadas por esta app serão removidas."</string>
<string name="ignore_optimizations_on" msgid="6865583039303804932">"Não otimizar"</string>
<string name="ignore_optimizations_off" msgid="9186557038453586295">"Otimizar"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Predefinição do dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Falha ao aplicar a sobreposição."</string>
<string name="special_access" msgid="1767980727423395147">"Acesso especial a apps"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps podem utilizar dados sem restrições</item>
- <item quantity="one">1 app pode utilizar dados sem restrições</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Veja mais"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tarefas longas em 2.º plano"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tarefas de longa duração em segundo plano"</string>
@@ -4062,7 +4071,7 @@
<string name="storage_documents_and_other" msgid="3293689243732236480">"Documentos e outros"</string>
<string name="storage_system" msgid="8472410119822911844">"Sistema"</string>
<string name="storage_trash" msgid="2807138998886084856">"Lixo"</string>
- <string name="storage_trash_dialog_title" msgid="2296169576049935200">"Quer esvaziar o lixo?"</string>
+ <string name="storage_trash_dialog_title" msgid="2296169576049935200">"Pretende esvaziar o lixo?"</string>
<string name="storage_trash_dialog_ask_message" msgid="8982602137242358798">"Há <xliff:g id="TOTAL">%1$s</xliff:g> de ficheiros no lixo. Todos os itens serão eliminados definitivamente e não será possível restaurá-los."</string>
<string name="storage_trash_dialog_empty_message" msgid="7334670765528691400">"O lixo está vazio"</string>
<string name="storage_trash_dialog_confirm" msgid="1707723334982760436">"Esvaziar lixo"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Ativar/desativar alterações de compatibilidade das apps"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Alterações ativadas predefinidas"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Alterações desativadas predefinidas"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Sem apps disponíveis"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"As alterações de compatibilidade das apps apenas podem ser modificadas para apps depuráveis. Instale uma app depurável e tente novamente."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Esta definição depende de outra."</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Conta"</string>
@@ -4307,9 +4315,9 @@
<string name="privileged_action_disable_sub_dialog_progress" msgid="5900243067681478102">"A desativar o SIM<xliff:g id="ELLIPSIS">…</xliff:g>"</string>
<string name="privileged_action_disable_fail_title" msgid="6689494935697043555">"Não é possível desativar o operador"</string>
<string name="privileged_action_disable_fail_text" msgid="8404023523406091819">"Ocorreu um erro e não foi possível desativar o operador."</string>
- <string name="sim_action_enable_dsds_title" msgid="226508711751577169">"Quer utilizar 2 SIMs?"</string>
+ <string name="sim_action_enable_dsds_title" msgid="226508711751577169">"Pretende utilizar 2 SIMs?"</string>
<string name="sim_action_enable_dsds_text" msgid="970986559326263949">"Este dispositivo pode ter 2 SIMs ativos em simultâneo. Para continuar a utilizar 1 SIM de cada vez, toque em \"Não, obrigado\"."</string>
- <string name="sim_action_restart_title" msgid="7054617569121993825">"Quer reiniciar o dispositivo?"</string>
+ <string name="sim_action_restart_title" msgid="7054617569121993825">"Pretende reiniciar o dispositivo?"</string>
<string name="sim_action_yes" msgid="8076556020131395515">"Sim"</string>
<string name="sim_action_reboot" msgid="3508948833333441538">"Reiniciar"</string>
<string name="sim_action_no_thanks" msgid="435717748384544195">"Não, obrigado"</string>
@@ -4330,7 +4338,7 @@
<string name="choose_sim_text" msgid="4356662002583501647">"{count,plural, =1{Está disponível 1 número neste dispositivo, mas apenas pode utilizar um de cada vez}=2{Estão disponíveis 2 números neste dispositivo, mas apenas pode utilizar um de cada vez}other{Estão disponíveis # números neste dispositivo, mas apenas pode utilizar um de cada vez}}"</string>
<string name="choose_sim_activating" msgid="9035902671985449448">"A ativar<xliff:g id="ELLIPSIS">…</xliff:g>"</string>
<string name="choose_sim_could_not_activate" msgid="2154564459842291617">"Não foi possível ativar neste momento"</string>
- <string name="switch_sim_dialog_title" msgid="5407316878973237773">"Quer utilizar <xliff:g id="CARRIER_NAME">%1$s</xliff:g>?"</string>
+ <string name="switch_sim_dialog_title" msgid="5407316878973237773">"Pretende utilizar <xliff:g id="CARRIER_NAME">%1$s</xliff:g>?"</string>
<string name="switch_sim_dialog_text" msgid="7530186862171635464">"O operador <xliff:g id="CARRIER_NAME">%1$s</xliff:g> será utilizado para dados móveis, chamadas e SMS."</string>
<string name="switch_sim_dialog_no_switch_title" msgid="809763410787744247">"Nenhum SIM ativo disponível"</string>
<string name="switch_sim_dialog_no_switch_text" msgid="7053939850026876088">"Para utilizar dados móveis, funcionalidades de chamadas e SMS posteriormente, aceda às definições de rede."</string>
@@ -4342,7 +4350,7 @@
<string name="erase_sim_fail_title" msgid="2024446702985862427">"Não é possível apagar o SIM"</string>
<string name="erase_sim_fail_text" msgid="7870804401227483131">"Não é possível apagar este SIM devido a um erro.\n\nReinicie o dispositivo e tente novamente."</string>
<string name="network_connection_request_dialog_title" msgid="1896186380874289434">"Estabeleça ligação ao dispositivo"</string>
- <string name="network_connection_request_dialog_summary" msgid="7693038309792726170">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer utilizar uma rede Wi-Fi temporária para estabelecer ligação ao seu dispositivo."</string>
+ <string name="network_connection_request_dialog_summary" msgid="7693038309792726170">"A app <xliff:g id="APPNAME">%1$s</xliff:g> pretende utilizar uma rede Wi-Fi temporária para estabelecer ligação ao seu dispositivo."</string>
<string name="network_connection_timeout_dialog_message" msgid="598509083077743772">"Nenhum dispositivo encontrado. Certifique-se de que os dispositivos estão ativados e disponíveis para ligação."</string>
<string name="network_connection_timeout_dialog_ok" msgid="6022675321823723755">"Tentar novamente"</string>
<string name="network_connection_errorstate_dialog_message" msgid="3360714322047603239">"Ocorreu um erro. A aplicação cancelou o pedido de escolha de um dispositivo."</string>
@@ -4369,7 +4377,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="6434344989238055188">"Remover esta sugestão?"</string>
<string name="low_storage_summary" msgid="1979492757417779718">"Tem pouco espaço de armazenamento. <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilizados – <xliff:g id="FREE_SPACE">%2$s</xliff:g> livres."</string>
<string name="contextual_card_feedback_send" msgid="7409408664417908922">"Enviar feedback"</string>
- <string name="contextual_card_feedback_confirm_message" msgid="3186334562157665381">"Quer enviar-nos comentários acerca desta sugestão?"</string>
+ <string name="contextual_card_feedback_confirm_message" msgid="3186334562157665381">"Pretende enviar-nos comentários acerca desta sugestão?"</string>
<string name="copyable_slice_toast" msgid="1008251852798990606">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> copiado para a área de transferência."</string>
<string name="search_bar_account_avatar_content_description" msgid="880523277036898350"></string>
<string name="accessibility_usage_title" msgid="9190967143518779145">"Utilização da acessibilidade"</string>
@@ -4489,7 +4497,7 @@
<string name="calls_sms_no_sim" msgid="2336377399761819718">"sem cartão SIM"</string>
<string name="network_and_internet_preferences_title" msgid="8635896466814033405">"Preferências de rede"</string>
<string name="keywords_internet" msgid="7674082764898690310">"ligação de rede, internet, sem fios, dados, wifi, wi-fi, wi fi, telemóvel, dispositivo móvel, operador de telemóvel, 4g, 3g, 2g, lte"</string>
- <string name="reset_your_internet_title" msgid="4856899004343241310">"Quer repor a Internet?"</string>
+ <string name="reset_your_internet_title" msgid="4856899004343241310">"Pretende repor a Internet?"</string>
<string name="resetting_internet_text" msgid="6696779371800051806">"A repor a Internet…"</string>
<string name="fix_connectivity" msgid="2781433603228089501">"Corrigir a conetividade"</string>
<string name="networks_available" msgid="3299512933684383474">"Redes disponíveis"</string>
@@ -4521,12 +4529,12 @@
<string name="aware_summary_when_bedtime_on" msgid="2063856008597376344">"Não disponível porque o modo de hora de dormir está ativado."</string>
<string name="reset_importance_completed" msgid="3595536767426097205">"Reposição da importância das notificações concluída."</string>
<string name="apps_dashboard_title" msgid="3269953499954393706">"Apps"</string>
- <string name="bluetooth_message_access_notification_content" msgid="5111712860712823893">"Um dispositivo quer aceder às suas mensagens. Toque para obter detalhes."</string>
+ <string name="bluetooth_message_access_notification_content" msgid="5111712860712823893">"Um dispositivo pretende aceder às suas mensagens. Toque para obter detalhes."</string>
<string name="bluetooth_message_access_dialog_title" msgid="9009836130395061579">"Permitir o acesso às mensagens?"</string>
- <string name="bluetooth_message_access_dialog_content" msgid="7186694737578788487">"Um dispositivo Bluetooth, <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g>, quer aceder às suas mensagens.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
- <string name="bluetooth_phonebook_access_notification_content" msgid="9175220052703433637">"Um dispositivo quer aceder aos seus contactos e registo de chamadas. Toque para obter detalhes."</string>
+ <string name="bluetooth_message_access_dialog_content" msgid="7186694737578788487">"Um dispositivo Bluetooth, <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g>, pretende aceder às suas mensagens.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
+ <string name="bluetooth_phonebook_access_notification_content" msgid="9175220052703433637">"Um dispositivo pretende aceder aos seus contactos e registo de chamadas. Toque para obter detalhes."</string>
<string name="bluetooth_phonebook_access_dialog_title" msgid="7624607995928968721">"Permitir o acesso aos contactos e registo de chamadas?"</string>
- <string name="bluetooth_phonebook_access_dialog_content" msgid="959658135522249170">"Um dispositivo Bluetooth, <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g>, quer aceder aos seus contactos e registo de chamadas. Isto inclui dados acerca de chamadas recebidas e efetuadas.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
+ <string name="bluetooth_phonebook_access_dialog_content" msgid="959658135522249170">"Um dispositivo Bluetooth, <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g>, pretende aceder aos seus contactos e registo de chamadas. Isto inclui dados acerca de chamadas recebidas e efetuadas.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
<string name="category_name_brightness" msgid="8520372392029305084">"Brilho"</string>
<string name="category_name_lock_display" msgid="8310402558217129670">"Ecrã de bloqueio"</string>
<string name="category_name_appearance" msgid="8287486771764166805">"Aspeto"</string>
@@ -4587,9 +4595,9 @@
<string name="bluetooth_sim_card_access_dialog_title" msgid="5616323725563125179">"Permitir acesso ao SIM?"</string>
<string name="bluetooth_sim_card_access_dialog_content" msgid="6281997628405909566">"Um dispositivo Bluetooth, <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g>, quer aceder aos dados do seu SIM. Estes dados incluem os seus contactos.\n\nEnquanto estiver ligado, o dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> vai receber todas as chamadas feitas para <xliff:g id="PHONE_NUMBER">%3$s</xliff:g>."</string>
<string name="bluetooth_connect_access_notification_title" msgid="2573547043170883947">"Dispositivo Bluetooth disponível"</string>
- <string name="bluetooth_connect_access_notification_content" msgid="1328465545685433304">"Um dispositivo quer estabelecer ligação. Toque para obter detalhes."</string>
- <string name="bluetooth_connect_access_dialog_title" msgid="1948056782712451381">"Quer ligar ao dispositivo Bluetooth?"</string>
- <string name="bluetooth_connect_access_dialog_content" msgid="4336436466468405850">"O dispositivo <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> quer ligar-se a este telemóvel.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
+ <string name="bluetooth_connect_access_notification_content" msgid="1328465545685433304">"Um dispositivo pretende estabelecer ligação. Toque para obter detalhes."</string>
+ <string name="bluetooth_connect_access_dialog_title" msgid="1948056782712451381">"Pretende ligar ao dispositivo Bluetooth?"</string>
+ <string name="bluetooth_connect_access_dialog_content" msgid="4336436466468405850">"O dispositivo <xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> pretende ligar-se a este telemóvel.\n\nNão estabeleceu ligação ao dispositivo <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> anteriormente."</string>
<string name="bluetooth_connect_access_dialog_negative" msgid="4944672755226375059">"Não ligar"</string>
<string name="bluetooth_connect_access_dialog_positive" msgid="3630561675207269710">"Ligar"</string>
<string name="tare_settings" msgid="3788654800004869077">"Definições de TARE"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desativar restrições de processos secundários"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desative as restrições de utilização dos recursos do sistema pelos processos secundários da app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Force a ativação da função Notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Ative as integrações do sistema de notas através da função Notas. Se a função Notas já estiver ativada, não faz nada."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Ative as integrações do sistema de notas através da função Notas. Se a função Notas já estiver ativada, não faz nada. É necessário reiniciar."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmissão"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmita a app <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ouça transmissões em reprodução perto de si"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index c7484e4..3eb5376 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth ativado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todos"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"App de notas padrão"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pressionar o botão da stylus"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (perfil de trabalho)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Escreva nos campos de texto"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorar todos os pressionamentos de botão com a stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Primeiro dia da semana"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferências de números"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Usar o padrão do app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Usar padrão"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Domingo"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versão do kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Número da versão"</string>
<string name="module_version" msgid="1787518340082046658">"Atualização do sistema do Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informações da bateria"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Não disponível"</string>
<string name="storage_settings" msgid="7472188817781592677">"Armazenamento"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Armazenamento e cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Número de série"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tempo em atividade"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data de fabricação"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data do primeiro uso"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Contagem de ciclos"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Indisponível"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Calculando..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Renomear"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montar"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Todas as configurações de Wi-Fi e Bluetooth serão redefinidas. Não é possível desfazer essa ação."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Reiniciar"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"O Bluetooth e o Wi-Fi foram redefinidos"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Limpar"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Limpar eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Isso não cancelará nenhum plano de serviços móveis. Para fazer o download de chips substitutos, entre em contato com a operadora."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Redefinir configurações"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Também usar o padrão para o desbloqueio"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Também usar o PIN para o desbloqueio"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Também usar a senha para o desbloqueio"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verificar padrão"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verificar PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verificar senha"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Use o padrão do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Insira o PIN do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Insira a senha do dispositivo para continuar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN incorreto"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Senha incorreta"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Padrão incorreto"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Visualizar por apps"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Visualizar por sistemas"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"Menos de <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Devido a inspeções de qualidade realizadas antes do envio, a contagem de ciclos pode não estar zerada no primeiro uso"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Estatísticas de processo"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Estatísticas detalhadas sobre os processos em execução"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Uso da memória"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Excluir atividade do convidado?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Os apps e dados desta sessão de convidado serão excluídos agora e toda a atividade futura será excluída sempre que você sair do modo convidado"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"excluir, convidado, atividade, remover, dados, visitante, apagar"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Permitir que o visitante use o telefone"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permitir que o convidado faça ligações"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"O histórico de ligações será compartilhado com o usuário visitante"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefônicas e SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Tornar esse usuário um administrador"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rede, estado da rede móvel, status do serviço, potência do sinal, tipo de rede móvel, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"número de série, versão do hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informações da bateria, data de fabricação, contagem de ciclos, primeiro uso"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nível do patch de segurança do android, versão da banda de base, versão do kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, claro, escuro, modo, sensibilidade à luz, fotofobia, escurecer, deixar mais escuro, modo escuro, enxaqueca"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema escuro"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Padrão do dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Falha ao aplicar sobreposição"</string>
<string name="special_access" msgid="1767980727423395147">"Acesso especial para apps"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> app pode usar dados ilimitados</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps podem usar dados ilimitados</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ver mais"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tarefas em segundo plano longas"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permitir tarefas em segundo plano de longa duração"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Alternar mudanças de compatibilidade do app"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Mudanças ativadas padrão"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Mudanças desativadas padrão"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nenhum app dispon."</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"As mudanças na compatibilidade de apps só podem ser modificadas para apps depuráveis. Instale um app depurável e tente novamente."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depende de outra configuração"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Conta"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Desativar restrições de processos filhos"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Desativar as restrições no uso de recursos do sistema dos processos filhos do app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Forçar a ativação da função Notas"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Permitir integrações do sistema de anotações pela função Notas. Se essa função já estiver ativada, nada será feito."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Permitir integrações do sistema de anotações pela função Notas. Se essa função já estiver ativada, nada será feito. É necessário reinicializar o dispositivo."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmitir"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmitir <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ouça transmissões que estão perto de você"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index e5ccc0f..ecbb88e 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Funcția Bluetooth activată"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Afișează-le pe toate"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Creion"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplicația prestabilită pentru note"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Apăsarea butonului creionului"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (profil de serviciu)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Scrie în câmpurile text"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignoră toate apăsările de butoane ale creionului"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Creion"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatură"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prima zi a săptămânii"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferințe numerice"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Folosește setarea prestabilită a aplicației"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Folosește setarea prestabilită"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Duminică"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versiune nucleu"</string>
<string name="build_number" msgid="9009733242117579826">"Numărul versiunii"</string>
<string name="module_version" msgid="1787518340082046658">"Actualizare de sistem Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informații despre baterie"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Indisponibil"</string>
<string name="storage_settings" msgid="7472188817781592677">"Stocare"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Spațiul de stocare și memoria cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresă Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Număr de serie"</string>
<string name="status_up_time" msgid="1274778533719495438">"Durată de funcționare"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data fabricării"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data primei folosiri"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Numărul de cicluri"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Indisponibil"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Se calculează..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Redenumește"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montează"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Astfel vor fi resetate toate setările pentru Wi‑Fi și Bluetooth. Nu poți anula această acțiune."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetează"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth și Wi‑Fi au fost resetate"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Șterge"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Șterge cartelele eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Acest lucru nu va anula niciun abonament de servicii mobile. Pentru a descărca SIM-uri de înlocuire, contactează operatorul."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Resetează opțiunile"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Folosește și modelul pentru deblocare"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Folosește și PIN-ul pentru deblocare"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Folosește și parola pentru deblocare"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Confirmă modelul"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Confirmă codul PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Confirmă parola"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Pentru a continua, folosește modelul dispozitivului"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Pentru a continua, introdu codul PIN al dispozitivului"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Pentru a continua, introdu parola dispozitivului"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Cod PIN greșit"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Parolă greșită"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Model greșit"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Vezi după aplicații"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Vezi după sisteme"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Este posibil ca numărul de cicluri să nu fie zero la prima utilizare datorită inspecțiilor de calitate realizate înaintea expedierii"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistici de proces"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistici inteligente despre procesele care rulează"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Utilizarea memoriei"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ștergi activitatea invitatului?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplicațiile și datele din această sesiune pentru invitați vor fi șterse acum și toate activitățile viitoare ale invitaților vor fi șterse de fiecare dată când ieși din modul pentru invitați"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"șterge, invitat, activitate, elimină, date, vizitator, golește"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Invitații pot folosi telefonul"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Permite invitatului să inițieze apeluri"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Utilizatorul invitat va avea acces la istoricul apelurilor"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activează apelurile telefonice și SMS-urile"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Setează acest utilizator ca administrator"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rețea, starea rețelei mobile, starea acoperirii, puterea semnalului, tip de rețea mobilă, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"număr de serie, versiune de hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informații despre baterie, data fabricării, numărul de cicluri, prima folosire"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivelul corecției de securitate Android, versiunea benzii de bază, versiune nucleu"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"temă, luminozitate, întunecat, mod, sensibilitate la lumină, fotofobie, întunecă, modul întunecat, migrenă"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"temă întunecată"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Prestabilit pentru dispozitiv"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Nu s-a reușit aplicarea suprapunerii"</string>
<string name="special_access" msgid="1767980727423395147">"Acces special pentru aplicații"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplicații pot folosi date nerestricționate</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de aplicații pot folosi date nerestricționate</item>
- <item quantity="one">1 aplicație poate folosi date nerestricționate</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Vezi mai multe"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Activități de durată în fundal"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Permite activitățile îndelungate în fundal"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Activează / dezactivează modificările compatibilității aplicației"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Modificări activate prestabilite"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Modificări dezactivate prestabilite"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nicio aplicație"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Compatibilitatea aplicațiilor poate fi modificată numai pentru aplicațiile care pot fi remediate. Instalează o aplicație care poate fi remediată și încearcă din nou."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Depinde de altă setare"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Cont"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Dezactivează restricțiile pentru procese secundare"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Dezactivează restricțiile pentru folosirea resurselor sistemului de către procesele secundare ale aplicațiilor"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Activează forțat rolul Note"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Activează integrările de sistem pentru luat notițe prin intermediul rolului Note. Dacă rolul Note este deja activat, nu face nimic."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Activează integrările de sistem pentru luat notițe prin intermediul rolului Note. Dacă rolul Note este deja activat, nu face nimic. Necesită repornirea."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmite"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Difuzează <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Ascultă transmisii care se redau în apropiere"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1aa23d0..a77beb6 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Модуль Bluetooth включен"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Показать все"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Стилус"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Приложение для заметок по умолчанию"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Нажатие кнопки на конце стилуса"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (рабочий профиль)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Разрешить рукописный ввод в текстовых полях"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Игнорировать нажатия кнопок стилусом"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Стилус"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Единицы измерения температуры"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Первый день недели"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Настройки чисел"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Зависит от приложения"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Использовать по умолчанию"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Градусы Цельсия (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Градусы Фаренгейта (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Воскресенье"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Версия ядра"</string>
<string name="build_number" msgid="9009733242117579826">"Номер сборки"</string>
<string name="module_version" msgid="1787518340082046658">"Обновление системы через Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Информация о батарее"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Недоступно"</string>
<string name="storage_settings" msgid="7472188817781592677">"Хранилище"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Хранилище и кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Адрес Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Серийный номер"</string>
<string name="status_up_time" msgid="1274778533719495438">"Время с момента включения"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Дата изготовления"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Дата первого использования"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Количество циклов"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Недоступно"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Идет подсчет..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Переименовать"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Подключить"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Настройки Wi‑Fi и Bluetooth будут сброшены. Это действие нельзя отменить."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Сбросить"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Настройки Bluetooth и Wi‑Fi сброшены."</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Стереть"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Удалить все данные eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Это действие не отменит ваши тарифные планы. Чтобы скачать новые SIM-карты, обратитесь к оператору связи."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Сбросить настройки"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Использовать графический ключ для разблокировки"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Использовать PIN-код для разблокировки"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Использовать пароль для разблокировки"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Подтверждение графического ключа"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Подтверждение PIN-кода"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Подтверждение пароля"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Чтобы продолжить, нарисуйте графический ключ."</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Чтобы продолжить, введите PIN-код устройства."</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Чтобы продолжить, введите пароль устройства."</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Неверный PIN-код"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Неверный пароль"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Неверный ключ."</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Приложения"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Системные сервисы"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Из-за проверки качества перед доставкой количество циклов зарядки может отличаться от нуля при первом использовании."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статистика процессов"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Статистика запущенных процессов"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Использование памяти"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Удалить историю гостевого сеанса?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Все данные и приложения этого гостевого сеанса будут удалены. В дальнейшем история будет очищаться каждый раз при выходе из гостевого режима."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"удалить, гость, история, стереть, данные, посетитель, очистить"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Открыть гостю доступ к звонкам"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Разрешить гостям совершать звонки"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Гость получит доступ к журналу звонков"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Включить звонки и SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Назначить этого пользователя администратором"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"сеть, подключение к мобильной сети, доступность мобильной сети, уровень сигнала, тип мобильной сети, роуминг, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"серийный номер, версия аппаратного обеспечения"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"информация о батарее, дата изготовления, количество циклов, дата первого использования"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"обновление системы безопасности, прошивка модуля связи, версия ядра"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, свет, темнота, режим, светобоязнь, фотофобия, сделать темнее, затемнить, тёмная тема, мигрень"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"темная тема"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Вариант по умолчанию"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Не удалось применить наложение"</string>
<string name="special_access" msgid="1767980727423395147">"Специальный доступ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> приложение без ограничений мобильного интернета</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений мобильного интернета</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> приложений без ограничений мобильного интернета</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений мобильного интернета</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Ещё"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Продолжительные фоновые задачи"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Разрешить продолжительные фоновые задачи"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Показывать изменение настроек совместимости приложений"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Изменения, включенные по умолчанию"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Изменения, отключенные по умолчанию"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Нет приложений"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Настраивать изменение параметров совместимости можно только для приложений, доступных для отладки. Установите такое приложение и повторите попытку."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Эту настройку нельзя изменить, так как она зависит от других параметров."</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Аккаунт"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Отключить ограничения для дочерних процессов"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Отключить ограничения на использование системных ресурсов для дочерних процессов приложения"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Принудительно включить роль приложений для заметок"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Разрешить интеграцию систем для заметок через роль приложений для заметок. Если эта роль уже используется, ничего не произойдет."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Разрешить интеграцию систем для заметок через роль приложений для заметок. Если эта роль уже используется, ничего не произойдет. Требуется перезагрузка."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Трансляция"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Транслировать \"<xliff:g id="CURRENTAPP">%1$s</xliff:g>\""</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Подключайтесь к трансляциям рядом с вами."</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index f746435..1a2c3ec 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"බ්ලූටූත් ක්රියාත්මක කරන ලදී"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"සියල්ල බලන්න"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"පන්හිඳ"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"පෙරනිමි සටහන් යෙදුම"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"කෙළවර බොත්තම එබීම"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (කාර්යාල පැතිකඩ)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"පෙළ ක්ෂේත්රවල ලියන්න"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"සියලු පන්හිඳ බොත්තම් එබීම නොසලකා හරින්න"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"පන්හිඳ"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"උෂ්ණත්වය"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"සතියෙහි පළමු දිනය"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"අංක මනාප"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"යෙදුම් පෙරනිමිය භාවිතා කරන්න"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"පෙරනිමිය භාවිතා කරන්න"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"සෙල්සියස් (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ෆැරන්හයිට් (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ඉරිදා"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"කර්නලයේ අනුවාදය"</string>
<string name="build_number" msgid="9009733242117579826">"නිමැවුම් අංකය"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play පද්ධති යාවත්කාලීනය"</string>
+ <string name="battery_info" msgid="7873528123969546728">"බැටරි තොරතුරු"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ලද නොහැක"</string>
<string name="storage_settings" msgid="7472188817781592677">"ආචයනය"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"ආචයනය සහ හැඹිලිය"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"බ්ලූටූත් ලිපිනය"</string>
<string name="status_serial_number" msgid="9060064164331466789">"අනුක්රමාංකය"</string>
<string name="status_up_time" msgid="1274778533719495438">"ක්රියාකාරීව ඇති කාලය"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"නිෂ්පාදන දිනය"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"පළමු භාවිතයේ දිනය"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"චක්ර ගණන"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"නොමැත"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"ගණනය කරමින්…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"යළි නම් කරන්න"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"නංවන්න"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"මෙය සියලු Wi-Fi සහ බ්ලූටූත් සැකසීම් යළි සකසනු ඇත. ඔබට මෙම ක්රියාව පසුගමනය කළ නොහැක."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"යළි සකසන්න"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"බ්ලූටූත් සහ Wi‑Fi යළි සකසා ඇත"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"මකන්න"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMs මකන්න"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"මෙය ජංගම සේවා සැලසුම් කිසිවක් අවලංගු නොකරනු ඇත. ප්රතිස්ථාපන SIM බාගැනීමට, ඔබගේ වාහකය අමතන්න."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"සැකසීම් යළි පිහිටුවන ලදි"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"මෙම උපාංගය අගුළු හැරීමට රටාව ද භාවිතා කරන්න"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"මෙම උපාංගය අගුළු හැරීමට PIN ද භාවිතා කරන්න"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"මෙම උපාංගය අගුළු හැරීමට මුරපදය ද භාවිතය"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"රටාව සත්යාපනය කරන්න"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN සත්යාපනය කරන්න"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"මුරපදය සත්යාපනය කරන්න"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"දිගටම කරගෙන යාමට ඔබේ උපාංග රටාව භාවිත කරන්න"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"දිගටම කරගෙන යාමට ඔබේ උපාංග PIN අංකය ඇතුළු කරන්න"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"දිගටම කරගෙන යාමට ඔබේ උපාංග මුරපදය ඇතුළු කරන්න"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN එක වැරදියි"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"වැරදි මුරපදය"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"වැරදි රටාවකි"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"යෙදුම් අනුව බලන්න"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"පද්ධති අනුව බලන්න"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"නැව්ගත කිරීමට පෙර තත්ත්ව පරීක්ෂණ හේතුවෙන්, පළමු භාවිතයේ දී චක්ර ගණන ශුන්ය නොවිය හැක"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ක්රියාවලි සංඛ්යා ලේඛන"</string>
<string name="process_stats_summary" msgid="522842188571764699">"ධාවන ක්රියාවලි පිළිබඳ ගීක සංඛ්යා ලේඛන"</string>
<string name="app_memory_use" msgid="7559666138324410666">"මතක භාවිතය"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ආගන්තුක ක්රියාකාරකම මකන්නද?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"මෙම ආගන්තුක සැසියේ යෙදුම් සහ දත්ත දැන් මකනු ඇති අතර, ඔබ ආගන්තුක ප්රකාරයෙන් පිටවන සෑම අවස්ථාවකම අනාගත ආගන්තුකයන්ගේ ක්රියාකාරකම් සියල්ල මකනු ඇත"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"මකන්න, ආගන්තුක, ක්රියාකාරකම්, ඉවත් කරන්න, දත්ත, අමුත්තා, මකන්න"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"අමුත්තාට දුරකථනය භාවිත කිරීමට ඉඩ දෙන්න"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"අමුත්තන්ට දුරකථන ඇමතුම් ගැනීමට ඉඩ දෙන්න"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ඇමතුම් ඉතිහාසය අමුත්තා සමග බෙදා ගැනේ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"දුරකථන ඇමතුම් සහ SMS ක්රියාත්මක කරන්න?"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"මෙම පරිශීලකයා පරිපාලකයෙකු කරන්න"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ජාලය, ජංගම ජාල තත්ත්වය, සේවා තත්ත්වය, සංඥා ප්රබලතාව, ජංගම ජාල වර්ගය, සැරිසරණය, ICCID EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"අනුක්රමික අංකය, දෘඪාංග අනුවාදය"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"බැටරි තතු, නිෂ්පාදිත දිනය, චක්ර ගණන, පළමු භාවිතය"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android ආරක්ෂක පැච් මට්ටම, බේස්බෑන්ඩ් අනුවාදය, කර්නල් අනුවාදය"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"තේමාව, ළා, අඳුරු, ප්රකාරය, ආලෝක සංවේදීතාව, ෆොටෝෆෝබියා, වඩා අඳුරු කරන්න, අඳුරු කළ, අඳුරු ප්රකාරය, ඉරුවාරදය"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"අඳුරු තේමාව"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"උපාංගයේ පෙරනිමිය"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"උඩැතිරිය යෙදීමට අසමත් විය"</string>
<string name="special_access" msgid="1767980727423395147">"විශේෂ යෙදුම් ප්රවේශය"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one">යෙදුම් <xliff:g id="COUNT">%d</xliff:g>කට සීමා නොකළ දත්ත භාවිතා කළ හැක</item>
- <item quantity="other">යෙදුම් <xliff:g id="COUNT">%d</xliff:g>කට සීමා නොකළ දත්ත භාවිතා කළ හැක</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"තවත් බලන්න"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"දිග පසුබිම් කාර්ය"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"දිග වේලාවක් ධාවන වන පසුබිම් කාර්යවලට ඉඩ දෙන්න"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"යෙදුම් ගැළපෙන බව පිළිබඳ වෙනස් කිරීම් ටොගල් කරන්න"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"පෙරනිමි සබල කළ වෙනස් කිරීම්"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"පෙරනිමි අබල කළ වෙනස් කිරීම්"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ලද හැකි යෙදුම් නැත"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"යෙදුම් ගැළපෙන බවේ වෙනස් කිරීම් නිදොස් කළ හැකි යෙදුම් සඳහා පමණක් වෙනස් කළ හැකිය. නිදොස් කළ හැකි යෙදුමක් ස්ථාපනය කර නැවත උත්සාහ කරන්න."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"වෙනත් සැකසීමක් මත රඳා පවතී"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ගිණුම"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ළමා ක්රියාවලි සීමාවන් අබල කරන්න"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"යෙදුම් ළමා ක්රියාවලීන් පද්ධතියෙහි සම්පත් භාවිතයේ සීමාවන් අබල කරන්න"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"සටහන් භූමිකාව බලෙන් සබල කරන්න"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"සටහන් භූමිකාව හරහා සටහන් ගැනීමේ පද්ධති ඒකාබද්ධ කිරීම් සබල කරන්න. සටහන් භූමිකාව දැනටමත් සබල කර ඇත්නම්, කිසිවක් නොකරයි."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"සටහන් භූමිකාව හරහා සටහන් ගැනීමේ පද්ධති ඒකාබද්ධ කිරීම් සබල කරන්න. සටහන් භූමිකාව දැනටමත් සබල කර ඇත්නම්, කිසිවක් නොකරයි. යළි පණ ගැන්වීම අවශ්යයි."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"විකාශනය"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> විකාශනය"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ඔබ අසල වාදනය වන විකාශනවලට සවන් දෙන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index abff690..b4f9e7e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Rozhranie Bluetooth je zapnuté"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Zobraziť všetky"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Dotykové pero"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Predvolená aplikácia na poznámky"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Stlačenie tlačidla na tele pera"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (pracovný profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Písanie v textových poliach"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorovať všetky stlačenia tlačidla dotykového pera"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Dotykové pero"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Teplota"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prvý deň v týždni"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Predvoľby čísiel"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Použiť predvolené nastavenie aplikácie"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Použiť predvolené"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celzius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Nedeľa"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Verzia jadra"</string>
<string name="build_number" msgid="9009733242117579826">"Číslo zostavy"</string>
<string name="module_version" msgid="1787518340082046658">"Aktualizácia systému Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informácie o batérii"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nie je k dispozícii"</string>
<string name="storage_settings" msgid="7472188817781592677">"Priestor"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Ukladací priestor a vyrovnávacia pamäť"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresa Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Sériové číslo"</string>
<string name="status_up_time" msgid="1274778533719495438">"Dĺžka prevádzky"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Dátum výroby"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Dátum prvého použitia"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Počet cyklov"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nedostupné"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Prebieha výpočet..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Premenovať"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Pripojiť"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Týmto sa resetujú všetky nastavenia rozhrania Bluetooth a pripojenia Wi‑Fi. Túto akciu nemôžete vrátiť späť."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Resetovať"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth a Wi‑Fi boli resetované"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Vymazať"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Vymazať eSIM karty"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Nezrušíte tým žiadne tarify mobilných služieb. Ak si chcete stiahnuť náhradné SIM karty, kontaktujte operátora."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Resetovať nastavenia"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Toto zariadenie odomykať aj vzorom"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Toto zariadenie odomykať aj kódom PIN"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Toto zariadenie odomykať aj heslom"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Overenie vzoru"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Overenie kódu PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Overenie hesla"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Ak chcete pokračovať, použite bezpečnostný vzor zariadenia"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Ak chcete pokračovať, zadajte PIN zariadenia"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Ak chcete pokračovať, zadajte heslo zariadenia"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Nesprávny kód PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Nesprávne heslo"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Nesprávny vzor"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Zobraziť podľa aplikácií"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Zobraziť podľa systémov"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Pred odoslaním sa vykonáva kontrola kvality, preto nemusí byť pri prvom použití počet cyklov nulový"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Štatistiky procesov"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Podrobné štatistiky spustených procesov"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Využitie pamäte"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Chcete odstrániť aktivitu hosťa?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikácie a údaje z tejto relácie hosťa sa teraz odstránia a budúca aktivita hosťa sa odstráni vždy pri ukončení režimu pre hostí"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"odstrániť, hosť, aktivita, odobrať, údaje, návštevník, vymazať"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Povoliť hosťovi používať telefón"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Povoliť hosťom volať"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"S hosťom sa bude zdieľať história hovorov"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Zapnúť telefonáty a SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Nastaviť tohto používateľa ako správcu"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"sieť, stav mobilnej siete, stav služby, sila signálu, typ mobilnej siete, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"sériové číslo, hardvérová verzia"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informácie o batérii, dátum výroby, počet cyklov, prvé použitie"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"úroveň opráv zabezpečenia androidu, verzia základného pásma, verzia jadra"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"motív, svetlý, tmavý, režim, svetloplachosť, fotofóbia, stmaviť, tmavý režim, migréna"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tmavý motív"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Predvolené nastavenie zariadenia"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Nepodarilo sa prekryť"</string>
<string name="special_access" msgid="1767980727423395147">"Špeciálny prístup aplikácií"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="few">Neobmedzené dáta môžu používať <xliff:g id="COUNT">%d</xliff:g> aplikácie</item>
- <item quantity="many">Neobmedzené dáta môže používať <xliff:g id="COUNT">%d</xliff:g> aplikácie</item>
- <item quantity="other">Neobmedzené dáta môže používať <xliff:g id="COUNT">%d</xliff:g> aplikácií</item>
- <item quantity="one">Neobmedzené dáta môže používať 1 aplikácia</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Zobraziť viac"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dlhé úlohy na pozadí"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Povoliť dlhotrvajúce úlohy na pozadí"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Prepínať zmeny kompatibility aplikácie"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Predvolené aktivované zmeny"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Predvolené deaktivované zmeny"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Žiadne aplikácie"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Zmeny kompatibility môžete upraviť iba v prípade laditeľných aplikácií. Nainštalujte si laditeľnú aplikáciu a skúste to znova."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Závisí od iného nastavenia"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Účet"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Vypnúť obmedzenia podradených procesov"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Vypnúť obmedzenia podradených procesov na používanie zdroja systému"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Vynútiť povolenie roly Poznámky"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Povoľte integrácie systému na písanie poznámok prostredníctvom roly Poznámky. Ak je rola Poznámky už povolená, nič sa nestane."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Povoľte integrácie systému na písanie poznámok prostredníctvom roly Poznámky. Ak je rola Poznámky už povolená, nič sa nestane. Vyžaduje sa reštart."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Vysielanie"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Vysielanie aplikácie <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Počúvajte vysielania v okolí"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 77201c3..309385d 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth je vklopljen"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Pokaži vse"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pisalo"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Privzeta aplikacija za zapiske"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pritisk gumba pisala"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (delovni profil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Pisanje v besedilnih poljih"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Prezri vse pritiske gumbov pisala"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Pisalo"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Prvi dan v tednu"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Nastavitve številk"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Uporaba privzete nastavitve aplikacije"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Uporabi privzeto"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celzij (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"nedelja"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Različica jedra"</string>
<string name="build_number" msgid="9009733242117579826">"Delovna različica"</string>
<string name="module_version" msgid="1787518340082046658">"Posodobitev sistema prek Googla Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacije o bateriji"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Ni na voljo"</string>
<string name="storage_settings" msgid="7472188817781592677">"Shramba"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Shramba in predpomnilnik"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Naslov Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serijska številka"</string>
<string name="status_up_time" msgid="1274778533719495438">"Čas delovanja"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Datum izdelave"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum prve uporabe"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Število ciklov"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ni na voljo"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Izračunavanje ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Preimenuj"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Vpenjanje"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"S tem boste ponastavili vse nastavitve za Wi‑Fi in Bluetooth. Tega dejanja ni mogoče razveljaviti."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Ponastavi"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth in Wi‑Fi sta bila ponastavljena."</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Izbriši"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Izbris kartic e-SIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"S tem ne boste prekinili nobenega naročniškega paketa za mobilno telefonijo. Če želite prenesti nadomestne kartice SIM, se obrnite na operaterja."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Ponastavi nastavitve"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Ta naprava se lahko odklepa tudi z vzorcem"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Ta naprava se lahko odklepa tudi s kodo PIN"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Ta naprava se lahko odklepa tudi z geslom"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Potrdite vzorec"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Potrdite kodo PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Potrdite geslo"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Če želite nadaljevati, uporabite vzorec za napravo"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Če želite nadaljevati, vnesite kodo PIN za napravo"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Če želite nadaljevati, vnesite geslo za napravo"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Napačna koda PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Napačno geslo"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Napačen vzorec"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Prikaz po aplikacijah"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Prikaz po sistemih"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Zaradi pregledov kakovosti pred pošiljanjem bo število ciklov ob prvi uporabi morda večje od nič."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistični podatki o procesih"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistični podatki o procesih, ki se izvajajo"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Poraba pomnilnika"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Želite izbrisati dejavnost gosta?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije in podatki v tej seji gosta bodo zdaj izbrisani, prihodnja dejavnost gosta pa bo izbrisana vsakič, ko zaprete način za goste."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"brisanje, gost, dejavnost, odstrani, podatki, obiskovalec, izbriši"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Gostu dovoli uporabo telefona"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Gostu dovoli opravljanje telefonskih klicev"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Zgodovina klicev bo deljena s tem gostom."</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Vklopi telefonske klice in sporočila SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Spremeni tega uporabnika v skrbnika"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"omrežje, stanje mobilnega omrežja, stanje storitve, moč signala, vrsta mobilnega omrežja, gostovanje, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serijska številka, različica strojne opreme"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacije o bateriji, datum izdelave, število ciklov, prva uporaba"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"raven varnostnih popravkov za android, različica radijske programske opreme, različica jedra"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, svetla, temna, način, občutljivost na svetlobo, fotofobija, naredi temnejše, potemni, temni način, migrena"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"temna tema"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Privzeta nastavitev naprave"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Prekrivanje ni uspelo"</string>
<string name="special_access" msgid="1767980727423395147">"Posebni dostop za aplikacije"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aplikaciji je dovoljen neomejen prenos podatkov.</item>
- <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> aplikacijama je dovoljen neomejen prenos podatkov.</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacijam je dovoljen neomejen prenos podatkov.</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacijam je dovoljen neomejen prenos podatkov.</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Prikaži več"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Dolgotrajna opravila v ozadju"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Dovoli dolgotrajna opravila v ozadju"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Vklop/izklop sprememb združljivosti aplikacij"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Privzeto omogočene spremembe"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Privzeto onemogočene spremembe"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Ni aplikacij"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Spremembe združljivosti aplikacij je mogoče spreminjati samo za aplikacije z možnostjo odpravljanja napak. Namestite aplikacijo z možnostjo odpravljanja napak in poskusite znova."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Ta nastavitev je odvisna od druge nastavitve"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Račun"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Onemogoči omejitve za podrejene procese"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Onemogoči omejitev uporabe sistemskih sredstev za podrejene procese aplikacije."</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Vsili omogočanje vloge »Zapiski«"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Omogočanje integracij sistema za ustvarjanje zapiskov prek vloge »Zapiski«. Če je vloga »Zapiski« že omogočena, se ne zgodi nič."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Omogočanje integracij sistema za ustvarjanje zapiskov prek vloge »Zapiski«. Če je vloga »Zapiski« že omogočena, se ne zgodi nič. Zahteva vnovični zagon."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Oddajanje"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Oddajaj aplikacijo <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Poslušajte oddajanja, ki se predvajajo v bližini."</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 929879d..c78d125 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth-i është i aktivizuar"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Shiko të gjitha"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilolapsi"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Aplikacioni i parazgjedhur për shënimet"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Shtypja e butonit të bishtit"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profili i punës)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Shkruaj në fushat e tekstit"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Shpërfill të gjitha shtypjet e butonave me stilolapsin"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilolapsi"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Dita e parë e javës"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Preferencat e numrave"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Përdor parazgjedhjen e aplikacionit"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Përdor fotografinë e parazgjedhur"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenhait (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"E diel"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Versioni i bërthamës"</string>
<string name="build_number" msgid="9009733242117579826">"Numri i ndërtimit"</string>
<string name="module_version" msgid="1787518340082046658">"Përditësimi i sistemit të Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Informacione për baterinë"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Nuk ofrohet"</string>
<string name="storage_settings" msgid="7472188817781592677">"Hapësira ruajtëse"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Hapësira ruajtëse dhe memoria specifike"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Adresa e Bluetooth-it"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Numri i serisë"</string>
<string name="status_up_time" msgid="1274778533719495438">"Koha aktive"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Data e prodhimit"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Data e përdorimit për herë të parë"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Numri i cikleve"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Nuk ofrohet"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Po llogarit…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Riemërto"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Monto"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Kjo do të rivendosë të gjitha cilësimet e Wi‑Fi dhe Bluetooth. Nuk mund ta zhbësh këtë veprim."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Rivendos"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth dhe Wi‑Fi janë rivendosur"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Spastro"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Spastro eSIM-et"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Kjo nuk do të anulojë planet e shërbimit celular. Për të shkarkuar karta zëvendësuese SIM, kontakto me operatorin celular."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Rivendos cilësimet"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Përdor motivin për të shkyçur pajisjen"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Përdor PIN-in për të shkyçur këtë pajisje"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Përdor fjalëkalimin për të shkyçur pajisjen"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Verifiko motivin"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Verifiko kodin PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Verifiko fjalëkalimin"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Përdor motivin e pajisjes për të vazhduar"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Fut kodin PIN të pajisjes për të vazhduar"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Fut fjalëkalimin e pajisjes për të vazhduar"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Kod PIN i gabuar"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Fjalëkalim i gabuar"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Motiv i gabuar"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Pamja sipas aplikacioneve"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Pamja sipas sistemeve"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Për shkak të inspektimeve të cilësisë para transportit, numri i cikleve mund të mos jetë zero në përdorimin e parë"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Statistikat e procesit"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Statistikat teknike për proceset në ekzekutim"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Përdorimi i memories"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Të fshihet aktiviteti i vizitorit?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Tani aplikacionet dhe të dhënat nga ky sesion për vizitorë do të fshihen dhe të gjitha aktivitetet e ardhshme të vizitorit do të fshihen sa herë që të dalësh nga modaliteti \"vizitor\""</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"fshi, vizitor, aktivitet, hiq, të dhëna, i ftuar, spastro"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Lejo vizitorin të përdorë telefonin"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Lejo vizitorin të bëjë telefonata"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Historiku i telefonatave do të ndahet me këtë përdorues vizitor"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivizo telefonatat dhe SMS-të"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Bëje administrator këtë përdorues"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"rrjeti, gjendja e rrjetit celular, gjendja e shërbimit, fuqia e sinjalit, lloji i rrjetit celular, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"numri i serisë, versioni i harduerit"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"informacione për baterinë, data e prodhimit, numri i cikleve, përdorimi për herë të parë"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"niveli i korrigjimit të sigurisë së Android, versioni i brezit të bazës, versioni i bërthamës"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, e çelët, e errët, modaliteti, ndjeshmëria ndaj dritës, fotofobia, bëje më të errët, errëso, modaliteti i errët, migrenë"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tema e errët"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Parazgjedhja e pajisjes"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Zbatimi i mbivendosjes dështoi"</string>
<string name="special_access" msgid="1767980727423395147">"Qasja e veçantë e apl."</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aplikacione mund të përdorin të dhëna të pakufizuara</item>
- <item quantity="one">1 aplikacion mund të përdorë të dhëna të pakufizuara</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Shiko më shumë"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Detyrat e gjata në sfond"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Lejo detyrat në sfond për një kohë të gjatë"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Aktivizo ose çaktivizo ndryshimet e përputhshmërisë së aplikacionit"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Ndryshimet të aktivizuara si parazgjedhje"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Ndryshimet të çaktivizuara si parazgjedhje"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Nuk ofrohet asnjë aplikacion"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Ndryshimet e pajtueshmërisë së aplikacionit mund të modifikohen vetëm për aplikacionet e korrigjueshme. Instalo një aplikacion të korrigjueshëm dhe provo përsëri."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Varet nga një cilësim tjetër"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Llogaria"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Çaktivizo kufizimet e procesit dytësor"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Çaktivizo kufizimet në përdorimin e burimeve të sistemit të proceseve dytësore të aplikacionit"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Aktivizo me forcë rolin e mbajtjes së shënimeve"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktivizo integrimet e sistemit të mbajtjes së shënimeve nëpërmjet rolit të mbajtjes së shënimeve. Nëse roli i mbajtjes së shënimeve është aktivizuar tashmë, mos bëj asgjë."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktivizo integrimet e sistemit të mbajtjes së shënimeve nëpërmjet rolit të mbajtjes së shënimeve. Nëse roli i mbajtjes së shënimeve është aktivizuar tashmë, mos bëj asgjë. Kërkon rinisjen."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Transmetimi"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Transmeto <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Dëgjo transmetime që po luhen në afërsi"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 30399ee..ce42661 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth је укључен"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Прикажи све"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Писаљка"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Подразумевана апликација за белешке"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Притисак на дугме са задње стране"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (пословни профил)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Пишите у пољима за текст"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Игнориши сва притискања дугмета помоћу писаљке"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Писаљка"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Први дан недеље"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Подешавања бројева"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Користи подразумевано у апликацији"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Користи подразумевано"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Целзијус (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Фаренхајт (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"недеља"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Верзија језгра"</string>
<string name="build_number" msgid="9009733242117579826">"Број верзије"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play ажурирање система"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Информације о батерији"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Није доступно"</string>
<string name="storage_settings" msgid="7472188817781592677">"Меморијски простор"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Меморијски простор и кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth адреса"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Серијски број"</string>
<string name="status_up_time" msgid="1274778533719495438">"Време рада"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Датум производње"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Датум првог коришћења"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Број циклуса"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Недоступно"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Прорачунавање..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Преименуј"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Прикључи"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Овим ресетујете сва WiFi и Bluetooth подешавања. Не можете да опозовете ову радњу."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Ресетуј"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth и WiFi су ресетовани"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Обриши"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Обриши eSIM-ове"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Овим не отказујете ниједан тарифни пакет. Да бисте преузели нове SIM картице, обратите се мобилном оператеру."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Ресетуј подешавања"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Користите и шаблон за откључавање уређаја"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Користите и PIN за откључавање уређаја"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Користите и лозинку за откључавање уређаја"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Верификујте шаблон"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Верификујте PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Верификујте лозинку"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Користите шаблон за уређај да бисте наставили"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Унесите PIN уређаја да бисте наставили"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Унесите лозинку уређаја да бисте наставили"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Погрешан PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Погрешна лозинка"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Погрешан шаблон"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Прикажи према апликацијама"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Прикажи према системима"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Због провере пре слања број циклуса можда неће бити нула при првом коришћењу"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статистика процеса"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Штреберска статистика о активним процесима"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Искоришћеност меморије"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Избрисаћете активности госта?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Апликације и подаци из ове сесије госта биће одмах избрисане, а све будуће активности госта биће избрисане сваки пут када изађете из режима госта"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"избрисати, гост, активност, уклонити, подаци, посетилац, обрисати"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Дозволи госту да користи телефон"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Дозволи да гост упућује позиве"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Историја позива ће се делити са гостујућим корисником"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Укључи телефонске позиве и SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Поставите овог корисника за администратора"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"мрежа, стање мобилне мреже, стање услуге, јачина сигнала, тип мобилне мреже, роминг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"серијски број, верзија хардвера"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"информације о батерији, датум производње, број циклуса, прво коришћење"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"ниво безбедносне закрпе за android, верзија основног пропусног опсега, верзија језгра"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, светла, тамна, режим, осетљивост на светлост, фотофобија, затамнити, тамни режим, мигрена"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"тамна тема"</string>
@@ -3855,11 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Подразумевано подешавање за уређај"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Примена преклопног елемента није успела"</string>
<string name="special_access" msgid="1767980727423395147">"Посебан приступ апликација"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> апликација може да користи неограничену количину података</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> апликације могу да користе неограничену количину података</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апликација може да користи неограничену количину података</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Прикажи још"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Дуготрајни задаци у позадини"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Дозволи дуготрајне задатке у позадини"</string>
@@ -4147,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Укључите/искључите промене компатибилности апликације"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Подразумеване омогућене промене"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Подразумеване онемогућене промене"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Нема апликација"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Промене компатибилности апликација могу да се измене само за апликације са отклоњивим грешкама. Инсталирајте апликацију са отклоњивим грешкама и пробајте поново."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Зависи од другог подешавања"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Налог"</string>
@@ -4666,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Онемогући ограничења за подређене процесе"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Онемогућите ограничења коришћења ресурса система за подређене процесе апликације"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Принудно омогући улогу Белешке"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Омогућите интеграције прављења бележака у систему помоћу улоге Белешке. Ако је улога Белешке већ омогућена, не предузимајте ништа."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Омогућите интеграције прављења бележака у систему помоћу улоге Белешке. Ако је улога Белешке већ омогућена, не предузимајте ништа. Захтева рестартовање."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Емитујте"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Емитујте <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слушајте емитовања која се пуштају у близини"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 5d35610..b8e85dc 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth har aktiverats"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Se alla"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"E-penna"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Standardapp för anteckningar"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Vid tryck på knappen för e-penna"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (jobbprofil)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Skriv i textfälten"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ignorera alla knapptryckningar på e-pennan"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"E-penna"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatur"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Första dagen i veckan"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Sifferinställningar"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Använd appstandard"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Använd standardinställning"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"söndag"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Kernel-version"</string>
<string name="build_number" msgid="9009733242117579826">"Version"</string>
<string name="module_version" msgid="1787518340082046658">"Systemuppdatering för Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batteriinformation"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Inte tillgängligt"</string>
<string name="storage_settings" msgid="7472188817781592677">"Lagring"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Lagringsutrymme och cacheminne"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth-adress"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serienummer"</string>
<string name="status_up_time" msgid="1274778533719495438">"Tid sedan systemstart"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Tillverkningsdatum"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Datum för första användning"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Antal cykler"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Inte tillgängligt"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Beräknas..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Byt namn"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Montera"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Detta återställer alla wifi- och Bluetooth-inställningar. Det går inte att ångra den här åtgärden."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Återställ"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth och wifi har återställts"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Rensa"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Rensa eSIM-kort"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Det här avbryter inte något serviceavtal för telefonen. Om du vill ladda ned SIM-kort som ersätter de gamla kontaktar du operatören."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Återställ inställningar"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Kräv även mönster för att låsa upp enheten"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Kräv även pinkod för att låsa upp enheten"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Kräv även lösenord för att låsa upp enheten"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Bekräfta mönstret"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Bekräfta pinkoden"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Bekräfta lösenordet"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Ange mönstret för enheten om du vill fortsätta"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Ange pinkoden för enheten om du vill fortsätta"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Ange lösenordet för enheten om du vill fortsätta"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Fel pinkod"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Fel lösenord"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Fel mönster"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Visa efter appar"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Visa efter system"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Antalet cykler kanske inte är noll före första användningen på grund av kvalitetsinspektioner"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Processtatistik"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Nördig statistik om processer som körs"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Minnesanvändning"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vill du radera gästaktivitet?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Appar och data från den här gästsessionen raderas nu och i fortsättningen raderas all gästaktivitet när du avslutar gästläget"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"radera, gäst, aktivitet, ta bort, data, besökare, rensa"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Tillåt gäster att använda telefonen"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Tillåt gäster att ringa samtal"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Samtalshistoriken delas med gästanvändaren"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivera telefonsamtal och sms"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Gör denna användare till administratör"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"nätverk, status för mobilnätverk, status för tjänst, signalstyrka, mobilnätverkstyp, roaming, iccid-nummer, eid-nummer"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serienummer, maskinvaruversion"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batteriinformation, tillverkningsdatum, antal cykler, första användning"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"nivå av programkorrigering för android, basbandsversion, kernel-version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, ljust, mörkt, läge, ljuskänslighet, fotofobi, göra mörkare, mörkare, mörkt läge, migrän"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"mörkt tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Enhetens standardinställning"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Det gick inte att använda överlagring"</string>
<string name="special_access" msgid="1767980727423395147">"Särskild appåtkomst"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> appar får använda obegränsad data</item>
- <item quantity="one">1 app får använda obegränsad data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Visa mer"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Långa bakgrundsuppgifter"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Tillåt långvariga bakgrundsuppgifter"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Aktivera eller inaktivera kompabilitetsändringar för appar"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Ändringar som är aktiverade som standard"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Ändringar som är inaktiverade som standard"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Det finns inga appar"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Kompabilitetsändringar för appar kan endast modifieras för felsökningsbara appar. Installera en felsökningsbar app och försök igen."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Beroende av en annan inställning"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Konto"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Inaktivera begränsningar på underordnade processer"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Inaktivera begränsningar på användningen av systemresurser för appens underordnade processer"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Tvinga att aktivera rollen Anteckningar"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Aktivera systemintegrering för att göra anteckningar via rollen Anteckningar. Detta har ingen effekt om rollen Anteckningar redan har aktiverats."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Aktivera systemintegrering för att göra anteckningar via rollen Anteckningar. Detta har ingen effekt om rollen Anteckningar redan har aktiverats. Enheten måste startas om."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Utsändning"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Sänd från <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Lyssna på utsändningar i närheten"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index da9d967..780e36f 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Imewasha Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Angalia vyote"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Programu chaguomsingi ya madokezo"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Kubonyeza kitufe cha nyuma"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Wasifu wa kazini)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Andika kwenye sehemu za maandishi"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Puuza mibofyo yote ya kitufe cha stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Halijoto"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Siku ya kwanza ya wiki"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Mapendeleo ya nambari"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Tumia chaguomsingi ya programu"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Tumia mipangilio chaguomsingi"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Selsiasi (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farenhaiti (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Jumapili"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Toleo la kiini"</string>
<string name="build_number" msgid="9009733242117579826">"Nambari ya muundo"</string>
<string name="module_version" msgid="1787518340082046658">"Sasisho la mfumo wa Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Maelezo kuhusu betri"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Haipatikani"</string>
<string name="storage_settings" msgid="7472188817781592677">"Hifadhi"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Nafasi ya hifadhi na akiba"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Anwani ya Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Nambari ya Ufuatiliaji"</string>
<string name="status_up_time" msgid="1274778533719495438">"Muda wa kutumika tangu ilipowashwa"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Tarehe ilipoundwa"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Tarehe ulipotumia mara ya kwanza"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Mara ambazo betri imejaa"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Haipatikani"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Inahesabu..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Badilisha jina"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Pachika"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Hali hii itaweka upya mipangilio ya Wi-Fi na Bluetooth. Huwezi kutendua kitendo hiki."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Weka upya"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth na Wi‑Fi vimewekwa upya"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Futa"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Futa eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Hatua hii haitaghairi mipango yoyote ya huduma za simu. Ili upakue SIM za kubadilisha, wasiliana na mtoa huduma wako."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Badilisha mipangilio"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Pia, tumia mchoro ili ufungue kifaa hiki"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Pia, tumia PIN ufungue kifaa hiki"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Pia, tumia nenosiri ili ufungue kifaa hiki"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Thibitisha mchoro"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Thibitisha PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Thibitisha nenosiri"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Weka mchoro wa kufungua kifaa chako ili uendelee"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Weka PIN ya kifaa chako ili uendelee"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Weka nenosiri la kifaa chako ili uendelee"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Nambari ya PIN si sahihi"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Nenosiri si sahihi"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Mchoro huo si sahihi"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Angalia kulingana na programu"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Angalia kulingana na mifumo"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Kutokana na ukaguzi wa ubora unaofanywa kabla ya usafirishaji, huenda mara ambazo betri imejaa isiwe sufuri unapotumia mara ya kwanza"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Takwimu za Mchakato"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Takwimu za kitaalamu kuhusu michakato inayoendeshwa"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Kumbukumbu iliyotumika"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ungependa kufuta shughuli za mgeni?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Programu na data kutoka kwenye kipindi hiki cha mgeni itafutwa sasa na kila shughuli ya mgeni ya baadaye itafutwa kila mara unapofunga matumizi ya wageni"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"futa, mgeni, shughuli, ondoa, data, anayetembelea"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Mruhusu mgeni atumie simu"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Ruhusu wageni kupiga simu"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Rekodi ya simu zilizopigwa itashirikiwa na mtumiaji mgeni"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Washa kipengele cha SMS na kupiga simu"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Mruhusu mtumiaji huyu awe msimamizi"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"mtandao, hali ya mtandao wa simu, hali ya huduma, uthabiti wa mtandao, aina ya mtandao wa simu, kutumia mitandao ya ng\'ambo, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"nambari ya ufuatiliaji, toleo la maunzi"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"maelezo kuhusu betri, tarehe ilipoundwa, mara ambazo betri imejaa, tarehe ulipotumia mara ya kwanza"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"kiwango cha rekebisho la usalama wa android, toleo la mitambo ya redio, toleo la kiini"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"mandhari, mwangaza, meusi, hali, ung\'aavu wa mwangaza, woga wa mwangaza, punguza mwangaza, punguza mwangaza, hali nyeusi, kipandauso"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"mandhari meusi"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Hali chaguomsingi ya kifaa"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Imeshindwa kutumia tangazo lililowekelewa juu"</string>
<string name="special_access" msgid="1767980727423395147">"Idhini maalum za programu"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">Programu <xliff:g id="COUNT">%d</xliff:g> zinaweza kutumia data bila kudhibitiwa</item>
- <item quantity="one">Programu 1 inaweza kutumia data bila kudhibitiwa</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Angalia zaidi"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Majukumu ya muda mrefu yanayoendelea chinichini"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Ruhusu majukumu yanayotekelezwa chinichini kwa muda mrefu"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Geuza mabadiliko ya uoanifu wa programu"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Mabadiliko chaguomsingi yaliyowashwa"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Mabadiliko chaguomsingi yaliyozimwa"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Hamna programu"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Mabadiliko ya uoanifu wa programu yanaweza tu kubadilishwa kwa ajili ya programu zinazoweza kutatuliwa. Sakinisha programu inayoweza kutatuliwa na ujaribu tena."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Inategemea mipangilio mingine"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Akaunti"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Zima vizuizi vya mchakato tegemezi"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Zima vizuizi kwenye utumiaji wa rasilimali za mfumo wa michakato tegemezi ya programu"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Lazimisha kipengele cha Madokezo kiwashwe"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Washa ujumuishaji wa mfumo wa kuandika madokezo kupitia kipengele cha Madokezo. Ikiwa tayari umewasha kipengele cha Madokezo, usibadilishe chochote."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Washa ujumuishaji wa mfumo wa kuandika madokezo kupitia kipengele cha Madokezo. Ikiwa tayari umewasha kipengele cha Madokezo na hakitekelezi chochote. Unahitaji kuwasha tena."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Tangazo"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Arifu kwenye <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Sikiliza matangazo yanayochezwa karibu nawe"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index d85b463..c798045 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"புளூடூத் ஆன் செய்யப்பட்டது"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"அனைத்தும் காட்டு"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"ஸ்டைலஸ்"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"குறிப்பு எடுப்பதற்கான இயல்பு ஆப்ஸ்"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"டெயில் பட்டனை அழுத்துதல்"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (பணிக் கணக்கு)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"எழுதுவதற்கான புலங்களில் எழுதுங்கள்"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ஸ்டைலஸ் மூலம் பட்டன்களை அழுத்துவதைத் தவிர்த்தல்"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"ஸ்டைலஸ்"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"வெப்பநிலை"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"வாரத்தின் முதல் நாள்"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"எண்களுக்கான விருப்பத்தேர்வுகள்"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ஆப்ஸின் இயல்புநிலையைப் பயன்படுத்தும்"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"இயல்பு அமைப்பைப் பயன்படுத்து"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"செல்சியஸ் (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ஃபாரன்ஹீட் (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ஞாயிறு"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"கர்னல் பதிப்பு"</string>
<string name="build_number" msgid="9009733242117579826">"பதிப்பு எண்"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play சிஸ்டம் புதுப்பிப்பு"</string>
+ <string name="battery_info" msgid="7873528123969546728">"பேட்டரி தொடர்பான தகவல்கள்"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"கிடைக்கவில்லை"</string>
<string name="storage_settings" msgid="7472188817781592677">"சேமிப்பிடம்"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"சேமிப்பகம் & தற்காலிக நினைவகம்"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"புளூடூத் முகவரி"</string>
<string name="status_serial_number" msgid="9060064164331466789">"வரிசை எண்"</string>
<string name="status_up_time" msgid="1274778533719495438">"இயங்கிய நேரம்"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"தயாரிக்கப்பட்ட தேதி"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"முதலில் உபயோகித்தத் தேதி"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"சுழற்சியின் எண்ணிக்கை"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"இல்லை"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"கணக்கிடுகிறது..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"மறுபெயரிடு"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"பொருத்து"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"இது அனைத்து வைஃபை & புளூடூத் அமைப்புகளை மீட்டமைக்கும். இதைச் செயல்தவிர்க்க முடியாது."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"மீட்டமை"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"புளூடூத் & வைஃபை மீட்டமைக்கப்பட்டன"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"அழி"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMகளை அழி"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"மொபைல் சேவைத் திட்டங்கள் எவையும் இதனால் ரத்துசெய்யப்படாது. மாற்று சிம்களைப் பதிவிறக்க, உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"அமைப்புகளை மீட்டமை"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"சாதனம் அன்லாக் செய்யப்பட பேட்டர்ன் பயன்படுத்து"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"சாதனம் அன்லாக் செய்யப்பட பின் பயன்படுத்து"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"சாதனம் அன்லாக் செய்யப்பட கடவுச்சொல் பயன்படுத்து"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"பேட்டர்னை உறுதிப்படுத்துங்கள்"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"பின்னை (PIN) உறுதிப்படுத்துங்கள்"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"கடவுச்சொல்லை உறுதிப்படுத்துங்கள்"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"தொடர, உங்கள் சாதனத்தின் பேட்டர்னைப் பயன்படுத்துங்கள்"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"தொடர, உங்கள் சாதனத்தின் பின்னை (PIN) உள்ளிடுங்கள்"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"தொடர, உங்கள் சாதனத்தின் கடவுச்சொல்லை உள்ளிடுங்கள்"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"தவறான பின்"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"தவறான கடவுச்சொல்"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"தவறான பேட்டர்ன்"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ஆப்ஸ் வாரியாகக் காட்டு"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"சிஸ்டங்கள் வாரியாகக் காட்டு"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"ஷிப்பிங்கிற்கு முன்பான தர ஆய்வுகளின் காரணமாக, முதல் பயன்பாட்டில் சுழற்சி எண்ணிக்கை பூஜ்ஜியமாக இருக்காது"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"செயல்முறைப் புள்ளிவிவரங்கள்"</string>
<string name="process_stats_summary" msgid="522842188571764699">"இயங்கும் செயல்முறைகள் குறித்த ஜிகி புள்ளிவிவரங்கள்"</string>
<string name="app_memory_use" msgid="7559666138324410666">"நினைவகப் பயன்பாடு"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"கெஸ்ட் செயல்பாடுகளை நீக்கவா?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"இந்த கெஸ்ட் அமர்வின் ஆப்ஸும் தரவும் இப்போது நீக்கப்படும். இனி கெஸ்ட் பயன்முறையிலிருந்து வெளியேறும் ஒவ்வொரு முறையும் கெஸ்ட் செயல்பாடுகள் நீக்கப்படும்"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"நீக்கு, கெஸ்ட், செயல்பாடு, அகற்று, தரவு, வருகையாளர், அழி"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"மொபைலைப் பயன்படுத்த கெஸ்ட்டை அனுமதித்தல்"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"அழைப்புகள் செய்ய விருந்தினரை அனுமதித்தல்"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"அழைப்புப் பதிவு \'கெஸ்ட்\' பயனருடன் பகிரப்படும்"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ஃபோன் அழைப்புகள் & SMSஐ இயக்கு"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"இந்தப் பயனரை நிர்வாகியாக்கு"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"நெட்வொர்க், மொபைல் நெட்வொர்க் நிலை, சேவை நிலை, சிக்னல் வலிமை, மொபைல் நெட்வொர்க் வகை, ரோமிங், ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"வரிசை எண், வன்பொருள் பதிப்பு"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"பேட்டரி தொடர்பான தகவல்கள், தயாரிக்கப்பட்ட தேதி, சுழற்சியின் எண்ணிக்கை, முதல் உபயோகம்"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android பாதுகாப்பு பேட்ச் நிலை, பேஸ்பேண்ட் பதிப்பு, கர்னல் பதிப்பு"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"தீம், லைட், டார்க், பயன்முறை, ஒளி உணர்திறன், ஃபோட்டோஃபோபியா, அதிக இருட்டாக்குதல், இருட்டாக்குதல், டார்க் பயன்முறை, தலைவலி"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"டார்க் தீம்"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"சாதனத்தின் இயல்புநிலை"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"மேலடுக்கைப் பயன்படுத்த இயலவில்லை"</string>
<string name="special_access" msgid="1767980727423395147">"ஆப்ஸின் சிறப்பு அணுகல்"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ஆப்ஸால் எல்லா தகவலையும் பயன்படுத்த முடியும்</item>
- <item quantity="one">1 ஆப்ஸால் எல்லா தகவலையும் பயன்படுத்த முடியும்</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"மேலும் காட்டு"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"பின்னணியில் நீண்டநேரப் பணிகள்"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"பின்னணியில் நீண்டநேரம் இயங்கும் பணிகளை அனுமதித்தல்"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ஆப்ஸ் இணக்கத்தன்மை தொடர்பான மாற்றங்களை நிலைமாற்றும்"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"இயல்புநிலை இயக்கப்பட்டது தொடர்பான மாற்றங்கள்"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"இயல்புநிலை முடக்கப்பட்டது தொடர்பான மாற்றங்கள்"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ஆப்ஸ் எதுவுமில்லை"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"பிழைதிருத்தி ஆப்ஸில் மட்டுமே ஆப்ஸ் இணக்கத்தன்மை மாற்றங்களை மாற்ற முடியும். பிழைதிருத்தி ஆப்ஸை நிறுவி மீண்டும் முயலவும்."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"மற்றொரு அமைப்பைச் சார்ந்தது"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"கணக்கு"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"துணைச் செயலாக்கத்திற்கான கட்டுப்பாடுகளை முடக்குதல்"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ஆப்ஸின் துணைச் செயலாக்கத்தில் சிஸ்டம் தொடர்பான ஆதாரக் கட்டுப்பாடுகளை முடக்கவும்"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes பணியை விரைந்து இயக்கு"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes பணிகள் மூலம் குறிப்பு எடுக்கும் சிஸ்டத்திற்கான ஒருங்கிணைப்புகளை இயக்கும். Notes பணிகள் ஏற்கெனவே இயக்கப்பட்டிருந்தால் வேறெதுவும் செய்யாது."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes பணிகள் மூலம் குறிப்பு எடுக்கும் சிஸ்டத்திற்கான ஒருங்கிணைப்புகளை இயக்கும். Notes பணிகள் ஏற்கெனவே இயக்கப்பட்டிருந்தால் வேறெதுவும் செய்யாது. மறுபடி தொடங்கவேண்டும்."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"பிராட்காஸ்ட்"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ஆப்ஸை ஒலிபரப்பு"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"உங்களுக்கு அருகில் பிளே ஆகின்ற பிராட்காஸ்ட்டுகளைக் கேளுங்கள்"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 312721a..f8a9497 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"బ్లూటూత్ ఆన్ చేయబడింది"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"అన్నీ చూడండి"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"స్టైలస్"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ఆటోమేటిక్ సెట్టింగ్ గమనికల యాప్"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"స్టైలస్ బటన్ను నొక్కండి"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (వర్క్ ప్రొఫైల్)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"టెక్స్ట్ ఫీల్డ్లలో రాయండి"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"అన్ని స్టైలస్ బటన్ ప్రెస్లను విస్మరించండి"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"స్టైలస్"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"ఉష్ణోగ్రత"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"వారంలో మొదటి రోజు"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"నంబర్ల ప్రాధాన్యతలు"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"యాప్ ఆటోమేటిక్ సెట్టింగ్ను ఉపయోగించండి"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ఆటోమేటిక్ సెట్టింగ్ను ఉపయోగించండి"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"సెల్సియస్ (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ఫారెన్హీట్ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ఆదివారం"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"కెర్నల్ వెర్షన్"</string>
<string name="build_number" msgid="9009733242117579826">"బిల్డ్ నంబర్"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play సిస్టమ్ అప్డేట్"</string>
+ <string name="battery_info" msgid="7873528123969546728">"బ్యాటరీ సమాచారం"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"అందుబాటులో లేదు"</string>
<string name="storage_settings" msgid="7472188817781592677">"స్టోరేజ్"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"స్టోరేజ్ & కాష్"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"బ్లూటూత్ అడ్రస్"</string>
<string name="status_serial_number" msgid="9060064164331466789">"సీరియల్ నంబర్"</string>
<string name="status_up_time" msgid="1274778533719495438">"గడిచిన సమయం"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"తయారు చేసిన తేదీ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"మొదటి సారి ఉపయోగించిన తేదీ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"సైకిల్ సంఖ్య"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"అందుబాటులో లేదు"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"గణిస్తోంది..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"పేరు మార్చండి"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"మౌంట్ చేయి"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"ఇది అన్ని Wi‑Fi & బ్లూటూత్ సెట్టింగ్లను రీసెట్ చేస్తుంది. ఒక్కసారి రీసెట్ చేస్తే మళ్లీ వెనక్కి తెచ్చుకోలేరు."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"రీసెట్ చేయండి"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"బ్లూటూత్ & Wi‑Fi రీసెట్ చేయబడ్డాయి"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"తొలగించండి"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMలను ఫ్యాక్టరీ రీసెట్ చేయండి"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"ఇది ఏవిధమైన మొబైల్ సర్వీస్ ప్లాన్లను రద్దు చేయదు. రీప్లేస్మెంట్ SIMలను డౌన్లోడ్ చేయడానికి మీ క్యారియర్ను సంప్రదించండి."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"సెట్టింగ్లను రీసెట్ చేయండి"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ఈ పరికరాన్ని అన్లాక్ చేయడానికి ఆకృతిని కూడా ఉపయోగించండి"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ఈ పరికరాన్ని అన్లాక్ చేయడానికి PINను కూడా ఉపయోగించండి"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ఈ పరికరాన్ని అన్లాక్ చేయడానికి పాస్వర్డ్ను కూడా ఉపయోగించండి"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ఆకృతిని వెరిఫై చేయండి"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PINను వెరిఫై చేయండి"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"పాస్వర్డ్ను వెరిఫై చేయండి"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"కొనసాగించడానికి మీ పరికరం ఆకృతిని ఉపయోగించండి"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"కొనసాగడానికి మీ పరికరం PINను ఎంటర్ చేయండి"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"కొనసాగడానికి మీ పరికర పాస్వర్డ్ను ఎంటర్ చేయండి"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN తప్పు"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"పాస్వర్డ్ తప్పు"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"ఆకృతి తప్పు"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"యాప్ల ప్రకారం చూడండి"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"సిస్టమ్ల ప్రకారం చూడండి"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"షిప్పింగ్కు ముందు క్వాలిటి తనిఖీల కారణంగా, మొదటి ఉపయోగంలో సైకిల్ కౌంట్ సున్నాగా ఉండకపోవచ్చు"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"ప్రాసెస్ గణాంకాలు"</string>
<string name="process_stats_summary" msgid="522842188571764699">"అమలవుతున్న ప్రాసెస్ల గురించి అసాధారణమైన గణాంకాలు"</string>
<string name="app_memory_use" msgid="7559666138324410666">"మెమరీ వినియోగం"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"గెస్ట్ యాక్టివిటీని తొలగించాలా?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ఈ గెస్ట్ సెషన్లోని యాప్లు, డేటా ఇప్పుడు తొలగించబడతాయి, మీరు గెస్ట్ మోడ్ నుండి నిష్క్రమించిన ప్రతిసారీ భవిష్యత్ గెస్ట్ యాక్టివిటీ మొత్తం తొలగించబడుతుంది"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"తొలగించండి, గెస్ట్, యాక్టివిటీ, తీసివేయండి, డేటా, సందర్శకులు, ఫ్యాక్టరీ రీసెట్"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"ఫోన్ ఉపయోగించడానికి గెస్ట్ను అనుమతించండి"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"ఫోన్ కాల్స్ కోసం గెస్ట్ను అనుమతించండి"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"కాల్ హిస్టరీ, గెస్ట్ యూజర్తో షేర్ చేయబడుతుంది"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ఫోన్ కాల్స్ & SMS ఆన్ చేయండి"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"ఈ యూజర్ను అడ్మిన్ చేయండి"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"నెట్వర్క్, మొబైల్ నెట్వర్క్ స్టేటస్, సర్వీస్ స్టేటస్, సిగ్నల్ సామర్థ్యం, మొబైల్ నెట్వర్క్ రకం, రోమింగ్, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"క్రమ సంఖ్య, హార్డ్వేర్ వెర్షన్"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"బ్యాటరీ సమాచారం, తయారు చేసిన తేదీ, సైకిల్ సంఖ్య, మొదటి సారి ఉపయోగించిన తేదీ"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android సెక్యూరిటీ ప్యాచ్ స్థాయి, బేస్బ్యాండ్ వెర్షన్, కెర్నెల్ వెర్షన్"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"రూపం, లైట్, ముదురు, మోడ్, కాంతి సున్నితత్వం, ఫోటోఫోబియా, ముదురుగా చేయి, మరింత ముదురు, డార్క్ మోడ్, మైగ్రేన్"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ముదురు రంగు రూపం"</string>
@@ -3189,7 +3202,7 @@
<string name="lock_screen_notifications_summary_show" msgid="6540443483088311328">"మొత్తం నోటిఫికేషన్ కంటెంట్ను చూపించండి"</string>
<string name="lock_screen_notifications_summary_hide" msgid="7837303171531166789">"గోప్యమైన కంటెంట్ను అన్లాక్లో మాత్రమే చూపండి"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3388290397947365744">"ఎలాంటి నోటిఫికేషన్లను చూపవద్దు"</string>
- <string name="lock_screen_notifications_interstitial_message" msgid="4688399629301178487">"మీ లాక్ స్క్రీన్ ఎలా డిస్ప్లే కావాలనుకుంటున్నారు?"</string>
+ <string name="lock_screen_notifications_interstitial_message" msgid="4688399629301178487">"మీ లాక్ స్క్రీన్ డిస్ప్లే ఎలా ఉండాలని అనుకుంటున్నారు?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="1360388192096354315">"లాక్ స్క్రీన్"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8373401288962523946">"మొత్తం వర్క్ నోటిఫికేషన్ కంటెంట్ను చూపు"</string>
<string name="lock_screen_notifications_summary_hide_profile" msgid="2183455323048921579">"గోప్యమైన పని కంటెంట్ను దాచండి"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"పరికర ఆటోమేటిక్ సెట్టింగ్"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"అతివ్యాప్తిని వర్తింపచేయడం విఫలమయ్యింది"</string>
<string name="special_access" msgid="1767980727423395147">"ప్రత్యేక యాప్ యాక్సెస్"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> యాప్లు, అపరిమిత డేటాను ఉపయోగించగలవు</item>
- <item quantity="one">1 యాప్, అపరిమిత డేటాను ఉపయోగించగలదు</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"మరిన్ని చూడండి"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"లాంగ్ బ్యాక్గ్రౌండ్ టాస్క్లు"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"లాంగ్ రన్నింగ్ బ్యాక్గ్రౌండ్ టాస్క్స్ అనుమతించండి"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"యాప్ అనుకూలత మార్పులను టోగుల్ చేయడం"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"ఆటోమేటిక్గా ఎనేబుల్ చేయబడిన మార్పులు"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"ఆటోమేటిక్గా డిజేబుల్ చేయబడిన మార్పులు"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"యాప్లు ఏవీ లేవు"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"డీబగ్ చేయగల యాప్లకు మాత్రమే యాప్ అనుకూలత మార్పులు సవరించబడతాయి. డీబగ్ చేయగల యాప్ను ఇన్స్టాల్ చేసి మళ్లీ ట్రై చేయండి."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"మరో సెట్టింగ్పై ఆధారపడి ఉంటుంది"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"ఖాతా"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"చైల్డ్ ప్రాసెస్ పరిమితులను డిజేబుల్ చేయండి"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"యాప్ చైల్డ్ ప్రాసెస్ల సిస్టమ్ రిసోర్స్ వినియోగంపై పరిమితులను డిజేబుల్ చేయండి"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notes రోల్ను ఫోర్స్ ఎనేబుల్ చేయండి"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notes రోల్ ద్వారా నోట్-టేకింగ్ సిస్టమ్ ఇంటిగ్రేషన్లను ఎనేబుల్ చేయండి. Notes రోల్ ఇప్పటికే ఎనేబుల్ చేయబడి ఉంటే, ఏమీ చేయాల్సిన అవసరం లేదు."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notes రోల్ ద్వారా నోట్-టేకింగ్ సిస్టమ్ ఇంటిగ్రేషన్లను ఎనేబుల్ చేయండి. Notes రోల్ ఇప్పటికే ఎనేబుల్ చేయబడి ఉంటే, ఏమీ చేయాల్సిన అవసరం లేదు. రీబూట్ చేయడం అవసరం."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"ప్రసారం"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ప్రసారం చేయండి"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"మీకు సమీపంలో ప్లే అవుతున్న ప్రసారాలను వినండి"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index fdfba9c..e9e4c24 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"เปิดบลูทูธแล้ว"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ดูทั้งหมด"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"สไตลัส"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"แอปโน้ตเริ่มต้น"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"มีการกดปุ่มค้าง"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (โปรไฟล์งาน)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"เขียนในช่องข้อความ"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"ไม่ต้องสนใจการกดปุ่มสไตลัสทั้งหมด"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"สไตลัส"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"อุณหภูมิ"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"วันแรกของสัปดาห์"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"ค่ากำหนดตัวเลข"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ใช้ค่าเริ่มต้นของแอป"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ใช้ค่าเริ่มต้น"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"เซลเซียส (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"ฟาเรนไฮต์ (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"วันอาทิตย์"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"เวอร์ชันเคอร์เนล"</string>
<string name="build_number" msgid="9009733242117579826">"หมายเลขบิลด์"</string>
<string name="module_version" msgid="1787518340082046658">"การอัปเดตระบบ Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"ข้อมูลแบตเตอรี่"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"ไม่พร้อมใช้งาน"</string>
<string name="storage_settings" msgid="7472188817781592677">"พื้นที่เก็บข้อมูล"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"พื้นที่เก็บข้อมูลและแคช"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"ที่อยู่บลูทูธ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"หมายเลขซีเรียล"</string>
<string name="status_up_time" msgid="1274778533719495438">"เวลาใช้งาน"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"วันที่ผลิต"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"วันที่ใช้งานครั้งแรก"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"จำนวนรอบ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"ไม่พร้อมใช้งาน"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"กำลังคำนวณ..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"เปลี่ยนชื่อ"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ต่อเชื่อม"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"การดำเนินการนี้จะรีเซ็ตการตั้งค่า Wi-Fi และบลูทูธทั้งหมด โดยคุณจะยกเลิกไม่ได้"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"รีเซ็ต"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"รีเซ็ตบลูทูธและ Wi-Fi แล้ว"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"ลบ"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"ลบ eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"การดำเนินการนี้จะไม่ยกเลิกแพ็กเกจมือถือ หากต้องการดาวน์โหลดซิมสำหรับใช้แทน โปรดติดต่อผู้ให้บริการ"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"รีเซ็ตการตั้งค่า"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"ใช้รูปแบบเพื่อปลดล็อกอุปกรณ์นี้ด้วย"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"ใช้ PIN เพื่อปลดล็อกอุปกรณ์นี้ด้วย"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"ใช้รหัสผ่านเพื่อปลดล็อกอุปกรณ์นี้ด้วย"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"ยืนยันรูปแบบ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"ยืนยัน PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"ยืนยันรหัสผ่าน"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"ใช้รูปแบบของอุปกรณ์เพื่อดำเนินการต่อ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"ป้อน PIN ของอุปกรณ์เพื่อดำเนินการต่อ"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"ป้อนรหัสผ่านของอุปกรณ์เพื่อดำเนินการต่อ"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN ไม่ถูกต้อง"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"รหัสผ่านไม่ถูกต้อง"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"รูปแบบไม่ถูกต้อง"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ดูตามแอป"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"ดูตามระบบ"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"เนื่องจากมีการตรวจสอบคุณภาพก่อนจัดส่ง จำนวนรอบจึงอาจไม่เป็นศูนย์เมื่อใช้งานครั้งแรก"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"สถิติเกี่ยวกับกระบวนงาน"</string>
<string name="process_stats_summary" msgid="522842188571764699">"สถิติเชิงลึกเกี่ยวกับกระบวนงานที่ทำงานอยู่"</string>
<string name="app_memory_use" msgid="7559666138324410666">"การใช้หน่วยความจำ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ลบกิจกรรมของผู้ใช้ชั่วคราวไหม"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ระบบจะลบแอปและข้อมูลจากเซสชันผู้ใช้ชั่วคราวนี้ตอนนี้เลย และต่อไปนี้จะลบกิจกรรมทั้งหมดของผู้ใช้ชั่วคราวทุกครั้งที่คุณออกจากโหมดผู้ใช้ชั่วคราว"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"ลบ, ผู้ใช้ชั่วคราว, กิจกรรม, นำออก, ข้อมูล, ผู้เข้าชม, ลบออก"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"อนุญาตให้ผู้ใช้ชั่วคราวใช้โทรศัพท์"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"อนุญาตให้ผู้เยี่ยมชมโทรออกได้"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"ระบบจะแชร์ประวัติการโทรกับผู้ใช้ชั่วคราว"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"เปิดการโทรและ SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"กำหนดให้ผู้ใช้รายนี้เป็นผู้ดูแลระบบ"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"เครือข่าย, สถานะเครือข่ายมือถือ, สถานะบริการ, ความแรงของสัญญาณ, ประเภทเครือข่ายมือถือ, โรมมิ่ง, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"หมายเลขซีเรียล, เวอร์ชันฮาร์ดแวร์"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ข้อมูลแบตเตอรี่ วันที่ผลิต จำนวนรอบ การใช้งานครั้งแรก"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"ระดับแพตช์ความปลอดภัย android, เวอร์ชันเบสแบนด์, เวอร์ชันเคอร์เนล"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"ธีม สว่าง มืด โหมด ความไวต่อแสง อาการกลัวแสง ทำให้มืด ปรับให้มืด โหมดมืด ไมเกรน"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"ธีมมืด"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"ค่าเริ่มต้นของอุปกรณ์"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ใช้การวางซ้อนไม่สำเร็จ"</string>
<string name="special_access" msgid="1767980727423395147">"สิทธิ์เข้าถึงพิเศษของแอป"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other">ใช้อินเทอร์เน็ตได้ไม่จำกัด <xliff:g id="COUNT">%d</xliff:g> แอป</item>
- <item quantity="one">ใช้อินเทอร์เน็ตได้ไม่จำกัด 1 แอป</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"ดูเพิ่มเติม"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"งานเบื้องหลังซึ่งใช้เวลานาน"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"อนุญาตงานที่ทำอยู่เบื้องหลังซึ่งใช้เวลานาน"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"สลับการเปลี่ยนแปลงความเข้ากันได้ของแอป"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"การเปลี่ยนแปลงที่เปิดใช้โดยค่าเริ่มต้น"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"การเปลี่ยนแปลงที่ปิดใช้โดยค่าเริ่มต้น"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"ไม่มีแอป"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"จะแก้ไขการเปลี่ยนแปลงความเข้ากันได้ของแอปได้เฉพาะแอปที่แก้ไขข้อบกพร่องได้เท่านั้น ติดตั้งแอปที่แก้ไขข้อบกพร่องได้แล้วลองอีกครั้ง"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"ขึ้นอยู่กับการตั้งค่าอื่น"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"บัญชี"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"ปิดการจำกัดการประมวลผลข้อมูลย่อย"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ปิดการจำกัดการใช้ทรัพยากรระบบในการประมวลย่อยของแอป"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"บังคับเปิดใช้บทบาท \"โน้ต\""</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"เปิดใช้การผสานรวมระบบการจดโน้ตผ่านบทบาท \"โน้ต\" หากเปิดใช้ไว้อยู่แล้วก็ไม่ต้องดำเนินการใดๆ"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"เปิดใช้การผสานรวมระบบการจดบันทึกผ่านบทบาท \"การจดบันทึก\" หากเปิดใช้ไว้อยู่แล้วก็ไม่ต้องดำเนินการใดๆ ต้องรีบูต"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"การออกอากาศ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"ออกอากาศ <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"ฟังการออกอากาศที่เล่นอยู่ใกล้คุณ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 7d48423..df4ef00 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Naka-on ang Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Tingnan lahat"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Default na app ng mga tala"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Pagpindot sa tail button"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Profile sa trabaho)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Sumulat sa mga field ng text"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Huwag pansinin ang lahat ng pagpindot ng button sa stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Temperatura"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Unang araw ng linggo"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Mga kagustuhan sa mga numero"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Gamitin ang default ng app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Gamitin ang default"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Linggo"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Bersyon ng kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Numero ng build"</string>
<string name="module_version" msgid="1787518340082046658">"Pag-update ng system ng Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Impormasyon ng baterya"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Hindi available"</string>
<string name="storage_settings" msgid="7472188817781592677">"Storage"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Storage at cache"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Address ng bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Serial number"</string>
<string name="status_up_time" msgid="1274778533719495438">"Up time"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Petsa ng paggawa"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Petsa ng unang paggamit"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Bilang ng cycle"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Hindi available"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Kinakalkula..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Palitan ang pangalan"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"I-mount"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Ire-reset nito ang lahat ng setting ng Wi‑Fi at Bluetooth. Hindi mo maa-undo ang pagkilos na ito."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"I-reset"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Na-reset ang Bluetooth at Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Burahin"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Burahin ang mga eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Hindi nito kakanselahin ang anumang plan ng serbisyo sa mobile. Para mag-download ng mga kapalit na SIM, makipag-ugnayan sa iyong carrier."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"I-reset ang mga setting"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Gamitin din ang pattern para i-unlock ito"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Gamitin din ang PIN para i-unlock ito"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Gamitin din ang password para i-unlock ito"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"I-verify ang pattern"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"I-verify ang PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"I-verify ang password"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Gamitin ang iyong pattern sa device para magpatuloy"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Ilagay ang iyong PIN sa device para magpatuloy"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Ilagay ang iyong password sa device para magpatuloy"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Maling PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Maling password"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Maling pattern"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Tingnan ayon sa mga app"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Tingnan ayon sa mga system"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Dahil sa mga pag-inspeksyon ng kalidad bago ang pagpapadala, hindi puwedeng zero sa unang paggamit ang bilang ng cycle"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Stats ng Proseso"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Mahahalagang istatistika tungkol sa mga tumatakbong proseso"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Memory na ginamit"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"I-delete ang aktibidad ng bisita?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Made-delete na ngayon ang mga app at data mula sa session na ito ng bisita, at made-delete ang lahat ng aktibidad ng bisita sa hinaharap sa tuwing aalis ka ng guest mode"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"i-delete, bisita, aktibidad, alisin, data, bumibisita, burahin"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Payagang gamitin ng bisita ang telepono"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Payagan ang bisita na tumawag"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Ibabahagi sa bisitang user ang history ng tawag"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"I-on ang mga pagtawag sa telepono at SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Gawing admin ang user na ito"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"network, status ng mobile network, status ng serbisyo, lakas ng signal, uri ng mobile network, naka-roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"serial number, bersyon ng hardware"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"impormasyon ng baterya, petsa ng paggawa, bilang ng cycle, unang paggamit"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"antas ng patch ng seguridad ng android, bersyon ng baseband, kernel version"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, light, dark, mode, pagkasensitibo sa ilaw, photophobia, gawing mas madilim, padilimin, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"madilim na tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Default ng device"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Hindi nailapat ang overlay"</string>
<string name="special_access" msgid="1767980727423395147">"Espesyal na access ng app"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one">May <xliff:g id="COUNT">%d</xliff:g> app na maaaring gumamit ng walang limitasyong data</item>
- <item quantity="other">May <xliff:g id="COUNT">%d</xliff:g> na app na maaaring gumamit ng walang limitasyong data</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Tumingin pa"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Matagal na gawain sa background"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Payagang magpagana ng matagal na gawain sa background"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"I-toggle ang mga pagbabago sa compatibility ng app"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Mga default na naka-enable na pagbabago"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Mga default na naka-disable na pagbabago"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Walang available app"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Puwede lang baguhin ang mga pagbabago sa compatibility ng app para sa mga nade-debug na app. Mag-install ng nade-debug na app at subukan ulit."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Nakadepende sa isa pang setting"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Account"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"I-disable ang mga paghihigpit sa proseso ng child"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"I-disable ang mga paghihigpit sa paggamit ng resource ng system para sa mga proseso ng child ng app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Sapilitang i-enable ang tungkuling Mga Tala"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"I-enable ang mga integration ng system ng pagtatala sa pamamagitan ng tungkuling Mga Tala. Kung naka-enable na ang tungkuling Mga Tala, wala itong gagawin."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"I-enable ang mga integration ng system ng pagtatala sa pamamagitan ng tungkuling Mga Tala. Kung naka-enable na ang tungkuling Mga Tala, wala itong gagawin. Nagre-require ng pag-reboot."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Broadcast"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"I-broadcast ang <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Makinig sa mga broadcast na nagpe-play malapit sa iyo"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 591bada..18db61c 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth açık"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Tümünü göster"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Ekran kalemi"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Varsayılan not uygulaması"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Ekran kalemi düğmesine basma"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (İş profili)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Metin alanlarına yazın"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ekran kalemiyle basılan düğmeleri yoksay"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Ekran kalemi"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Sıcaklık"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Haftanın ilk günü"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Sayı tercihleri"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Uygulamanın varsayılan ayarını kullan"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Varsayılanı kullan"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Santigrat (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Fahrenhayt (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Pazar"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Çekirdek sürümü"</string>
<string name="build_number" msgid="9009733242117579826">"Derleme numarası"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play sistem güncellemesi"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Pil bilgileri"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Yok"</string>
<string name="storage_settings" msgid="7472188817781592677">"Depolama"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Depolama alanı ve önbellek"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth adresi"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Seri numarası"</string>
<string name="status_up_time" msgid="1274778533719495438">"Açık kalma süresi"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Üretim tarihi"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"İlk kullanıldığı tarih"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Şarj döngü sayısı"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Yok"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Hesaplanıyor..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Yeniden adlandır"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Ekle"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Bu işlem tüm kablosuz ve Bluetooth ayarlarını sıfırlar. Bu işlem geri alınamaz."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Sıfırla"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth ve kablosuz ayarları sıfırlandı"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Sil"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM\'leri sil"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Bu işlem, mobil hizmet planlarını iptal etmeyecektir. Yedek SIM\'leri indirmek için operatörünüzle iletişime geçin."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Ayarları sıfırla"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Bu cihazın kilidini desenle de aç"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Bu cihazın kilidini PIN\'le de aç"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Bu cihazın kilidini şifreyle de aç"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Deseni doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN\'i doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Şifreyi doğrulayın"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Devam etmek için cihazınızın desenini kullanın"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Devam etmek için cihazınızın PIN\'ini girin"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Devam etmek için cihazınızın şifresini girin"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Yanlış PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Yanlış şifre"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Yanlış desen"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Uygulama bazında göster"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Sistem bazında göster"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Kargolanmadan önce yapılan kalite denetimleri nedeniyle şarj döngü sayısı ilk kullanımda sıfır olmayabilir"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"İşlem İstatistikleri"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Meraklısı için, çalışan işlemlerle ilgili istatistikler"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Bellek kullanımı"</string>
@@ -2668,7 +2680,7 @@
<string name="ssl_ca_cert_info_message" msgid="3111724430981667845">"{numberOfCertificates,plural, =1{{orgName}, iş profilinize sertifika yetkilisi yükledi. Yönetici, bu sertifikayla e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere iş ağı etkinliğini izleyebilir.\n\nBu sertifika hakkında daha fazla bilgi edinmek için yöneticinizle iletişime geçin.}other{{orgName}, iş profilinize sertifika yetkilileri yükledi. Yönetici, bu sertifikalarla e-postalar, uygulamalar ve güvenli web siteleri de dahil olmak üzere iş ağı etkinliğini izleyebilir.\n\nBu sertifikalar hakkında daha fazla bilgi edinmek için yöneticinizle iletişime geçin.}}"</string>
<string name="ssl_ca_cert_warning_message" msgid="4374052724815563051">"E-postalarınız, uygulamalarınız ve güvenli web siteleriniz dahil olmak üzere ağ etkinliğiniz üçüncü bir tarafça izlenebilir.\n\nCihazınızda yüklü durumdaki güvenilen bir kimlik bilgisi bunu mümkün kılmaktadır."</string>
<string name="ssl_ca_cert_settings_button" msgid="2044927302268394991">"{count,plural, =1{Sertifikayı kontrol et}other{Sertifikaları kontrol et}}"</string>
- <string name="user_settings_title" msgid="6550866465409807877">"Birden fazla kullanıcı"</string>
+ <string name="user_settings_title" msgid="6550866465409807877">"Birden çok kullanıcı"</string>
<string name="user_list_title" msgid="1387379079186123404">"Kullanıcılar ve Profiller"</string>
<string name="user_add_user_or_profile_menu" msgid="305851380425838287">"Kullanıcı veya profil ekle"</string>
<string name="user_summary_restricted_profile" msgid="451650609582185813">"Kısıtlı profil"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Misafir etkinliği silinsin mi?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Bu misafir oturumundaki uygulamalar ve veriler şimdi silinecektir. Bundan sonraki tüm misafir etkinlikleri ise misafir modundan her çıktığınızda silinir."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"sil, misafir, etkinlik, veri, ziyaretçi"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Misafirin, telefonu kullanmasına izin verin"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Misafirin telefon etmesine izin ver"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Çağrı geçmişi bu kullanıcıyla paylaşılacak"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon aramalarını ve mesajları aç"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Bu kullanıcıyı yönetici yap"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"ağ, mobil ağ durumu, hizmet durumu, sinyal gücü, mobil ağ türü, dolaşım, ICCID, SIM kimliği"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"SIM kimliği"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"seri numarası, donanım sürümü"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"pil bilgileri, üretim tarihi, şarj döngü sayısı, ilk kullanım"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android güvenlik yaması düzeyi, ana bant sürümü, çekirdek sürümü"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"tema, açık, koyu, mod, ışık hassasiyeti, ışık korkusu, karanlık yap, karart, koyu mod, migren"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"koyu tema"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Cihaz varsayılanı"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Yer paylaşımı uygulanamadı"</string>
<string name="special_access" msgid="1767980727423395147">"Özel uygulama erişimi"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> uygulama sınırsız veri kullanabilir</item>
- <item quantity="one">1 uygulama sınırsız veri kullanabilir</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Daha fazla göster"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Uzun süren arka plan görevleri"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Uzun süre çalışan arka plan görevlerine izin verin"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Uygulama uyumluluk değişikliklerini aç/kapat"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Varsayılan olarak etkin değişiklikler"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Varsayılan olarak devre dışı değişiklikler"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Mevcut uygulama yok"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Uygulama uyumluluğuyla ilgili değişiklikler sadece hata ayıklaması yapılabilecek uygulamalar için değiştirilebilir. Hata ayıklaması yapılabilecek bir uygulama yükleyip tekrar deneyin"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Bu ayar başka bir ayara bağlı"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Hesap"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Alt işlem kısıtlamalarını devre dışı bırak"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Uygulamadaki alt işlemlerin sistem kaynağı kullanımıyla ilgili kısıtlamaları devre dışı bırakın"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Notlar rolünü zorla etkinleştir"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Notlar rolü aracılığıyla not alma sistemi entegrasyonlarını etkinleştirin. Notlar rolü daha önce etkinleştirilmişse hiçbir değişiklik olmaz."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Notlar rolü aracılığıyla not alma sistemi entegrasyonlarını etkinleştirin. Notlar rolü daha önce etkinleştirilmişse hiçbir değişiklik olmaz. Yeniden başlatmayı gerektirir."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Yayın"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> uygulamasında anons yapın"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Yakınınızda oynatılan yayınları dinleyin"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 3a362f4..8aec09a 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth увімкнено"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Показати всі"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Стилус"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Стандартний додаток для нотаток"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Натискання кнопки стилуса"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (робочий профіль)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Писати в текстових полях"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ігнорувати всі натискання кнопок стилусом"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Стилус"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Температура"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Перший день тижня"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Параметри чисел"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Використовувати значення за умовчанням"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Використовувати налаштування за умовчанням"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Градуси Цельсія (°С)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Градуси Фаренгейта (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Неділя"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Версія ядра"</string>
<string name="build_number" msgid="9009733242117579826">"Номер складання"</string>
<string name="module_version" msgid="1787518340082046658">"Оновлення системи Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Інформація про акумулятор"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Невідомо"</string>
<string name="storage_settings" msgid="7472188817781592677">"Пам\'ять"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Сховище й кеш"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Адреса Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Серійний номер"</string>
<string name="status_up_time" msgid="1274778533719495438">"Час із моменту ввімкнення"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Дата виготовлення"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Дата першого використання"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Кількість циклів"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Недоступно"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Обчислення…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Перейменувати"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Підключити"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Буде скинуто всі налаштування Wi-Fi і Bluetooth. Цю дію неможливо відмінити."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Скинути"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Налаштування Wi-Fi і Bluetooth скинуто"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Видалити"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Видалити всі дані з eSIM-карт"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Мобільні тарифні плани не буде скасовано. Щоб завантажити нові SIM-карти, зв\'яжіться з оператором."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Скинути налаштування"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Також розблоковувати ключем цей пристрій"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Також розблоковувати PIN-кодом цей пристрій"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Також розблоковувати паролем цей пристрій"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Підтвердьте ключ"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Підтвердьте PIN-код"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Підтвердьте пароль"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Щоб продовжити, введіть ключ пристрою"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Щоб продовжити, введіть PIN-код пристрою"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Щоб продовжити, введіть пароль пристрою"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Неправильний PIN-код"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Неправильний пароль"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Неправильний ключ"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Переглянути за додатками"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Переглянути за системами"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Оскільки перед відправленням проводяться перевірки якості, під час першого використання кількість циклів може не дорівнювати нулю"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Статистика про процеси"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Статистика про запущені процеси"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Використання пам’яті"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Видалити дії в режимі гостя?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Додатки й дані з цього сеансу в режимі гостя буде видалено зараз, а всі майбутні дії гостя видалятимуться під час кожного виходу з цього режиму"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"видалити, гість, дії, вилучити, дані, відвідувач, стерти"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Дозволити гостю користуватися телефоном"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Дозволити гостю телефонувати"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"У режимі гостя користувач матиме доступ до історії викликів"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Увімкнути телефонні дзвінки й SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Надати цьому користувачу права адміністратора"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"мережа, стан мобільної мережі, стан сервісу, рівень сигналу, тип мобільної мережі, роумінг, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"серійний номер, версія апаратного забезпечення"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"інформація про акумулятор, дата виготовлення, кількість циклів, перше використання"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"рівень виправлення системи безпеки android, версія каналу зв’язку, версія ядра"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"тема, світло, темний, режим, чутливість до світла, фотофобія, зробити темнішим, затемнити, темний режим, мігрень"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"темна тема"</string>
@@ -3855,12 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Налаштування пристрою за умовчанням"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Не вдалося застосувати накладання"</string>
<string name="special_access" msgid="1767980727423395147">"Спеціальний доступ"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> додаток із необмеженим доступом до даних</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> додатки з необмеженим доступом до даних</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> додатків із необмеженим доступом до даних</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> додатка з необмеженим доступом до даних</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Показати більше"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Довгі фонові завдання"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Дозволити довготривалі фонові завдання"</string>
@@ -4148,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Увімкнути або вимкнути зміни сумісності додатка"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Зміни, увімкнені за умовчанням"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Зміни, вимкнені за умовчанням"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Немає додатків"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Налаштування сумісності можна змінювати лише для налагоджуваних додатків. Установіть налагоджуваний додаток і спробуйте ще раз."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Залежить від іншого налаштування"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Обліковий запис"</string>
@@ -4668,7 +4674,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Вимкнути обмеження для дочірніх процесів"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Вимкнути обмеження на використання системних ресурсів дочірніми процесами додатка"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Примусово ввімкнути набір функцій \"Нотатки\""</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Увімкніть системні інтеграції для створення нотаток за допомогою набору функцій \"Нотатки\". Якщо набір функцій \"Нотатки\" вже ввімкнено, нічого не відбудеться."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Увімкніть системні інтеграції для створення нотаток за допомогою набору функцій \"Нотатки\". Якщо набір функцій \"Нотатки\" вже ввімкнено, нічого не відбудеться. Потрібен перезапуск."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Трансляція"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Змінити додаток для трансляції на <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слухайте трансляції з пристроїв поблизу"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 73703a0..dd017ad 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"بلوٹوتھ کو آن کر دیا گیا"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"سبھی دیکھیں"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"اسٹائلس"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"ڈیفالٹ نوٹس ایپ"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Tail بٹن دبائیں"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (دفتری پروفائل)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"ٹیکسٹ فیلڈز میں لکھیں"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"اسٹائلس کے بٹن کو دبانے کا عمل نظر انداز کریں"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"اسٹائلس"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"درجہ حرارت"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"ہفتے کا پہلا دن"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"نمبرز کی ترجیحات"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"ایپ کا ڈیفالٹ استعمال کریں"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"ڈیفالٹ کا استعمال کریں"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"سیلسیئس(°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"فارن ہائیٹ(°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"اتوار"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"کرنل ورژن"</string>
<string name="build_number" msgid="9009733242117579826">"بلڈ نمبر"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play سسٹم اپ ڈیٹ"</string>
+ <string name="battery_info" msgid="7873528123969546728">"بیٹری کی معلومات"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"دستیاب نہیں ہے"</string>
<string name="storage_settings" msgid="7472188817781592677">"اسٹوریج"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"اسٹوریج اور کیش"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"بلوٹوتھ پتہ"</string>
<string name="status_serial_number" msgid="9060064164331466789">"سیریل نمبر"</string>
<string name="status_up_time" msgid="1274778533719495438">"آلہ اتنی دیر سے چل رہا ہے"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"مینوفیکچر کی تاریخ"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"پہلے استعمال کی تاریخ"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"چارج سائیکل کی تعداد"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"دستیاب نہیں ہیں"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"حساب لگایا جا رہا ہے…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"نام تبدیل کریں"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"ماؤنٹ کریں"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"اس سے Wi-Fi اور بلوٹوتھ کی تمام ترتیبات ری سیٹ ہو جائیں گی۔ آپ اس کاروائی کو کالعدم نہیں کر سکتے ہیں۔"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"ری سیٹ کریں"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"بلوٹوتھ اور Wi‑Fi کو ری سیٹ کر دیا گیا ہے"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"مٹائیں"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIMs مٹائیں"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"اس سے موبائل سروس کا کوئی بھی پلان منسوخ نہیں ہوگا۔ متبادل SIMs کو ڈاؤن لوڈ کرنے کے لیے، اپنے کیریئر سے رابطہ کریں۔"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ترتیبات ری سیٹ کریں"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"اس آلے کو غیر مقفل کرنے کیلئے پیٹرن بھی استعمال کریں"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"اس آلے کو غیر مقفل کرنے کیلئے PIN بھی استعمال کریں"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"اس آلے کو غیر مقفل کرنے کیلئے پاس ورڈ بھی استعمال کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"پیٹرن کی توثیق کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN کی توثیق کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"پاس ورڈ کی توثیق کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"جاری رکھنے کیلئے اپنے آلے کا پیٹرن استعمال کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"جاری رکھنے کیلئے اپنے آلہ کا PIN درج کریں"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"جاری رکھنے کیلئے اپنے آلہ کا پاس ورڈ درج کریں"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"غلط PIN"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"غلط پاس ورڈ"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"غلط پیٹرن"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"ایپس کے لحاظ سے دیکھیں"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"سسٹمز کے لحاظ سے دیکھیں"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"شپنگ سے پہلے معیار کے معائنوں کی وجہ سے، سائیکل کی تعداد پہلے استعمال پر صفر نہیں ہوسکتی ہے"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"پروسیس اعداد و شمار"</string>
<string name="process_stats_summary" msgid="522842188571764699">"جاری پروسیسز کے بارے میں مفید اعداد و شمار"</string>
<string name="app_memory_use" msgid="7559666138324410666">"میموری کا استعمال"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"مہمان کی سرگرمی کو حذف کریں؟"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"اس مہمان سیشن سے ایپس اور ڈیٹا کو اب حذف کر دیا جائے گا، اور ہر دفعہ آپ کے مہمان وضع سے باہر نکلنے پر مہمان کی مستقبل کی تمام سرگرمی حذف کر دی جائے گی"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"حذف کریں، مہمان، سرگرمی، ہٹائیں، ڈیٹا، ملاحظہ کاران، مٹا دیں"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"مہمان کو فون استعمال کرنے کی اجازت دیں"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"مہمان کو فون کال کرنے کی اجازت دیں"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"کال کی سرگزشت کا مہمان صارف کے ساتھ اشتراک کیا جائے گا"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"فون کالز اور SMS آن کریں"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"اس صارف کو منتظم بنائیں"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"نیٹ ورک، موبائل نیٹ ورک کی صورتحال، سروس کی صورتحال، سگنل کی قوت، موبائل نیٹ ورک کی قسم، رومنگ، iccid، eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"نمبر شمار، ہارڈ ویئر کا ورژن"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"بیٹری کی معلومات، مینوفیکچر کی تاریخ، چارج سائیکل کی تعداد، پہلا استعمال"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android سیکیورٹی پیچ کی سطح، بیس بینڈ ورژن، کرنل ورژن"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"تھیم، ہلکی، گہری، وضع، ہلکی حساسیت، فوٹو فوبیا، رنگ کو زیادہ گہرا کرنا، رنگ گہرا کرنا، تاریک وضع، آدھے سر کا درد"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"گہری تھیم"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"آلہ ڈیفالٹ"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"اوورلے کو لاگو کرنا ناکام ہو گیا"</string>
<string name="special_access" msgid="1767980727423395147">"ایپ کی خاص رسائی"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ایپس غیر محدود ڈیٹا کا استعمال کر سکتی ہیں</item>
- <item quantity="one">1 ایپ غیر محدود ڈیٹا کا استعمال کر سکتی ہے</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"مزید دیکھیں"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"لمبے پس منظر کے ٹاسکس"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"لمبے وقت تک چلنے والے پس منظر کے ٹاسکس کی اجازت دیں"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"ایپ کی موافقت کی تبدیلیاں ٹوگل کریں"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"فعال کردہ ڈیفالٹ تبدیلیاں"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"غیر فعال کردہ ڈیفالٹ تبدیلیاں"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"کوئی ایپ دستیاب نہیں"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"ایپ کی موافقت کی تبدیلیاں صرف قابل ڈیبگ اپپس کے لیے ہی ترمیم کی جا سکتی ہیں۔ قابل ڈیبگ ایپ انسٹال کریں اور دوبارہ کوشش کریں۔"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"دوسری ترتیب پر منحصر ہے"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"اکاؤنٹ"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"بچے کے پروسیس کی پابندیوں کو غیر فعال کریں"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"ایسی ایپ کے سسٹم کے وسیلے کے استعمال پر کاروائیوں کو غیر فعال کریں جنہیں پچہ پروسیس کرتا ہے"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"نوٹس رول کو زبردستی فعال کریں"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"نوٹس رول کے ذریعے نوٹ لینے کے نظام کے انضمام کو فعال کریں۔ اگر نوٹس رول پہلے ہی فعال ہے، تو کچھ کرنے کی ضرورت نہیں ہے۔"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"نوٹس رول کے ذریعے نوٹ لینے کے نظام کے انضمام کو فعال کریں۔ اگر نوٹس رول پہلے ہی فعال ہے، تو کچھ کرنے کی ضرورت نہیں ہے۔ ریبوٹ کی ضرورت ہے۔"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"براڈکاسٹ"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> پر براڈکاسٹ کریں"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"وہ براڈکاسٹس سنیں جو آپ کے قریب چل رہے ہیں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 0944272..993fdba 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth yoqildi"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Hammasi"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Stilus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Birlamchi qaydlar ilovasi"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Stilus tugmasi bosilishi"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Ish profili)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Matn maydonlarida yozish"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Stilus bilan bosilgan barcha tugmalarni eʼtiborsiz qoldirish"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Stilus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Harorat"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Haftaning birinchi kuni"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Raqamlar sozlamalari"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Ilovaga sozlamani oʻzi belgilashiga ruxsat bering"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Birlamchidan foydalanish"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Selsiy (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Farengeyt (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Yakshanba"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Yadro versiyasi"</string>
<string name="build_number" msgid="9009733242117579826">"Nashr raqami"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play tizim yangilanishi"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Batareyaga oid axborot"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Mavjud emas"</string>
<string name="storage_settings" msgid="7472188817781592677">"Xotira"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Xotira va kesh"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Bluetooth manzili"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Seriya raqami"</string>
<string name="status_up_time" msgid="1274778533719495438">"Faollik vaqti"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Ishlab chiqarilgan sana"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Ilk foydalanish sanasi"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Davrlar soni"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Mavjud emas"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Hisoblanmoqda…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Qayta nomlash"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Ulash"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Bunda barcha Bluetooth va Wi-Fi sozlamalari asliga qaytariladi. Bu amalni ortga qaytara olmaysiz."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Tiklash"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Bluetooth va Wi-Fi sozlamalari tiklandi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Tozalash"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"eSIM kartalarni tozalash"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Bunda mobil xizmatning hech qaysi tarif rejasi bekor qilinmaydi. Yangi eSIM profilini yuklab olish uchun aloqa operatoriga murojaat qiling"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Asliga qaytarish"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Bu qurilmani grafik kalit bilan ochish mumkin"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Bu qurilmani PIN kod bilan ochish mumkin"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Bu qurilmani parol bilan ochish mumkin"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Grafik kalitni tasdiqlash"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"PIN kodni tasdiqlash"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Parolni tasdiqlash"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Davom etish uchun grafik kalitni chizing"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Davom etish uchun qurilmangiz PIN kodini kiriting"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Davom etish uchun qurilmangiz parolini kiriting"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN-kod noto‘g‘ri"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Parol noto‘g‘ri"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Grafik kalit xato"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Ilovalar boʻyicha koʻrish"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Tizim boʻyicha koʻrish"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Yetkazib berishdan oldin sifat nazorati tufayli, quvvatlash davrlari soni birinchi foydalanishda noldan farq qilishi mumkin."</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Jarayonlar statistikasi"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Ish jarayonlari haqidagi g‘alati statistikalar"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Band xotira"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Mehmon faoliyati tozalansinmi?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Joriy mehmon seansidagi ilova va maʼlumotlar hozir tozalanadi va har safar mehmon rejimidan chiqish vaqtida barcha keyingi mehmon faolliklari tozalanadi"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"oʻchirish, mehmon, harakatlar, olib tashlash, maʼlumotlar, tashrifchi, tozalash"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Mehmonga telefon ishlatishi uchun ruxsat"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Mehmonga telefon qilishga ruxsat berish"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Chaqiruvlar tarixi mehmon foydalanuvchiga ham ulashiladi"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon chaqiruvlari va SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Foydalanuvchiga administrator huquqini berish"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"tarmoq, mobil tarmoq holati, xizmat holati, signal kuchi, mobil tarmoq turi, rouming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"seriya raqami, apparat versiyasi"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"batareya haqida axborot, ishlab chiqarilgan sana, davrlar soni, ilk foydalanish"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"android tizimi xavfsizligi uchun yangilanish, aloqa moduli versiyasi, yadro versiyasi"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"mavzu, yorqin, qorongʻi, rejim, yorugʻlik sezuvchanligi, fotofobiya, qorongʻilashtirish, qorongʻi, tungi rejim, bosh ogʻriq"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"tungi mavzu"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Qurilma standarti"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Ustiga joylanmadi"</string>
<string name="special_access" msgid="1767980727423395147">"Maxsus ruxsatlar"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta ilova uchun trafik cheklanmagan</item>
- <item quantity="one">1 ta ilova uchun trafik cheklanmagan</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Yana"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Fondagi uzoq muddatli vazifalar"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Fondagi uzoq muddatli vazifalarga ruxsat berish"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Ilova mosligiga oʻzgartirishlarni koʻrsatish"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Standart yoniq oʻzgartirishlar"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Standart yoqilmagan oʻzgartirishlar"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Mos ilova topilmadi"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Ilova mosligini faqat nosozliklari aniqlanadigan ilovalarda oʻzgartirish mumkin. Nosozliklari aniqlanadigan ilovani oʻrnating va qayta urining."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Bu sozlama boshqa parametrlarga bog‘liq"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Hisob"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Quyi jarayon cheklovlarini faolsizlantiring"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Ilova quyi jarayonlarning tizim resurslaridan foydalanishiga cheklovni faolsizlantiring"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Qaydlar vakolati majburan yoqilsin"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Qaydlar vakolati yordamida qayd yozish tizim funksiyasini yoqish. Qaydlar vakolati allaqachon yoniq, hech nima qilmaydi."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Qaydlar vakolati yordamida qayd yozish tizim funksiyasini yoqish. Qaydlar vakolati allaqachon yoniq, hech nima qilmaydi. Qayta ishga tushirish talab etiladi."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Translatsiya"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> ilovasiga translatsiya"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Atrofingizdagi translatsiyaga ulaning"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 20c3879..ac4352d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Đã bật Bluetooth"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Xem tất cả"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Bút cảm ứng"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"Ứng dụng ghi chú mặc định"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Nhấp vào nút ở đuôi"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Hồ sơ công việc)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Viết vào trường văn bản"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Bỏ qua tất cả các lần nhấn nút bằng bút cảm ứng"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"Bút cảm ứng"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Nhiệt độ"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Ngày đầu tiên trong tuần"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Lựa chọn ưu tiên về số"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Sử dụng chế độ mặc định của ứng dụng"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Dùng tùy chọn mặc định"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"Độ C (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"Độ F (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"Chủ Nhật"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Phiên bản Kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Số bản dựng"</string>
<string name="module_version" msgid="1787518340082046658">"Bản cập nhật hệ thống Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Thông tin về pin"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Không có sẵn"</string>
<string name="storage_settings" msgid="7472188817781592677">"Bộ nhớ"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Bộ nhớ và bộ nhớ đệm"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Địa chỉ Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Số sê-ri"</string>
<string name="status_up_time" msgid="1274778533719495438">"Thời gian hoạt động"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Ngày sản xuất"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Ngày bắt đầu sử dụng"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Số chu kỳ"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Không có"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Đang tính toán..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Đổi tên"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Gắn"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Thao tác này sẽ đặt lại tất cả các chế độ cài đặt Bluetooth và Wi‑Fi. Bạn không thể huỷ thao tác này sau khi đã thực hiện."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Đặt lại"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"Đã đặt lại Bluetooth và Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Xóa"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Xoá eSIM"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Thao tác này sẽ không hủy gói dịch vụ di động nào. Để tải SIM thay thế xuống, hãy liên hệ với nhà mạng của bạn."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Đặt lại chế độ cài đặt"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Cũng dùng hình mở khoá để mở khoá thiết bị này"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Cũng dùng mã PIN để mở khoá thiết bị này"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Cũng dùng mật khẩu để mở khoá thiết bị này"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Xác minh hình mở khoá"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Xác minh mã PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Xác minh mật khẩu"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Sử dụng hình mở khoá trên thiết bị của bạn để tiếp tục"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Nhập mã PIN thiết bị của bạn để tiếp tục"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Nhập mật khẩu thiết bị của bạn để tiếp tục"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Mã PIN sai"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Mật khẩu sai"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Hình mở khóa không chính xác"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Xem theo ứng dụng"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Xem theo hệ thống"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Do quy trình kiểm tra chất lượng trước khi vận chuyển, số chu kỳ có thể không bằng 0 trong lần đầu bạn sử dụng"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Số liệu thống kê về quy trình"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Số liệu thống kê chi tiết về các quy trình đang chạy"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Mức sử dụng bộ nhớ"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Xoá hoạt động ở chế độ khách?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Các ứng dụng và dữ liệu trong phiên khách này sẽ bị xoá ngay bây giờ, và tất cả hoạt động sau này ở chế độ khách sẽ bị xoá mỗi khi bạn thoát khỏi chế độ khách"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"xoá, khách, hoạt động, dữ liệu, khách truy cập"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Cho phép khách sử dụng điện thoại"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Cho phép khách gọi điện thoại"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Nhật ký cuộc gọi sẽ được chia sẻ với người dùng khách"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Bật cuộc gọi điện thoại và SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Đặt người dùng này làm quản trị viên"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"mạng, trạng thái mạng di động, trạng thái dịch vụ, cường độ tín hiệu, loại mạng di động, chuyển vùng, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"số sê-ri, phiên bản phần cứng"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"thông tin về pin, ngày sản xuất, số chu kỳ, ngày bắt đầu sử dụng"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"cấp bản vá bảo mật android, phiên bản băng tần cơ sở, phiên bản kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"giao diện, sáng, tối, chế độ, nhạy cảm với ánh sáng, chứng sợ ánh sáng, làm tối hơn, làm tối, chế độ tối, chứng đau nửa đầu"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"giao diện tối"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Theo giá trị mặc định của thiết bị"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Không áp dụng được lớp phủ"</string>
<string name="special_access" msgid="1767980727423395147">"Quyền truy cập đặc biệt"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ứng dụng có thể sử dụng dữ liệu không bị hạn chế</item>
- <item quantity="one">1 ứng dụng có thể sử dụng dữ liệu không bị hạn chế</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Xem thêm"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Tác vụ trong nền dài hạn"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Cho phép chạy tác vụ trong nền dài hạn"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Bật/tắt các thay đổi về khả năng tương thích của ứng dụng"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Các thay đổi được bật theo mặc định"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Các thay đổi bị tắt theo mặc định"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Không có ứng dụng"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Bạn chỉ có thể sửa đổi các thay đổi về khả năng tương thích của ứng dụng đối với các ứng dụng có thể gỡ lỗi. Hãy cài đặt một ứng dụng có thể gỡ lỗi rồi thử lại."</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Phụ thuộc vào một cài đặt khác"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"Tài khoản"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Tắt các mục hạn chế đối với tiến trình con"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Tắt các mục hạn chế đối với việc sử dụng tài nguyên hệ thống của các tiến trình con của ứng dụng"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Buộc bật vai trò Ghi chú"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Cho phép tích hợp hệ thống ghi chú qua vai trò Ghi chú. Nếu vai trò Ghi chú đã được bật thì không làm gì cả."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Cho phép tích hợp hệ thống ghi chú qua vai trò Ghi chú. Nếu vai trò Ghi chú đã được bật, bạn không cần làm gì cả. Bạn cần phải khởi động lại thiết bị."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Truyền phát"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Phát <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Nghe nội dung truyền phát đang phát ở gần bạn"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 7c0e6c6..5af8ec9 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"已开启蓝牙"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"查看全部"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"触控笔"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"默认的记事应用"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"按下尾部按钮时"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g>(工作资料)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"在文本字段中书写"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"忽略所有通过触控笔按下按钮的动作"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"触控笔"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"温度"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"一周的第一天"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"数字偏好设置"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"使用应用默认设置"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"使用默认字符串"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"摄氏度 (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"华氏度 (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"星期日"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"内核版本"</string>
<string name="build_number" msgid="9009733242117579826">"Build 号"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play 系统更新"</string>
+ <string name="battery_info" msgid="7873528123969546728">"电池信息"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"无法获取"</string>
<string name="storage_settings" msgid="7472188817781592677">"存储"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"存储和缓存"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"蓝牙地址"</string>
<string name="status_serial_number" msgid="9060064164331466789">"序列号"</string>
<string name="status_up_time" msgid="1274778533719495438">"开机累计时长"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"制造日期"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"首次使用日期"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"充电循环次数"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"未提供"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"正在计算..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"重命名"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"装载"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"这将重置所有 WLAN 和蓝牙设置。此操作无法撤消。"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"重置"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"蓝牙和 WLAN 已重置"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"清除"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"清空 eSIM 卡"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"此操作并不会取消任何移动服务套餐。如要下载替代 SIM 卡,请与您的运营商联系。"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"重置设置"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"还使用解锁图案来解锁此设备"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"还使用 PIN 码来解锁此设备"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"还使用密码来解锁此设备"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"验证图案"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"验证 PIN 码"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"验证密码"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"请绘制您的设备解锁图案以继续"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"请输入您的设备 PIN 码以继续"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"请输入您的设备密码以继续"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN 码错误"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"密码错误"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"图案错误"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"按应用查看"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"按系统查看"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"由于发货前需要检查质量,第一次使用时的充电循环次数可能不为零"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"进程统计信息"</string>
<string name="process_stats_summary" msgid="522842188571764699">"运行中进程的相关技术统计信息"</string>
<string name="app_memory_use" msgid="7559666138324410666">"内存用量"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要删除访客活动吗?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"此访客会话中的应用和数据将会立即删除;日后您每次退出访客模式时,系统都会删除访客活动记录"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"删除, 访客, 活动, 移除, 数据, 访问者, 清除, delete, guest, activity, remove, data, visitor, erase"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"允许访客使用电话"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"允许访客打电话"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"将与访客用户共享通话记录"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"开启通话和短信功能"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"将此用户设为管理员"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"网络, 移动网络状态, 服务状态, 信号强度, 移动网络类型, 漫游, ICCID, EID, network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID, eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"序列号, 硬件版本"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"电池信息, battery info, 制造日期, manufacture date, 充电循环次数, cycle count, 首次使用, first use"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android 安全补丁程序级别, 基带版本, 内核版本"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"主题, 浅色, 深色, 模式, 光敏度, 畏光, 调暗, 调低亮度, 深色模式, 偏头痛, theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"深色主题"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"设备默认设置"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"无法应用叠加"</string>
<string name="special_access" msgid="1767980727423395147">"特殊应用权限"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个应用可以无限量使用流量</item>
- <item quantity="one">1 个应用可以无限量使用流量</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"查看更多"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"长期后台任务"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"允许执行长期运行的后台任务"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"在应用兼容性变更之间切换"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"默认启用的应用兼容性变更"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"默认停用的应用兼容性变更"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"没有可用的应用"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"只能修改可调试应用的应用兼容性变更。请安装可调试的应用,然后重试。"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"必须一并更改其他设置"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"帐号"</string>
@@ -4536,7 +4544,7 @@
<string name="dark_theme_main_switch_title" msgid="4045147031947562280">"使用深色主题"</string>
<string name="bluetooth_main_switch_title" msgid="8409835540311309632">"使用蓝牙"</string>
<string name="prevent_ringing_main_switch_title" msgid="4726252811262086643">"使用“阻止响铃”"</string>
- <string name="use_wifi_hotsopt_main_switch_title" msgid="3909731167290690539">"使用 WLAN 热点"</string>
+ <string name="use_wifi_hotsopt_main_switch_title" msgid="3909731167290690539">"使用“WLAN 热点”"</string>
<string name="app_pinning_main_switch_title" msgid="5465506660064032876">"使用“固定应用”"</string>
<string name="developer_options_main_switch_title" msgid="1720074589554152501">"使用“开发者选项”"</string>
<string name="default_print_service_main_switch_title" msgid="4697133737128324036">"使用打印服务"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"停止限制子进程"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"停止限制应用子进程的系统资源用量"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"强制启用“记事”角色"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"通过“记事”角色启用记事系统集成。如果“记事”角色已启用,则无需执行任何操作。"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"通过“记事”角色启用记事系统集成。如果“记事”角色已启用,则无需执行任何操作。需要重新启动。"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"广播"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"广播“<xliff:g id="CURRENTAPP">%1$s</xliff:g>”的内容"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"收听在您附近播放的广播"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 12e3614..a8e33ff 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"已開啟藍牙"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"查看全部"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"觸控筆"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"預設筆記應用程式"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"按下尾部按鈕時"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (工作設定檔)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"在文字欄位書寫"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"忽略所有觸控筆按鈕按壓動作"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"觸控筆"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"溫度"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"每週的第一天"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"數字偏好設定"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"使用應用程式預設值"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"使用預設"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"攝氏 (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"華氏 (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"星期日"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"核心版本"</string>
<string name="build_number" msgid="9009733242117579826">"版本號碼"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play 系統更新"</string>
+ <string name="battery_info" msgid="7873528123969546728">"電池資訊"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"無法使用"</string>
<string name="storage_settings" msgid="7472188817781592677">"儲存空間"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"儲存空間與快取空間"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"藍牙位址"</string>
<string name="status_serial_number" msgid="9060064164331466789">"序號"</string>
<string name="status_up_time" msgid="1274778533719495438">"開機時間"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"製造日期"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"首次使用日期"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"週期數"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"未有提供"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"正在計算..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"重新命名"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"安裝"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"此操作將重設所有 Wi‑Fi 和藍牙設定,且無法復原。"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"重設"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"已重設藍牙和 Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"清除"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"清除 eSIM 卡"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"此操作不會取消任何流動服務計劃。如要下載替換用的 SIM 卡,請聯絡流動網絡供應商。"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"重設設定"</string>
@@ -1458,6 +1463,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"亦可使用上鎖圖案解鎖此裝置"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"亦可使用 PIN 解鎖此裝置"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"亦可使用密碼解鎖此裝置"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"驗證圖案"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"驗證 PIN"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"驗證密碼"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"畫出裝置上鎖圖案即可繼續"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"輸入裝置 PIN 即可繼續"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"輸入裝置密碼即可繼續"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN 碼錯誤"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"密碼錯誤"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"圖案錯誤"</string>
@@ -2326,6 +2337,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"按應用程式查看"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"按系統查看"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"由於出貨前需要進行質量檢查,因此你首次使用時的週期數未必是零"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"程序統計資料"</string>
<string name="process_stats_summary" msgid="522842188571764699">"執行中程序的技術統計資料"</string>
<string name="app_memory_use" msgid="7559666138324410666">"記憶體用量"</string>
@@ -2703,7 +2715,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要刪除訪客活動嗎?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"系統現在會刪除此訪客工作階段中的應用程式和資料;日後每次結束訪客模式時,系統都會刪除所有未來的訪客活動"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"刪除, 訪客, 活動, 移除, 資料, 訪客, 清除"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"允許訪客使用手機"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"允許訪客使用通話功能"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"將與訪客使用者分享通話記錄"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"開啟通話和短訊功能"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"指定此使用者為管理員"</string>
@@ -2929,6 +2941,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"網絡, 流動網絡狀態, 服務狀態, 訊號強度, 流動網絡類型, 漫遊, ICCID, EID"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"EID"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"序號, 硬件版本"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"電池資訊、製造日期、週期數、首次使用"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android 安全性修補程式等級, 基頻版本, 核心版本"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"主題, 淺色, 深色, 模式, 光敏度, 光敏, 調暗, 調低亮度, 暗光模式, 偏頭痛"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"深色主題背景"</string>
@@ -3855,10 +3868,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"裝置預設設定"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"無法套用重疊"</string>
<string name="special_access" msgid="1767980727423395147">"特別應用程式權限"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個應用程式可使用無限數據</item>
- <item quantity="one">1 個應用程式可使用無限數據</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"查看更多"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"長時間執行的背景工作"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"允許長時間執行的背景工作"</string>
@@ -4146,7 +4155,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"切換應用程式兼容性變更"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"預設為啟用的變更"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"預設為已停用的變更"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"沒有可用的應用程式"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"你只能修改 debuggable 應用程式的兼容性。請安裝 debuggable 應用程式,然後再試。"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"必須一併變更其他設定"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"帳戶"</string>
@@ -4664,7 +4672,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"停用對子處理過程的限制"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"停用對應用程式子處理過程的系統資源使用限制"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"強制啟用「筆記」角色"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"透過「筆記」角色啟用筆記系統整合。如已啟用「筆記」角色,則無需執行任何操作。"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"透過「筆記」角色啟用筆記系統整合。如已啟用「筆記」角色,則無需執行任何操作。 (需要重新啟動裝置)。"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"廣播"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"廣播「<xliff:g id="CURRENTAPP">%1$s</xliff:g>」的內容"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"收聽正在你附近播放的廣播"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6f8d37f..81b4e09 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"已開啟藍牙"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"查看全部"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"觸控筆"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"預設的記事應用程式"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"按下按鈕後隨即開啟"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (工作資料夾)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"在文字欄位中書寫"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"忽略所有觸控筆按鈕按壓動作"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"觸控筆"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"溫度"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"一週的第一天"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"數字顯示方式偏好"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"使用應用程式預設值"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"使用預設值"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"攝氏 (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"華氏 (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"星期日"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"核心版本"</string>
<string name="build_number" msgid="9009733242117579826">"版本號碼"</string>
<string name="module_version" msgid="1787518340082046658">"Google Play 系統更新"</string>
+ <string name="battery_info" msgid="7873528123969546728">"電池資訊"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"無法取得"</string>
<string name="storage_settings" msgid="7472188817781592677">"儲存空間"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"儲存空間和快取"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"藍牙位址"</string>
<string name="status_serial_number" msgid="9060064164331466789">"序號"</string>
<string name="status_up_time" msgid="1274778533719495438">"開機累計時間"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"製造日期"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"首次使用日期"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"週期數"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"無法顯示"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"計算中…"</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"重新命名"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"掛載"</string>
@@ -1269,7 +1275,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"這項操作會重設所有 Wi‑Fi 和藍牙設定,而且無法復原。"</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"重設"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"已重設藍牙和 Wi‑Fi"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"清除"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"清除 eSIM 卡"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"這項操作不會取消任何電信資費方案。如要下載替換用的 SIM 卡,請與你的電信業者聯絡。"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"重設設定"</string>
@@ -1458,6 +1463,18 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"一併使用圖案解鎖這部裝置"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"一併使用 PIN 碼解鎖這部裝置"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"一併使用密碼解鎖這部裝置"</string>
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_header (6669435143987988314) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_header (2585263648322879131) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_header (3064676176428495228) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pattern_details (6187536224419477465) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_pin_details (203022189107305807) -->
+ <skip />
+ <!-- no translation found for lockpassword_confirm_repair_mode_password_details (4860219600771003873) -->
+ <skip />
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"PIN 碼錯誤"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"密碼錯誤"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"圖案錯誤"</string>
@@ -1830,7 +1847,7 @@
<string name="accessibility_screen_magnification_navbar_title" msgid="480853328665484528">"使用快速手勢放大畫面"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="8067042663897802231">"使用快速手勢並輕觸三下即可放大畫面"</string>
<string name="accessibility_introduction_title" msgid="8834950581512452348">"關於「<xliff:g id="SERVICE">%1$s</xliff:g>」"</string>
- <string name="accessibility_text_reading_options_title" msgid="3224648909213325563">"顯示大小和文字"</string>
+ <string name="accessibility_text_reading_options_title" msgid="3224648909213325563">"螢幕大小和文字"</string>
<string name="accessibility_text_reading_options_suggestion_title" msgid="2492155642665312733">"變更文字的顯示方式"</string>
<string name="accessibility_text_reading_preview_mail_subject" msgid="4597374768612733616">"主旨:熱氣球設計案"</string>
<string name="accessibility_text_reading_preview_mail_from" msgid="1797499780365288020">"寄件者:阿比"</string>
@@ -2326,6 +2343,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"應用程式"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"系統"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"送貨前會進行品質檢測,因此初次使用時,電池循環次數可能不是零"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"處理程序統計資料"</string>
<string name="process_stats_summary" msgid="522842188571764699">"執行中處理程序的相關完善統計資料"</string>
<string name="app_memory_use" msgid="7559666138324410666">"記憶體用量"</string>
@@ -2703,7 +2721,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要刪除訪客活動嗎?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"系統將立即刪除這個訪客工作階段中的應用程式和資料,日後只要你離開訪客模式,系統都會將該次訪客活動全部刪除"</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"刪除, 訪客, 活動, 移除, 資料, 清除"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"允許訪客使用手機"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"允許訪客使用通話功能"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"將與訪客使用者共用通話記錄。"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"開啟通話和簡訊功能"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"將這位使用者設為管理員"</string>
@@ -2929,6 +2947,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"網路, 行動網路狀態, 服務狀態, 訊號強度, 行動網路類型, 漫遊, iccid, eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"序號、硬體版本"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"電池資訊, 製造日期, 週期數, 首次使用"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"Android 安全性修補程式等級、基頻版本、核心版本"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"主題, 淺度, 深色, 模式, 對光線敏感, 畏光, 調暗, 降低亮度, 深色模式, 偏頭痛"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"深色主題"</string>
@@ -3855,10 +3874,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"裝置預設設定"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"無法套用重疊顯示"</string>
<string name="special_access" msgid="1767980727423395147">"特殊應用程式存取權"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個應用程式不受數據用量限制</item>
- <item quantity="one">1 個應用程式不受數據用量限制</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"查看更多項目"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"長期背景作業"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"允許長期執行的背景作業"</string>
@@ -4146,7 +4161,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"切換應用程式相容性變更"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"預設啟用的應用程式有相容性異動"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"預設停用的應用程式有相容性異動"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"沒有可用的應用程式"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"你只能修改可偵錯應用程式的應用程式相容性變更。請安裝可進行偵錯的應用程式,然後再試一次。"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"必須一併變更其他設定"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"帳戶"</string>
@@ -4664,7 +4678,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"停止限制子程序"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"停止限制應用程式子程序的系統資源用量"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"強制啟用「記事」角色"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"透過「記事」角色啟用記事系統整合作業。如果「記事」角色已啟動,系統不會有任何動作。"</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"透過「記事」角色啟用記事系統整合作業。如果「記事」角色已啟用,系統不會有任何動作 (必須重新啟動裝置)。"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"廣播"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"播送「<xliff:g id="CURRENTAPP">%1$s</xliff:g>」的內容"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"收聽附近正在播放的廣播"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 4341b09..82e2015 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -119,7 +119,8 @@
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"I-Bluetooth ivuliwe"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Buka konke"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"I-Stylus"</string>
- <string name="stylus_default_notes_app" msgid="3896158797687806941">"I-app yamanothi wokuzenzakalelayo"</string>
+ <string name="stylus_default_notes_app" msgid="4165657465911764628">"Ukucindezela inkinobho yomsila"</string>
+ <string name="stylus_default_notes_summary_work" msgid="4554643411627934223">"<xliff:g id="APP_NAME">%s</xliff:g> (Iphrofayela yomsebenzi)"</string>
<string name="stylus_textfield_handwriting" msgid="2363579035338976327">"Bhala ezinkambini zombhalo"</string>
<string name="stylus_ignore_button" msgid="7734540973145241391">"Ziba konke ukucindezela inkinobho ye-stylus"</string>
<string name="stylus_connected_devices_title" msgid="2823967577941359812">"I-Stylus"</string>
@@ -177,7 +178,7 @@
<string name="temperature_preferences_title" msgid="5009881556503629058">"Izinga lokushisa"</string>
<string name="first_day_of_week_preferences_title" msgid="1971850087589599553">"Usuku lokuqala lweviki"</string>
<string name="numbers_preferences_title" msgid="8197418984391195446">"Izintandokazi zezinombolo"</string>
- <string name="default_string_of_regional_preference" msgid="7662581547334113719">"Sebenzisa okuzenzakalelayo kwe-app"</string>
+ <string name="default_string_of_regional_preference" msgid="3428899072914884203">"Sebenzisa okuzenzakalelayo"</string>
<string name="celsius_temperature_unit" msgid="8896459071273084507">"I-Celsius (°C)"</string>
<string name="fahrenheit_temperature_unit" msgid="1118677820614569801">"I-Fahrenheit (°F)"</string>
<string name="sunday_first_day_of_week" msgid="7644548348295686051">"ISonto"</string>
@@ -1124,6 +1125,7 @@
<string name="kernel_version" msgid="3513538109381366881">"Inguqulo ye-Kernel"</string>
<string name="build_number" msgid="9009733242117579826">"Inombolo yesakhi"</string>
<string name="module_version" msgid="1787518340082046658">"Isibuyekezo sesistimu se-Google Play"</string>
+ <string name="battery_info" msgid="7873528123969546728">"Ulwazi lebhetri"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"Akutholakali"</string>
<string name="storage_settings" msgid="7472188817781592677">"Isitoreji"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"Isitoreji nenqolobane"</string>
@@ -1156,6 +1158,10 @@
<string name="status_bt_address" msgid="6919660304578476547">"Ikheli le-Bluetooth"</string>
<string name="status_serial_number" msgid="9060064164331466789">"Inombolo yomkhiqizo"</string>
<string name="status_up_time" msgid="1274778533719495438">"Isikhathi esiphezulu"</string>
+ <string name="battery_manufacture_date" msgid="7139426520156833987">"Ilanga lokukhiqiza"</string>
+ <string name="battery_first_use_date" msgid="3157207331722711317">"Ilanga lokuqala ukusebenzisa"</string>
+ <string name="battery_cycle_count" msgid="2912949283386571900">"Isibalo somjikelezo"</string>
+ <string name="battery_cycle_count_not_available" msgid="2426584515665184664">"Ayitholakali"</string>
<string name="memory_calculating_size" msgid="3898240439798661242">"Iyabala..."</string>
<string name="storage_menu_rename" msgid="8549835371429159336">"Qamba kabusha"</string>
<string name="storage_menu_mount" msgid="4760531872302820569">"Khweza"</string>
@@ -1270,7 +1276,6 @@
<string name="reset_bluetooth_wifi_desc" msgid="4030295669083059711">"Lokhu kuzosetha kabusha yonke i-Wi-Fi namasethingi e-Bluetooth. Awukwazi ukuhlehlisa lesi senzo."</string>
<string name="reset_bluetooth_wifi_button_text" msgid="3974098137045963639">"Setha kabusha"</string>
<string name="reset_bluetooth_wifi_complete_toast" msgid="5893439291030574365">"I-Bluetooth ne-Wi-Fi zisethwe kabusha"</string>
- <string name="erase_euicc_data_button" msgid="728078969563311737">"Sula"</string>
<string name="reset_esim_title" msgid="4194570573425902754">"Sula ama-eSIMs"</string>
<string name="reset_esim_desc" msgid="3662444090563399131">"Lokhu ngeke kukhansele noma yiziphi izinhlelo zesevisi yeselula. Ukuze ulande okokumisela ama-SIM, xhumana nenkampani yakho yenethiwekhi."</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"Setha kabusha izilungiselelo"</string>
@@ -1459,6 +1464,12 @@
<string name="lockpassword_remote_validation_set_pattern_as_screenlock" msgid="7595104317648465901">"Futhi sebenzisa iphethini ukuvula le divayisi"</string>
<string name="lockpassword_remote_validation_set_pin_as_screenlock" msgid="509672303005547218">"Futhi sebenzisa Iphinikhodi ukuvula le divayisi"</string>
<string name="lockpassword_remote_validation_set_password_as_screenlock" msgid="2066701840753591922">"Futhi sebenzisa iphasiwedi ukuvula le divayisi"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_header" msgid="6669435143987988314">"Qinisekisa iphethini"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_header" msgid="2585263648322879131">"Qinisekisa iphinikhodi"</string>
+ <string name="lockpassword_confirm_repair_mode_password_header" msgid="3064676176428495228">"Qinisekisa iphasiwedi"</string>
+ <string name="lockpassword_confirm_repair_mode_pattern_details" msgid="6187536224419477465">"Sebenzisa iphethini yedivayisi yakho ukuze uqhubeke"</string>
+ <string name="lockpassword_confirm_repair_mode_pin_details" msgid="203022189107305807">"Faka i-PIN yedivayisi yakho ukuze uqhubeke"</string>
+ <string name="lockpassword_confirm_repair_mode_password_details" msgid="4860219600771003873">"Faka iphasiwedi yedivayisi yakho ukuze uqhubeke"</string>
<string name="lockpassword_invalid_pin" msgid="7530854476819820600">"Iphinikhodi engalungile"</string>
<string name="lockpassword_invalid_password" msgid="1588184930542221687">"Iphasiwedi engalungile"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="8109305107409924083">"Iphethini engalungile"</string>
@@ -2327,6 +2338,7 @@
<string name="battery_usage_spinner_view_by_apps" msgid="8769276544072098082">"Buka ngama-app"</string>
<string name="battery_usage_spinner_view_by_systems" msgid="7904104223212160541">"Buka ngamasistimu"</string>
<string name="battery_usage_less_than_percent" msgid="5873099028895001082">"< <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_cycle_count_footer" msgid="3642121059800373545">"Ngenxa yokuhlolwa kwekhwalithi ngaphambi kokuthunyelwa, isibalo somjikelezo singase singabi nguziro ekusetshenzisweni kokuqala"</string>
<string name="process_stats_summary_title" msgid="502683176231281732">"Izibalo zenqubo"</string>
<string name="process_stats_summary" msgid="522842188571764699">"Izibalo ze-Geeky mayelana nezinqubo zokuqalisa"</string>
<string name="app_memory_use" msgid="7559666138324410666">"Ukusetshenziswa kwememori"</string>
@@ -2704,7 +2716,7 @@
<string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Sula umsebenzi wesihambeli?"</string>
<string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Ama-app nedatha okusuka kulesi sikhathi sesihambeli kuzosulwa manje, wonke umsebenzi wesihambeli wesikhathi esizayo uzosulwa njalo lapho uphuma kwimodi yesivakashi."</string>
<string name="remove_guest_on_exit_keywords" msgid="4961310523576166193">"sula, isivakashi, umsebenzi, susa, idatha, isivakashi, sula"</string>
- <string name="enable_guest_calling" msgid="8300355036005240911">"Vumela isihambeli ukusebenzisa ifoni"</string>
+ <string name="enable_guest_calling" msgid="4620657197834392094">"Vumela isihambeli ukuthi senze amakholi wefoni"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"Umlando wekholi uzokwabiwa nomsebenzisi wesihambeli"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Vula amakholi wefoni ne-SMS"</string>
<string name="user_grant_admin" msgid="5942118263054572074">"Yenza lo msebenzisi abe umphathi"</string>
@@ -2930,6 +2942,7 @@
<string name="keywords_sim_status_iccid_esim" msgid="4634015619840979184">"inethiwekhi, isimo senethiwekhi yeselula, isimo sesevisi, amandla esiginali, uhlobo lwenethiwekhi yeselula, ukuzula, i-iccid, i-eid"</string>
<string name="keywords_esim_eid" msgid="8128175058237372457">"i-eid"</string>
<string name="keywords_model_and_hardware" msgid="4723665865709965044">"inombolo yomkhiqizo, inguqulo yehadiwe"</string>
+ <string name="keywords_battery_info" msgid="3319796850366687033">"ulwazi lwebhethri, ilanga lokukhiqiza, ukubalwa komjikelezo, ukusebenzisa kokuqala"</string>
<string name="keywords_android_version" msgid="1629882125290323070">"ileveli yepeshi yokuvikelwa kwe-android, inguqulo ye-baseband, inguqulo ye-kernel"</string>
<string name="keywords_dark_ui_mode" msgid="6373999418195344014">"itimu, ukukhanya, imodi emnyama, ukuzelwa kokukhanyayo, i-photophobia, yenza kube mnyama, mnyama, imodi emnyama, i-migraine"</string>
<string name="keywords_systemui_theme" msgid="6341194275296707801">"itimu emnyama"</string>
@@ -3856,10 +3869,6 @@
<string name="overlay_option_device_default" msgid="7986355499809313848">"Idivayisi ezenzakalelayo"</string>
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"Yehlulekile ukusebenzisa imbondela"</string>
<string name="special_access" msgid="1767980727423395147">"Ukufinyelela kwi-app okukhethekile"</string>
- <plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> izinhlelo zokusebenza zingasebenzisa idatha engakhawulelwe</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> izinhlelo zokusebenza zingasebenzisa idatha engakhawulelwe</item>
- </plurals>
<string name="special_access_more" msgid="132919514147475846">"Bona okwengeziwe"</string>
<string name="long_background_tasks_label" msgid="3169590134850226687">"Imisebenzi yangemuva emide"</string>
<string name="long_background_tasks_switch_title" msgid="2491623894899492543">"Vumela imisebenzi yangemuva esebenza isikhathi eside"</string>
@@ -4147,7 +4156,6 @@
<string name="platform_compat_dashboard_summary" msgid="4036546607938791337">"Guqula ushintsho lokuhambisana kohlelo lokusebenza"</string>
<string name="platform_compat_default_enabled_title" msgid="8973137337738388024">"Ushintsho olunikwe amandla oluzenzakalelayo"</string>
<string name="platform_compat_default_disabled_title" msgid="3975847180953793602">"Ushintsho olukhutshaziwe oluzenzakalelayo"</string>
- <string name="platform_compat_dialog_title_no_apps" msgid="4387656000745989506">"Azikho izinhlelo zokusebenza ezitholakalayo"</string>
<string name="platform_compat_dialog_text_no_apps" msgid="5715226015751055812">"Izinguquko zokuhambelana kohlelo lokusebenza zingalungiswa kuphela kuzinhlelo zokusebenza ezingalungiswa amaphutha. Faka uhlelo lokusebenza olungalungiswa amaphutha bese uzama futhi"</string>
<string name="disabled_dependent_setting_summary" msgid="4508635725315852504">"Kuncike kwesinye isilungiselelo"</string>
<string name="my_device_info_account_preference_title" msgid="9197139254007133175">"I-Akhawunti"</string>
@@ -4665,7 +4673,7 @@
<string name="disable_phantom_process_monitor_title" msgid="8348108346706188771">"Khubaza imikhawulo yenqubo yengane"</string>
<string name="disable_phantom_process_monitor_summary" msgid="3044464635550256985">"Khubaza imikhawulo ekusetshenzisweni kwensiza yesistimu yezinqubo zezingane ze-app"</string>
<string name="enable_notes_role_title" msgid="7662702013496114763">"Phoqa ukunika amandla indima yamanothi"</string>
- <string name="enable_notes_role_summary" msgid="136916915155048249">"Nika amandla ukuhlanganiswa kwesistimu yokuthatha amanothi ngendima Yamanothi. Uma indima Yamanothi isivele inikwe amandla, ayenzi lutho."</string>
+ <string name="enable_notes_role_summary" msgid="5495721409392395089">"Nika amandla ukuhlanganiswa kwesistimu yokuthatha amanothi ngendima Yamanothi. Uma indima Yamanothi isivele inikwe amandla, ayenzi lutho. Kudinga ukuqalisa."</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Sakaza"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Sakaza i-<xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Lalela ukusakaza okuseduze kwakho"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 5ae0220..432b1ca 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -548,6 +548,9 @@
<!-- Whether to show Smooth Display feature in Settings Options -->
<bool name="config_show_smooth_display">false</bool>
+ <!-- Whether to show Stay awake on fold feature in Settings Options -->
+ <bool name="config_stay_awake_on_fold">false</bool>
+
<!-- Whether to show emergency settings in top-level Settings -->
<bool name="config_show_emergency_settings">true</bool>
@@ -608,6 +611,28 @@
<item>3</item>
</integer-array>
+ <!-- TODO(b/287448187): add USER_MIN_ASPECT_RATIO_DISPLAY_SIZE entry -->
+ <!-- App screen size settings screen, User aspect ratio override options. Must be the same
+ length and order as config_userAspectRatioOverrideValues below. -->
+ <string-array name="config_userAspectRatioOverrideEntries" translatable="false">
+ <item>@string/user_aspect_ratio_app_default</item>
+ <item>@string/user_aspect_ratio_half_screen</item>
+ <item>@string/user_aspect_ratio_16_9</item>
+ <item>@string/user_aspect_ratio_4_3</item>
+ <item>@string/user_aspect_ratio_3_2</item>
+ </string-array>
+
+ <!-- App screen size settings screen, User aspect ratio override options. Must be the same
+ length and order as config_userAspectRatioOverrideEntries above. The values must
+ correspond to PackageManager.UserMinAspectRatio -->
+ <integer-array name="config_userAspectRatioOverrideValues" translatable="false">
+ <item>0</item> <!-- USER_MIN_ASPECT_RATIO_UNSET -->
+ <item>1</item> <!-- USER_MIN_ASPECT_RATIO_SPLIT_SCREEN -->
+ <item>4</item> <!-- USER_MIN_ASPECT_RATIO_16_9 -->
+ <item>3</item> <!-- USER_MIN_ASPECT_RATIO_4_3 -->
+ <item>5</item> <!-- USER_MIN_ASPECT_RATIO_3_2 -->
+ </integer-array>
+
<!-- The settings/preference description for each settable device state defined in the array
"config_perDeviceStateRotationLockDefaults".
The item in position "i" describes the auto-rotation setting for the device state also in
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index de33ec7..a7a124a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -229,6 +229,15 @@
<!-- Minimum height for setting a lock pattern -->
<dimen name="choose_lockscreen_min_height">200dp</dimen>
+ <!-- Choose lock Password requirement dimensions -->
+ <dimen name="password_requirement_view_margin_top">16dp</dimen>
+
+ <!-- Screen lock option button dimensions -->
+ <dimen name="screen_lock_options_button_margin_top">32dp</dimen>
+
+ <!-- Choose lock Password requirement font size -->
+ <dimen name="password_requirement_font_size">16sp</dimen>
+
<!-- Select dialog -->
<dimen name="select_dialog_padding_start">20dp</dimen>
<dimen name="select_dialog_item_margin_start">12dp</dimen>
diff --git a/res/values/ids.xml b/res/values/ids.xml
index c1cfe2e..efd1791 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -40,4 +40,8 @@
<!-- For a layout container to add AppLocaleDetails into -->
<item type="id" name="layout_app_locale_details" />
+
+ <!-- For screen lock options button -->
+ <item type="id" name="screen_lock_options" />
+
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1ad45d5..e7b5d13 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -258,8 +258,10 @@
<!-- Title for stylus device details page [CHAR LIMIT=50] -->
<string name="stylus_device_details_title">Stylus</string>
- <!-- Preference title for setting the default note taking app [CHAR LIMIT=none] -->
- <string name="stylus_default_notes_app">Default notes app</string>
+ <!-- Preference title for setting the app that opens user presses stylus button [CHAR LIMIT=none] -->
+ <string name="stylus_default_notes_app">Tail button press</string>
+ <!-- Summary for the app that opens when user presses stylus tail button, if set to a work profile app [CHAR LIMIT=none] -->
+ <string name="stylus_default_notes_summary_work"><xliff:g id="app_name" example="Mail">%s</xliff:g> (Work profile)</string>
<!-- Preference title for toggling whether handwriting in textfields is enabled [CHAR LIMIT=none] -->
<string name="stylus_textfield_handwriting">Write in text fields</string>
<!-- Preference title for toggling whether stylus button presses are ignored [CHAR LIMIT=none] -->
@@ -411,7 +413,7 @@
<!-- The title of the menu entry of Numbers system preference. [CHAR LIMIT=50] -->
<string name="numbers_preferences_title">Numbers preferences</string>
<!-- The summary of default string for each regional preference. [CHAR LIMIT=50] -->
- <string name="default_string_of_regional_preference">Use app default</string>
+ <string name="default_string_of_regional_preference">Use default</string>
<!-- The title of Celsius for preference of temperature unit. [CHAR LIMIT=50] -->
<string name="celsius_temperature_unit">Celsius (\u00B0C)</string>
<!-- The title of Fahrenheit for preference of temperature unit. [CHAR LIMIT=50] -->
@@ -863,7 +865,7 @@
<!-- Biometric settings --><skip />
<!-- Title shown for menu item that launches biometric settings. [CHAR LIMIT=66] -->
- <string name="security_settings_biometric_preference_title">Face & Fingerprint Unlock</string>
+ <string name="security_settings_biometric_preference_title">Fingerprint & Face Unlock</string>
<!-- Title shown for work menu item that launches biometric settings. [CHAR LIMIT=66] -->
<string name="security_settings_work_biometric_preference_title">Face & Fingerprint Unlock for work</string>
<!-- Message shown in summary field of biometric settings. [CHAR LIMIT=66] -->
@@ -1215,14 +1217,8 @@
<!-- Title for preference that guides the user to skip Face Unlock setup [CHAR LIMIT=60]-->
<string name="face_unlock_skip_face">Continue without Face Unlock</string>
- <!-- Title for preference that guides the user through creating a backup unlock pattern for biometrics unlock [CHAR LIMIT=45]-->
- <string name="biometrics_unlock_set_unlock_pattern">Pattern \u2022 Face \u2022 Fingerprint</string>
- <!-- Title for preference that guides the user through creating a backup unlock PIN for biometrics unlock [CHAR LIMIT=45]-->
- <string name="biometrics_unlock_set_unlock_pin">PIN \u2022 Face \u2022 Fingerprint</string>
- <!-- Title for preference that guides the user through creating a backup unlock password for biometrics unlock [CHAR LIMIT=45]-->
- <string name="biometrics_unlock_set_unlock_password">Password \u2022 Face \u2022 Fingerprint</string>
<!-- Title for preference that guides the user to skip face unlock setup [CHAR LIMIT=60]-->
- <string name="biometrics_unlock_skip_biometrics">Continue without face or fingerprint</string>
+ <string name="biometrics_unlock_skip_biometrics">Continue without fingerprint or face</string>
<!-- Summary for "Configure lockscreen" when lock screen is off [CHAR LIMIT=45] -->
<string name="unlock_set_unlock_mode_off">None</string>
@@ -2361,6 +2357,10 @@
<string name="display_white_balance_title">Display white balance</string>
<!-- Display settings screen, display white balance settings summary [CHAR LIMIT=NONE] -->
<string name="display_white_balance_summary"></string>
+ <!-- Display settings screen, setting name to enable staying awake on fold [CHAR LIMIT=30] -->
+ <string name="stay_awake_on_fold_title">Stay unlocked on fold</string>
+ <!-- Display settings screen, setting summary to enable staying awake on fold [CHAR LIMIT=NONE] -->
+ <string name="stay_awake_on_fold_summary">Keep front display unlocked when folded until screen timeout</string>
<!-- Display settings screen, peak refresh rate settings title [CHAR LIMIT=30] -->
<string name="peak_refresh_rate_title">Smooth Display</string>
<!-- Display settings screen, peak refresh rate settings summary [CHAR LIMIT=NONE] -->
@@ -2658,6 +2658,8 @@
<string name="build_number">Build number</string>
<!-- About phone screen, tapping this button will take user to a seperate UI to check Google Play system update [CHAR LIMIT=60] -->
<string name="module_version">Google Play system update</string>
+ <!-- About phone screen, show a list of battery information [CHAR LIMIT=60] -->
+ <string name="battery_info">Battery information</string>
<!-- About phone screen, show when a value of some status item is unavailable. -->
<string name="device_info_not_available">Not available</string>
@@ -2729,6 +2731,16 @@
<string name="status_serial_number">Serial number</string>
<!-- About phone, status item title. How long the device has been running since its last reboot. -->
<string name="status_up_time">Up time</string>
+
+ <!-- About phone, status item title. The battery manufacture date. [CHAR LIMIT=60]-->
+ <string name="battery_manufacture_date">Manufacture date</string>
+ <!-- About phone, status item title. Date of first use of the battery. [CHAR LIMIT=60]-->
+ <string name="battery_first_use_date">Date of first use</string>
+ <!-- About phone, status item title. Count of battery full charge/discharge cycles [CHAR LIMIT=60]-->
+ <string name="battery_cycle_count">Cycle count</string>
+ <!-- About phone, status item title. The status summary for cycle count that's not available. [CHAR LIMIT=40] -->
+ <string name="battery_cycle_count_not_available">Unavailable</string>
+
<!-- SD card & phone storage settings summary. Displayed when the total memory usage is being calculated. Will be replaced with a number like "12.3 GB" when finished calucating. [CHAR LIMIT=30] -->
<string name="memory_calculating_size">Calculating\u2026</string>
@@ -3012,8 +3024,6 @@
<string name="reset_bluetooth_wifi_complete_toast">Bluetooth & Wi\u2011Fi have been reset</string>
<!-- Erase Euicc -->
- <!-- Confirmation button of dialog to confirm resetting user's app preferences [CHAR LIMIT=NONE] -->
- <string name="erase_euicc_data_button">Erase</string>
<!-- Erase Euicc dialog and SD card & phone storage settings screen, title for the menu option and checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=50] -->
<string name="reset_esim_title">Erase eSIMs</string>
<!-- Erase Euicc dialog and SD card & phone storage settings screen, message for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=NONE] -->
@@ -3483,6 +3493,18 @@
<!-- Checkbox label to set password as new screen lock if remote device credential validation succeeds. [CHAR LIMIT=43] -->
<string name="lockpassword_remote_validation_set_password_as_screenlock">Also use password to unlock this device</string>
+ <!-- Header shown when pattern needs to be solved before the device exits repair mode. [CHAR LIMIT=40] -->
+ <string name="lockpassword_confirm_repair_mode_pattern_header">Verify pattern</string>
+ <!-- Header shown when the pin needs to be solved before the device exits repair mode. [CHAR LIMIT=40] -->
+ <string name="lockpassword_confirm_repair_mode_pin_header">Verify PIN</string>
+ <!-- Header shown when the password needs to be solved before the device exits repair mode. [CHAR LIMIT=40] -->
+ <string name="lockpassword_confirm_repair_mode_password_header">Verify password</string>
+ <!-- An explanation text that the pattern needs to be solved before the device exits repair mode. [CHAR LIMIT=100] -->
+ <string name="lockpassword_confirm_repair_mode_pattern_details">Use your device pattern to continue</string>
+ <!-- An explanation text that the PIN needs to be solved before the device exits repair mode. [CHAR LIMIT=100] -->
+ <string name="lockpassword_confirm_repair_mode_pin_details">Enter your device PIN to continue</string>
+ <!-- An explanation text that the password needs to be solved before the device exits repair mode. [CHAR LIMIT=100] -->
+ <string name="lockpassword_confirm_repair_mode_password_details">Enter your device password to continue</string>
<!-- Security & location settings screen, change security method screen instruction if user
enters incorrect PIN [CHAR LIMIT=30] -->
@@ -5511,6 +5533,8 @@
<string name="battery_usage_less_than_percent">< <xliff:g id="percentage">%1$s</xliff:g></string>
<!-- Process Stats strings -->
<skip />
+ <!-- Description of battery information footer text. [CHAR LIMIT=NONE] -->
+ <string name="battery_cycle_count_footer">Due to quality inspections before shipping, the cycle count may not be zero on first use</string>
<!-- [CHAR LIMIT=NONE] Activity title for Process Stats summary -->
<string name="process_stats_summary_title">Process Stats</string>
@@ -6405,7 +6429,7 @@
<!-- Search keywords for the "Delete Guest Activity" section in Multiple Users Screen. [CHAR LIMIT=NONE] -->
<string name="remove_guest_on_exit_keywords">delete, guest, activity, remove, data, visitor, erase</string>
<!-- Title of preference to enable guest calling[CHAR LIMIT=40] -->
- <string name="enable_guest_calling">Allow guest to use phone</string>
+ <string name="enable_guest_calling">Allow guest to make phone calls</string>
<!-- Summary of preference to enable guest calling [CHAR LIMIT=NONE] -->
<string name="enable_guest_calling_summary">Call history will be shared with guest user</string>
@@ -7008,6 +7032,9 @@
<string name="keywords_app_pinning">screen pinning</string>
<string name="keywords_profile_challenge">work challenge, work, profile</string>
<string name="keywords_unification">work profile, managed profile, unify, unification, work, profile</string>
+ <string name="keywords_stay_awake_on_lock">
+ awake, sleep, do not lock, stay unlocked on fold, folding, closing, fold, close, screen off
+ </string>
<string name="keywords_gesture">gestures</string>
<string name="keywords_wallet">wallet</string>
<string name="keywords_payment_settings">pay, tap, payments</string>
@@ -7022,6 +7049,7 @@
<string name="keywords_sim_status_iccid_esim">network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid</string>
<string name="keywords_esim_eid">eid</string>
<string name="keywords_model_and_hardware">serial number, hardware version</string>
+ <string name="keywords_battery_info">battery info, manufacture date, cycle count, first use</string>
<string name="keywords_android_version">android security patch level, baseband version, kernel version</string>
<!-- Search keywords for dark mode settings [CHAR LIMIT=NONE] -->
<string name="keywords_dark_ui_mode">theme, light, dark, mode, light sensitivity, photophobia, make darker, darken, dark mode, migraine</string>
@@ -9705,12 +9733,6 @@
<!-- [CHAR_LIMIT=60] Label for special access screen -->
<string name="special_access">Special app access</string>
- <!-- Summary for special access settings [CHAR_LIMIT=NONE] -->
- <plurals name="special_access_summary">
- <item quantity="one">1 app can use unrestricted data</item>
- <item quantity="other"><xliff:g id="count" example="10">%d</xliff:g> apps can use unrestricted data</item>
- </plurals>
-
<!-- Title for the See more preference item in Special app access settings [CHAR LIMIT=30] -->
<string name="special_access_more">See more</string>
@@ -10511,7 +10533,7 @@
<!-- Debugging developer settings: enable angle as system driver? [CHAR LIMIT=50] -->
<string name="enable_angle_as_system_driver">Enable ANGLE</string>
<!-- Debugging developer settings: enable angle as system driver summary [CHAR LIMIT=NONE] -->
- <string name="enable_angle_as_system_driver_summary">Enable ANGLE as system OpenGL ES driver</string>
+ <string name="enable_angle_as_system_driver_summary">Enable ANGLE as default OpenGL ES driver. Enabling it on incompatible devices may break some applications.</string>
<!--Dialog body text used to explain a reboot is required after changing ANGLE as system GLES driver setting-->
<string name="reboot_dialog_enable_angle_as_system_driver">A reboot is required to change the system OpenGL ES driver</string>
@@ -10527,8 +10549,6 @@
<string name="platform_compat_default_disabled_title">Default disabled changes</string>
<!-- Title for target SDK gated app compat changes category (do not translate 'targetSdkVersion') [CHAR LIMIT=50] -->
<string name="platform_compat_target_sdk_title">Enabled for targetSdkVersion >= <xliff:g id="number" example="29">%d</xliff:g></string>
- <!-- Title for the dialog shown when no debuggable apps are available [CHAR LIMIT=30] -->
- <string name="platform_compat_dialog_title_no_apps">No apps available</string>
<!-- Explanatory text shown when no debuggable apps are available [CHAR LIMIT=NONE] -->
<string name="platform_compat_dialog_text_no_apps">App compatibility changes can only be modified for debuggable apps. Install a debuggable app and try again.</string>
@@ -11987,7 +12007,7 @@
<!-- Developer settings: Title for force enabling Notes role. [CHAR LIMIT=50]-->
<string name="enable_notes_role_title">Force enable Notes role</string>
<!-- Developer settings: Summary for disabling phantom process monitoring. [CHAR LIMIT=NONE]-->
- <string name="enable_notes_role_summary">Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing.</string>
+ <string name="enable_notes_role_summary">Enable note-taking system integrations via the Notes role. If the Notes role is already enabled, does nothing. Requires reboot.</string>
<!-- BT LE Audio Device: Media Broadcast -->
@@ -12061,6 +12081,26 @@
other {Apps installed more than # months ago}
}</string>
+ <!-- App Screen Size (User Aspect Ratio Override) -->
+ <!-- [CHAR LIMIT=60] Screen size app list title setting to choose aspect ratio -->
+ <string name="screen_size_title">Screen size</string>
+ <!-- [CHAR LIMIT=NONE] Screen size setting summary to choose aspect ratio for apps unoptimized for device -->
+ <string name="screen_size_summary">Choose an aspect ratio for apps if they haven’t been optimized for your <xliff:g id="device_name">%1$s</xliff:g></string>
+ <!-- [CHAR LIMIT=NONE] Aspect ratio suggested apps filter label -->
+ <string name="user_aspect_ratio_suggested_apps_label">Suggested apps</string>
+ <!-- [CHAR LIMIT=NONE] Filter label for apps that have user aspect ratio override applied -->
+ <string name="user_aspect_ratio_overridden_apps_label">Apps you have overridden</string>
+ <!-- [CHAR LIMIT=NONE] App default aspect ratio entry -->
+ <string name="user_aspect_ratio_app_default">App default</string>
+ <!-- [CHAR LIMIT=NONE] Half-screen aspect ratio entry -->
+ <string name="user_aspect_ratio_half_screen">Half-screen</string>
+ <!-- [CHAR LIMIT=NONE] 16:9 aspect ratio entry -->
+ <string name="user_aspect_ratio_16_9">16:9</string>
+ <!-- [CHAR LIMIT=NONE] 3:2 aspect ratio entry -->
+ <string name="user_aspect_ratio_3_2">3:2</string>
+ <!-- [CHAR LIMIT=NONE] 4:3 aspect ratio entry -->
+ <string name="user_aspect_ratio_4_3">4:3</string>
+
<!-- Accessibility label for fingerprint sensor [CHAR LIMIT=NONE] -->
<string name="accessibility_fingerprint_label">Fingerprint sensor</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index fe15226..ee78a45 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -947,4 +947,10 @@
<item name="biometricsEnrollProgressHelp">@color/udfps_enroll_progress_help</item>
<item name="biometricsEnrollProgressHelpWithTalkback">@color/udfps_enroll_progress_help_with_talkback</item>
</style>
+
+ <style name="ScreenLockPasswordHintTextFontStyle">
+ <item name="android:textColor">?android:attr/textColorPrimary</item>
+ <item name="android:fontFamily">google-sans-text</item>
+ </style>
+
</resources>
diff --git a/res/xml/apps.xml b/res/xml/apps.xml
index ae51bae..386a07b 100644
--- a/res/xml/apps.xml
+++ b/res/xml/apps.xml
@@ -80,6 +80,17 @@
android:order="10"/>
<Preference
+ android:key="aspect_ratio_apps"
+ android:title="@string/screen_size_title"
+ android:summary="@string/summary_placeholder"
+ android:order="14"
+ settings:controller="com.android.settings.applications.appcompat.UserAspectRatioAppsPreferenceController"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications">
+ <extra android:name="classname"
+ android:value="com.android.settings.Settings$UserAspectRatioAppListActivity"/>
+ </Preference>
+
+ <Preference
android:key="hibernated_apps"
android:title="@string/unused_apps"
android:summary="@string/summary_placeholder"
@@ -105,7 +116,6 @@
android:key="special_access"
android:fragment="com.android.settings.applications.specialaccess.SpecialAccessSettings"
android:title="@string/special_access"
- android:order="20"
- settings:controller="com.android.settings.applications.SpecialAppAccessPreferenceController"/>
+ android:order="20"/>
</PreferenceScreen>
diff --git a/res/xml/battery_info.xml b/res/xml/battery_info.xml
new file mode 100644
index 0000000..8e3c31f
--- /dev/null
+++ b/res/xml/battery_info.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2023 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/battery_info"
+ settings:keywords="@string/keywords_battery_info">
+
+ <Preference
+ android:key="battery_info_manufacture_date"
+ android:title="@string/battery_manufacture_date"
+ android:summary="@string/summary_placeholder"
+ settings:controller="com.android.settings.deviceinfo.batteryinfo.BatteryManufactureDatePreferenceController"
+ settings:enableCopying="true"/>
+
+ <Preference
+ android:key="battery_info_first_use_date"
+ android:title="@string/battery_first_use_date"
+ android:summary="@string/summary_placeholder"
+ settings:controller="com.android.settings.deviceinfo.batteryinfo.BatteryFirstUseDatePreferenceController"
+ settings:enableCopying="true"/>
+
+ <Preference
+ android:key="battery_info_cycle_count"
+ android:title="@string/battery_cycle_count"
+ android:summary="@string/summary_placeholder"
+ settings:controller="com.android.settings.deviceinfo.batteryinfo.BatteryCycleCountPreferenceController"
+ settings:enableCopying="true"/>
+
+ <com.android.settingslib.widget.FooterPreference
+ android:key="battery_info_footer"
+ android:title="@string/battery_cycle_count_footer"
+ android:selectable="false"
+ settings:searchable="false" />
+</PreferenceScreen>
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 68e4e78..32acac6 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -258,7 +258,7 @@
android:key="platform_compat_dashboard"
android:title="@string/platform_compat_dashboard_title"
android:summary="@string/platform_compat_dashboard_summary"
- android:fragment="com.android.settings.development.compat.PlatformCompatDashboard"
+ settings:controller="com.android.settings.spa.development.compat.PlatformCompatPreferenceController"
/>
<SwitchPreference
@@ -464,6 +464,11 @@
android:title="@string/pointer_location"
android:summary="@string/pointer_location_summary" />
+ <SwitchPreference
+ android:key="show_key_presses"
+ android:title="@string/show_key_presses"
+ android:summary="@string/show_key_presses_summary" />
+
</PreferenceCategory>
<PreferenceCategory
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index ad5236e..f94ba70 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -48,6 +48,13 @@
settings:keywords="@string/keywords_ambient_display_screen"
settings:controller="com.android.settings.security.screenlock.LockScreenPreferenceController"/>
+ <SwitchPreference
+ android:key="stay_awake_on_fold"
+ android:title="@string/stay_awake_on_fold_title"
+ android:summary="@string/stay_awake_on_fold_summary"
+ settings:keywords="@string/keywords_stay_awake_on_lock"
+ settings:controller="com.android.settings.display.StayAwakeOnFoldPreferenceController"/>
+
<com.android.settingslib.RestrictedPreference
android:key="screen_timeout"
android:title="@string/screen_timeout"
diff --git a/res/xml/languages.xml b/res/xml/languages.xml
index 0f45540..5269d99 100644
--- a/res/xml/languages.xml
+++ b/res/xml/languages.xml
@@ -18,7 +18,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/language_settings">
+ android:title="@string/language_picker_title">
<com.android.settingslib.widget.TopIntroPreference
android:title="@string/desc_introduction_of_language_picker"
diff --git a/res/xml/modifier_keys_settings.xml b/res/xml/modifier_keys_settings.xml
index 63e7ee1..25525ae 100644
--- a/res/xml/modifier_keys_settings.xml
+++ b/res/xml/modifier_keys_settings.xml
@@ -21,25 +21,22 @@
android:title="@string/modifier_keys_settings"
android:key="modifier_keys_all"
settings:controller="com.android.settings.inputmethod.ModifierKeysPreferenceController">
- <Preference
+
+ <com.android.settingslib.widget.LayoutPreference
android:key="modifier_keys_caps_lock"
- android:title="@string/modifier_keys_caps_lock"
- android:summary="@string/modifier_keys_default_summary"/>
+ android:layout="@layout/modifier_keys_custom_key" />
- <Preference
+ <com.android.settingslib.widget.LayoutPreference
android:key="modifier_keys_ctrl"
- android:title="@string/modifier_keys_ctrl"
- android:summary="@string/modifier_keys_default_summary"/>
+ android:layout="@layout/modifier_keys_custom_key" />
- <Preference
+ <com.android.settingslib.widget.LayoutPreference
android:key="modifier_keys_meta"
- android:title="@string/modifier_keys_meta"
- android:summary="@string/modifier_keys_default_summary"/>
+ android:layout="@layout/modifier_keys_custom_key" />
- <Preference
+ <com.android.settingslib.widget.LayoutPreference
android:key="modifier_keys_alt"
- android:title="@string/modifier_keys_alt"
- android:summary="@string/modifier_keys_default_summary"/>
+ android:layout="@layout/modifier_keys_custom_key" />
<Preference
android:key="modifier_keys_restore"
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 4cbe13f..6576742 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -144,6 +144,14 @@
android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.deviceinfo.firmwareversion.FirmwareVersionSettings"
settings:controller="com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController"/>
+
+ <!-- Battery information -->
+ <Preference
+ android:key="battery_info"
+ android:order="43"
+ android:title="@string/battery_info"
+ android:fragment="com.android.settings.deviceinfo.batteryinfo.BatteryInfoFragment"
+ settings:keywords="@string/keywords_battery_info"/>
</PreferenceCategory>
<PreferenceCategory
diff --git a/res/xml/security_settings_fingerprint_limbo.xml b/res/xml/security_settings_fingerprint_limbo.xml
new file mode 100644
index 0000000..02a3dfb
--- /dev/null
+++ b/res/xml/security_settings_fingerprint_limbo.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2023 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/security_settings_fingerprint_preference_title">
+
+ <PreferenceCategory
+ android:key="security_settings_fingerprints_enrolled"
+ settings:controller="com.android.settings.biometrics.fingerprint.FingerprintsEnrolledCategoryPreferenceController">
+ </PreferenceCategory>
+
+ <androidx.preference.Preference
+ android:icon="@drawable/ic_add_24dp"
+ android:key="key_fingerprint_add"
+ android:title="@string/fingerprint_add_title" />
+
+ <PreferenceCategory
+ android:key="security_settings_fingerprint_unlock_category"
+ android:title="@string/security_settings_fingerprint_settings_preferences_category"
+ android:visibility="gone">
+
+ <com.android.settingslib.RestrictedSwitchPreference
+ android:key="security_settings_require_screen_on_to_auth"
+ android:title="@string/security_settings_require_screen_on_to_auth_title"
+ android:summary="@string/security_settings_require_screen_on_to_auth_description"
+ settings:keywords="@string/security_settings_require_screen_on_to_auth_keywords"
+ settings:controller="com.android.settings.biometrics.fingerprint.FingerprintSettingsRequireScreenOnToAuthPreferenceController" />
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:key="security_settings_fingerprint_footer">
+ </PreferenceCategory>
+
+</PreferenceScreen>
+
diff --git a/res/xml/stylus_usi_details_fragment.xml b/res/xml/stylus_usi_details_fragment.xml
index 8a1d036..639c284 100644
--- a/res/xml/stylus_usi_details_fragment.xml
+++ b/res/xml/stylus_usi_details_fragment.xml
@@ -30,4 +30,7 @@
<PreferenceCategory
android:key="device_stylus"/>
+ <PreferenceCategory
+ android:key="stylus_usb_firmware"
+ settings:controller="com.android.settings.connecteddevice.stylus.StylusUsbFirmwareController"/>
</PreferenceScreen>
\ No newline at end of file
diff --git a/res/layout/wifi_api_test.xml b/res/xml/wifi_api_test.xml
similarity index 100%
rename from res/layout/wifi_api_test.xml
rename to res/xml/wifi_api_test.xml
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index a67aeaa..a1a7cda 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -56,6 +56,7 @@
/** Container for {@link FaceSettings} to use with a pre-defined task affinity. */
public static class FaceSettingsInternalActivity extends SettingsActivity { /* empty */ }
public static class FingerprintSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class FingerprintSettingsActivityV2 extends SettingsActivity { /* empty */ }
public static class CombinedBiometricSettingsActivity extends SettingsActivity { /* empty */ }
public static class CombinedBiometricProfileSettingsActivity extends SettingsActivity { /* empty */ }
public static class TetherSettingsActivity extends SettingsActivity {
@@ -360,6 +361,8 @@
public static class NotificationAppListActivity extends SettingsActivity { /* empty */ }
/** Activity to manage Cloned Apps page */
public static class ClonedAppsListActivity extends SettingsActivity { /* empty */ }
+ /** Activity to manage Aspect Ratio app list page */
+ public static class UserAspectRatioAppListActivity extends SettingsActivity { /* empty */ }
public static class NotificationReviewPermissionsActivity extends SettingsActivity { /* empty */ }
public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ChannelNotificationSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivityUtil.kt b/src/com/android/settings/SettingsActivityUtil.kt
index cac341f..65d26de 100644
--- a/src/com/android/settings/SettingsActivityUtil.kt
+++ b/src/com/android/settings/SettingsActivityUtil.kt
@@ -35,6 +35,7 @@
import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
import com.android.settings.spa.app.specialaccess.MediaManagementAppsAppListProvider
import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider
+import com.android.settings.spa.app.specialaccess.NfcTagAppsSettingsProvider
import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider
import com.android.settings.spa.app.specialaccess.WifiControlAppListProvider
import com.android.settings.wifi.ChangeWifiStateDetails
@@ -62,6 +63,8 @@
MediaManagementAppsAppListProvider.getAppInfoRoutePrefix(),
ChangeWifiStateDetails::class.qualifiedName to
WifiControlAppListProvider.getAppInfoRoutePrefix(),
+ NfcTagAppsSettingsProvider::class.qualifiedName to
+ NfcTagAppsSettingsProvider.getAppInfoRoutePrefix(),
)
@JvmStatic
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index f9f4cdf..370b17a 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -708,9 +708,13 @@
final int userId = bundle.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId());
if (userId == LockPatternUtils.USER_FRP) {
return allowAnyUser ? userId : checkUserOwnsFrpCredential(context, userId);
- } else {
- return allowAnyUser ? userId : enforceSameOwner(context, userId);
}
+ if (userId == LockPatternUtils.USER_REPAIR_MODE) {
+ enforceRepairModeActive(context);
+ // any users can exit repair mode
+ return userId;
+ }
+ return allowAnyUser ? userId : enforceSameOwner(context, userId);
}
/**
@@ -730,6 +734,16 @@
}
/**
+ * Throws {@link SecurityException} if repair mode is not active on the device.
+ */
+ private static void enforceRepairModeActive(Context context) {
+ if (LockPatternUtils.isRepairModeActive(context)) {
+ return;
+ }
+ throw new SecurityException("Repair mode is not active on the device.");
+ }
+
+ /**
* Returns the given user id if it belongs to the current user.
*
* @throws SecurityException if the given userId does not belong to the current user group.
diff --git a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
index 9681a42..e82cd96 100644
--- a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
@@ -66,6 +66,10 @@
@Override
public void onDestroy() {
mHandler.removeCallbacksAndMessages(null);
+ final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
+ if (isTooltipWindowShowing) {
+ mTooltipWindow.dismiss();
+ }
}
@Override
@@ -126,10 +130,17 @@
return;
}
- mTooltipWindow = new AccessibilityQuickSettingsTooltipWindow(mContext);
- mTooltipWindow.setup(getTileTooltipContent(),
- R.drawable.accessibility_auto_added_qs_tooltip_illustration);
- mTooltipWindow.showAtTopCenter(mPreference.getSwitch());
+ // TODO (287728819): Move tooltip showing to SystemUI
+ // Since the lifecycle of controller is independent of that of the preference, doing
+ // null check on switch is a temporary solution for the case that switch view
+ // is not ready when we would like to show the tooltip. If the switch is not ready,
+ // we give up showing the tooltip and also do not reshow it in the future.
+ if (mPreference.getSwitch() != null) {
+ mTooltipWindow = new AccessibilityQuickSettingsTooltipWindow(mContext);
+ mTooltipWindow.setup(getTileTooltipContent(),
+ R.drawable.accessibility_auto_added_qs_tooltip_illustration);
+ mTooltipWindow.showAtTopCenter(mPreference.getSwitch());
+ }
AccessibilityQuickSettingUtils.optInValueToSharedPreferences(mContext, tileComponentName);
mNeedsQSTooltipReshow = false;
}
diff --git a/src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java b/src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java
index b3d3715..f600b03 100644
--- a/src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java
+++ b/src/com/android/settings/accessibility/AvailableHearingDeviceUpdater.java
@@ -16,7 +16,6 @@
package com.android.settings.accessibility;
-import android.bluetooth.BluetoothDevice;
import android.content.Context;
import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
@@ -37,11 +36,9 @@
@Override
public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
- final BluetoothDevice device = cachedDevice.getDevice();
- final boolean isConnectedHearingAidDevice = (cachedDevice.isConnectedHearingAidDevice()
- && (device.getBondState() == BluetoothDevice.BOND_BONDED));
-
- return isConnectedHearingAidDevice && isDeviceInCachedDevicesList(cachedDevice);
+ return cachedDevice.isHearingAidDevice()
+ && isDeviceConnected(cachedDevice)
+ && isDeviceInCachedDevicesList(cachedDevice);
}
@Override
diff --git a/src/com/android/settings/accessibility/HearingAidHelper.java b/src/com/android/settings/accessibility/HearingAidHelper.java
index 66a37f8..1b9bdc4 100644
--- a/src/com/android/settings/accessibility/HearingAidHelper.java
+++ b/src/com/android/settings/accessibility/HearingAidHelper.java
@@ -56,7 +56,8 @@
* @return a list of hearing aids {@link BluetoothDevice} objects
*/
public List<BluetoothDevice> getConnectedHearingAidDeviceList() {
- if (!isHearingAidSupported()) {
+ if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()
+ || !isHearingAidSupported()) {
return new ArrayList<>();
}
final List<BluetoothDevice> deviceList = new ArrayList<>();
@@ -88,9 +89,6 @@
* supported.
*/
public boolean isHearingAidSupported() {
- if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
- return false;
- }
final List<Integer> supportedList = mBluetoothAdapter.getSupportedProfiles();
return supportedList.contains(BluetoothProfile.HEARING_AID)
|| supportedList.contains(BluetoothProfile.HAP_CLIENT);
diff --git a/src/com/android/settings/accessibility/HearingAidUtils.java b/src/com/android/settings/accessibility/HearingAidUtils.java
index 42484f9..4315093 100644
--- a/src/com/android/settings/accessibility/HearingAidUtils.java
+++ b/src/com/android/settings/accessibility/HearingAidUtils.java
@@ -23,6 +23,7 @@
import com.android.settings.bluetooth.HearingAidPairingDialogFragment;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CsipSetCoordinatorProfile;
import com.android.settingslib.bluetooth.HearingAidInfo;
/** Provides utility methods related hearing aids. */
@@ -40,6 +41,11 @@
*/
public static void launchHearingAidPairingDialog(FragmentManager fragmentManager,
@NonNull CachedBluetoothDevice device) {
+ // No need to show the pair another ear dialog if the device supports and enables CSIP.
+ // CSIP will pair other devices in the same set automatically.
+ if (isCsipSupportedAndEnabled(device)) {
+ return;
+ }
if (device.isConnectedAshaHearingAidDevice()
&& device.getDeviceMode() == HearingAidInfo.DeviceMode.MODE_BINAURAL
&& device.getSubDevice() == null) {
@@ -56,4 +62,10 @@
HearingAidPairingDialogFragment.newInstance(device.getAddress()).show(fragmentManager,
HearingAidPairingDialogFragment.TAG);
}
+
+ private static boolean isCsipSupportedAndEnabled(@NonNull CachedBluetoothDevice device) {
+ return device.getProfiles().stream().anyMatch(
+ profile -> (profile instanceof CsipSetCoordinatorProfile)
+ && (profile.isEnabled(device.getDevice())));
+ }
}
diff --git a/src/com/android/settings/accessibility/HearingDevicePairingDetail.java b/src/com/android/settings/accessibility/HearingDevicePairingDetail.java
index de86dcf..117a8ed 100644
--- a/src/com/android/settings/accessibility/HearingDevicePairingDetail.java
+++ b/src/com/android/settings/accessibility/HearingDevicePairingDetail.java
@@ -28,7 +28,8 @@
import com.android.settings.bluetooth.BluetoothDevicePairingDetailBase;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.List;
/**
* HearingDevicePairingDetail is a page to scan hearing devices. This page shows scanning icons and
@@ -42,10 +43,16 @@
public HearingDevicePairingDetail() {
super();
- final ScanFilter filter = new ScanFilter.Builder()
- .setServiceData(BluetoothUuid.HEARING_AID, new byte[]{0}, new byte[]{0})
- .build();
- setFilter(Collections.singletonList(filter));
+ final List<ScanFilter> filterList = new ArrayList<>();
+ // Filters for ASHA hearing aids
+ filterList.add(new ScanFilter.Builder().setServiceUuid(BluetoothUuid.HEARING_AID).build());
+ filterList.add(new ScanFilter.Builder()
+ .setServiceData(BluetoothUuid.HEARING_AID, new byte[0]).build());
+ // Filters for LE audio hearing aids
+ filterList.add(new ScanFilter.Builder().setServiceUuid(BluetoothUuid.HAS).build());
+ filterList.add(new ScanFilter.Builder()
+ .setServiceData(BluetoothUuid.HAS, new byte[0]).build());
+ setFilter(filterList);
}
@Override
diff --git a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
index 4c860eb..6bd8747 100644
--- a/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
+++ b/src/com/android/settings/accessibility/PreviewSizeSeekBarController.java
@@ -28,7 +28,6 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.widget.LabeledSeekBarPreference;
-import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
@@ -111,6 +110,10 @@
public void onDestroy() {
// remove runnables in the queue.
mHandler.removeCallbacksAndMessages(null);
+ final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
+ if (isTooltipWindowShowing) {
+ mTooltipWindow.dismiss();
+ }
}
@Override
@@ -210,11 +213,19 @@
return;
}
- mTooltipWindow = new AccessibilityQuickSettingsTooltipWindow(mContext);
- mTooltipWindow.setup(getTileTooltipContent(),
- R.drawable.accessibility_auto_added_qs_tooltip_illustration);
- mTooltipWindow.showAtTopCenter(mSeekBarPreference.getSeekbar());
- AccessibilityQuickSettingUtils.optInValueToSharedPreferences(mContext, tileComponentName);
+ // TODO (287728819): Move tooltip showing to SystemUI
+ // Since the lifecycle of controller is independent of that of the preference, doing
+ // null check on seekbar is a temporary solution for the case that seekbar view
+ // is not ready when we would like to show the tooltip. If the seekbar is not ready,
+ // we give up showing the tooltip and also do not reshow it in the future.
+ if (mSeekBarPreference.getSeekbar() != null) {
+ mTooltipWindow = new AccessibilityQuickSettingsTooltipWindow(mContext);
+ mTooltipWindow.setup(getTileTooltipContent(),
+ R.drawable.accessibility_auto_added_qs_tooltip_illustration);
+ mTooltipWindow.showAtTopCenter(mSeekBarPreference.getSeekbar());
+ }
+ AccessibilityQuickSettingUtils.optInValueToSharedPreferences(mContext,
+ tileComponentName);
mNeedsQSTooltipReshow = false;
}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index edbd120..6a4344f 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -296,6 +296,10 @@
public void onDestroyView() {
super.onDestroyView();
removeActionBarToggleSwitch();
+ final boolean isTooltipWindowShowing = mTooltipWindow != null && mTooltipWindow.isShowing();
+ if (isTooltipWindowShowing) {
+ mTooltipWindow.dismiss();
+ }
}
@Override
diff --git a/src/com/android/settings/applications/AppDashboardFragment.java b/src/com/android/settings/applications/AppDashboardFragment.java
index 7e203b0..11f8405 100644
--- a/src/com/android/settings/applications/AppDashboardFragment.java
+++ b/src/com/android/settings/applications/AppDashboardFragment.java
@@ -66,7 +66,6 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- use(SpecialAppAccessPreferenceController.class).setSession(getSettingsLifecycle());
mAppsPreferenceController = use(AppsPreferenceController.class);
mAppsPreferenceController.setFragment(this /* fragment */);
getSettingsLifecycle().addObserver(mAppsPreferenceController);
diff --git a/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java b/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java
deleted file mode 100644
index 42f5930..0000000
--- a/src/com/android/settings/applications/SpecialAppAccessPreferenceController.java
+++ /dev/null
@@ -1,154 +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.applications;
-
-import android.app.Application;
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
-import com.android.settings.datausage.AppStateDataUsageBridge;
-import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
-import com.android.settings.datausage.DataSaverBackend;
-import com.android.settingslib.applications.ApplicationsState;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnDestroy;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
-
-import java.util.ArrayList;
-
-public class SpecialAppAccessPreferenceController extends BasePreferenceController implements
- AppStateBaseBridge.Callback, ApplicationsState.Callbacks, LifecycleObserver, OnStart,
- OnStop, OnDestroy {
-
- @VisibleForTesting
- ApplicationsState.Session mSession;
-
- private final ApplicationsState mApplicationsState;
- private final AppStateDataUsageBridge mDataUsageBridge;
- private final DataSaverBackend mDataSaverBackend;
-
- private Preference mPreference;
- private boolean mExtraLoaded;
-
-
- public SpecialAppAccessPreferenceController(Context context, String key) {
- super(context, key);
- mApplicationsState = ApplicationsState.getInstance(
- (Application) context.getApplicationContext());
- mDataSaverBackend = new DataSaverBackend(context);
- mDataUsageBridge = new AppStateDataUsageBridge(mApplicationsState, this, mDataSaverBackend);
- }
-
- public void setSession(Lifecycle lifecycle) {
- mSession = mApplicationsState.newSession(this, lifecycle);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return AVAILABLE;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mPreference = screen.findPreference(getPreferenceKey());
- }
-
- @Override
- public void onStart() {
- mDataUsageBridge.resume(true /* forceLoadAllApps */);
- }
-
- @Override
- public void onStop() {
- mDataUsageBridge.pause();
- }
-
- @Override
- public void onDestroy() {
- mDataUsageBridge.release();
- }
-
- @Override
- public void updateState(Preference preference) {
- updateSummary();
- }
-
- @Override
- public void onExtraInfoUpdated() {
- mExtraLoaded = true;
- updateSummary();
- }
-
- private void updateSummary() {
- if (!mExtraLoaded || mPreference == null) {
- return;
- }
-
- final ArrayList<ApplicationsState.AppEntry> allApps = mSession.getAllApps();
- int count = 0;
- for (ApplicationsState.AppEntry entry : allApps) {
- if (!ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry)) {
- continue;
- }
- if (entry.extraInfo instanceof DataUsageState
- && ((DataUsageState) entry.extraInfo).isDataSaverAllowlisted) {
- count++;
- }
- }
- mPreference.setSummary(mContext.getResources().getQuantityString(
- R.plurals.special_access_summary, count, count));
- }
-
- @Override
- public void onRunningStateChanged(boolean running) {
- }
-
- @Override
- public void onPackageListChanged() {
- }
-
- @Override
- public void onRebuildComplete(ArrayList<ApplicationsState.AppEntry> apps) {
- }
-
- @Override
- public void onPackageIconChanged() {
- }
-
- @Override
- public void onPackageSizeChanged(String packageName) {
- }
-
- @Override
- public void onAllSizesComputed() {
- }
-
- @Override
- public void onLauncherInfoChanged() {
- // when the value of the AppEntry.hasLauncherEntry was changed.
- updateSummary();
- }
-
- @Override
- public void onLoadEntriesCompleted() {
- }
-}
diff --git a/src/com/android/settings/applications/appcompat/UserAspectRatioAppsPreferenceController.java b/src/com/android/settings/applications/appcompat/UserAspectRatioAppsPreferenceController.java
new file mode 100644
index 0000000..6ec2528
--- /dev/null
+++ b/src/com/android/settings/applications/appcompat/UserAspectRatioAppsPreferenceController.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2023 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.appcompat;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/**
+ * Preference controller for
+ * {@link com.android.settings.spa.app.appcompat.UserAspectRatioAppsPageProvider}
+ */
+public class UserAspectRatioAppsPreferenceController extends BasePreferenceController {
+
+ public UserAspectRatioAppsPreferenceController(@NonNull Context context,
+ @NonNull String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return UserAspectRatioManager.isFeatureEnabled(mContext)
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ return mContext.getResources().getString(R.string.screen_size_summary, Build.MODEL);
+ }
+}
diff --git a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
new file mode 100644
index 0000000..35bd7a9
--- /dev/null
+++ b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2023 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.appcompat;
+
+import android.app.AppGlobals;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.RemoteException;
+import android.provider.DeviceConfig;
+import android.util.ArrayMap;
+
+import androidx.annotation.NonNull;
+
+import com.android.settings.R;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Helper class for handling app aspect ratio override
+ * {@link PackageManager.UserMinAspectRatio} set by user
+ */
+public class UserAspectRatioManager {
+ private static final Intent LAUNCHER_ENTRY_INTENT =
+ new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER);
+
+ // TODO(b/288142656): Enable user aspect ratio settings by default
+ private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS = false;
+ @VisibleForTesting
+ static final String KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS =
+ "enable_app_compat_user_aspect_ratio_settings";
+
+ private final Context mContext;
+ private final IPackageManager mIPm;
+ /** Apps that have launcher entry defined in manifest */
+ private final List<ResolveInfo> mInfoHasLauncherEntryList;
+ private final Map<Integer, String> mUserAspectRatioMap;
+
+ public UserAspectRatioManager(@NonNull Context context) {
+ mContext = context;
+ mIPm = AppGlobals.getPackageManager();
+ mInfoHasLauncherEntryList = context.getPackageManager().queryIntentActivities(
+ UserAspectRatioManager.LAUNCHER_ENTRY_INTENT, PackageManager.GET_META_DATA);
+ mUserAspectRatioMap = getUserMinAspectRatioMapping();
+ }
+
+ /**
+ * Whether user aspect ratio settings is enabled for device.
+ */
+ public static boolean isFeatureEnabled(Context context) {
+ final boolean isBuildTimeFlagEnabled = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_appCompatUserAppAspectRatioSettingsIsEnabled);
+ return isBuildTimeFlagEnabled && getValueFromDeviceConfig();
+ }
+
+ /**
+ * @return user-specific {@link PackageManager.UserMinAspectRatio} override for an app
+ */
+ @PackageManager.UserMinAspectRatio
+ public int getUserMinAspectRatioValue(@NonNull String packageName, int uid)
+ throws RemoteException {
+ return mIPm.getUserMinAspectRatio(packageName, uid);
+ }
+
+ /**
+ * @return corresponding string for {@link PackageManager.UserMinAspectRatio} value
+ */
+ @NonNull
+ public String getUserMinAspectRatioEntry(@PackageManager.UserMinAspectRatio int aspectRatio) {
+ return mUserAspectRatioMap.getOrDefault(
+ aspectRatio, mContext.getString(R.string.user_aspect_ratio_app_default));
+ }
+
+ /**
+ * Whether an app's aspect ratio can be overridden by user. Only apps with launcher entry
+ * will be overridable.
+ */
+ public boolean canDisplayAspectRatioUi(@NonNull ApplicationInfo app) {
+ boolean hasLauncherEntry = mInfoHasLauncherEntryList.stream()
+ .anyMatch(info -> info.activityInfo.packageName.equals(app.packageName));
+ return hasLauncherEntry;
+ }
+
+ private static boolean getValueFromDeviceConfig() {
+ return DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_WINDOW_MANAGER,
+ KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS,
+ DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_SETTINGS);
+ }
+
+ @NonNull
+ private Map<Integer, String> getUserMinAspectRatioMapping() {
+ final String[] userMinAspectRatioStrings = mContext.getResources().getStringArray(
+ R.array.config_userAspectRatioOverrideEntries);
+ final int[] userMinAspectRatioValues = mContext.getResources().getIntArray(
+ R.array.config_userAspectRatioOverrideValues);
+ if (userMinAspectRatioStrings.length != userMinAspectRatioValues.length) {
+ throw new RuntimeException(
+ "config_userAspectRatioOverride options cannot be different length");
+ }
+
+ final Map<Integer, String> userMinAspectRatioMap = new ArrayMap<>();
+ for (int i = 0; i < userMinAspectRatioValues.length; i++) {
+ final int aspectRatioVal = userMinAspectRatioValues[i];
+ switch (aspectRatioVal) {
+ // Only map known values of UserMinAspectRatio and ignore unknown entries
+ case PackageManager.USER_MIN_ASPECT_RATIO_UNSET:
+ case PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN:
+ case PackageManager.USER_MIN_ASPECT_RATIO_4_3:
+ case PackageManager.USER_MIN_ASPECT_RATIO_16_9:
+ case PackageManager.USER_MIN_ASPECT_RATIO_3_2:
+ userMinAspectRatioMap.put(aspectRatioVal, userMinAspectRatioStrings[i]);
+ }
+ }
+ if (!userMinAspectRatioMap.containsKey(PackageManager.USER_MIN_ASPECT_RATIO_UNSET)) {
+ throw new RuntimeException("config_userAspectRatioOverrideValues options must have"
+ + " USER_MIN_ASPECT_RATIO_UNSET value");
+ }
+ return userMinAspectRatioMap;
+ }
+
+ @VisibleForTesting
+ void addInfoHasLauncherEntry(@NonNull ResolveInfo infoHasLauncherEntry) {
+ mInfoHasLauncherEntryList.add(infoHasLauncherEntry);
+ }
+}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 548ca55..d734a27 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -269,6 +269,7 @@
public static final int LIST_TYPE_CLONED_APPS = 17;
public static final int LIST_TYPE_NFC_TAG_APPS = 18;
public static final int LIST_TYPE_TURN_SCREEN_ON = 19;
+ public static final int LIST_TYPE_USER_ASPECT_RATIO_APPS = 20;
// List types that should show instant apps.
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplicationsUtil.kt b/src/com/android/settings/applications/manageapplications/ManageApplicationsUtil.kt
index 78a4a6b..8313686 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplicationsUtil.kt
+++ b/src/com/android/settings/applications/manageapplications/ManageApplicationsUtil.kt
@@ -20,6 +20,7 @@
import android.util.FeatureFlagUtils
import com.android.settings.Settings.AlarmsAndRemindersActivity
import com.android.settings.Settings.AppBatteryUsageActivity
+import com.android.settings.Settings.UserAspectRatioAppListActivity
import com.android.settings.Settings.ChangeNfcTagAppsActivity
import com.android.settings.Settings.ChangeWifiStateActivity
import com.android.settings.Settings.ClonedAppsListActivity
@@ -40,6 +41,7 @@
import com.android.settings.applications.manageapplications.ManageApplications.LIST_MANAGE_EXTERNAL_STORAGE
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_ALARMS_AND_REMINDERS
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_APPS_LOCALE
+import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_USER_ASPECT_RATIO_APPS
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_BATTERY_OPTIMIZATION
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_CLONED_APPS
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_GAMES
@@ -57,12 +59,14 @@
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_WIFI_ACCESS
import com.android.settings.applications.manageapplications.ManageApplications.LIST_TYPE_WRITE_SETTINGS
import com.android.settings.spa.app.AllAppListPageProvider
+import com.android.settings.spa.app.appcompat.UserAspectRatioAppsPageProvider
import com.android.settings.spa.app.specialaccess.AlarmsAndRemindersAppListProvider
import com.android.settings.spa.app.specialaccess.AllFilesAccessAppListProvider
import com.android.settings.spa.app.specialaccess.DisplayOverOtherAppsAppListProvider
import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
import com.android.settings.spa.app.specialaccess.MediaManagementAppsAppListProvider
import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider
+import com.android.settings.spa.app.specialaccess.NfcTagAppsSettingsProvider
import com.android.settings.spa.app.specialaccess.WifiControlAppListProvider
import com.android.settings.spa.notification.AppListNotificationsPageProvider
import com.android.settings.spa.system.AppLanguagesPageProvider
@@ -91,6 +95,7 @@
ClonedAppsListActivity::class to LIST_TYPE_CLONED_APPS,
ChangeNfcTagAppsActivity::class to LIST_TYPE_NFC_TAG_APPS,
TurnScreenOnSettingsActivity::class to LIST_TYPE_TURN_SCREEN_ON,
+ UserAspectRatioAppListActivity::class to LIST_TYPE_USER_ASPECT_RATIO_APPS,
)
@JvmField
@@ -112,6 +117,8 @@
LIST_TYPE_NOTIFICATION -> AppListNotificationsPageProvider.name
LIST_TYPE_APPS_LOCALE -> AppLanguagesPageProvider.name
LIST_TYPE_MAIN -> AllAppListPageProvider.name
+ LIST_TYPE_NFC_TAG_APPS -> NfcTagAppsSettingsProvider.getAppListRoute()
+ LIST_TYPE_USER_ASPECT_RATIO_APPS -> UserAspectRatioAppsPageProvider.name
else -> null
}
}
diff --git a/src/com/android/settings/applications/specialaccess/DataSaverController.java b/src/com/android/settings/applications/specialaccess/DataSaverController.java
deleted file mode 100644
index d1fd202..0000000
--- a/src/com/android/settings/applications/specialaccess/DataSaverController.java
+++ /dev/null
@@ -1,36 +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.applications.specialaccess;
-
-import android.content.Context;
-
-import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
-
-public class DataSaverController extends BasePreferenceController {
-
- public DataSaverController(Context context, String key) {
- super(context, key);
- }
-
- @AvailabilityStatus
- public int getAvailabilityStatus() {
- return mContext.getResources().getBoolean(R.bool.config_show_data_saver)
- ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-}
diff --git a/src/com/android/settings/applications/specialaccess/DataSaverController.kt b/src/com/android/settings/applications/specialaccess/DataSaverController.kt
new file mode 100644
index 0000000..baed0aa
--- /dev/null
+++ b/src/com/android/settings/applications/specialaccess/DataSaverController.kt
@@ -0,0 +1,88 @@
+/*
+ * 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.applications.specialaccess
+
+import android.content.Context
+import android.net.NetworkPolicyManager
+import android.os.UserHandle
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import androidx.preference.Preference
+import androidx.preference.PreferenceScreen
+import com.android.settings.R
+import com.android.settings.core.BasePreferenceController
+import com.android.settingslib.spa.framework.util.formatString
+import com.android.settingslib.spaprivileged.model.app.AppListRepository
+import com.android.settingslib.spaprivileged.model.app.AppListRepositoryImpl
+import com.google.common.annotations.VisibleForTesting
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.async
+import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+class DataSaverController(context: Context, key: String) : BasePreferenceController(context, key) {
+
+ private lateinit var preference: Preference
+
+ @AvailabilityStatus
+ override fun getAvailabilityStatus(): Int = when {
+ mContext.resources.getBoolean(R.bool.config_show_data_saver) -> AVAILABLE
+ else -> UNSUPPORTED_ON_DEVICE
+ }
+
+ override fun displayPreference(screen: PreferenceScreen) {
+ super.displayPreference(screen)
+ preference = screen.findPreference(preferenceKey)!!
+ }
+
+ override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) {
+ viewLifecycleOwner.lifecycleScope.launch {
+ viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
+ preference.summary = getUnrestrictedSummary(mContext)
+ }
+ }
+ }
+
+ companion object {
+ @VisibleForTesting
+ suspend fun getUnrestrictedSummary(
+ context: Context,
+ appListRepository: AppListRepository =
+ AppListRepositoryImpl(context.applicationContext),
+ ) = context.formatString(
+ R.string.data_saver_unrestricted_summary,
+ "count" to getAllowCount(context.applicationContext, appListRepository),
+ )
+
+ private suspend fun getAllowCount(context: Context, appListRepository: AppListRepository) =
+ withContext(Dispatchers.IO) {
+ coroutineScope {
+ val appsDeferred = async {
+ appListRepository.loadAndFilterApps(
+ userId = UserHandle.myUserId(),
+ isSystemApp = false,
+ )
+ }
+ val uidsAllowed = NetworkPolicyManager.from(context)
+ .getUidsWithPolicy(NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND)
+ appsDeferred.await().count { app -> app.uid in uidsAllowed }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index 2a350f4..46f534d 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -236,6 +236,9 @@
protected void onResume() {
super.onResume();
+ //reset mNextClick to make sure introduction page would be closed correctly
+ mNextClicked = false;
+
final int errorMsg = checkMaxEnrolled();
if (errorMsg == 0) {
mErrorText.setText(null);
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index 3356dfa..4e1a2f3 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -527,17 +527,18 @@
// Assume the flow is "Screen Lock" + "Face" + "Fingerprint"
ssb.append(bidi.unicodeWrap(screenLock));
+ if (hasFingerprint) {
+ ssb.append(bidi.unicodeWrap(SEPARATOR));
+ ssb.append(bidi.unicodeWrap(
+ capitalize(context.getString(R.string.security_settings_fingerprint))));
+ }
+
if (isFaceSupported) {
ssb.append(bidi.unicodeWrap(SEPARATOR));
ssb.append(bidi.unicodeWrap(
capitalize(context.getString(R.string.keywords_face_settings))));
}
- if (hasFingerprint) {
- ssb.append(bidi.unicodeWrap(SEPARATOR));
- ssb.append(bidi.unicodeWrap(
- capitalize(context.getString(R.string.security_settings_fingerprint))));
- }
return ssb.toString();
}
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index bff998a..bea0c33 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -120,6 +120,8 @@
protected void onCreate(Bundle savedInstanceState) {
mFaceManager = getFaceManager();
+ super.onCreate(savedInstanceState);
+
if (savedInstanceState == null
&& !WizardManagerHelper.isAnySetupWizard(getIntent())
&& !getIntent().getBooleanExtra(EXTRA_FROM_SETTINGS_SUMMARY, false)
@@ -130,8 +132,6 @@
finish();
}
- super.onCreate(savedInstanceState);
-
// Wait super::onCreated() then return because SuperNotCalledExceptio will be thrown
// if we don't wait for it.
if (isFinishing()) {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintAuthenticateSidecar.java b/src/com/android/settings/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
index 4264056..f3c8aba 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
@@ -21,6 +21,7 @@
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
import android.os.CancellationSignal;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.core.InstrumentedFragment;
/**
@@ -80,7 +81,6 @@
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
- mCancellationSignal = null;
if (mListener != null) {
mListener.onAuthenticationError(errMsgId, errString);
} else {
@@ -108,10 +108,12 @@
}
public void stopAuthentication() {
- if (mCancellationSignal != null && !mCancellationSignal.isCanceled()) {
+ if (mCancellationSignal != null) {
+ // This will automatically check if the cancel has been sent and if so
+ // it won't send it again.
mCancellationSignal.cancel();
+ mCancellationSignal = null;
}
- mCancellationSignal = null;
}
public void setListener(Listener listener) {
@@ -129,4 +131,9 @@
}
mListener = listener;
}
+
+ @VisibleForTesting
+ boolean isCancelled() {
+ return mCancellationSignal == null || mCancellationSignal.isCanceled();
+ }
}
\ No newline at end of file
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index dbdb024..a62bd67 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -1101,9 +1101,9 @@
}
}
- @SuppressWarnings("MissingSuperCall") // TODO: Fix me
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
maybeHideSfpsText(newConfig);
switch(newConfig.orientation) {
case Configuration.ORIENTATION_LANDSCAPE: {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index e47e9a8..505fe1c 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -169,7 +169,8 @@
private static final String KEY_LAUNCHED_CONFIRM = "launched_confirm";
private static final String KEY_HAS_FIRST_ENROLLED = "has_first_enrolled";
private static final String KEY_IS_ENROLLING = "is_enrolled";
- private static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH =
+ @VisibleForTesting
+ static final String KEY_REQUIRE_SCREEN_ON_TO_AUTH =
"security_settings_require_screen_on_to_auth";
private static final String KEY_FINGERPRINTS_ENROLLED_CATEGORY =
"security_settings_fingerprints_enrolled";
@@ -534,10 +535,6 @@
private void addFingerprintPreferences(PreferenceGroup root) {
final String fpPrefKey = addFingerprintItemPreferences(root);
- if (isSfps()) {
- scrollToPreference(fpPrefKey);
- addFingerprintUnlockCategory();
- }
for (AbstractPreferenceController controller : mControllers) {
if (controller instanceof FingerprintSettingsPreferenceController) {
((FingerprintSettingsPreferenceController) controller).setUserId(mUserId);
@@ -545,6 +542,14 @@
((FingerprintUnlockCategoryController) controller).setUserId(mUserId);
}
}
+
+ // This needs to be after setting ids, otherwise
+ // |mRequireScreenOnToAuthPreferenceController.isChecked| is always checking the primary
+ // user instead of the user with |mUserId|.
+ if (isSfps()) {
+ scrollToPreference(fpPrefKey);
+ addFingerprintUnlockCategory();
+ }
createFooterPreference(root);
}
diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
index aa3f770..75251cf 100644
--- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
+++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollProgressBarDrawable.java
@@ -202,6 +202,7 @@
return;
}
+ mShowingHelp = showingHelp;
if (mShowingHelp) {
if (mVibrator != null && mIsAccessibilityEnabled) {
mVibrator.vibrate(Process.myUid(), mContext.getOpPackageName(),
@@ -228,7 +229,6 @@
}
}
- mShowingHelp = showingHelp;
mRemainingSteps = remainingSteps;
mTotalSteps = totalSteps;
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt
new file mode 100644
index 0000000..2fbdedf
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintManagerInteractor.kt
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.domain.interactor
+
+import android.content.Context
+import android.content.Intent
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintManager.GenerateChallengeCallback
+import android.hardware.fingerprint.FingerprintManager.RemovalCallback
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import android.os.CancellationSignal
+import android.util.Log
+import com.android.settings.biometrics.GatekeeperPasswordProvider
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.password.ChooseLockSettingsHelper
+import kotlin.coroutines.resume
+import kotlin.coroutines.suspendCoroutine
+import kotlinx.coroutines.CancellableContinuation
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.suspendCancellableCoroutine
+import kotlinx.coroutines.withContext
+
+private const val TAG = "FingerprintManagerInteractor"
+
+/** Encapsulates business logic related to managing fingerprints. */
+interface FingerprintManagerInteractor {
+ /** Returns the list of current fingerprints. */
+ val enrolledFingerprints: Flow<List<FingerprintViewModel>>
+
+ /** Returns the max enrollable fingerprints, note during SUW this might be 1 */
+ val maxEnrollableFingerprints: Flow<Int>
+
+ /** Runs [FingerprintManager.authenticate] */
+ suspend fun authenticate(): FingerprintAuthAttemptViewModel
+
+ /**
+ * Generates a challenge with the provided [gateKeeperPasswordHandle] and on success returns a
+ * challenge and challenge token. This info can be used for secure operations such as
+ * [FingerprintManager.enroll]
+ *
+ * @param gateKeeperPasswordHandle GateKeeper password handle generated by a Confirm
+ * @return A [Pair] of the challenge and challenge token
+ */
+ suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray>
+
+ /** Returns true if a user can enroll a fingerprint false otherwise. */
+ fun canEnrollFingerprints(numFingerprints: Int): Flow<Boolean>
+
+ /**
+ * Removes the given fingerprint, returning true if it was successfully removed and false
+ * otherwise
+ */
+ suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean
+
+ /** Renames the given fingerprint if one exists */
+ suspend fun renameFingerprint(fp: FingerprintViewModel, newName: String)
+
+ /** Indicates if the device has side fingerprint */
+ suspend fun hasSideFps(): Boolean
+
+ /** Indicates if the press to auth feature has been enabled */
+ suspend fun pressToAuthEnabled(): Boolean
+
+ /** Retrieves the sensor properties of a device */
+ suspend fun sensorPropertiesInternal(): List<FingerprintSensorPropertiesInternal>
+}
+
+class FingerprintManagerInteractorImpl(
+ applicationContext: Context,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ private val fingerprintManager: FingerprintManager,
+ private val gatekeeperPasswordProvider: GatekeeperPasswordProvider,
+ private val pressToAuthProvider: () -> Boolean,
+) : FingerprintManagerInteractor {
+
+ private val maxFingerprints =
+ applicationContext.resources.getInteger(
+ com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser
+ )
+ private val applicationContext = applicationContext.applicationContext
+
+ override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray> =
+ suspendCoroutine {
+ val callback = GenerateChallengeCallback { _, userId, challenge ->
+ val intent = Intent()
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, gateKeeperPasswordHandle)
+ val challengeToken =
+ gatekeeperPasswordProvider.requestGatekeeperHat(intent, challenge, userId)
+
+ gatekeeperPasswordProvider.removeGatekeeperPasswordHandle(intent, false)
+ val p = Pair(challenge, challengeToken)
+ it.resume(p)
+ }
+ fingerprintManager.generateChallenge(applicationContext.userId, callback)
+ }
+
+ override val enrolledFingerprints: Flow<List<FingerprintViewModel>> = flow {
+ emit(
+ fingerprintManager
+ .getEnrolledFingerprints(applicationContext.userId)
+ .map { (FingerprintViewModel(it.name.toString(), it.biometricId, it.deviceId)) }
+ .toList()
+ )
+ }
+
+ override fun canEnrollFingerprints(numFingerprints: Int): Flow<Boolean> = flow {
+ emit(numFingerprints < maxFingerprints)
+ }
+
+ override val maxEnrollableFingerprints = flow { emit(maxFingerprints) }
+
+ override suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean = suspendCoroutine {
+ val callback =
+ object : RemovalCallback() {
+ override fun onRemovalError(
+ fp: android.hardware.fingerprint.Fingerprint,
+ errMsgId: Int,
+ errString: CharSequence
+ ) {
+ it.resume(false)
+ }
+
+ override fun onRemovalSucceeded(
+ fp: android.hardware.fingerprint.Fingerprint?,
+ remaining: Int
+ ) {
+ it.resume(true)
+ }
+ }
+ fingerprintManager.remove(
+ android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId),
+ applicationContext.userId,
+ callback
+ )
+ }
+
+ override suspend fun renameFingerprint(fp: FingerprintViewModel, newName: String) {
+ withContext(backgroundDispatcher) {
+ fingerprintManager.rename(fp.fingerId, applicationContext.userId, newName)
+ }
+ }
+
+ override suspend fun hasSideFps(): Boolean = suspendCancellableCoroutine {
+ it.resume(fingerprintManager.isPowerbuttonFps)
+ }
+
+ override suspend fun pressToAuthEnabled(): Boolean = suspendCancellableCoroutine {
+ it.resume(pressToAuthProvider())
+ }
+
+ override suspend fun sensorPropertiesInternal(): List<FingerprintSensorPropertiesInternal> =
+ suspendCancellableCoroutine {
+ it.resume(fingerprintManager.sensorPropertiesInternal)
+ }
+
+ override suspend fun authenticate(): FingerprintAuthAttemptViewModel =
+ suspendCancellableCoroutine { c: CancellableContinuation<FingerprintAuthAttemptViewModel> ->
+ val authenticationCallback =
+ object : FingerprintManager.AuthenticationCallback() {
+
+ override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
+ super.onAuthenticationError(errorCode, errString)
+ if (c.isCompleted) {
+ Log.d(TAG, "framework sent down onAuthError after finish")
+ return
+ }
+ c.resume(FingerprintAuthAttemptViewModel.Error(errorCode, errString.toString()))
+ }
+
+ override fun onAuthenticationSucceeded(result: FingerprintManager.AuthenticationResult) {
+ super.onAuthenticationSucceeded(result)
+ if (c.isCompleted) {
+ Log.d(TAG, "framework sent down onAuthError after finish")
+ return
+ }
+ c.resume(FingerprintAuthAttemptViewModel.Success(result.fingerprint?.biometricId ?: -1))
+ }
+ }
+
+ val cancellationSignal = CancellationSignal()
+ c.invokeOnCancellation { cancellationSignal.cancel() }
+ fingerprintManager.authenticate(
+ null,
+ cancellationSignal,
+ authenticationCallback,
+ null,
+ applicationContext.userId
+ )
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/binder/FingerprintSettingsViewBinder.kt b/src/com/android/settings/biometrics/fingerprint2/ui/binder/FingerprintSettingsViewBinder.kt
new file mode 100644
index 0000000..d9f3e43
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/binder/FingerprintSettingsViewBinder.kt
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.binder
+
+import android.hardware.fingerprint.FingerprintManager
+import android.util.Log
+import androidx.lifecycle.LifecycleCoroutineScope
+import com.android.settings.biometrics.fingerprint2.ui.binder.FingerprintSettingsViewBinder.FingerprintView
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.EnrollAdditionalFingerprint
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.EnrollFirstFingerprint
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsNavigationViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintStateViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FinishSettings
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FinishSettingsWithResult
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.LaunchConfirmDeviceCredential
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.LaunchedActivity
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.PreferenceViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.ShowSettings
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.flow.collectLatest
+import kotlinx.coroutines.flow.filterNotNull
+import kotlinx.coroutines.launch
+
+private const val TAG = "FingerprintSettingsViewBinder"
+
+/** Binds a [FingerprintSettingsViewModel] to a [FingerprintView] */
+object FingerprintSettingsViewBinder {
+
+ interface FingerprintView {
+ /**
+ * Helper function to launch fingerprint enrollment(This should be the default behavior when a
+ * user enters their PIN/PATTERN/PASS and no fingerprints are enrolled).
+ */
+ fun launchFullFingerprintEnrollment(
+ userId: Int,
+ gateKeeperPasswordHandle: Long?,
+ challenge: Long?,
+ challengeToken: ByteArray?
+ )
+
+ /** Helper to launch an add fingerprint request */
+ fun launchAddFingerprint(userId: Int, challengeToken: ByteArray?)
+ /**
+ * Helper function that will try and launch confirm lock, if that fails we will prompt user to
+ * choose a PIN/PATTERN/PASS.
+ */
+ fun launchConfirmOrChooseLock(userId: Int)
+
+ /** Used to indicate that FingerprintSettings is finished. */
+ fun finish()
+
+ /** Indicates what result should be set for the returning callee */
+ fun setResultExternal(resultCode: Int)
+ /** Indicates the settings UI should be shown */
+ fun showSettings(state: FingerprintStateViewModel)
+ /** Indicates that a user has been locked out */
+ fun userLockout(authAttemptViewModel: FingerprintAuthAttemptViewModel.Error)
+ /** Indicates a fingerprint preference should be highlighted */
+ suspend fun highlightPref(fingerId: Int)
+ /** Indicates a user should be prompted to delete a fingerprint */
+ suspend fun askUserToDeleteDialog(fingerprintViewModel: FingerprintViewModel): Boolean
+ /** Indicates a user should be asked to renae ma dialog */
+ suspend fun askUserToRenameDialog(
+ fingerprintViewModel: FingerprintViewModel
+ ): Pair<FingerprintViewModel, String>?
+ }
+
+ fun bind(
+ view: FingerprintView,
+ viewModel: FingerprintSettingsViewModel,
+ navigationViewModel: FingerprintSettingsNavigationViewModel,
+ lifecycleScope: LifecycleCoroutineScope,
+ ) {
+
+ /** Result listener for launching enrollments **after** a user has reached the settings page. */
+
+ // Settings display flow
+ lifecycleScope.launch {
+ viewModel.fingerprintState.filterNotNull().collect { view.showSettings(it) }
+ }
+
+ // Dialog flow
+ lifecycleScope.launch {
+ viewModel.isShowingDialog.collectLatest {
+ if (it == null) {
+ return@collectLatest
+ }
+ when (it) {
+ is PreferenceViewModel.RenameDialog -> {
+ val willRename = view.askUserToRenameDialog(it.fingerprintViewModel)
+ if (willRename != null) {
+ Log.d(TAG, "renaming fingerprint $it")
+ viewModel.renameFingerprint(willRename.first, willRename.second)
+ }
+ viewModel.onRenameDialogFinished()
+ }
+ is PreferenceViewModel.DeleteDialog -> {
+ if (view.askUserToDeleteDialog(it.fingerprintViewModel)) {
+ Log.d(TAG, "deleting fingerprint $it")
+ viewModel.deleteFingerprint(it.fingerprintViewModel)
+ }
+ viewModel.onDeleteDialogFinished()
+ }
+ }
+ }
+ }
+
+ // Auth flow
+ lifecycleScope.launch {
+ viewModel.authFlow.filterNotNull().collect {
+ when (it) {
+ is FingerprintAuthAttemptViewModel.Success -> {
+ view.highlightPref(it.fingerId)
+ }
+ is FingerprintAuthAttemptViewModel.Error -> {
+ if (it.error == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT) {
+ view.userLockout(it)
+ }
+ }
+ }
+ }
+ }
+
+ // Launch this on Dispatchers.Default and not main.
+ // Otherwise it takes too long for state transitions such as PIN/PATTERN/PASS
+ // to enrollment, which makes gives the user a janky experience.
+ lifecycleScope.launch(Dispatchers.Default) {
+ var settingsShowingJob: Job? = null
+ navigationViewModel.nextStep.filterNotNull().collect { nextStep ->
+ settingsShowingJob?.cancel()
+ settingsShowingJob = null
+ Log.d(TAG, "next step = $nextStep")
+ when (nextStep) {
+ is EnrollFirstFingerprint ->
+ view.launchFullFingerprintEnrollment(
+ nextStep.userId,
+ nextStep.gateKeeperPasswordHandle,
+ nextStep.challenge,
+ nextStep.challengeToken
+ )
+ is EnrollAdditionalFingerprint ->
+ view.launchAddFingerprint(nextStep.userId, nextStep.challengeToken)
+ is LaunchConfirmDeviceCredential -> view.launchConfirmOrChooseLock(nextStep.userId)
+ is FinishSettings -> {
+ Log.d(TAG, "Finishing due to ${nextStep.reason}")
+ view.finish()
+ }
+ is FinishSettingsWithResult -> {
+ Log.d(TAG, "Finishing with result ${nextStep.result} due to ${nextStep.reason}")
+ view.setResultExternal(nextStep.result)
+ view.finish()
+ }
+ is ShowSettings -> Log.d(TAG, "Showing settings")
+ is LaunchedActivity -> Log.d(TAG, "Launched activity, awaiting result")
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintDeletionDialog.kt b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintDeletionDialog.kt
new file mode 100644
index 0000000..42e2047
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintDeletionDialog.kt
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.fragment
+
+import android.app.Dialog
+import android.app.admin.DevicePolicyManager
+import android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE
+import android.app.admin.DevicePolicyResources.UNDEFINED
+import android.app.settings.SettingsEnums
+import android.content.DialogInterface
+import android.os.Bundle
+import android.os.UserManager
+import androidx.appcompat.app.AlertDialog
+import com.android.settings.R
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment
+import kotlin.coroutines.resume
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+private const val KEY_IS_LAST_FINGERPRINT = "IS_LAST_FINGERPRINT"
+
+class FingerprintDeletionDialog : InstrumentedDialogFragment() {
+ private lateinit var fingerprintViewModel: FingerprintViewModel
+ private var isLastFingerprint: Boolean = false
+ private lateinit var alertDialog: AlertDialog
+ lateinit var onClickListener: DialogInterface.OnClickListener
+ lateinit var onNegativeClickListener: DialogInterface.OnClickListener
+ lateinit var onCancelListener: DialogInterface.OnCancelListener
+
+ override fun getMetricsCategory(): Int {
+ return SettingsEnums.DIALOG_FINGERPINT_EDIT
+ }
+
+ override fun onCancel(dialog: DialogInterface) {
+ onCancelListener.onCancel(dialog)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val fp = requireArguments().get(KEY_FINGERPRINT) as android.hardware.fingerprint.Fingerprint
+ fingerprintViewModel = FingerprintViewModel(fp.name.toString(), fp.biometricId, fp.deviceId)
+ isLastFingerprint = requireArguments().getBoolean(KEY_IS_LAST_FINGERPRINT)
+ val title = getString(R.string.fingerprint_delete_title, fingerprintViewModel.name)
+ var message = getString(R.string.fingerprint_v2_delete_message, fingerprintViewModel.name)
+ val context = requireContext()
+
+ if (isLastFingerprint) {
+ val isProfileChallengeUser = UserManager.get(context).isManagedProfile(context.userId)
+ val messageId =
+ if (isProfileChallengeUser) {
+ WORK_PROFILE_FINGERPRINT_LAST_DELETE_MESSAGE
+ } else {
+ UNDEFINED
+ }
+ val defaultMessageId =
+ if (isProfileChallengeUser) {
+ R.string.fingerprint_last_delete_message_profile_challenge
+ } else {
+ R.string.fingerprint_last_delete_message
+ }
+ val devicePolicyManager = requireContext().getSystemService(DevicePolicyManager::class.java)
+ message =
+ devicePolicyManager?.resources?.getString(messageId) {
+ message + "\n\n" + context.getString(defaultMessageId)
+ }
+ ?: ""
+ }
+
+ alertDialog =
+ AlertDialog.Builder(requireActivity())
+ .setTitle(title)
+ .setMessage(message)
+ .setPositiveButton(
+ R.string.security_settings_fingerprint_enroll_dialog_delete,
+ onClickListener
+ )
+ .setNegativeButton(R.string.cancel, onNegativeClickListener)
+ .create()
+ return alertDialog
+ }
+
+ companion object {
+ private const val KEY_FINGERPRINT = "fingerprint"
+ suspend fun showInstance(
+ fp: FingerprintViewModel,
+ lastFingerprint: Boolean,
+ target: FingerprintSettingsV2Fragment,
+ ) = suspendCancellableCoroutine { continuation ->
+ val dialog = FingerprintDeletionDialog()
+ dialog.onClickListener = DialogInterface.OnClickListener { _, _ -> continuation.resume(true) }
+ dialog.onNegativeClickListener =
+ DialogInterface.OnClickListener { _, _ -> continuation.resume(false) }
+ dialog.onCancelListener = DialogInterface.OnCancelListener { continuation.resume(false) }
+
+ continuation.invokeOnCancellation { dialog.dismiss() }
+ val bundle = Bundle()
+ bundle.putObject(
+ KEY_FINGERPRINT,
+ android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId)
+ )
+ bundle.putBoolean(KEY_IS_LAST_FINGERPRINT, lastFingerprint)
+ dialog.arguments = bundle
+ dialog.show(target.parentFragmentManager, FingerprintDeletionDialog::class.java.toString())
+ }
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsPreference.kt b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsPreference.kt
new file mode 100644
index 0000000..e12785d
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsPreference.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.fragment
+
+import android.content.Context
+import android.util.Log
+import android.view.View
+import androidx.lifecycle.lifecycleScope
+import androidx.preference.PreferenceViewHolder
+import com.android.settings.R
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settingslib.widget.TwoTargetPreference
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+private const val TAG = "FingerprintSettingsPreference"
+
+class FingerprintSettingsPreference(
+ context: Context,
+ val fingerprintViewModel: FingerprintViewModel,
+ val fragment: FingerprintSettingsV2Fragment,
+ val isLastFingerprint: Boolean
+) : TwoTargetPreference(context) {
+ private lateinit var myView: View
+
+ init {
+ key = "FINGERPRINT_" + fingerprintViewModel.fingerId
+ Log.d(TAG, "FingerprintPreference $this with frag $fragment $key")
+ title = fingerprintViewModel.name
+ isPersistent = false
+ setIcon(R.drawable.ic_fingerprint_24dp)
+ setOnPreferenceClickListener {
+ fragment.lifecycleScope.launch { fragment.onPrefClicked(fingerprintViewModel) }
+ true
+ }
+ }
+
+ override fun onBindViewHolder(view: PreferenceViewHolder) {
+ super.onBindViewHolder(view)
+ myView = view.itemView
+ view.itemView.findViewById<View>(R.id.delete_button)?.setOnClickListener {
+ fragment.lifecycleScope.launch { fragment.onDeletePrefClicked(fingerprintViewModel) }
+ }
+ }
+
+ /** Highlights this dialog. */
+ suspend fun highlight() {
+ fragment.activity?.getDrawable(R.drawable.preference_highlight)?.let { highlight ->
+ val centerX: Float = myView.width / 2.0f
+ val centerY: Float = myView.height / 2.0f
+ highlight.setHotspot(centerX, centerY)
+ myView.background = highlight
+ myView.isPressed = true
+ myView.isPressed = false
+ delay(300)
+ myView.background = null
+ }
+ }
+
+ override fun getSecondTargetResId(): Int {
+ return R.layout.preference_widget_delete
+ }
+
+ suspend fun askUserToDeleteDialog(): Boolean {
+ return FingerprintDeletionDialog.showInstance(fingerprintViewModel, isLastFingerprint, fragment)
+ }
+
+ suspend fun askUserToRenameDialog(): Pair<FingerprintViewModel, String>? {
+ return FingerprintSettingsRenameDialog.showInstance(fingerprintViewModel, fragment)
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsRenameDialog.kt b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsRenameDialog.kt
new file mode 100644
index 0000000..a08b3db
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsRenameDialog.kt
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.fragment
+
+import android.app.Dialog
+import android.app.settings.SettingsEnums
+import android.content.DialogInterface
+import android.os.Bundle
+import android.text.InputFilter
+import android.text.Spanned
+import android.text.TextUtils
+import android.util.Log
+import android.widget.ImeAwareEditText
+import androidx.appcompat.app.AlertDialog
+import com.android.settings.R
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment
+import kotlin.coroutines.resume
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+private const val TAG = "FingerprintSettingsRenameDialog"
+
+class FingerprintSettingsRenameDialog : InstrumentedDialogFragment() {
+ lateinit var onClickListener: DialogInterface.OnClickListener
+ lateinit var onCancelListener: DialogInterface.OnCancelListener
+
+ override fun onCancel(dialog: DialogInterface) {
+ Log.d(TAG, "onCancel $dialog")
+ onCancelListener.onCancel(dialog)
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ Log.d(TAG, "onCreateDialog $this")
+ val fp = requireArguments().get(KEY_FINGERPRINT) as android.hardware.fingerprint.Fingerprint
+ val fingerprintViewModel = FingerprintViewModel(fp.name.toString(), fp.biometricId, fp.deviceId)
+
+ val context = requireContext()
+ val alertDialog =
+ AlertDialog.Builder(context)
+ .setView(R.layout.fingerprint_rename_dialog)
+ .setPositiveButton(R.string.security_settings_fingerprint_enroll_dialog_ok, onClickListener)
+ .create()
+ alertDialog.setOnShowListener {
+ (dialog?.findViewById(R.id.fingerprint_rename_field) as ImeAwareEditText?)?.apply {
+ val name = fingerprintViewModel.name
+ setText(name)
+ filters = this@FingerprintSettingsRenameDialog.getFilters()
+ selectAll()
+ requestFocus()
+ scheduleShowSoftInput()
+ }
+ }
+
+ return alertDialog
+ }
+
+ private fun getFilters(): Array<InputFilter> {
+ val filter: InputFilter =
+ object : InputFilter {
+
+ override fun filter(
+ source: CharSequence,
+ start: Int,
+ end: Int,
+ dest: Spanned?,
+ dstart: Int,
+ dend: Int
+ ): CharSequence? {
+ for (index in start until end) {
+ val c = source[index]
+ // KXMLSerializer does not allow these characters,
+ // see KXmlSerializer.java:162.
+ if (c.code < 0x20) {
+ return ""
+ }
+ }
+ return null
+ }
+ }
+ return arrayOf(filter)
+ }
+
+ override fun getMetricsCategory(): Int {
+ return SettingsEnums.DIALOG_FINGERPINT_EDIT
+ }
+
+ companion object {
+ private const val KEY_FINGERPRINT = "fingerprint"
+
+ suspend fun showInstance(fp: FingerprintViewModel, target: FingerprintSettingsV2Fragment) =
+ suspendCancellableCoroutine { continuation ->
+ val dialog = FingerprintSettingsRenameDialog()
+ val onClick =
+ DialogInterface.OnClickListener { _, _ ->
+ val dialogTextField =
+ dialog.requireDialog().findViewById(R.id.fingerprint_rename_field) as ImeAwareEditText
+ val newName = dialogTextField.text.toString()
+ if (!TextUtils.equals(newName, fp.name)) {
+ Log.d(TAG, "rename $fp.name to $newName for $dialog")
+ continuation.resume(Pair(fp, newName))
+ } else {
+ continuation.resume(null)
+ }
+ }
+
+ dialog.onClickListener = onClick
+ dialog.onCancelListener =
+ DialogInterface.OnCancelListener {
+ Log.d(TAG, "onCancelListener clicked $dialog")
+ continuation.resume(null)
+ }
+
+ continuation.invokeOnCancellation {
+ Log.d(TAG, "invokeOnCancellation $dialog")
+ dialog.dismiss()
+ }
+
+ val bundle = Bundle()
+ bundle.putObject(
+ KEY_FINGERPRINT,
+ android.hardware.fingerprint.Fingerprint(fp.name, fp.fingerId, fp.deviceId)
+ )
+ dialog.arguments = bundle
+ Log.d(TAG, "showing dialog $dialog")
+ dialog.show(
+ target.parentFragmentManager,
+ FingerprintSettingsRenameDialog::class.java.toString()
+ )
+ }
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsV2Fragment.kt b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsV2Fragment.kt
new file mode 100644
index 0000000..b82f7c1
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/fragment/FingerprintSettingsV2Fragment.kt
@@ -0,0 +1,581 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.fragment
+
+import android.app.Activity
+import android.app.admin.DevicePolicyManager
+import android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_UNLOCK_DISABLED_EXPLANATION
+import android.app.settings.SettingsEnums
+import android.content.Context.FINGERPRINT_SERVICE
+import android.content.Intent
+import android.hardware.fingerprint.FingerprintManager
+import android.os.Bundle
+import android.provider.Settings.Secure
+import android.text.TextUtils
+import android.util.FeatureFlagUtils
+import android.util.Log
+import android.view.View
+import android.widget.Toast
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
+import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
+import com.android.internal.widget.LockPatternUtils
+import com.android.settings.R
+import com.android.settings.Utils.SETTINGS_PACKAGE_NAME
+import com.android.settings.biometrics.BiometricEnrollBase
+import com.android.settings.biometrics.BiometricEnrollBase.CONFIRM_REQUEST
+import com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY
+import com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED
+import com.android.settings.biometrics.GatekeeperPasswordProvider
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroductionInternal
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractorImpl
+import com.android.settings.biometrics.fingerprint2.ui.binder.FingerprintSettingsViewBinder
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsNavigationViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintStateViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.core.SettingsBaseActivity
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment
+import com.android.settings.dashboard.DashboardFragment
+import com.android.settings.password.ChooseLockGeneric
+import com.android.settings.password.ChooseLockSettingsHelper
+import com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE
+import com.android.settingslib.HelpUtils
+import com.android.settingslib.RestrictedLockUtils
+import com.android.settingslib.RestrictedLockUtilsInternal
+import com.android.settingslib.transition.SettingsTransitionHelper
+import com.android.settingslib.widget.FooterPreference
+import com.google.android.setupdesign.util.DeviceHelper
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+private const val TAG = "FingerprintSettingsV2Fragment"
+private const val KEY_FINGERPRINTS_ENROLLED_CATEGORY = "security_settings_fingerprints_enrolled"
+private const val KEY_FINGERPRINT_SIDE_FPS_CATEGORY =
+ "security_settings_fingerprint_unlock_category"
+private const val KEY_FINGERPRINT_ADD = "key_fingerprint_add"
+private const val KEY_FINGERPRINT_SIDE_FPS_SCREEN_ON_TO_AUTH =
+ "security_settings_require_screen_on_to_auth"
+private const val KEY_FINGERPRINT_FOOTER = "security_settings_fingerprint_footer"
+
+/**
+ * A class responsible for showing FingerprintSettings. Typical activity Flows are
+ * 1. Settings > FingerprintSettings > PIN/PATTERN/PASS -> FingerprintSettings
+ * 2. FingerprintSettings -> FingerprintEnrollment fow
+ *
+ * This page typically allows for
+ * 1. Fingerprint deletion
+ * 2. Fingerprint enrollment
+ * 3. Renaming a fingerprint
+ * 4. Enabling/Disabling a feature
+ */
+class FingerprintSettingsV2Fragment :
+ DashboardFragment(), FingerprintSettingsViewBinder.FingerprintView {
+ private lateinit var settingsViewModel: FingerprintSettingsViewModel
+ private lateinit var navigationViewModel: FingerprintSettingsNavigationViewModel
+
+ /** Result listener for ChooseLock activity flow. */
+ private val confirmDeviceResultListener =
+ registerForActivityResult(StartActivityForResult()) { result ->
+ val resultCode = result.resultCode
+ val data = result.data
+ onConfirmDevice(resultCode, data)
+ }
+
+ /** Result listener for launching enrollments **after** a user has reached the settings page. */
+ private val launchAdditionalFingerprintListener: ActivityResultLauncher<Intent> =
+ registerForActivityResult(StartActivityForResult()) { result ->
+ lifecycleScope.launch {
+ val resultCode = result.resultCode
+ Log.d(TAG, "onEnrollAdditionalFingerprint($resultCode)")
+
+ if (resultCode == BiometricEnrollBase.RESULT_TIMEOUT) {
+ navigationViewModel.onEnrollAdditionalFailure()
+ } else {
+ navigationViewModel.onEnrollSuccess()
+ }
+ }
+ }
+
+ /** Initial listener for the first enrollment request */
+ private val launchFirstEnrollmentListener: ActivityResultLauncher<Intent> =
+ registerForActivityResult(StartActivityForResult()) { result ->
+ lifecycleScope.launch {
+ val resultCode = result.resultCode
+ val data = result.data
+
+ Log.d(TAG, "onEnrollFirstFingerprint($resultCode, $data)")
+ if (resultCode != RESULT_FINISHED || data == null) {
+ if (resultCode == BiometricEnrollBase.RESULT_TIMEOUT) {
+ navigationViewModel.onEnrollFirstFailure(
+ "Received RESULT_TIMEOUT when enrolling",
+ resultCode
+ )
+ } else {
+ navigationViewModel.onEnrollFirstFailure(
+ "Incorrect resultCode or data was null",
+ resultCode
+ )
+ }
+ } else {
+ val token = data.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN)
+ val challenge = data.getExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE) as Long?
+ navigationViewModel.onEnrollFirst(token, challenge)
+ }
+ }
+ }
+
+ override fun userLockout(authAttemptViewModel: FingerprintAuthAttemptViewModel.Error) {
+ Toast.makeText(activity, authAttemptViewModel.message, Toast.LENGTH_SHORT).show()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ // This is needed to support ChooseLockSettingBuilder...show(). All other activity
+ // calls should use the registerForActivity method call.
+ super.onActivityResult(requestCode, resultCode, data)
+ onConfirmDevice(resultCode, data)
+ }
+
+ override fun onCreate(icicle: Bundle?) {
+ super.onCreate(icicle)
+
+ if (icicle != null) {
+ Log.d(TAG, "onCreateWithSavedState")
+ } else {
+ Log.d(TAG, "onCreate()")
+ }
+
+ if (
+ !FeatureFlagUtils.isEnabled(
+ context,
+ FeatureFlagUtils.SETTINGS_BIOMETRICS2_FINGERPRINT_SETTINGS
+ )
+ ) {
+ Log.d(TAG, "Finishing due to feature not being enabled")
+ finish()
+ return
+ }
+
+ val context = requireContext()
+ val userId = context.userId
+
+ preferenceScreen.isVisible = false
+
+ val fingerprintManager = context.getSystemService(FINGERPRINT_SERVICE) as FingerprintManager
+
+ val backgroundDispatcher = Dispatchers.IO
+ val activity = requireActivity()
+ val userHandle = activity.user.identifier
+
+ val interactor =
+ FingerprintManagerInteractorImpl(
+ context.applicationContext,
+ backgroundDispatcher,
+ fingerprintManager,
+ GatekeeperPasswordProvider(LockPatternUtils(context.applicationContext))
+ ) {
+ var toReturn: Int =
+ Secure.getIntForUser(
+ context.contentResolver,
+ Secure.SFPS_PERFORMANT_AUTH_ENABLED,
+ -1,
+ userHandle,
+ )
+ if (toReturn == -1) {
+ toReturn =
+ if (
+ context.resources.getBoolean(com.android.internal.R.bool.config_performantAuthDefault)
+ ) {
+ 1
+ } else {
+ 0
+ }
+ Secure.putIntForUser(
+ context.contentResolver,
+ Secure.SFPS_PERFORMANT_AUTH_ENABLED,
+ toReturn,
+ userHandle
+ )
+ }
+
+ toReturn == 1
+ }
+
+ val token = intent.getByteArrayExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN)
+ val challenge = intent.getLongExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, -1L)
+
+ navigationViewModel =
+ ViewModelProvider(
+ this,
+ FingerprintSettingsNavigationViewModel.FingerprintSettingsNavigationModelFactory(
+ userId,
+ interactor,
+ backgroundDispatcher,
+ token,
+ challenge
+ )
+ )[FingerprintSettingsNavigationViewModel::class.java]
+
+ settingsViewModel =
+ ViewModelProvider(
+ this,
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ userId,
+ interactor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ )[FingerprintSettingsViewModel::class.java]
+
+ FingerprintSettingsViewBinder.bind(
+ this,
+ settingsViewModel,
+ navigationViewModel,
+ lifecycleScope,
+ )
+ }
+
+ override fun getMetricsCategory(): Int {
+ return SettingsEnums.FINGERPRINT
+ }
+
+ override fun getPreferenceScreenResId(): Int {
+ return R.xml.security_settings_fingerprint_limbo
+ }
+
+ override fun getLogTag(): String {
+ return TAG
+ }
+
+ override fun onStop() {
+ super.onStop()
+ navigationViewModel.maybeFinishActivity(requireActivity().isChangingConfigurations)
+ }
+
+ override fun onPause() {
+ super.onPause()
+ settingsViewModel.shouldAuthenticate(false)
+ val transaction = parentFragmentManager.beginTransaction()
+ for (frag in parentFragmentManager.fragments) {
+ if (frag is InstrumentedDialogFragment) {
+ Log.d(TAG, "removing dialog settings fragment $frag")
+ frag.dismiss()
+ transaction.remove(frag)
+ }
+ }
+ transaction.commit()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ settingsViewModel.shouldAuthenticate(true)
+ }
+
+ /** Used to indicate that preference has been clicked */
+ fun onPrefClicked(fingerprintViewModel: FingerprintViewModel) {
+ Log.d(TAG, "onPrefClicked(${fingerprintViewModel})")
+ settingsViewModel.onPrefClicked(fingerprintViewModel)
+ }
+
+ /** Used to indicate that a delete pref has been clicked */
+ fun onDeletePrefClicked(fingerprintViewModel: FingerprintViewModel) {
+ Log.d(TAG, "onDeletePrefClicked(${fingerprintViewModel})")
+ settingsViewModel.onDeleteClicked(fingerprintViewModel)
+ }
+
+ override fun showSettings(state: FingerprintStateViewModel) {
+ val category =
+ this@FingerprintSettingsV2Fragment.findPreference(KEY_FINGERPRINTS_ENROLLED_CATEGORY)
+ as PreferenceCategory?
+
+ category?.removeAll()
+
+ state.fingerprintViewModels.forEach { fingerprint ->
+ category?.addPreference(
+ FingerprintSettingsPreference(
+ requireContext(),
+ fingerprint,
+ this@FingerprintSettingsV2Fragment,
+ state.fingerprintViewModels.size == 1,
+ )
+ )
+ }
+ category?.isVisible = true
+
+ createFingerprintsFooterPreference(state.canEnroll, state.maxFingerprints)
+ preferenceScreen.isVisible = true
+
+ val sideFpsPref =
+ this@FingerprintSettingsV2Fragment.findPreference(KEY_FINGERPRINT_SIDE_FPS_CATEGORY)
+ as PreferenceCategory?
+ sideFpsPref?.isVisible = false
+
+ if (state.hasSideFps) {
+ sideFpsPref?.isVisible = state.fingerprintViewModels.isNotEmpty()
+ val otherPref =
+ this@FingerprintSettingsV2Fragment.findPreference(
+ KEY_FINGERPRINT_SIDE_FPS_SCREEN_ON_TO_AUTH
+ ) as Preference?
+ otherPref?.isVisible = state.fingerprintViewModels.isNotEmpty()
+ }
+ addFooter(state.hasSideFps)
+ }
+ private fun addFooter(hasSideFps: Boolean) {
+ val footer =
+ this@FingerprintSettingsV2Fragment.findPreference(KEY_FINGERPRINT_FOOTER)
+ as PreferenceCategory?
+ val admin =
+ RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
+ activity,
+ DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT,
+ requireActivity().userId
+ )
+ val activity = requireActivity()
+ val helpIntent =
+ HelpUtils.getHelpIntent(activity, getString(helpResource), activity::class.java.name)
+ val learnMoreClickListener =
+ View.OnClickListener { v: View? -> activity.startActivityForResult(helpIntent, 0) }
+
+ class FooterColumn {
+ var title: CharSequence? = null
+ var learnMoreOverrideText: CharSequence? = null
+ var learnMoreOnClickListener: View.OnClickListener? = null
+ }
+
+ var footerColumns = mutableListOf<FooterColumn>()
+ if (admin != null) {
+ val devicePolicyManager = getSystemService(DevicePolicyManager::class.java)
+ val column1 = FooterColumn()
+ column1.title =
+ devicePolicyManager.resources.getString(FINGERPRINT_UNLOCK_DISABLED_EXPLANATION) {
+ getString(R.string.security_fingerprint_disclaimer_lockscreen_disabled_1)
+ }
+
+ column1.learnMoreOnClickListener =
+ View.OnClickListener { _ ->
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(activity, admin)
+ }
+ column1.learnMoreOverrideText = getText(R.string.admin_support_more_info)
+ footerColumns.add(column1)
+ val column2 = FooterColumn()
+ column2.title = getText(R.string.security_fingerprint_disclaimer_lockscreen_disabled_2)
+ if (hasSideFps) {
+ column2.learnMoreOverrideText =
+ getText(R.string.security_settings_fingerprint_settings_footer_learn_more)
+ }
+ column2.learnMoreOnClickListener = learnMoreClickListener
+ footerColumns.add(column2)
+ } else {
+ val column = FooterColumn()
+ column.title =
+ getString(
+ R.string.security_settings_fingerprint_enroll_introduction_v3_message,
+ DeviceHelper.getDeviceName(requireActivity())
+ )
+ column.learnMoreOnClickListener = learnMoreClickListener
+ if (hasSideFps) {
+ column.learnMoreOverrideText =
+ getText(R.string.security_settings_fingerprint_settings_footer_learn_more)
+ }
+ footerColumns.add(column)
+ }
+
+ footer?.removeAll()
+ for (i in 0 until footerColumns.size) {
+ val column = footerColumns[i]
+ val footerPrefToAdd: FooterPreference =
+ FooterPreference.Builder(requireContext()).setTitle(column.title).build()
+ if (i > 0) {
+ footerPrefToAdd.setIconVisibility(View.GONE)
+ }
+ if (column.learnMoreOnClickListener != null) {
+ footerPrefToAdd.setLearnMoreAction(column.learnMoreOnClickListener)
+ if (!TextUtils.isEmpty(column.learnMoreOverrideText)) {
+ footerPrefToAdd.setLearnMoreText(column.learnMoreOverrideText)
+ }
+ }
+ footer?.addPreference(footerPrefToAdd)
+ }
+ }
+
+ override suspend fun askUserToDeleteDialog(fingerprintViewModel: FingerprintViewModel): Boolean {
+ Log.d(TAG, "showing delete dialog for (${fingerprintViewModel})")
+
+ try {
+ val willDelete =
+ fingerprintPreferences()
+ .first { it?.fingerprintViewModel == fingerprintViewModel }
+ ?.askUserToDeleteDialog()
+ ?: false
+ if (willDelete) {
+ mMetricsFeatureProvider.action(
+ context,
+ SettingsEnums.ACTION_FINGERPRINT_DELETE,
+ fingerprintViewModel.fingerId
+ )
+ }
+ return willDelete
+ } catch (exception: Exception) {
+ Log.d(TAG, "askUserToDeleteDialog exception $exception")
+ return false
+ }
+ }
+
+ override suspend fun askUserToRenameDialog(
+ fingerprintViewModel: FingerprintViewModel
+ ): Pair<FingerprintViewModel, String>? {
+ Log.d(TAG, "showing rename dialog for (${fingerprintViewModel})")
+ try {
+ val toReturn =
+ fingerprintPreferences()
+ .first { it?.fingerprintViewModel == fingerprintViewModel }
+ ?.askUserToRenameDialog()
+ if (toReturn != null) {
+ mMetricsFeatureProvider.action(
+ context,
+ SettingsEnums.ACTION_FINGERPRINT_RENAME,
+ toReturn.first.fingerId
+ )
+ }
+ return toReturn
+ } catch (exception: Exception) {
+ Log.d(TAG, "askUserToRenameDialog exception $exception")
+ return null
+ }
+ }
+
+ override suspend fun highlightPref(fingerId: Int) {
+ fingerprintPreferences()
+ .first { pref -> pref?.fingerprintViewModel?.fingerId == fingerId }
+ ?.highlight()
+ }
+
+ override fun launchConfirmOrChooseLock(userId: Int) {
+ lifecycleScope.launch(Dispatchers.Default) {
+ navigationViewModel.setStepToLaunched()
+ val intent = Intent()
+ val builder =
+ ChooseLockSettingsHelper.Builder(requireActivity(), this@FingerprintSettingsV2Fragment)
+ val launched =
+ builder
+ .setRequestCode(CONFIRM_REQUEST)
+ .setTitle(getString(R.string.security_settings_fingerprint_preference_title))
+ .setRequestGatekeeperPasswordHandle(true)
+ .setUserId(userId)
+ .setForegroundOnly(true)
+ .setReturnCredentials(true)
+ .show()
+ if (!launched) {
+ intent.setClassName(SETTINGS_PACKAGE_NAME, ChooseLockGeneric::class.java.name)
+ intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_INSECURE_OPTIONS, true)
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, true)
+ intent.putExtra(Intent.EXTRA_USER_ID, userId)
+ confirmDeviceResultListener.launch(intent)
+ }
+ }
+ }
+
+ override fun launchFullFingerprintEnrollment(
+ userId: Int,
+ gateKeeperPasswordHandle: Long?,
+ challenge: Long?,
+ challengeToken: ByteArray?,
+ ) {
+ navigationViewModel.setStepToLaunched()
+ Log.d(TAG, "launchFullFingerprintEnrollment")
+ val intent = Intent()
+ intent.setClassName(
+ SETTINGS_PACKAGE_NAME,
+ FingerprintEnrollIntroductionInternal::class.java.name
+ )
+ intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, true)
+ intent.putExtra(
+ SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
+ SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE
+ )
+
+ intent.putExtra(Intent.EXTRA_USER_ID, userId)
+
+ if (gateKeeperPasswordHandle != null) {
+ intent.putExtra(EXTRA_KEY_GK_PW_HANDLE, gateKeeperPasswordHandle)
+ } else {
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, challengeToken)
+ intent.putExtra(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge)
+ }
+ launchFirstEnrollmentListener.launch(intent)
+ }
+
+ override fun setResultExternal(resultCode: Int) {
+ setResult(resultCode)
+ }
+
+ override fun launchAddFingerprint(userId: Int, challengeToken: ByteArray?) {
+ navigationViewModel.setStepToLaunched()
+ val intent = Intent()
+ intent.setClassName(
+ SETTINGS_PACKAGE_NAME,
+ FingerprintEnrollEnrolling::class.qualifiedName.toString()
+ )
+ intent.putExtra(Intent.EXTRA_USER_ID, userId)
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, challengeToken)
+ launchAdditionalFingerprintListener.launch(intent)
+ }
+
+ private fun onConfirmDevice(resultCode: Int, data: Intent?) {
+ val wasSuccessful = resultCode == RESULT_FINISHED || resultCode == Activity.RESULT_OK
+ val gateKeeperPasswordHandle = data?.getExtra(EXTRA_KEY_GK_PW_HANDLE) as Long?
+ lifecycleScope.launch {
+ navigationViewModel.onConfirmDevice(wasSuccessful, gateKeeperPasswordHandle)
+ }
+ }
+
+ private fun createFingerprintsFooterPreference(canEnroll: Boolean, maxFingerprints: Int) {
+ val pref = this@FingerprintSettingsV2Fragment.findPreference<Preference>(KEY_FINGERPRINT_ADD)
+ val maxSummary = context?.getString(R.string.fingerprint_add_max, maxFingerprints) ?: ""
+ pref?.summary = maxSummary
+ pref?.isEnabled = canEnroll
+ pref?.setOnPreferenceClickListener {
+ navigationViewModel.onAddFingerprintClicked()
+ true
+ }
+ pref?.isVisible = true
+ }
+
+ private fun fingerprintPreferences(): List<FingerprintSettingsPreference?> {
+ val category =
+ this@FingerprintSettingsV2Fragment.findPreference(KEY_FINGERPRINTS_ENROLLED_CATEGORY)
+ as PreferenceCategory?
+
+ return category?.let { cat ->
+ cat.childrenToList().map { it as FingerprintSettingsPreference? }
+ }
+ ?: emptyList()
+ }
+
+ private fun PreferenceCategory.childrenToList(): List<Preference> {
+ val mutable: MutableList<Preference> = mutableListOf()
+ for (i in 0 until this.preferenceCount) {
+ mutable.add(this.getPreference(i))
+ }
+ return mutable.toList()
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsNavigationViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsNavigationViewModel.kt
new file mode 100644
index 0000000..a3a5d3c
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsNavigationViewModel.kt
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.viewmodel
+
+import android.hardware.fingerprint.FingerprintManager
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewModelScope
+import com.android.settings.biometrics.BiometricEnrollBase
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.launch
+
+/** A Viewmodel that represents the navigation of the FingerprintSettings activity. */
+class FingerprintSettingsNavigationViewModel(
+ private val userId: Int,
+ private val fingerprintManagerInteractor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ tokenInit: ByteArray?,
+ challengeInit: Long?,
+) : ViewModel() {
+
+ private var token = tokenInit
+ private var challenge = challengeInit
+
+ private val _nextStep: MutableStateFlow<NextStepViewModel?> = MutableStateFlow(null)
+ /** This flow represents the high level state for the FingerprintSettingsV2Fragment. */
+ val nextStep: StateFlow<NextStepViewModel?> = _nextStep.asStateFlow()
+
+ init {
+ if (challengeInit == null || tokenInit == null) {
+ _nextStep.update { LaunchConfirmDeviceCredential(userId) }
+ } else {
+ viewModelScope.launch { showSettingsHelper() }
+ }
+ }
+
+ /** Used to indicate that FingerprintSettings is complete. */
+ fun finish() {
+ _nextStep.update { null }
+ }
+
+ /** Used to finish settings in certain cases. */
+ fun maybeFinishActivity(changingConfig: Boolean) {
+ val isConfirmingOrEnrolling =
+ _nextStep.value is LaunchConfirmDeviceCredential ||
+ _nextStep.value is EnrollAdditionalFingerprint ||
+ _nextStep.value is EnrollFirstFingerprint ||
+ _nextStep.value is LaunchedActivity
+ if (!isConfirmingOrEnrolling && !changingConfig)
+ _nextStep.update {
+ FinishSettingsWithResult(BiometricEnrollBase.RESULT_TIMEOUT, "onStop finishing settings")
+ }
+ }
+
+ /** Used to indicate that we have launched another activity and we should await its result. */
+ fun setStepToLaunched() {
+ _nextStep.update { LaunchedActivity }
+ }
+
+ /** Indicates a successful enroll has occurred */
+ fun onEnrollSuccess() {
+ showSettingsHelper()
+ }
+
+ /** Add fingerprint clicked */
+ fun onAddFingerprintClicked() {
+ _nextStep.update { EnrollAdditionalFingerprint(userId, token) }
+ }
+
+ /** Enrolling of an additional fingerprint failed */
+ fun onEnrollAdditionalFailure() {
+ launchFinishSettings("Failed to enroll additional fingerprint")
+ }
+
+ /** The first fingerprint enrollment failed */
+ fun onEnrollFirstFailure(reason: String) {
+ launchFinishSettings(reason)
+ }
+
+ /** The first fingerprint enrollment failed with a result code */
+ fun onEnrollFirstFailure(reason: String, resultCode: Int) {
+ launchFinishSettings(reason, resultCode)
+ }
+
+ /** Notifies that a users first enrollment succeeded. */
+ fun onEnrollFirst(theToken: ByteArray?, theChallenge: Long?) {
+ if (theToken == null) {
+ launchFinishSettings("Error, empty token")
+ return
+ }
+ if (theChallenge == null) {
+ launchFinishSettings("Error, empty keyChallenge")
+ return
+ }
+ token = theToken!!
+ challenge = theChallenge!!
+
+ showSettingsHelper()
+ }
+
+ /**
+ * Indicates to the view model that a confirm device credential action has been completed with a
+ * [theGateKeeperPasswordHandle] which will be used for [FingerprintManager] operations such as
+ * [FingerprintManager.enroll].
+ */
+ suspend fun onConfirmDevice(wasSuccessful: Boolean, theGateKeeperPasswordHandle: Long?) {
+ if (!wasSuccessful) {
+ launchFinishSettings("ConfirmDeviceCredential was unsuccessful")
+ return
+ }
+ if (theGateKeeperPasswordHandle == null) {
+ launchFinishSettings("ConfirmDeviceCredential gatekeeper password was null")
+ return
+ }
+
+ launchEnrollNextStep(theGateKeeperPasswordHandle)
+ }
+
+ private fun showSettingsHelper() {
+ _nextStep.update { ShowSettings }
+ }
+
+ private suspend fun launchEnrollNextStep(gateKeeperPasswordHandle: Long?) {
+ fingerprintManagerInteractor.enrolledFingerprints.collect {
+ if (it.isEmpty()) {
+ _nextStep.update { EnrollFirstFingerprint(userId, gateKeeperPasswordHandle, null, null) }
+ } else {
+ viewModelScope.launch(backgroundDispatcher) {
+ val challengePair =
+ fingerprintManagerInteractor.generateChallenge(gateKeeperPasswordHandle!!)
+ challenge = challengePair.first
+ token = challengePair.second
+
+ showSettingsHelper()
+ }
+ }
+ }
+ }
+
+ private fun launchFinishSettings(reason: String) {
+ _nextStep.update { FinishSettings(reason) }
+ }
+
+ private fun launchFinishSettings(reason: String, errorCode: Int) {
+ _nextStep.update { FinishSettingsWithResult(errorCode, reason) }
+ }
+ class FingerprintSettingsNavigationModelFactory(
+ private val userId: Int,
+ private val interactor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ private val token: ByteArray?,
+ private val challenge: Long?,
+ ) : ViewModelProvider.Factory {
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T : ViewModel> create(
+ modelClass: Class<T>,
+ ): T {
+
+ return FingerprintSettingsNavigationViewModel(
+ userId,
+ interactor,
+ backgroundDispatcher,
+ token,
+ challenge,
+ )
+ as T
+ }
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsViewModel.kt
new file mode 100644
index 0000000..554f336
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintSettingsViewModel.kt
@@ -0,0 +1,324 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.viewmodel
+
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL
+import android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import android.util.Log
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.viewModelScope
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.combineTransform
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filterNotNull
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.last
+import kotlinx.coroutines.flow.sample
+import kotlinx.coroutines.flow.transformLatest
+import kotlinx.coroutines.flow.update
+import kotlinx.coroutines.launch
+
+private const val TAG = "FingerprintSettingsViewModel"
+private const val DEBUG = false
+
+/** Models the UI state for fingerprint settings. */
+class FingerprintSettingsViewModel(
+ private val userId: Int,
+ private val fingerprintManagerInteractor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ private val navigationViewModel: FingerprintSettingsNavigationViewModel,
+) : ViewModel() {
+
+ private val _consumerShouldAuthenticate: MutableStateFlow<Boolean> = MutableStateFlow(false)
+
+ private val fingerprintSensorPropertiesInternal:
+ MutableStateFlow<List<FingerprintSensorPropertiesInternal>?> =
+ MutableStateFlow(null)
+
+ private val _isShowingDialog: MutableStateFlow<PreferenceViewModel?> = MutableStateFlow(null)
+ val isShowingDialog =
+ _isShowingDialog.combine(navigationViewModel.nextStep) { dialogFlow, nextStep ->
+ if (nextStep is ShowSettings) {
+ return@combine dialogFlow
+ } else {
+ return@combine null
+ }
+ }
+
+ init {
+ viewModelScope.launch {
+ fingerprintSensorPropertiesInternal.update {
+ fingerprintManagerInteractor.sensorPropertiesInternal()
+ }
+ }
+
+ viewModelScope.launch {
+ navigationViewModel.nextStep.filterNotNull().collect {
+ _isShowingDialog.update { null }
+ if (it is ShowSettings) {
+ // reset state
+ updateSettingsData()
+ }
+ }
+ }
+ }
+
+ private val _fingerprintStateViewModel: MutableStateFlow<FingerprintStateViewModel?> =
+ MutableStateFlow(null)
+ val fingerprintState: Flow<FingerprintStateViewModel?> =
+ _fingerprintStateViewModel.combineTransform(navigationViewModel.nextStep) {
+ settingsShowingViewModel,
+ currStep ->
+ if (currStep != null && currStep is ShowSettings) {
+ emit(settingsShowingViewModel)
+ }
+ }
+
+ private val _isLockedOut: MutableStateFlow<FingerprintAuthAttemptViewModel.Error?> =
+ MutableStateFlow(null)
+
+ private val _authSucceeded: MutableSharedFlow<FingerprintAuthAttemptViewModel.Success?> =
+ MutableSharedFlow()
+
+ private val attemptsSoFar: MutableStateFlow<Int> = MutableStateFlow(0)
+
+ /**
+ * This is a very tricky flow. The current fingerprint manager APIs are not robust, and a proper
+ * implementation would take quite a lot of code to implement, it might be easier to rewrite
+ * FingerprintManager.
+ *
+ * The hack to note is the sample(400), if we call authentications in too close of proximity
+ * without waiting for a response, the fingerprint manager will send us the results of the
+ * previous attempt.
+ */
+ private val canAuthenticate: Flow<Boolean> =
+ combine(
+ _isShowingDialog,
+ navigationViewModel.nextStep,
+ _consumerShouldAuthenticate,
+ _fingerprintStateViewModel,
+ _isLockedOut,
+ attemptsSoFar,
+ fingerprintSensorPropertiesInternal
+ ) { dialogShowing, step, resume, fingerprints, isLockedOut, attempts, sensorProps ->
+ if (DEBUG) {
+ Log.d(
+ TAG,
+ "canAuthenticate(isShowingDialog=${dialogShowing != null}," +
+ "nextStep=${step}," +
+ "resumed=${resume}," +
+ "fingerprints=${fingerprints}," +
+ "lockedOut=${isLockedOut}," +
+ "attempts=${attempts}," +
+ "sensorProps=${sensorProps}"
+ )
+ }
+ if (sensorProps.isNullOrEmpty()) {
+ return@combine false
+ }
+ val sensorType = sensorProps[0].sensorType
+ if (listOf(TYPE_UDFPS_OPTICAL, TYPE_UDFPS_ULTRASONIC).contains(sensorType)) {
+ return@combine false
+ }
+
+ if (step != null && step is ShowSettings) {
+ if (fingerprints?.fingerprintViewModels?.isNotEmpty() == true) {
+ return@combine dialogShowing == null && isLockedOut == null && resume && attempts < 15
+ }
+ }
+ false
+ }
+ .sample(400)
+ .distinctUntilChanged()
+
+ /** Represents a consistent stream of authentication attempts. */
+ val authFlow: Flow<FingerprintAuthAttemptViewModel> =
+ canAuthenticate
+ .transformLatest {
+ try {
+ Log.d(TAG, "canAuthenticate $it")
+ while (it && navigationViewModel.nextStep.value is ShowSettings) {
+ Log.d(TAG, "canAuthenticate authing")
+ attemptingAuth()
+ when (val authAttempt = fingerprintManagerInteractor.authenticate()) {
+ is FingerprintAuthAttemptViewModel.Success -> {
+ onAuthSuccess(authAttempt)
+ emit(authAttempt)
+ }
+ is FingerprintAuthAttemptViewModel.Error -> {
+ if (authAttempt.error == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT) {
+ lockout(authAttempt)
+ emit(authAttempt)
+ return@transformLatest
+ }
+ }
+ }
+ }
+ } catch (exception: Exception) {
+ Log.d(TAG, "shouldAuthenticate exception $exception")
+ }
+ }
+ .flowOn(backgroundDispatcher)
+
+ /** The rename dialog has finished */
+ fun onRenameDialogFinished() {
+ _isShowingDialog.update { null }
+ }
+
+ /** The delete dialog has finished */
+ fun onDeleteDialogFinished() {
+ _isShowingDialog.update { null }
+ }
+
+ override fun toString(): String {
+ return "userId: $userId\n" + "fingerprintState: ${_fingerprintStateViewModel.value}\n"
+ }
+
+ /** The fingerprint delete button has been clicked. */
+ fun onDeleteClicked(fingerprintViewModel: FingerprintViewModel) {
+ viewModelScope.launch {
+ if (_isShowingDialog.value == null || navigationViewModel.nextStep.value != ShowSettings) {
+ _isShowingDialog.tryEmit(PreferenceViewModel.DeleteDialog(fingerprintViewModel))
+ } else {
+ Log.d(TAG, "Ignoring onDeleteClicked due to dialog showing ${_isShowingDialog.value}")
+ }
+ }
+ }
+
+ /** The rename fingerprint dialog has been clicked. */
+ fun onPrefClicked(fingerprintViewModel: FingerprintViewModel) {
+ viewModelScope.launch {
+ if (_isShowingDialog.value == null || navigationViewModel.nextStep.value != ShowSettings) {
+ _isShowingDialog.tryEmit(PreferenceViewModel.RenameDialog(fingerprintViewModel))
+ } else {
+ Log.d(TAG, "Ignoring onPrefClicked due to dialog showing ${_isShowingDialog.value}")
+ }
+ }
+ }
+
+ /** A request to delete a fingerprint */
+ fun deleteFingerprint(fp: FingerprintViewModel) {
+ viewModelScope.launch(backgroundDispatcher) {
+ if (fingerprintManagerInteractor.removeFingerprint(fp)) {
+ updateSettingsData()
+ }
+ }
+ }
+
+ /** A request to rename a fingerprint */
+ fun renameFingerprint(fp: FingerprintViewModel, newName: String) {
+ viewModelScope.launch {
+ fingerprintManagerInteractor.renameFingerprint(fp, newName)
+ updateSettingsData()
+ }
+ }
+
+ private fun attemptingAuth() {
+ attemptsSoFar.update { it + 1 }
+ }
+
+ private suspend fun onAuthSuccess(success: FingerprintAuthAttemptViewModel.Success) {
+ _authSucceeded.emit(success)
+ attemptsSoFar.update { 0 }
+ }
+
+ private fun lockout(attemptViewModel: FingerprintAuthAttemptViewModel.Error) {
+ _isLockedOut.update { attemptViewModel }
+ }
+
+ /**
+ * This function is sort of a hack, it's used whenever we want to check for fingerprint state
+ * updates.
+ */
+ private suspend fun updateSettingsData() {
+ Log.d(TAG, "update settings data called")
+ val fingerprints = fingerprintManagerInteractor.enrolledFingerprints.last()
+ val canEnrollFingerprint =
+ fingerprintManagerInteractor.canEnrollFingerprints(fingerprints.size).last()
+ val maxFingerprints = fingerprintManagerInteractor.maxEnrollableFingerprints.last()
+ val hasSideFps = fingerprintManagerInteractor.hasSideFps()
+ val pressToAuthEnabled = fingerprintManagerInteractor.pressToAuthEnabled()
+ _fingerprintStateViewModel.update {
+ FingerprintStateViewModel(
+ fingerprints,
+ canEnrollFingerprint,
+ maxFingerprints,
+ hasSideFps,
+ pressToAuthEnabled
+ )
+ }
+ }
+
+ /** Used to indicate whether the consumer of the view model is ready for authentication. */
+ fun shouldAuthenticate(authenticate: Boolean) {
+ _consumerShouldAuthenticate.update { authenticate }
+ }
+
+ class FingerprintSettingsViewModelFactory(
+ private val userId: Int,
+ private val interactor: FingerprintManagerInteractor,
+ private val backgroundDispatcher: CoroutineDispatcher,
+ private val navigationViewModel: FingerprintSettingsNavigationViewModel,
+ ) : ViewModelProvider.Factory {
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T : ViewModel> create(
+ modelClass: Class<T>,
+ ): T {
+
+ return FingerprintSettingsViewModel(
+ userId,
+ interactor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ as T
+ }
+ }
+}
+
+private inline fun <T1, T2, T3, T4, T5, T6, T7, R> combine(
+ flow: Flow<T1>,
+ flow2: Flow<T2>,
+ flow3: Flow<T3>,
+ flow4: Flow<T4>,
+ flow5: Flow<T5>,
+ flow6: Flow<T6>,
+ flow7: Flow<T7>,
+ crossinline transform: suspend (T1, T2, T3, T4, T5, T6, T7) -> R
+): Flow<R> {
+ return combine(flow, flow2, flow3, flow4, flow5, flow6, flow7) { args: Array<*> ->
+ @Suppress("UNCHECKED_CAST")
+ transform(
+ args[0] as T1,
+ args[1] as T2,
+ args[2] as T3,
+ args[3] as T4,
+ args[4] as T5,
+ args[5] as T6,
+ args[6] as T7,
+ )
+ }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintViewModel.kt
new file mode 100644
index 0000000..1df0e34
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/FingerprintViewModel.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.viewmodel
+
+/** Represents the fingerprint data nad the relevant state. */
+data class FingerprintStateViewModel(
+ val fingerprintViewModels: List<FingerprintViewModel>,
+ val canEnroll: Boolean,
+ val maxFingerprints: Int,
+ val hasSideFps: Boolean,
+ val pressToAuth: Boolean,
+)
+
+data class FingerprintViewModel(
+ val name: String,
+ val fingerId: Int,
+ val deviceId: Long,
+)
+
+sealed class FingerprintAuthAttemptViewModel {
+ data class Success(
+ val fingerId: Int,
+ ) : FingerprintAuthAttemptViewModel()
+
+ data class Error(
+ val error: Int,
+ val message: String,
+ ) : FingerprintAuthAttemptViewModel()
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/NextStepViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/NextStepViewModel.kt
new file mode 100644
index 0000000..f9dbbff
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/NextStepViewModel.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.viewmodel
+
+/**
+ * A class to represent a high level step for FingerprintSettings. This is typically to perform an
+ * action like launching an activity.
+ */
+sealed class NextStepViewModel
+
+data class EnrollFirstFingerprint(
+ val userId: Int,
+ val gateKeeperPasswordHandle: Long?,
+ val challenge: Long?,
+ val challengeToken: ByteArray?,
+) : NextStepViewModel()
+
+data class EnrollAdditionalFingerprint(
+ val userId: Int,
+ val challengeToken: ByteArray?,
+) : NextStepViewModel()
+
+data class FinishSettings(val reason: String) : NextStepViewModel()
+
+data class FinishSettingsWithResult(val result: Int, val reason: String) : NextStepViewModel()
+
+object ShowSettings : NextStepViewModel()
+
+object LaunchedActivity : NextStepViewModel()
+
+data class LaunchConfirmDeviceCredential(val userId: Int) : NextStepViewModel()
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/PreferenceViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/PreferenceViewModel.kt
new file mode 100644
index 0000000..05764a2
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/viewmodel/PreferenceViewModel.kt
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2023 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.biometrics.fingerprint2.ui.viewmodel
+
+/** Classed use to represent a Dialogs state. */
+sealed class PreferenceViewModel {
+ data class RenameDialog(
+ val fingerprintViewModel: FingerprintViewModel,
+ ) : PreferenceViewModel()
+
+ data class DeleteDialog(
+ val fingerprintViewModel: FingerprintViewModel,
+ ) : PreferenceViewModel()
+}
diff --git a/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java b/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
index 93a2747..0690186 100644
--- a/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
+++ b/src/com/android/settings/bluetooth/BlockingPrefWithSliceController.java
@@ -59,7 +59,7 @@
* until {@link Slice} is fully loaded.
*/
public class BlockingPrefWithSliceController extends BasePreferenceController implements
- LifecycleObserver, OnStart, OnStop, Observer<Slice>, BasePreferenceController.UiBlocker{
+ LifecycleObserver, OnStart, OnStop, Observer<Slice>, BasePreferenceController.UiBlocker {
private static final String TAG = "BlockingPrefWithSliceController";
private static final String PREFIX_KEY = "slice_preference_item_";
@@ -225,7 +225,8 @@
} else {
expectedActivityIntent = intentFromSliceAction;
}
- if (expectedActivityIntent != null) {
+ if (expectedActivityIntent != null && expectedActivityIntent.resolveActivity(
+ mContext.getPackageManager()) != null) {
Log.d(TAG, "setIntent: ActivityIntent" + expectedActivityIntent);
// Since UI needs to support the Settings' 2 panel feature, the intent can't use the
// FLAG_ACTIVITY_NEW_TASK. The above intent may have the FLAG_ACTIVITY_NEW_TASK
@@ -234,6 +235,7 @@
preference.setIntent(expectedActivityIntent);
} else {
Log.d(TAG, "setIntent: Intent is null");
+ preference.setSelectable(false);
}
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
index 3472e39..220100d 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
@@ -69,7 +69,7 @@
private static final String ENABLE_DUAL_MODE_AUDIO =
"persist.bluetooth.enable_dual_mode_audio";
private static final String CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT = "le_audio_enabled_by_default";
- private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = false;
+ private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = true;
private LocalBluetoothManager mManager;
private LocalBluetoothProfileManager mProfileManager;
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBase.java b/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBase.java
index 7ee61ee..f2bc6fc 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBase.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBase.java
@@ -128,7 +128,7 @@
if (device != null && mSelectedList.contains(device)) {
setResult(RESULT_OK);
finish();
- } else if (mDevicePreferenceMap.containsKey(cachedDevice)) {
+ } else {
onDeviceDeleted(cachedDevice);
}
}
@@ -175,8 +175,6 @@
public void updateContent(int bluetoothState) {
switch (bluetoothState) {
case BluetoothAdapter.STATE_ON:
- mDevicePreferenceMap.clear();
- clearPreferenceGroupCache();
mBluetoothAdapter.enable();
enableScanning();
break;
@@ -187,14 +185,6 @@
}
}
- /**
- * Clears all cached preferences in {@code preferenceGroup}.
- */
- private void clearPreferenceGroupCache() {
- cacheRemoveAllPrefs(mAvailableDevicesCategory);
- removeCachedPrefs(mAvailableDevicesCategory);
- }
-
@VisibleForTesting
void showBluetoothTurnedOnToast() {
Toast.makeText(getContext(), R.string.connected_device_bluetooth_turned_on_toast,
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index 5256f3d..039080b 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (C) 2023 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.
@@ -35,6 +35,8 @@
import android.widget.ImageView;
import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
@@ -52,6 +54,7 @@
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* BluetoothDevicePreference is the preference type used to display each remote
@@ -79,7 +82,9 @@
@VisibleForTesting
BluetoothAdapter mBluetoothAdapter;
private final boolean mShowDevicesWithoutNames;
- private final long mCurrentTime;
+ @NonNull
+ private static final AtomicInteger sNextId = new AtomicInteger();
+ private final int mId;
private final int mType;
private AlertDialog mDisconnectDialog;
@@ -127,8 +132,9 @@
mCachedDevice = cachedDevice;
mCallback = new BluetoothDevicePreferenceCallback();
- mCurrentTime = System.currentTimeMillis();
+ mId = sNextId.getAndIncrement();
mType = type;
+ setVisible(false);
onPreferenceAttributesChanged();
}
@@ -229,35 +235,41 @@
@SuppressWarnings("FutureReturnValueIgnored")
void onPreferenceAttributesChanged() {
- Pair<Drawable, String> pair = mCachedDevice.getDrawableWithDescription();
- setIcon(pair.first);
- contentDescription = pair.second;
-
- /*
- * The preference framework takes care of making sure the value has
- * changed before proceeding. It will also call notifyChanged() if
- * any preference info has changed from the previous value.
- */
- setTitle(mCachedDevice.getName());
try {
ThreadUtils.postOnBackgroundThread(() -> {
+ @Nullable String name = mCachedDevice.getName();
// Null check is done at the framework
- ThreadUtils.postOnMainThread(() -> setSummary(getConnectionSummary()));
+ @Nullable String connectionSummary = getConnectionSummary();
+ @NonNull Pair<Drawable, String> pair = mCachedDevice.getDrawableWithDescription();
+ boolean isBusy = mCachedDevice.isBusy();
+ // Device is only visible in the UI if it has a valid name besides MAC address or
+ // when user allows showing devices without user-friendly name in developer settings
+ boolean isVisible =
+ mShowDevicesWithoutNames || mCachedDevice.hasHumanReadableName();
+
+ ThreadUtils.postOnMainThread(() -> {
+ /*
+ * The preference framework takes care of making sure the value has
+ * changed before proceeding. It will also call notifyChanged() if
+ * any preference info has changed from the previous value.
+ */
+ setTitle(name);
+ setSummary(connectionSummary);
+ setIcon(pair.first);
+ contentDescription = pair.second;
+ // Used to gray out the item
+ setEnabled(!isBusy);
+ setVisible(isVisible);
+
+ // This could affect ordering, so notify that
+ if (mNeedNotifyHierarchyChanged) {
+ notifyHierarchyChanged();
+ }
+ });
});
} catch (RejectedExecutionException e) {
Log.w(TAG, "Handler thread unavailable, skipping getConnectionSummary!");
}
- // Used to gray out the item
- setEnabled(!mCachedDevice.isBusy());
-
- // Device is only visible in the UI if it has a valid name besides MAC address or when user
- // allows showing devices without user-friendly name in developer settings
- setVisible(mShowDevicesWithoutNames || mCachedDevice.hasHumanReadableName());
-
- // This could affect ordering, so notify that
- if (mNeedNotifyHierarchyChanged) {
- notifyHierarchyChanged();
- }
}
@Override
@@ -311,7 +323,7 @@
return mCachedDevice
.compareTo(((BluetoothDevicePreference) another).mCachedDevice);
case SortType.TYPE_FIFO:
- return mCurrentTime > ((BluetoothDevicePreference) another).mCurrentTime ? 1 : -1;
+ return mId > ((BluetoothDevicePreference) another).mId ? 1 : -1;
default:
return super.compareTo(another);
}
diff --git a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java
index 05bc179..f9d083d 100644
--- a/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothFindBroadcastsFragment.java
@@ -125,6 +125,10 @@
Log.w(TAG, "onSourceAdded: mSelectedPreference == null!");
return;
}
+ if (mLeBroadcastAssistant != null
+ && mLeBroadcastAssistant.isSearchInProgress()) {
+ mLeBroadcastAssistant.stopSearchingForSources();
+ }
getActivity().runOnUiThread(() -> updateListCategoryFromBroadcastMetadata(
mSelectedPreference.getBluetoothLeBroadcastMetadata(), true));
}
@@ -232,6 +236,9 @@
public void onStop() {
super.onStop();
if (mLeBroadcastAssistant != null) {
+ if (mLeBroadcastAssistant.isSearchInProgress()) {
+ mLeBroadcastAssistant.stopSearchingForSources();
+ }
mLeBroadcastAssistant.unregisterServiceCallBack(mBroadcastAssistantCallback);
}
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
index a78bf27..234d6d2 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
@@ -101,10 +101,8 @@
if (bluetoothState == BluetoothAdapter.STATE_ON) {
if (mInitialScanStarted) {
// Don't show bonded devices when screen turned back on
- setFilter(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER);
- addCachedDevices();
+ addCachedDevices(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER);
}
- setFilter(BluetoothDeviceFilter.ALL_FILTER);
updateFooterPreference(mFooterPreference);
mAlwaysDiscoverable.start();
}
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
deleted file mode 100644
index a4a9891..0000000
--- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright (C) 2011 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.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.le.BluetoothLeScanner;
-import android.bluetooth.le.ScanCallback;
-import android.bluetooth.le.ScanFilter;
-import android.bluetooth.le.ScanResult;
-import android.bluetooth.le.ScanSettings;
-import android.os.Bundle;
-import android.os.SystemProperties;
-import android.text.BidiFormatter;
-import android.util.Log;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceGroup;
-
-import com.android.settings.R;
-import com.android.settings.dashboard.RestrictedDashboardFragment;
-import com.android.settingslib.bluetooth.BluetoothCallback;
-import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
-import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Parent class for settings fragments that contain a list of Bluetooth
- * devices.
- *
- * @see DevicePickerFragment
- */
-// TODO: Refactor this fragment
-public abstract class DeviceListPreferenceFragment extends
- RestrictedDashboardFragment implements BluetoothCallback {
-
- private static final String TAG = "DeviceListPreferenceFragment";
-
- private static final String KEY_BT_SCAN = "bt_scan";
-
- // Copied from BluetoothDeviceNoNamePreferenceController.java
- private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
- "persist.bluetooth.showdeviceswithoutnames";
-
- private BluetoothDeviceFilter.Filter mFilter;
- private List<ScanFilter> mLeScanFilters;
- private ScanCallback mScanCallback;
-
- @VisibleForTesting
- protected boolean mScanEnabled;
-
- protected BluetoothDevice mSelectedDevice;
-
- protected BluetoothAdapter mBluetoothAdapter;
- protected LocalBluetoothManager mLocalManager;
- protected CachedBluetoothDeviceManager mCachedDeviceManager;
-
- @VisibleForTesting
- protected PreferenceGroup mDeviceListGroup;
-
- protected final HashMap<CachedBluetoothDevice, BluetoothDevicePreference> mDevicePreferenceMap =
- new HashMap<>();
- protected final List<BluetoothDevice> mSelectedList = new ArrayList<>();
-
- protected boolean mShowDevicesWithoutNames;
-
- public DeviceListPreferenceFragment(String restrictedKey) {
- super(restrictedKey);
- mFilter = BluetoothDeviceFilter.ALL_FILTER;
- }
-
- protected final void setFilter(BluetoothDeviceFilter.Filter filter) {
- mFilter = filter;
- }
-
- protected final void setFilter(int filterType) {
- mFilter = BluetoothDeviceFilter.getFilter(filterType);
- }
-
- /**
- * Sets the bluetooth device scanning filter with {@link ScanFilter}s. It will change to start
- * {@link BluetoothLeScanner} which will scan BLE device only.
- *
- * @param leScanFilters list of settings to filter scan result
- */
- protected void setFilter(List<ScanFilter> leScanFilters) {
- mFilter = null;
- mLeScanFilters = leScanFilters;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mLocalManager = Utils.getLocalBtManager(getActivity());
- if (mLocalManager == null) {
- Log.e(TAG, "Bluetooth is not supported on this device");
- return;
- }
- mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- mCachedDeviceManager = mLocalManager.getCachedDeviceManager();
- mShowDevicesWithoutNames = SystemProperties.getBoolean(
- BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
-
- initPreferencesFromPreferenceScreen();
-
- mDeviceListGroup = (PreferenceCategory) findPreference(getDeviceListKey());
- }
-
- /** find and update preference that already existed in preference screen */
- protected abstract void initPreferencesFromPreferenceScreen();
-
- @Override
- public void onStart() {
- super.onStart();
- if (mLocalManager == null || isUiRestricted()) return;
-
- mLocalManager.setForegroundActivity(getActivity());
- mLocalManager.getEventManager().registerCallback(this);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (mLocalManager == null || isUiRestricted()) {
- return;
- }
-
- removeAllDevices();
- mLocalManager.setForegroundActivity(null);
- mLocalManager.getEventManager().unregisterCallback(this);
- }
-
- void removeAllDevices() {
- mDevicePreferenceMap.clear();
- mDeviceListGroup.removeAll();
- }
-
- void addCachedDevices() {
- Collection<CachedBluetoothDevice> cachedDevices =
- mCachedDeviceManager.getCachedDevicesCopy();
- for (CachedBluetoothDevice cachedDevice : cachedDevices) {
- onDeviceAdded(cachedDevice);
- }
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (KEY_BT_SCAN.equals(preference.getKey())) {
- startScanning();
- return true;
- }
-
- if (preference instanceof BluetoothDevicePreference) {
- BluetoothDevicePreference btPreference = (BluetoothDevicePreference) preference;
- CachedBluetoothDevice device = btPreference.getCachedDevice();
- mSelectedDevice = device.getDevice();
- mSelectedList.add(mSelectedDevice);
- onDevicePreferenceClick(btPreference);
- return true;
- }
-
- return super.onPreferenceTreeClick(preference);
- }
-
- protected void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
- btPreference.onClicked();
- }
-
- @Override
- public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
- if (mDevicePreferenceMap.get(cachedDevice) != null) {
- return;
- }
-
- // Prevent updates while the list shows one of the state messages
- if (mBluetoothAdapter.getState() != BluetoothAdapter.STATE_ON) {
- return;
- }
-
- if (mFilter != null && mFilter.matches(cachedDevice.getDevice())) {
- createDevicePreference(cachedDevice);
- }
- }
-
- void createDevicePreference(CachedBluetoothDevice cachedDevice) {
- if (mDeviceListGroup == null) {
- Log.w(TAG, "Trying to create a device preference before the list group/category "
- + "exists!");
- return;
- }
-
- String key = cachedDevice.getDevice().getAddress();
- BluetoothDevicePreference preference = (BluetoothDevicePreference) getCachedPreference(key);
-
- if (preference == null) {
- preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice,
- mShowDevicesWithoutNames, BluetoothDevicePreference.SortType.TYPE_FIFO);
- preference.setKey(key);
- //Set hideSecondTarget is true if it's bonded device.
- preference.hideSecondTarget(true);
- mDeviceListGroup.addPreference(preference);
- }
-
- initDevicePreference(preference);
- mDevicePreferenceMap.put(cachedDevice, preference);
- }
-
- protected void initDevicePreference(BluetoothDevicePreference preference) {
- // Does nothing by default
- }
-
- @VisibleForTesting
- void updateFooterPreference(Preference myDevicePreference) {
- final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
-
- myDevicePreference.setTitle(getString(
- R.string.bluetooth_footer_mac_message,
- bidiFormatter.unicodeWrap(mBluetoothAdapter.getAddress())));
- }
-
- @Override
- public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
- BluetoothDevicePreference preference = mDevicePreferenceMap.remove(cachedDevice);
- if (preference != null) {
- mDeviceListGroup.removePreference(preference);
- }
- }
-
- @VisibleForTesting
- protected void enableScanning() {
- // BluetoothAdapter already handles repeated scan requests
- if (!mScanEnabled) {
- startScanning();
- mScanEnabled = true;
- }
- }
-
- @VisibleForTesting
- protected void disableScanning() {
- if (mScanEnabled) {
- stopScanning();
- mScanEnabled = false;
- }
- }
-
- @Override
- public void onScanningStateChanged(boolean started) {
- if (!started && mScanEnabled) {
- startScanning();
- }
- }
-
- /**
- * Return the key of the {@link PreferenceGroup} that contains the bluetooth devices
- */
- public abstract String getDeviceListKey();
-
- public boolean shouldShowDevicesWithoutNames() {
- return mShowDevicesWithoutNames;
- }
-
- @VisibleForTesting
- void startScanning() {
- if (mFilter != null) {
- startClassicScanning();
- } else if (mLeScanFilters != null) {
- startLeScanning();
- }
-
- }
-
- @VisibleForTesting
- void stopScanning() {
- if (mFilter != null) {
- stopClassicScanning();
- } else if (mLeScanFilters != null) {
- stopLeScanning();
- }
- }
-
- private void startClassicScanning() {
- if (!mBluetoothAdapter.isDiscovering()) {
- mBluetoothAdapter.startDiscovery();
- }
- }
-
- private void stopClassicScanning() {
- if (mBluetoothAdapter.isDiscovering()) {
- mBluetoothAdapter.cancelDiscovery();
- }
- }
-
- private void startLeScanning() {
- final BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
- final ScanSettings settings = new ScanSettings.Builder()
- .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
- .build();
- mScanCallback = new ScanCallback() {
- @Override
- public void onScanResult(int callbackType, ScanResult result) {
- final BluetoothDevice device = result.getDevice();
- CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- cachedDevice = mCachedDeviceManager.addDevice(device);
- }
- // Only add device preference when it's not found in the map and there's no other
- // state message showing in the list
- if (mDevicePreferenceMap.get(cachedDevice) == null
- && mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
- createDevicePreference(cachedDevice);
- }
- }
-
- @Override
- public void onScanFailed(int errorCode) {
- Log.w(TAG, "BLE Scan failed with error code " + errorCode);
- }
- };
- scanner.startScan(mLeScanFilters, settings, mScanCallback);
- }
-
- private void stopLeScanning() {
- final BluetoothLeScanner scanner = mBluetoothAdapter.getBluetoothLeScanner();
- if (scanner != null) {
- scanner.stopScan(mScanCallback);
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.kt b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.kt
new file mode 100644
index 0000000..f18ae46
--- /dev/null
+++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.kt
@@ -0,0 +1,356 @@
+/*
+ * Copyright (C) 2023 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.bluetooth
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.le.BluetoothLeScanner
+import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanFilter
+import android.bluetooth.le.ScanResult
+import android.bluetooth.le.ScanSettings
+import android.os.Bundle
+import android.os.SystemProperties
+import android.text.BidiFormatter
+import android.util.Log
+import android.view.View
+import androidx.annotation.VisibleForTesting
+import androidx.lifecycle.lifecycleScope
+import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceGroup
+import com.android.settings.R
+import com.android.settings.dashboard.RestrictedDashboardFragment
+import com.android.settingslib.bluetooth.BluetoothCallback
+import com.android.settingslib.bluetooth.BluetoothDeviceFilter
+import com.android.settingslib.bluetooth.CachedBluetoothDevice
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager
+import com.android.settingslib.bluetooth.LocalBluetoothManager
+import java.util.concurrent.ConcurrentHashMap
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+
+/**
+ * Parent class for settings fragments that contain a list of Bluetooth devices.
+ *
+ * @see DevicePickerFragment
+ *
+ * TODO: Refactor this fragment
+ */
+abstract class DeviceListPreferenceFragment(restrictedKey: String?) :
+ RestrictedDashboardFragment(restrictedKey), BluetoothCallback {
+
+ private var filter: BluetoothDeviceFilter.Filter? = BluetoothDeviceFilter.ALL_FILTER
+ private var leScanFilters: List<ScanFilter>? = null
+
+ @JvmField
+ @VisibleForTesting
+ var mScanEnabled = false
+
+ @JvmField
+ var mSelectedDevice: BluetoothDevice? = null
+
+ @JvmField
+ var mBluetoothAdapter: BluetoothAdapter? = null
+
+ @JvmField
+ var mLocalManager: LocalBluetoothManager? = null
+
+ @JvmField
+ var mCachedDeviceManager: CachedBluetoothDeviceManager? = null
+
+ @JvmField
+ @VisibleForTesting
+ var mDeviceListGroup: PreferenceGroup? = null
+
+ @VisibleForTesting
+ val devicePreferenceMap =
+ ConcurrentHashMap<CachedBluetoothDevice, BluetoothDevicePreference>()
+
+ @JvmField
+ val mSelectedList: MutableList<BluetoothDevice> = ArrayList()
+
+ @VisibleForTesting
+ var lifecycleScope: CoroutineScope? = null
+
+ private var showDevicesWithoutNames = false
+
+ protected fun setFilter(filterType: Int) {
+ filter = BluetoothDeviceFilter.getFilter(filterType)
+ }
+
+ /**
+ * Sets the bluetooth device scanning filter with [ScanFilter]s. It will change to start
+ * [BluetoothLeScanner] which will scan BLE device only.
+ *
+ * @param leScanFilters list of settings to filter scan result
+ */
+ fun setFilter(leScanFilters: List<ScanFilter>?) {
+ filter = null
+ this.leScanFilters = leScanFilters
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mLocalManager = Utils.getLocalBtManager(activity)
+ if (mLocalManager == null) {
+ Log.e(TAG, "Bluetooth is not supported on this device")
+ return
+ }
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
+ mCachedDeviceManager = mLocalManager!!.cachedDeviceManager
+ showDevicesWithoutNames = SystemProperties.getBoolean(
+ BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false
+ )
+ initPreferencesFromPreferenceScreen()
+ mDeviceListGroup = findPreference<Preference>(deviceListKey) as PreferenceCategory
+ }
+
+ /** find and update preference that already existed in preference screen */
+ protected abstract fun initPreferencesFromPreferenceScreen()
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ lifecycleScope = viewLifecycleOwner.lifecycleScope
+ }
+
+ override fun onStart() {
+ super.onStart()
+ if (mLocalManager == null || isUiRestricted) return
+ mLocalManager!!.foregroundActivity = activity
+ mLocalManager!!.eventManager.registerCallback(this)
+ }
+
+ override fun onStop() {
+ super.onStop()
+ if (mLocalManager == null || isUiRestricted) {
+ return
+ }
+ removeAllDevices()
+ mLocalManager!!.foregroundActivity = null
+ mLocalManager!!.eventManager.unregisterCallback(this)
+ }
+
+ fun removeAllDevices() {
+ devicePreferenceMap.clear()
+ mDeviceListGroup!!.removeAll()
+ }
+
+ @JvmOverloads
+ fun addCachedDevices(filterForCachedDevices: BluetoothDeviceFilter.Filter? = null) {
+ lifecycleScope?.launch {
+ withContext(Dispatchers.Default) {
+ mCachedDeviceManager!!.cachedDevicesCopy
+ .filter {
+ filterForCachedDevices == null || filterForCachedDevices.matches(it.device)
+ }
+ .forEach(::onDeviceAdded)
+ }
+ }
+ }
+
+ override fun onPreferenceTreeClick(preference: Preference): Boolean {
+ if (KEY_BT_SCAN == preference.key) {
+ startScanning()
+ return true
+ }
+ if (preference is BluetoothDevicePreference) {
+ val device = preference.cachedDevice.device
+ mSelectedDevice = device
+ mSelectedList.add(device)
+ onDevicePreferenceClick(preference)
+ return true
+ }
+ return super.onPreferenceTreeClick(preference)
+ }
+
+ protected open fun onDevicePreferenceClick(btPreference: BluetoothDevicePreference) {
+ btPreference.onClicked()
+ }
+
+ override fun onDeviceAdded(cachedDevice: CachedBluetoothDevice) {
+ lifecycleScope?.launch {
+ addDevice(cachedDevice)
+ }
+ }
+
+ private suspend fun addDevice(cachedDevice: CachedBluetoothDevice) =
+ withContext(Dispatchers.Default) {
+ // TODO(b/289189853): Replace checking if `filter` is null or not to decide which type
+ // of Bluetooth scanning method will be used
+ val filterMatched = filter == null || filter!!.matches(cachedDevice.device) == true
+ // Prevent updates while the list shows one of the state messages
+ if (mBluetoothAdapter!!.state == BluetoothAdapter.STATE_ON && filterMatched) {
+ createDevicePreference(cachedDevice)
+ }
+ }
+
+ private suspend fun createDevicePreference(cachedDevice: CachedBluetoothDevice) {
+ if (mDeviceListGroup == null) {
+ Log.w(
+ TAG,
+ "Trying to create a device preference before the list group/category exists!",
+ )
+ return
+ }
+ // Only add device preference when it's not found in the map and there's no other state
+ // message showing in the list
+ val preference = devicePreferenceMap.computeIfAbsent(cachedDevice) {
+ BluetoothDevicePreference(
+ prefContext,
+ cachedDevice,
+ showDevicesWithoutNames,
+ BluetoothDevicePreference.SortType.TYPE_FIFO,
+ ).apply {
+ key = cachedDevice.device.address
+ //Set hideSecondTarget is true if it's bonded device.
+ hideSecondTarget(true)
+ }
+ }
+ withContext(Dispatchers.Main) {
+ mDeviceListGroup!!.addPreference(preference)
+ initDevicePreference(preference)
+ }
+ }
+
+ protected open fun initDevicePreference(preference: BluetoothDevicePreference?) {
+ // Does nothing by default
+ }
+
+ @VisibleForTesting
+ fun updateFooterPreference(myDevicePreference: Preference) {
+ val bidiFormatter = BidiFormatter.getInstance()
+ myDevicePreference.title = getString(
+ R.string.bluetooth_footer_mac_message,
+ bidiFormatter.unicodeWrap(mBluetoothAdapter!!.address)
+ )
+ }
+
+ override fun onDeviceDeleted(cachedDevice: CachedBluetoothDevice) {
+ devicePreferenceMap.remove(cachedDevice)?.let {
+ mDeviceListGroup!!.removePreference(it)
+ }
+ }
+
+ @VisibleForTesting
+ open fun enableScanning() {
+ // BluetoothAdapter already handles repeated scan requests
+ if (!mScanEnabled) {
+ startScanning()
+ mScanEnabled = true
+ }
+ }
+
+ @VisibleForTesting
+ fun disableScanning() {
+ if (mScanEnabled) {
+ stopScanning()
+ mScanEnabled = false
+ }
+ }
+
+ override fun onScanningStateChanged(started: Boolean) {
+ if (!started && mScanEnabled) {
+ startScanning()
+ }
+ }
+
+ /**
+ * Return the key of the [PreferenceGroup] that contains the bluetooth devices
+ */
+ abstract val deviceListKey: String
+
+ @VisibleForTesting
+ open fun startScanning() {
+ if (filter != null) {
+ startClassicScanning()
+ } else if (leScanFilters != null) {
+ startLeScanning()
+ }
+ }
+
+ @VisibleForTesting
+ open fun stopScanning() {
+ if (filter != null) {
+ stopClassicScanning()
+ } else if (leScanFilters != null) {
+ stopLeScanning()
+ }
+ }
+
+ private fun startClassicScanning() {
+ if (!mBluetoothAdapter!!.isDiscovering) {
+ mBluetoothAdapter!!.startDiscovery()
+ }
+ }
+
+ private fun stopClassicScanning() {
+ if (mBluetoothAdapter!!.isDiscovering) {
+ mBluetoothAdapter!!.cancelDiscovery()
+ }
+ }
+
+ private val leScanCallback = object : ScanCallback() {
+ override fun onScanResult(callbackType: Int, result: ScanResult) {
+ handleLeScanResult(result)
+ }
+
+ override fun onBatchScanResults(results: MutableList<ScanResult>?) {
+ for (result in results.orEmpty()) {
+ handleLeScanResult(result)
+ }
+ }
+
+ override fun onScanFailed(errorCode: Int) {
+ Log.w(TAG, "BLE Scan failed with error code $errorCode")
+ }
+ }
+
+ private fun startLeScanning() {
+ val scanner = mBluetoothAdapter!!.bluetoothLeScanner
+ val settings = ScanSettings.Builder()
+ .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
+ .build()
+ scanner.startScan(leScanFilters, settings, leScanCallback)
+ }
+
+ private fun stopLeScanning() {
+ val scanner = mBluetoothAdapter!!.bluetoothLeScanner
+ scanner?.stopScan(leScanCallback)
+ }
+
+ private fun handleLeScanResult(result: ScanResult) {
+ lifecycleScope?.launch {
+ withContext(Dispatchers.Default) {
+ val device = result.device
+ val cachedDevice = mCachedDeviceManager!!.findDevice(device)
+ ?: mCachedDeviceManager!!.addDevice(device, leScanFilters)
+ addDevice(cachedDevice)
+ }
+ }
+ }
+
+ companion object {
+ private const val TAG = "DeviceListPreferenceFragment"
+ private const val KEY_BT_SCAN = "bt_scan"
+
+ // Copied from BluetoothDeviceNoNamePreferenceController.java
+ private const val BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
+ "persist.bluetooth.showdeviceswithoutnames"
+ }
+}
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
index c93a1c6..0a0e208 100644
--- a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
+++ b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
@@ -16,12 +16,17 @@
package com.android.settings.connecteddevice.stylus;
+import android.app.Dialog;
import android.app.role.RoleManager;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.Process;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.text.TextUtils;
@@ -38,6 +43,8 @@
import androidx.preference.SwitchPreference;
import com.android.settings.R;
+import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
+import com.android.settings.dashboard.profileselector.UserAdapter;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -45,6 +52,7 @@
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnResume;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -73,6 +81,9 @@
@VisibleForTesting
PreferenceCategory mPreferencesContainer;
+ @VisibleForTesting
+ Dialog mDialog;
+
public StylusDevicesController(Context context, InputDevice inputDevice,
CachedBluetoothDevice cachedBluetoothDevice, Lifecycle lifecycle) {
super(context);
@@ -100,8 +111,8 @@
pref.setOnPreferenceClickListener(this);
pref.setEnabled(true);
- List<String> roleHolders = rm.getRoleHoldersAsUser(RoleManager.ROLE_NOTES,
- mContext.getUser());
+ UserHandle user = getDefaultNoteTaskProfile();
+ List<String> roleHolders = rm.getRoleHoldersAsUser(RoleManager.ROLE_NOTES, user);
if (roleHolders.isEmpty()) {
pref.setSummary(R.string.default_app_none);
return pref;
@@ -113,11 +124,17 @@
try {
ApplicationInfo ai = pm.getApplicationInfo(packageName,
PackageManager.ApplicationInfoFlags.of(0));
- appName = ai == null ? packageName : pm.getApplicationLabel(ai).toString();
+ appName = ai == null ? "" : pm.getApplicationLabel(ai).toString();
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Notes role package not found.");
}
- pref.setSummary(appName);
+
+ if (mContext.getSystemService(UserManager.class).isManagedProfile(user.getIdentifier())) {
+ pref.setSummary(
+ mContext.getString(R.string.stylus_default_notes_summary_work, appName));
+ } else {
+ pref.setSummary(appName);
+ }
return pref;
}
@@ -155,7 +172,13 @@
String packageName = pm.getPermissionControllerPackageName();
Intent intent = new Intent(Intent.ACTION_MANAGE_DEFAULT_APP).setPackage(
packageName).putExtra(Intent.EXTRA_ROLE_NAME, RoleManager.ROLE_NOTES);
- mContext.startActivity(intent);
+
+ List<UserHandle> users = getUserAndManagedProfiles();
+ if (users.size() <= 1) {
+ mContext.startActivity(intent);
+ } else {
+ createAndShowProfileSelectDialog(intent, users);
+ }
break;
case KEY_HANDWRITING:
Settings.Secure.putInt(mContext.getContentResolver(),
@@ -229,6 +252,56 @@
return inputMethod != null && inputMethod.supportsStylusHandwriting();
}
+ private List<UserHandle> getUserAndManagedProfiles() {
+ UserManager um = mContext.getSystemService(UserManager.class);
+ final List<UserHandle> userManagedProfiles = new ArrayList<>();
+ // Add the current user, then add all the associated managed profiles.
+ final UserHandle currentUser = Process.myUserHandle();
+ userManagedProfiles.add(currentUser);
+
+ final List<UserInfo> userInfos = um.getUsers();
+ for (UserInfo info : userInfos) {
+ int userId = info.id;
+ if (um.isManagedProfile(userId)
+ && um.getProfileParent(userId).id == currentUser.getIdentifier()) {
+ userManagedProfiles.add(UserHandle.of(userId));
+ }
+ }
+ return userManagedProfiles;
+ }
+
+ private UserHandle getDefaultNoteTaskProfile() {
+ final int userId = Secure.getInt(
+ mContext.getContentResolver(),
+ Secure.DEFAULT_NOTE_TASK_PROFILE,
+ UserHandle.myUserId());
+ return UserHandle.of(userId);
+ }
+
+ @VisibleForTesting
+ UserAdapter.OnClickListener createProfileDialogClickCallback(
+ Intent intent, List<UserHandle> users) {
+ // TODO(b/281659827): improve UX flow for when activity is cancelled
+ return (int position) -> {
+ intent.putExtra(Intent.EXTRA_USER, users.get(position));
+
+ Secure.putInt(mContext.getContentResolver(),
+ Secure.DEFAULT_NOTE_TASK_PROFILE,
+ users.get(position).getIdentifier());
+ mContext.startActivity(intent);
+
+ mDialog.dismiss();
+ };
+ }
+
+ private void createAndShowProfileSelectDialog(Intent intent, List<UserHandle> users) {
+ mDialog = ProfileSelectDialog.createDialog(
+ mContext,
+ users,
+ createProfileDialogClickCallback(intent, users));
+ mDialog.show();
+ }
+
/**
* Identifies whether a device is a stylus using the associated {@link InputDevice} or
* {@link CachedBluetoothDevice}.
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusFeatureProvider.java b/src/com/android/settings/connecteddevice/stylus/StylusFeatureProvider.java
new file mode 100644
index 0000000..43337c8
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/stylus/StylusFeatureProvider.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import android.content.Context;
+import android.hardware.usb.UsbDevice;
+
+import androidx.preference.Preference;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/** FeatureProvider for USB settings */
+public interface StylusFeatureProvider {
+
+ /**
+ * Returns whether the current attached USB device allows firmware updates.
+ *
+ * @param usbDevice The USB device to check
+ */
+ boolean isUsbFirmwareUpdateEnabled(UsbDevice usbDevice);
+
+ /**
+ * Returns a list of preferences for the connected USB device if exists. If not, returns
+ * null. If an update is not available but firmware update feature is enabled for the device,
+ * the list will contain only the preference showing the current firmware version.
+ *
+ * @param context The context
+ */
+ @Nullable
+ List<Preference> getUsbFirmwareUpdatePreferences(Context context);
+}
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusFeatureProviderImpl.java b/src/com/android/settings/connecteddevice/stylus/StylusFeatureProviderImpl.java
new file mode 100644
index 0000000..dba569b
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/stylus/StylusFeatureProviderImpl.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import android.content.Context;
+import android.hardware.usb.UsbDevice;
+
+import androidx.preference.Preference;
+
+import java.util.List;
+
+/** Default implementation for StylusFeatureProvider */
+public class StylusFeatureProviderImpl implements StylusFeatureProvider {
+ @Override
+ public boolean isUsbFirmwareUpdateEnabled(UsbDevice usbDevice) {
+ return false;
+ }
+
+ @Override
+ public List<Preference> getUsbFirmwareUpdatePreferences(Context context) {
+ return null;
+ }
+}
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareController.java b/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareController.java
new file mode 100644
index 0000000..4a4dfa2
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareController.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import android.content.Context;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** Preference controller for stylus firmware updates via USB */
+public class StylusUsbFirmwareController extends BasePreferenceController
+ implements LifecycleObserver, OnStart, OnStop {
+ private static final String TAG = StylusUsbFirmwareController.class.getSimpleName();
+ @Nullable
+ private UsbDevice mStylusUsbDevice;
+ private final UsbStylusBroadcastReceiver mUsbStylusBroadcastReceiver;
+
+ private PreferenceScreen mPreferenceScreen;
+ private PreferenceCategory mPreference;
+
+ @VisibleForTesting
+ UsbStylusBroadcastReceiver.UsbStylusConnectionListener mUsbConnectionListener =
+ (stylusUsbDevice, attached) -> {
+ refresh();
+ };
+
+ public StylusUsbFirmwareController(Context context, String key) {
+ super(context, key);
+ mUsbStylusBroadcastReceiver = new UsbStylusBroadcastReceiver(context,
+ mUsbConnectionListener);
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ mPreferenceScreen = screen;
+ refresh();
+ super.displayPreference(screen);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ // always available, preferences will be added or
+ // removed according to the connected usb device
+ return AVAILABLE;
+ }
+
+ private void refresh() {
+ if (mPreferenceScreen == null) return;
+
+ UsbDevice device = getStylusUsbDevice();
+ if (device == mStylusUsbDevice) {
+ return;
+ }
+ mStylusUsbDevice = device;
+ mPreference = mPreferenceScreen.findPreference(getPreferenceKey());
+ if (mPreference != null) {
+ mPreferenceScreen.removePreference(mPreference);
+ }
+ if (hasUsbStylusFirmwareUpdateFeature(mStylusUsbDevice)) {
+ StylusFeatureProvider featureProvider = FeatureFactory.getFactory(
+ mContext).getStylusFeatureProvider();
+ List<Preference> preferences =
+ featureProvider.getUsbFirmwareUpdatePreferences(mContext);
+
+ if (preferences != null) {
+ mPreference = new PreferenceCategory(mContext);
+ mPreference.setKey(getPreferenceKey());
+ mPreferenceScreen.addPreference(mPreference);
+
+ for (Preference preference : preferences) {
+ mPreference.addPreference(preference);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onStart() {
+ mUsbStylusBroadcastReceiver.register();
+ }
+
+ @Override
+ public void onStop() {
+ mUsbStylusBroadcastReceiver.unregister();
+ }
+
+ private UsbDevice getStylusUsbDevice() {
+ UsbManager usbManager = mContext.getSystemService(UsbManager.class);
+
+ if (usbManager == null) {
+ return null;
+ }
+
+ List<UsbDevice> devices = new ArrayList<>(usbManager.getDeviceList().values());
+ if (devices.isEmpty()) {
+ return null;
+ }
+
+ UsbDevice usbDevice = devices.get(0);
+ if (hasUsbStylusFirmwareUpdateFeature(usbDevice)) {
+ return usbDevice;
+ }
+ return null;
+ }
+
+ static boolean hasUsbStylusFirmwareUpdateFeature(UsbDevice usbDevice) {
+ if (usbDevice == null) return false;
+
+ StylusFeatureProvider featureProvider = FeatureFactory.getFactory(
+ FeatureFactory.getAppContext()).getStylusFeatureProvider();
+
+ return featureProvider.isUsbFirmwareUpdateEnabled(usbDevice);
+ }
+}
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusUsiDetailsFragment.java b/src/com/android/settings/connecteddevice/stylus/StylusUsiDetailsFragment.java
index 5e68a53..ea9781e 100644
--- a/src/com/android/settings/connecteddevice/stylus/StylusUsiDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/stylus/StylusUsiDetailsFragment.java
@@ -54,7 +54,6 @@
}
}
-
@Override
public int getMetricsCategory() {
return SettingsEnums.USI_DEVICE_DETAILS;
diff --git a/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiver.java b/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiver.java
new file mode 100644
index 0000000..0166250
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiver.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+
+/** Broadcast receiver for styluses connected via USB */
+public class UsbStylusBroadcastReceiver extends BroadcastReceiver {
+ private Context mContext;
+ private UsbStylusConnectionListener mUsbConnectionListener;
+ private boolean mListeningToUsbEvents;
+
+ public UsbStylusBroadcastReceiver(Context context,
+ UsbStylusConnectionListener usbConnectionListener) {
+ mContext = context;
+ mUsbConnectionListener = usbConnectionListener;
+ }
+
+ /** Registers the receiver. */
+ public void register() {
+ if (!mListeningToUsbEvents) {
+ final IntentFilter intentFilter = new IntentFilter();
+ intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
+ intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
+ final Intent intent = mContext.registerReceiver(this, intentFilter);
+ if (intent != null) {
+ onReceive(mContext, intent);
+ }
+ mListeningToUsbEvents = true;
+ }
+ }
+
+ /** Unregisters the receiver. */
+ public void unregister() {
+ if (mListeningToUsbEvents) {
+ mContext.unregisterReceiver(this);
+ mListeningToUsbEvents = false;
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE, UsbDevice.class);
+ if (StylusUsbFirmwareController.hasUsbStylusFirmwareUpdateFeature(usbDevice)) {
+ mUsbConnectionListener.onUsbStylusConnectionChanged(usbDevice,
+ intent.getAction().equals(UsbManager.ACTION_USB_DEVICE_ATTACHED));
+ }
+ }
+
+ /**
+ * Interface definition for a callback to be invoked when stylus usb connection is changed.
+ */
+ interface UsbStylusConnectionListener {
+ void onUsbStylusConnectionChanged(UsbDevice device, boolean connected);
+ }
+}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 149d1f4..3100706 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -72,6 +72,7 @@
import com.android.settings.biometrics.combination.CombinedBiometricSettings;
import com.android.settings.biometrics.face.FaceSettings;
import com.android.settings.biometrics.fingerprint.FingerprintSettings;
+import com.android.settings.biometrics.fingerprint2.ui.fragment.FingerprintSettingsV2Fragment;
import com.android.settings.bluetooth.BluetoothBroadcastDialog;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
import com.android.settings.bluetooth.BluetoothFindBroadcastsFragment;
@@ -94,6 +95,7 @@
import com.android.settings.deviceinfo.PublicVolumeSettings;
import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
+import com.android.settings.deviceinfo.batteryinfo.BatteryInfoFragment;
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionSettings;
import com.android.settings.deviceinfo.legal.ModuleLicensesDashboard;
import com.android.settings.display.AutoBrightnessSettings;
@@ -265,6 +267,7 @@
AssistGestureSettings.class.getName(),
FaceSettings.class.getName(),
FingerprintSettings.FingerprintSettingsFragment.class.getName(),
+ FingerprintSettingsV2Fragment.class.getName(),
CombinedBiometricSettings.class.getName(),
CombinedBiometricProfileSettings.class.getName(),
SwipeToNotificationSettings.class.getName(),
@@ -371,7 +374,8 @@
NfcAndPaymentFragment.class.getName(),
ColorAndMotionFragment.class.getName(),
LongBackgroundTasksDetails.class.getName(),
- RegionalPreferencesEntriesFragment.class.getName()
+ RegionalPreferencesEntriesFragment.class.getName(),
+ BatteryInfoFragment.class.getName()
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index f8a5d76..d4acfa1 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -25,11 +25,14 @@
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
+import android.view.View;
import androidx.annotation.CallSuper;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceGroup;
@@ -170,6 +173,15 @@
}
@Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ LifecycleOwner viewLifecycleOwner = getViewLifecycleOwner();
+ for (AbstractPreferenceController controller : mControllers) {
+ controller.onViewCreated(viewLifecycleOwner);
+ }
+ }
+
+ @Override
public void onCategoriesChanged(Set<String> categories) {
final String categoryKey = getCategoryKey();
final DashboardCategory dashboardCategory =
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 3047d73..c3ddb2e 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -22,8 +22,6 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
-import android.icu.text.MeasureFormat;
-import android.icu.util.MeasureUnit;
import android.net.NetworkPolicy;
import android.net.NetworkTemplate;
import android.os.Bundle;
@@ -322,14 +320,10 @@
final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT);
final long bytes = isLimit ? editor.getPolicyLimitBytes(template)
: editor.getPolicyWarningBytes(template);
- final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED;
- final MeasureFormat formatter = MeasureFormat.getInstance(
- getContext().getResources().getConfiguration().locale,
- MeasureFormat.FormatWidth.SHORT);
final String[] unitNames = new String[] {
- formatter.getUnitDisplayName(MeasureUnit.MEGABYTE),
- formatter.getUnitDisplayName(MeasureUnit.GIGABYTE)
+ DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), MIB_IN_BYTES),
+ DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), GIB_IN_BYTES),
};
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getContext(), android.R.layout.simple_spinner_item, unitNames);
diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java
index e47ecbd..6a39234 100644
--- a/src/com/android/settings/datausage/DataSaverBackend.java
+++ b/src/com/android/settings/datausage/DataSaverBackend.java
@@ -196,8 +196,10 @@
public interface Listener {
void onDataSaverChanged(boolean isDataSaving);
- void onAllowlistStatusChanged(int uid, boolean isAllowlisted);
+ /** This is called when allow list status is changed. */
+ default void onAllowlistStatusChanged(int uid, boolean isAllowlisted) {}
- void onDenylistStatusChanged(int uid, boolean isDenylisted);
+ /** This is called when deny list status is changed. */
+ default void onDenylistStatusChanged(int uid, boolean isDenylisted) {}
}
}
diff --git a/src/com/android/settings/datausage/DataSaverSummary.kt b/src/com/android/settings/datausage/DataSaverSummary.kt
index 1d9cbb7..0828d36 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.kt
+++ b/src/com/android/settings/datausage/DataSaverSummary.kt
@@ -15,33 +15,22 @@
*/
package com.android.settings.datausage
-import android.app.Application
import android.app.settings.SettingsEnums
import android.content.Context
import android.os.Bundle
import android.telephony.SubscriptionManager
import android.widget.Switch
-import androidx.lifecycle.lifecycleScope
-import androidx.preference.Preference
import com.android.settings.R
import com.android.settings.SettingsActivity
-import com.android.settings.SettingsPreferenceFragment
-import com.android.settings.applications.AppStateBaseBridge
-import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState
+import com.android.settings.dashboard.DashboardFragment
import com.android.settings.search.BaseSearchIndexProvider
import com.android.settings.widget.SettingsMainSwitchBar
-import com.android.settingslib.applications.ApplicationsState
import com.android.settingslib.search.SearchIndexable
-import com.android.settingslib.spa.framework.util.formatString
-import kotlinx.coroutines.launch
@SearchIndexable
-class DataSaverSummary : SettingsPreferenceFragment() {
+class DataSaverSummary : DashboardFragment() {
private lateinit var switchBar: SettingsMainSwitchBar
private lateinit var dataSaverBackend: DataSaverBackend
- private lateinit var unrestrictedAccess: Preference
- private var dataUsageBridge: AppStateDataUsageBridge? = null
- private var session: ApplicationsState.Session? = null
// Flag used to avoid infinite loop due if user switch it on/off too quick.
private var switching = false
@@ -54,8 +43,6 @@
return
}
- addPreferencesFromResource(R.xml.data_saver)
- unrestrictedAccess = findPreference(KEY_UNRESTRICTED_ACCESS)!!
dataSaverBackend = DataSaverBackend(requireContext())
}
@@ -72,27 +59,12 @@
override fun onResume() {
super.onResume()
- dataSaverBackend.refreshAllowlist()
- dataSaverBackend.refreshDenylist()
dataSaverBackend.addListener(dataSaverBackendListener)
- dataUsageBridge?.resume(/* forceLoadAllApps= */ true)
- ?: viewLifecycleOwner.lifecycleScope.launch {
- val applicationsState = ApplicationsState.getInstance(
- requireContext().applicationContext as Application
- )
- dataUsageBridge = AppStateDataUsageBridge(
- applicationsState, dataUsageBridgeCallbacks, dataSaverBackend
- )
- session =
- applicationsState.newSession(applicationsStateCallbacks, settingsLifecycle)
- dataUsageBridge?.resume(/* forceLoadAllApps= */ true)
- }
}
override fun onPause() {
super.onPause()
dataSaverBackend.remListener(dataSaverBackendListener)
- dataUsageBridge?.pause()
}
private fun onSwitchChanged(isChecked: Boolean) {
@@ -104,9 +76,10 @@
}
}
+ override fun getPreferenceScreenResId() = R.xml.data_saver
override fun getMetricsCategory() = SettingsEnums.DATA_SAVER_SUMMARY
-
override fun getHelpResource() = R.string.help_url_data_saver
+ override fun getLogTag() = TAG
private val dataSaverBackendListener = object : DataSaverBackend.Listener {
override fun onDataSaverChanged(isDataSaving: Boolean) {
@@ -115,51 +88,10 @@
switching = false
}
}
-
- override fun onAllowlistStatusChanged(uid: Int, isAllowlisted: Boolean) {}
-
- override fun onDenylistStatusChanged(uid: Int, isDenylisted: Boolean) {}
- }
-
- private val dataUsageBridgeCallbacks = AppStateBaseBridge.Callback {
- updateUnrestrictedAccessSummary()
- }
-
- private val applicationsStateCallbacks = object : ApplicationsState.Callbacks {
- override fun onRunningStateChanged(running: Boolean) {}
-
- override fun onPackageListChanged() {}
-
- override fun onRebuildComplete(apps: ArrayList<ApplicationsState.AppEntry>?) {}
-
- override fun onPackageIconChanged() {}
-
- override fun onPackageSizeChanged(packageName: String?) {}
-
- override fun onAllSizesComputed() {
- updateUnrestrictedAccessSummary()
- }
-
- override fun onLauncherInfoChanged() {
- updateUnrestrictedAccessSummary()
- }
-
- override fun onLoadEntriesCompleted() {}
- }
-
- private fun updateUnrestrictedAccessSummary() {
- if (!isAdded || isFinishingOrDestroyed) return
- val allApps = session?.allApps ?: return
- val count = allApps.count {
- ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(it) &&
- (it.extraInfo as? DataUsageState)?.isDataSaverAllowlisted == true
- }
- unrestrictedAccess.summary =
- resources.formatString(R.string.data_saver_unrestricted_summary, "count" to count)
}
companion object {
- private const val KEY_UNRESTRICTED_ACCESS = "unrestricted_access"
+ private const val TAG = "DataSaverSummary"
private fun Context.isDataSaverVisible(): Boolean =
resources.getBoolean(R.bool.config_show_data_saver)
diff --git a/src/com/android/settings/datausage/DataUsageFormatter.kt b/src/com/android/settings/datausage/DataUsageFormatter.kt
new file mode 100644
index 0000000..16a9ae8
--- /dev/null
+++ b/src/com/android/settings/datausage/DataUsageFormatter.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 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.datausage
+
+import android.content.res.Resources
+import android.text.format.Formatter
+
+object DataUsageFormatter {
+
+ /**
+ * Gets the display unit of the given bytes.
+ *
+ * Similar to MeasureFormat.getUnitDisplayName(), but with the expected result for the bytes in
+ * Settings, and align with other places in Settings.
+ */
+ fun Resources.getBytesDisplayUnit(bytes: Long): String =
+ Formatter.formatBytes(this, bytes, Formatter.FLAG_IEC_UNITS).units
+}
\ No newline at end of file
diff --git a/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java b/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
index 9545728..298ced0 100644
--- a/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothLeAudioDeviceDetailsPreferenceController.java
@@ -40,7 +40,7 @@
private static final String PREFERENCE_KEY = "bluetooth_show_leaudio_device_details";
private static final String CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT = "le_audio_enabled_by_default";
- private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = false;
+ private static final boolean LE_AUDIO_DEVICE_DETAIL_DEFAULT_VALUE = true;
static int sLeAudioSupportedStateCache = BluetoothStatusCodes.ERROR_UNKNOWN;
@VisibleForTesting
diff --git a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
index 0d91fdd..b7b2759 100644
--- a/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
+++ b/src/com/android/settings/development/DevelopmentOptionsActivityRequestCodes.java
@@ -25,12 +25,4 @@
int REQUEST_CODE_DEBUG_APP = 1;
int REQUEST_MOCK_LOCATION_APP = 2;
-
- int REQUEST_CODE_ANGLE_ALL_USE_ANGLE = 3;
-
- int REQUEST_CODE_ANGLE_DRIVER_PKGS = 4;
-
- int REQUEST_CODE_ANGLE_DRIVER_VALUES = 5;
-
- int REQUEST_COMPAT_CHANGE_APP = 6;
}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index f7be1aa..047b219 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -675,6 +675,7 @@
controllers.add(new NfcVerboseVendorLogPreferenceController(context, fragment));
controllers.add(new ShowTapsPreferenceController(context));
controllers.add(new PointerLocationPreferenceController(context));
+ controllers.add(new ShowKeyPressesPreferenceController(context));
controllers.add(new ShowSurfaceUpdatesPreferenceController(context));
controllers.add(new ShowLayoutBoundsPreferenceController(context));
controllers.add(new ShowRefreshRatePreferenceController(context));
diff --git a/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java b/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
index 051cede..f13143d 100644
--- a/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
+++ b/src/com/android/settings/development/EnableVerboseVendorLoggingPreferenceController.java
@@ -29,6 +29,7 @@
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.utils.ThreadUtils;
import java.util.NoSuchElementException;
@@ -66,23 +67,34 @@
return isIDumpstateDeviceAidlServiceAvailable() || isIDumpstateDeviceV1_1ServiceAvailable();
}
+ @SuppressWarnings("FutureReturnValueIgnored")
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean isEnabled = (Boolean) newValue;
- setVerboseLoggingEnabled(isEnabled);
+ // IDumpstateDevice IPC may be blocking when system is extremely heavily-loaded.
+ // Post to background thread to avoid ANR. Ignore the returned Future.
+ ThreadUtils.postOnBackgroundThread(() ->
+ setVerboseLoggingEnabled(isEnabled));
return true;
}
+ @SuppressWarnings("FutureReturnValueIgnored")
@Override
public void updateState(Preference preference) {
- final boolean enabled = getVerboseLoggingEnabled();
- ((SwitchPreference) mPreference).setChecked(enabled);
+ ThreadUtils.postOnBackgroundThread(() -> {
+ final boolean enabled = getVerboseLoggingEnabled();
+ ThreadUtils.getUiThreadHandler().post(() ->
+ ((SwitchPreference) mPreference).setChecked(enabled));
+ }
+ );
}
+ @SuppressWarnings("FutureReturnValueIgnored")
@Override
protected void onDeveloperOptionsSwitchDisabled() {
super.onDeveloperOptionsSwitchDisabled();
- setVerboseLoggingEnabled(false);
+ ThreadUtils.postOnBackgroundThread(() ->
+ setVerboseLoggingEnabled(false));
((SwitchPreference) mPreference).setChecked(false);
}
diff --git a/src/com/android/settings/development/ShowKeyPressesPreferenceController.java b/src/com/android/settings/development/ShowKeyPressesPreferenceController.java
new file mode 100644
index 0000000..247f59a
--- /dev/null
+++ b/src/com/android/settings/development/ShowKeyPressesPreferenceController.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2023 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.development;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+/** PreferenceController that controls the "Show key presses" developer option. */
+public class ShowKeyPressesPreferenceController extends
+ DeveloperOptionsPreferenceController implements
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ private static final String SHOW_KEY_PRESSES_KEY = "show_key_presses";
+
+ @VisibleForTesting
+ static final int SETTING_VALUE_ON = 1;
+ @VisibleForTesting
+ static final int SETTING_VALUE_OFF = 0;
+
+ public ShowKeyPressesPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return SHOW_KEY_PRESSES_KEY;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ int showKeyPresses = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, SETTING_VALUE_OFF);
+ ((SwitchPreference) mPreference).setChecked(showKeyPresses != SETTING_VALUE_OFF);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ super.onDeveloperOptionsSwitchDisabled();
+ Settings.System.putInt(mContext.getContentResolver(), Settings.System.SHOW_KEY_PRESSES,
+ SETTING_VALUE_OFF);
+ ((SwitchPreference) mPreference).setChecked(false);
+ }
+}
diff --git a/src/com/android/settings/development/compat/PlatformCompatDashboard.java b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
index f8cbf21..3f0ffc7 100644
--- a/src/com/android/settings/development/compat/PlatformCompatDashboard.java
+++ b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
@@ -17,21 +17,16 @@
package com.android.settings.development.compat;
import static com.android.internal.compat.OverrideAllowedState.ALLOWED;
-import static com.android.settings.development.DevelopmentOptionsActivityRequestCodes.REQUEST_COMPAT_CHANGE_APP;
-import android.app.Activity;
-import android.app.AlertDialog;
import android.app.settings.SettingsEnums;
import android.compat.Compatibility.ChangeConfig;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.text.TextUtils;
import android.util.ArraySet;
import androidx.annotation.VisibleForTesting;
@@ -40,35 +35,28 @@
import androidx.preference.PreferenceCategory;
import androidx.preference.SwitchPreference;
-import com.android.internal.compat.AndroidBuildClassifier;
import com.android.internal.compat.CompatibilityChangeConfig;
import com.android.internal.compat.CompatibilityChangeInfo;
import com.android.internal.compat.IPlatformCompat;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.development.AppPicker;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-
/**
* Dashboard for Platform Compat preferences.
*/
public class PlatformCompatDashboard extends DashboardFragment {
private static final String TAG = "PlatformCompatDashboard";
- private static final String COMPAT_APP = "compat_app";
+ public static final String COMPAT_APP = "compat_app";
private IPlatformCompat mPlatformCompat;
private CompatibilityChangeInfo[] mChanges;
- private AndroidBuildClassifier mAndroidBuildClassifier = new AndroidBuildClassifier();
-
- private boolean mShouldStartAppPickerOnResume = true;
-
@VisibleForTesting
String mSelectedApp;
@@ -108,32 +96,6 @@
} catch (RemoteException e) {
throw new RuntimeException("Could not list changes!", e);
}
- if (icicle != null) {
- mShouldStartAppPickerOnResume = false;
- mSelectedApp = icicle.getString(COMPAT_APP);
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == REQUEST_COMPAT_CHANGE_APP) {
- mShouldStartAppPickerOnResume = false;
- switch (resultCode) {
- case Activity.RESULT_OK:
- mSelectedApp = data.getAction();
- break;
- case Activity.RESULT_CANCELED:
- if (TextUtils.isEmpty(mSelectedApp)) {
- finish();
- }
- break;
- case AppPicker.RESULT_NO_MATCHING_APPS:
- mSelectedApp = null;
- break;
- }
- return;
- }
- super.onActivityResult(requestCode, resultCode, data);
}
@Override
@@ -142,33 +104,18 @@
if (isFinishingOrDestroyed()) {
return;
}
- if (!mShouldStartAppPickerOnResume) {
- if (TextUtils.isEmpty(mSelectedApp)) {
- new AlertDialog.Builder(getContext())
- .setTitle(R.string.platform_compat_dialog_title_no_apps)
- .setMessage(R.string.platform_compat_dialog_text_no_apps)
- .setPositiveButton(R.string.okay, (dialog, which) -> finish())
- .setOnDismissListener(dialog -> finish())
- .setCancelable(false)
- .show();
- return;
- }
- try {
- final ApplicationInfo applicationInfo = getApplicationInfo();
- addPreferences(applicationInfo);
- return;
- } catch (PackageManager.NameNotFoundException e) {
- mShouldStartAppPickerOnResume = true;
- mSelectedApp = null;
- }
+ Bundle arguments = getArguments();
+ if (arguments == null) {
+ finish();
+ return;
}
- startAppPicker();
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putString(COMPAT_APP, mSelectedApp);
+ mSelectedApp = arguments.getString(COMPAT_APP);
+ try {
+ final ApplicationInfo applicationInfo = getApplicationInfo();
+ addPreferences(applicationInfo);
+ } catch (PackageManager.NameNotFoundException ignored) {
+ finish();
+ }
}
private void addPreferences(ApplicationInfo applicationInfo) {
@@ -266,12 +213,6 @@
appPreference.setIcon(icon);
appPreference.setSummary(getString(R.string.platform_compat_selected_app_summary,
mSelectedApp, applicationInfo.targetSdkVersion));
- appPreference.setKey(mSelectedApp);
- appPreference.setOnPreferenceClickListener(
- preference -> {
- startAppPicker();
- return true;
- });
return appPreference;
}
@@ -294,17 +235,6 @@
}
}
- private void startAppPicker() {
- final Intent intent = new Intent(getContext(), AppPicker.class)
- .putExtra(AppPicker.EXTRA_INCLUDE_NOTHING, false);
- // If build is neither userdebug nor eng, only include debuggable apps
- final boolean debuggableBuild = mAndroidBuildClassifier.isDebuggableBuild();
- if (!debuggableBuild) {
- intent.putExtra(AppPicker.EXTRA_DEBUGGABLE, true /* value */);
- }
- startActivityForResult(intent, REQUEST_COMPAT_CHANGE_APP);
- }
-
private class CompatChangePreferenceChangeListener implements OnPreferenceChangeListener {
private final long changeId;
diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceController.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceController.java
new file mode 100644
index 0000000..b022fcf
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceController.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.BatteryManager;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.fuelgauge.BatteryUtils;
+
+/**
+ * A controller that manages the information about battery cycle count.
+ */
+public class BatteryCycleCountPreferenceController extends BasePreferenceController {
+
+ public BatteryCycleCountPreferenceController(Context context,
+ String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ final Intent batteryIntent = BatteryUtils.getBatteryIntent(mContext);
+ final int cycleCount = batteryIntent.getIntExtra(BatteryManager.EXTRA_CYCLE_COUNT, -1);
+
+ return cycleCount == -1
+ ? mContext.getText(R.string.battery_cycle_count_not_available)
+ : Integer.toString(cycleCount);
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceController.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceController.java
new file mode 100644
index 0000000..6c7a743
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceController.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.overlay.FeatureFactory;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A controller that manages the information about battery first use date.
+ */
+public class BatteryFirstUseDatePreferenceController extends BasePreferenceController {
+
+ private final BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
+ private final BatteryManager mBatteryManager;
+
+ private long mFirstUseDateInMs;
+
+ public BatteryFirstUseDatePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mBatterySettingsFeatureProvider = FeatureFactory.getFactory(
+ context).getBatterySettingsFeatureProvider();
+ mBatteryManager = mContext.getSystemService(BatteryManager.class);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mBatterySettingsFeatureProvider.isFirstUseDateAvailable(mContext, getFirstUseDate())
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ return isAvailable()
+ ? BatteryUtils.getBatteryInfoFormattedDate(mFirstUseDateInMs)
+ : null;
+ }
+
+ private long getFirstUseDate() {
+ if (mFirstUseDateInMs == 0L) {
+ final long firstUseDateInSec = mBatteryManager.getLongProperty(
+ BatteryManager.BATTERY_PROPERTY_FIRST_USAGE_DATE);
+ mFirstUseDateInMs = TimeUnit.MILLISECONDS.convert(firstUseDateInSec, TimeUnit.SECONDS);
+ }
+ return mFirstUseDateInMs;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFragment.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFragment.java
new file mode 100644
index 0000000..1731212
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryInfoFragment.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import android.app.settings.SettingsEnums;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/**
+ * A fragment that shows battery hardware information.
+ */
+@SearchIndexable
+public class BatteryInfoFragment extends DashboardFragment {
+
+ public static final String TAG = "BatteryInfo";
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.SETTINGS_BATTERY_INFORMATION;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.battery_info;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.battery_info);
+}
diff --git a/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceController.java b/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceController.java
new file mode 100644
index 0000000..ff54c77
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceController.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.fuelgauge.BatterySettingsFeatureProvider;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.overlay.FeatureFactory;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A controller that manages the information about battery manufacture date.
+ */
+public class BatteryManufactureDatePreferenceController extends BasePreferenceController {
+
+ private final BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
+ private final BatteryManager mBatteryManager;
+
+ private long mManufactureDateInMs;
+
+ public BatteryManufactureDatePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mBatterySettingsFeatureProvider = FeatureFactory.getFactory(
+ context).getBatterySettingsFeatureProvider();
+ mBatteryManager = mContext.getSystemService(BatteryManager.class);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mBatterySettingsFeatureProvider.isManufactureDateAvailable(mContext,
+ getManufactureDate())
+ ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ return isAvailable()
+ ? BatteryUtils.getBatteryInfoFormattedDate(mManufactureDateInMs)
+ : null;
+ }
+
+ private long getManufactureDate() {
+ if (mManufactureDateInMs == 0L) {
+ final long manufactureDateInSec = mBatteryManager.getLongProperty(
+ BatteryManager.BATTERY_PROPERTY_MANUFACTURING_DATE);
+ mManufactureDateInMs = TimeUnit.MILLISECONDS.convert(manufactureDateInSec,
+ TimeUnit.SECONDS);
+ }
+ return mManufactureDateInMs;
+ }
+}
diff --git a/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java b/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java
new file mode 100644
index 0000000..9df48f3
--- /dev/null
+++ b/src/com/android/settings/display/StayAwakeOnFoldPreferenceController.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2023 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.display;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * A preference controller for the "Stay unlocked on fold" setting.
+ *
+ * This preference controller allows users to control whether or not the device
+ * stays awake when it is folded. When this setting is enabled, the device will
+ * stay awake even if the device is folded.
+ *
+ * @link android.provider.Settings.System#STAY_AWAKE_ON_FOLD
+ */
+public class StayAwakeOnFoldPreferenceController extends TogglePreferenceController {
+
+ private final Resources mResources;
+
+ public StayAwakeOnFoldPreferenceController(Context context, String key) {
+ this(context, key, context.getResources());
+ }
+
+ public StayAwakeOnFoldPreferenceController(Context context, String key, Resources resources) {
+ super(context, key);
+ mResources = resources;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mResources.getBoolean(R.bool.config_stay_awake_on_fold) ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public boolean isChecked() {
+ return Settings.System.getInt(
+ mContext.getContentResolver(),
+ Settings.System.STAY_AWAKE_ON_FOLD,
+ 0) == 1;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ final int stayUnlockedOnFold = isChecked ? 1 : 0;
+
+ return Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.STAY_AWAKE_ON_FOLD, stayUnlockedOnFold);
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_display;
+ }
+
+}
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 79e0194..41ead68 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -289,12 +289,14 @@
mLogStringBuilder.append(", onPause mode = ").append(selectedPreference);
logMetricCategory(selectedPreference);
- BatteryHistoricalLogUtil.writeLog(
- getContext().getApplicationContext(),
- Action.LEAVE,
- BatteryHistoricalLogUtil.getPackageNameWithUserId(
- mBatteryOptimizeUtils.getPackageName(), UserHandle.myUserId()),
- mLogStringBuilder.toString());
+ mExecutor.execute(() -> {
+ BatteryOptimizeLogUtils.writeLog(
+ getContext().getApplicationContext(),
+ Action.LEAVE,
+ BatteryOptimizeLogUtils.getPackageNameWithUserId(
+ mBatteryOptimizeUtils.getPackageName(), UserHandle.myUserId()),
+ mLogStringBuilder.toString());
+ });
Log.d(TAG, "Leave with mode: " + selectedPreference);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index 66ffc90..50f1b90 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -199,7 +199,7 @@
info.packageName + DELIMITER_MODE + optimizationMode;
builder.append(packageOptimizeMode + DELIMITER);
Log.d(TAG, "backupOptimizationMode: " + packageOptimizeMode);
- BatteryHistoricalLogUtil.writeLog(
+ BatteryOptimizeLogUtils.writeLog(
sharedPreferences, Action.BACKUP, info.packageName,
/* actionDescription */ "mode: " + optimizationMode);
backupCount++;
@@ -275,7 +275,7 @@
/** Dump the app optimization mode backup history data. */
public static void dumpHistoricalData(Context context, PrintWriter writer) {
- BatteryHistoricalLogUtil.printBatteryOptimizeHistoricalLog(
+ BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(
getSharedPreferences(context), writer);
}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoricalLogUtil.java b/src/com/android/settings/fuelgauge/BatteryOptimizeLogUtils.java
similarity index 89%
rename from src/com/android/settings/fuelgauge/BatteryHistoricalLogUtil.java
rename to src/com/android/settings/fuelgauge/BatteryOptimizeLogUtils.java
index f82b703..d093d35 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoricalLogUtil.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeLogUtils.java
@@ -20,23 +20,25 @@
import android.content.SharedPreferences;
import android.util.Base64;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
-import com.google.common.annotations.VisibleForTesting;
-
import java.io.PrintWriter;
import java.util.List;
/** Writes and reads a historical log of battery related state change events. */
-public final class BatteryHistoricalLogUtil {
+public final class BatteryOptimizeLogUtils {
+ private static final String TAG = "BatteryOptimizeLogUtils";
private static final String BATTERY_OPTIMIZE_FILE_NAME = "battery_optimize_historical_logs";
private static final String LOGS_KEY = "battery_optimize_logs_key";
- private static final String TAG = "BatteryHistoricalLogUtil";
@VisibleForTesting
static final int MAX_ENTRIES = 40;
+ private BatteryOptimizeLogUtils() {}
+
/** Writes a log entry for battery optimization mode. */
static void writeLog(
Context context, Action action, String packageName, String actionDescription) {
@@ -67,7 +69,7 @@
newLogBuilder.addLogEntry(logEntry);
String loggingContent =
- Base64.encodeToString(newLogBuilder.build().toByteArray(), Base64.DEFAULT);
+ Base64.encodeToString(newLogBuilder.build().toByteArray(), Base64.DEFAULT);
sharedPreferences
.edit()
.putString(LOGS_KEY, loggingContent)
@@ -94,7 +96,7 @@
if (logEntryList.isEmpty()) {
writer.println("\tnothing to dump");
} else {
- writer.println("0:UNKNOWN 1:RESTRICTED 2:UNRESTRICTED 3:OPTIMIZED");
+ writer.println("0:UNKNOWN 1:RESTRICTED 2:UNRESTRICTED 3:OPTIMIZED");
logEntryList.forEach(entry -> writer.println(toString(entry)));
}
}
@@ -113,6 +115,7 @@
@VisibleForTesting
static SharedPreferences getSharedPreferences(Context context) {
- return context.getSharedPreferences(BATTERY_OPTIMIZE_FILE_NAME, Context.MODE_PRIVATE);
+ return context.getApplicationContext()
+ .getSharedPreferences(BATTERY_OPTIMIZE_FILE_NAME, Context.MODE_PRIVATE);
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 589e1fd..124840e 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -245,7 +245,7 @@
Context context, int appStandbyMode, boolean allowListed, int uid, String packageName,
BatteryUtils batteryUtils, PowerAllowlistBackend powerAllowlistBackend,
Action action) {
- final String packageNameKey = BatteryHistoricalLogUtil
+ final String packageNameKey = BatteryOptimizeLogUtils
.getPackageNameWithUserId(packageName, UserHandle.myUserId());
try {
batteryUtils.setForceAppStandby(uid, packageName, appStandbyMode);
@@ -259,7 +259,7 @@
appStandbyMode = -1;
Log.e(TAG, "set OPTIMIZATION MODE failed for " + packageName, e);
}
- BatteryHistoricalLogUtil.writeLog(
+ BatteryOptimizeLogUtils.writeLog(
context,
action,
packageNameKey,
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
index f6efb24..260fde0 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProvider.java
@@ -16,9 +16,14 @@
package com.android.settings.fuelgauge;
-import android.content.ComponentName;
+import android.content.Context;
/** Feature provider for battery settings usage. */
public interface BatterySettingsFeatureProvider {
+ /** Returns true if manufacture date should be shown */
+ boolean isManufactureDateAvailable(Context context, long manufactureDateMs);
+
+ /** Returns true if first use date should be shown */
+ boolean isFirstUseDateAvailable(Context context, long firstUseDateMs);
}
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
index 39fe118..6b456b7 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImpl.java
@@ -21,9 +21,13 @@
/** Feature provider implementation for battery settings usage. */
public class BatterySettingsFeatureProviderImpl implements BatterySettingsFeatureProvider {
- protected Context mContext;
+ @Override
+ public boolean isManufactureDateAvailable(Context context, long manufactureDateMs) {
+ return false;
+ }
- public BatterySettingsFeatureProviderImpl(Context context) {
- mContext = context.getApplicationContext();
+ @Override
+ public boolean isFirstUseDateAvailable(Context context, long firstUseDateMs) {
+ return false;
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 12760b1..1f7e3ec 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -64,8 +64,10 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.time.Duration;
import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
import java.util.List;
/**
@@ -353,7 +355,7 @@
@SuppressWarnings("unchecked")
public static <T extends MessageLite> T parseProtoFromString(
String serializedProto, T protoClass) {
- if (serializedProto.isEmpty()) {
+ if (serializedProto == null || serializedProto.isEmpty()) {
return (T) protoClass.getDefaultInstanceForType();
}
try {
@@ -451,12 +453,10 @@
@VisibleForTesting
Estimate getEnhancedEstimate() {
- Estimate estimate = null;
- // Get enhanced prediction if available
- if (Duration.between(Estimate.getLastCacheUpdateTime(mContext), Instant.now())
- .compareTo(Duration.ofSeconds(10)) < 0) {
- estimate = Estimate.getCachedEstimateIfAvailable(mContext);
- } else if (mPowerUsageFeatureProvider != null &&
+ // Align the same logic in the BatteryControllerImpl.updateEstimate()
+ Estimate estimate = Estimate.getCachedEstimateIfAvailable(mContext);
+ if (estimate == null &&
+ mPowerUsageFeatureProvider != null &&
mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) {
estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext);
if (estimate != null) {
@@ -673,6 +673,14 @@
}
return summary.toString();
}
+ /** Format the date of battery related info */
+ public static CharSequence getBatteryInfoFormattedDate(long dateInMs) {
+ final Instant instant = Instant.ofEpochMilli(dateInMs);
+ final String localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate().format(
+ DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
+
+ return localDate;
+ }
/** Builds the battery usage time information for one timestamp. */
private static String buildBatteryUsageTimeInfo(final Context context, long timeInMs,
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index 0b0e243..c06e7f0 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -129,6 +129,11 @@
boolean delayHourlyJobWhenBooting();
/**
+ * Insert device usage data for anomaly detection
+ */
+ void insertSettingsData(Context context);
+
+ /**
* Gets an intent for one time bypass charge limited to resume charging.
*/
Intent getResumeChargeIntent(boolean isDockDefender);
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 1d0ba18..89d793a 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -161,6 +161,9 @@
}
@Override
+ public void insertSettingsData(Context context) {}
+
+ @Override
public Set<Integer> getOthersSystemComponentSet() {
return new ArraySet<>();
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
index 8aabc37..fdafca6 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTip.java
@@ -20,9 +20,8 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseIntArray;
-import android.view.View;
-import androidx.annotation.IdRes;
+import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -134,7 +133,8 @@
public abstract CharSequence getSummary(Context context);
- @IdRes
+ /** Gets the drawable resource id for the icon. */
+ @DrawableRes
public abstract int getIconId();
/**
@@ -162,21 +162,12 @@
preference.setTitle(getTitle(context));
preference.setSummary(getSummary(context));
preference.setIcon(getIconId());
- @IdRes int iconTintColorId = getIconTintColorId();
- if (iconTintColorId != View.NO_ID) {
- preference.getIcon().setTint(context.getColor(iconTintColorId));
- }
final CardPreference cardPreference = castToCardPreferenceSafely(preference);
if (cardPreference != null) {
cardPreference.resetLayoutState();
}
}
- /** Returns the color resid for tinting {@link #getIconId()} or {@link View#NO_ID} if none. */
- public @IdRes int getIconTintColorId() {
- return View.NO_ID;
- }
-
public boolean shouldShowDialog() {
return mShowDialog;
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
index 445a5d1..891e5e0 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -18,6 +18,7 @@
import static com.android.settings.Utils.formatPercentage;
import static com.android.settings.fuelgauge.batteryusage.BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS;
+import static java.lang.Math.abs;
import static java.lang.Math.round;
import static java.util.Objects.requireNonNull;
@@ -61,6 +62,7 @@
private static final String TAG = "BatteryChartView";
private static final int DIVIDER_COLOR = Color.parseColor("#CDCCC5");
+ private static final int HORIZONTAL_DIVIDER_COUNT = 5;
/** A callback listener for selected group index is updated. */
public interface OnSelectListener {
@@ -73,6 +75,8 @@
private final Rect[] mPercentageBounds = new Rect[]{new Rect(), new Rect(), new Rect()};
private final List<Rect> mAxisLabelsBounds = new ArrayList<>();
private final Set<Integer> mLabelDrawnIndexes = new ArraySet<>();
+ private final int mLayoutDirection =
+ getContext().getResources().getConfiguration().getLayoutDirection();
private BatteryChartViewModel mViewModel;
private int mHoveredIndex = BatteryChartViewModel.SELECTED_INDEX_INVALID;
@@ -158,7 +162,12 @@
}
// Updates the indent configurations.
mIndent.top = mPercentageBounds[0].height();
- mIndent.right = mPercentageBounds[0].width() + mTextPadding;
+ final int textWidth = mPercentageBounds[0].width() + mTextPadding;
+ if (isRTL()) {
+ mIndent.left = textWidth;
+ } else {
+ mIndent.right = textWidth;
+ }
if (mViewModel != null) {
int maxTop = 0;
@@ -333,25 +342,27 @@
}
private void drawHorizontalDividers(Canvas canvas) {
- final int width = getWidth() - mIndent.right;
+ final int width = getWidth() - abs(mIndent.width());
final int height = getHeight() - mIndent.top - mIndent.bottom;
- // Draws the top divider line for 100% curve.
- float offsetY = mIndent.top + mDividerWidth * .5f;
+ final float topOffsetY = mIndent.top + mDividerWidth * .5f;
+ final float bottomOffsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
+ final float availableSpace = bottomOffsetY - topOffsetY;
+
mDividerPaint.setColor(DIVIDER_COLOR);
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 0, offsetY);
+ final float dividerOffsetUnit =
+ availableSpace / (float) (HORIZONTAL_DIVIDER_COUNT - 1);
- // Draws the center divider line for 50% curve.
- final float availableSpace =
- height - mDividerWidth * 2 - mTrapezoidVOffset - mDividerHeight;
- offsetY = mIndent.top + mDividerWidth + availableSpace * .5f;
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 1, offsetY);
+ // Draws 5 divider lines.
+ for (int index = 0; index < HORIZONTAL_DIVIDER_COUNT; index++) {
+ float offsetY = topOffsetY + dividerOffsetUnit * index;
+ canvas.drawLine(mIndent.left, offsetY,
+ mIndent.left + width, offsetY, mDividerPaint);
- // Draws the bottom divider line for 0% curve.
- offsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 2, offsetY);
+ // Draws percentage text only for 100% / 50% / 0%
+ if (index % 2 == 0) {
+ drawPercentage(canvas, /*index=*/ (index + 1) / 2, offsetY);
+ }
+ }
}
private void drawPercentage(Canvas canvas, int index, float offsetY) {
@@ -360,14 +371,14 @@
mTextPaint.setColor(mDefaultTextColor);
canvas.drawText(
mPercentages[index],
- getWidth(),
+ isRTL() ? mIndent.left - mTextPadding : getWidth(),
offsetY + mPercentageBounds[index].height() * .5f,
mTextPaint);
}
}
private void drawVerticalDividers(Canvas canvas) {
- final int width = getWidth() - mIndent.right;
+ final int width = getWidth() - abs(mIndent.width());
final int dividerCount = mTrapezoidSlots.length + 1;
final float dividerSpace = dividerCount * mDividerWidth;
final float unitWidth = (width - dividerSpace) / (float) mTrapezoidSlots.length;
@@ -382,7 +393,7 @@
case CENTER_OF_TRAPEZOIDS:
axisLabelDisplayAreas = getAxisLabelDisplayAreas(
/* size= */ mViewModel.size() - 1,
- /* baselineX= */ mDividerWidth + unitWidth * .5f,
+ /* baselineX= */ mIndent.left + mDividerWidth + unitWidth * .5f,
/* offsetX= */ mDividerWidth + unitWidth,
baselineY,
/* shiftFirstAndLast= */ false);
@@ -391,7 +402,7 @@
default:
axisLabelDisplayAreas = getAxisLabelDisplayAreas(
/* size= */ mViewModel.size(),
- /* baselineX= */ mDividerWidth * .5f,
+ /* baselineX= */ mIndent.left + mDividerWidth * .5f,
/* offsetX= */ mDividerWidth + unitWidth,
baselineY,
/* shiftFirstAndLast= */ true);
@@ -400,7 +411,7 @@
drawAxisLabels(canvas, axisLabelDisplayAreas, baselineY);
}
// Draws each vertical dividers.
- float startX = mDividerWidth * .5f;
+ float startX = mDividerWidth * .5f + mIndent.left;
for (int index = 0; index < dividerCount; index++) {
float dividerY = bottomY;
if (mViewModel.axisLabelPosition() == BETWEEN_TRAPEZOIDS
@@ -414,8 +425,9 @@
final float nextX = startX + mDividerWidth + unitWidth;
// Updates the trapezoid slots for drawing.
if (index < mTrapezoidSlots.length) {
- mTrapezoidSlots[index].mLeft = round(startX + trapezoidSlotOffset);
- mTrapezoidSlots[index].mRight = round(nextX - trapezoidSlotOffset);
+ final int trapezoidIndex = isRTL() ? mTrapezoidSlots.length - index - 1 : index;
+ mTrapezoidSlots[trapezoidIndex].mLeft = round(startX + trapezoidSlotOffset);
+ mTrapezoidSlots[trapezoidIndex].mRight = round(nextX - trapezoidSlotOffset);
}
startX = nextX;
}
@@ -507,10 +519,20 @@
return displayAreas[leftIndex].right + mTextPadding * 2.3f > displayAreas[rightIndex].left;
}
+ private boolean isRTL() {
+ return mLayoutDirection == View.LAYOUT_DIRECTION_RTL;
+ }
+
private void drawAxisLabelText(
- Canvas canvas, final int index, final Rect displayArea, final float baselineY) {
+ Canvas canvas, int index, final Rect displayArea, final float baselineY) {
mTextPaint.setColor(mTrapezoidSolidColor);
mTextPaint.setTextAlign(Paint.Align.CENTER);
+ // Reverse the sort of axis labels for RTL
+ if (isRTL()) {
+ index = mViewModel.axisLabelPosition() == BETWEEN_TRAPEZOIDS
+ ? mViewModel.size() - index - 1 // for hourly
+ : mViewModel.size() - index - 2; // for daily
+ }
canvas.drawText(
mViewModel.getText(index),
displayArea.centerX(),
@@ -546,10 +568,16 @@
mHoveredIndex);
mTrapezoidPaint.setColor(isHoverState ? mTrapezoidHoverColor : trapezoidColor);
- final float leftTop = round(
+ float leftTop = round(
trapezoidBottom - requireNonNull(mViewModel.getLevel(index)) * unitHeight);
- final float rightTop = round(trapezoidBottom
+ float rightTop = round(trapezoidBottom
- requireNonNull(mViewModel.getLevel(index + 1)) * unitHeight);
+ // Mirror the shape of the trapezoid for RTL
+ if (isRTL()) {
+ float temp = leftTop;
+ leftTop = rightTop;
+ rightTop = temp;
+ }
trapezoidPath.reset();
trapezoidPath.moveTo(mTrapezoidSlots[index].mLeft, trapezoidBottom);
trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
index 7f86b7c..86538ee 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
@@ -252,33 +252,6 @@
return mPowerComponentId;
}
- void getQuickNameIconForUid(
- final int uid, final String[] packages, final boolean loadDataInBackground) {
- // Locale sync to system config in Settings
- final Locale locale = Locale.getDefault();
- if (sCurrentLocale != locale) {
- clearUidCache();
- sCurrentLocale = locale;
- }
-
- final String uidString = Integer.toString(uid);
- if (sUidCache.containsKey(uidString)) {
- UidToDetail utd = sUidCache.get(uidString);
- mDefaultPackageName = utd.mPackageName;
- mName = utd.mName;
- mIcon = utd.mIcon;
- return;
- }
-
- if (packages == null || packages.length == 0) {
- final NameAndIcon nameAndIcon = getNameAndIconFromUid(mContext, mName, uid);
- mIcon = nameAndIcon.mIcon;
- mName = nameAndIcon.mName;
- } else {
- mIcon = mContext.getPackageManager().getDefaultActivityIcon();
- }
- }
-
/** Loads the app label and icon image and stores into the cache. */
public static NameAndIcon loadNameAndIcon(
Context context,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
index fb1be3e..ae86095 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
@@ -23,6 +23,9 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils;
+
import java.util.List;
import java.util.function.Supplier;
@@ -46,6 +49,7 @@
@VisibleForTesting
static void loadUsageData(final Context context, final boolean isFullChargeStart) {
+ BatteryUsageLogUtils.writeLog(context, Action.FETCH_USAGE_DATA, "");
final long start = System.currentTimeMillis();
final BatteryUsageStats batteryUsageStats = DataProcessor.getBatteryUsageStats(context);
final List<BatteryEntry> batteryEntryList =
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java b/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
index 64b5b77..920670f 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiver.java
@@ -24,6 +24,8 @@
import android.util.Log;
import com.android.settings.core.instrumentation.ElapsedTimeUtils;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils;
import com.android.settings.overlay.FeatureFactory;
import java.time.Duration;
@@ -79,8 +81,9 @@
if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
final Intent recheckIntent = new Intent(ACTION_PERIODIC_JOB_RECHECK);
recheckIntent.setClass(context, BootBroadcastReceiver.class);
- mHandler.postDelayed(() -> context.sendBroadcast(recheckIntent),
- getRescheduleTimeForBootAction(context));
+ final long delayedTime = getRescheduleTimeForBootAction(context);
+ mHandler.postDelayed(() -> context.sendBroadcast(recheckIntent), delayedTime);
+ BatteryUsageLogUtils.writeLog(context, Action.RECHECK_JOB, "delay:" + delayedTime);
} else if (ACTION_SETUP_WIZARD_FINISHED.equals(action)) {
ElapsedTimeUtils.storeSuwFinishedTimestamp(context, System.currentTimeMillis());
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
index 0435e45..8d1a2f9 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
@@ -34,7 +34,9 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils;
import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase;
import com.android.settingslib.fuelgauge.BatteryStatus;
@@ -395,6 +397,7 @@
int size = 1;
final ContentResolver resolver = context.getContentResolver();
+ String errorMessage = "";
// Inserts all ContentValues into battery provider.
if (!valuesList.isEmpty()) {
final ContentValues[] valuesArray = new ContentValues[valuesList.size()];
@@ -404,7 +407,8 @@
Log.d(TAG, "insert() battery states data into database with isFullChargeStart:"
+ isFullChargeStart);
} catch (Exception e) {
- Log.e(TAG, "bulkInsert() battery states data into database error:\n" + e);
+ errorMessage = e.toString();
+ Log.e(TAG, "bulkInsert() data into database error:\n" + errorMessage);
}
} else {
// Inserts one fake data into battery provider.
@@ -424,11 +428,16 @@
+ isFullChargeStart);
} catch (Exception e) {
- Log.e(TAG, "insert() data into database error:\n" + e);
+ errorMessage = e.toString();
+ Log.e(TAG, "insert() data into database error:\n" + errorMessage);
}
valuesList.add(contentValues);
}
resolver.notifyChange(BATTERY_CONTENT_URI, /*observer=*/ null);
+ BatteryUsageLogUtils.writeLog(
+ context,
+ Action.INSERT_USAGE_DATA,
+ "size=" + size + " " + errorMessage);
Log.d(TAG, String.format("sendBatteryEntryData() size=%d in %d/ms",
size, (System.currentTimeMillis() - startTime)));
if (isFullChargeStart) {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
index 3d78c00..8c0e66c 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobManager.java
@@ -24,6 +24,8 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils;
import com.android.settings.overlay.FeatureFactory;
import java.time.Clock;
@@ -76,8 +78,11 @@
final long triggerAtMillis = getTriggerAtMillis(mContext, Clock.systemUTC(), fromBoot);
mAlarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP, triggerAtMillis, pendingIntent);
- Log.d(TAG, "schedule next alarm job at "
- + ConvertUtils.utcToLocalTimeForLogging(triggerAtMillis));
+
+ final String utcToLocalTime = ConvertUtils.utcToLocalTimeForLogging(triggerAtMillis);
+ BatteryUsageLogUtils.writeLog(
+ mContext, Action.SCHEDULE_JOB, "triggerTime=" + utcToLocalTime);
+ Log.d(TAG, "schedule next alarm job at " + utcToLocalTime);
}
void cancelJob(PendingIntent pendingIntent) {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobReceiver.java b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobReceiver.java
index 3ca4532..2bd0466 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobReceiver.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PeriodicJobReceiver.java
@@ -22,6 +22,9 @@
import android.content.Intent;
import android.util.Log;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+import com.android.settings.fuelgauge.batteryusage.bugreport.BatteryUsageLogUtils;
+
/** Receives the periodic alarm {@link PendingIntent} callback. */
public final class PeriodicJobReceiver extends BroadcastReceiver {
private static final String TAG = "PeriodicJobReceiver";
@@ -39,6 +42,7 @@
Log.w(TAG, "do not refresh job for work profile action=" + action);
return;
}
+ BatteryUsageLogUtils.writeLog(context, Action.EXECUTE_JOB, "");
BatteryUsageDataLoader.enqueueWork(context, /*isFullChargeStart=*/ false);
AppUsageDataLoader.enqueueWork(context);
Log.d(TAG, "refresh periodic job from action=" + action);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtils.java b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtils.java
new file mode 100644
index 0000000..cb2f394
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtils.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2023 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.fuelgauge.batteryusage.bugreport;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.util.Base64;
+
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLog;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry;
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.PrintWriter;
+import java.util.List;
+
+/** Writes and reads a historical log of battery usage periodic job events. */
+public final class BatteryUsageLogUtils {
+ private static final String TAG = "BatteryUsageLogUtils";
+ private static final String BATTERY_USAGE_FILE_NAME = "battery_usage_historical_logs";
+ private static final String LOGS_KEY = "battery_usage_logs_key";
+
+ // 24 hours x 4 events every hour x 3 days
+ static final int MAX_ENTRIES = 288;
+
+ private BatteryUsageLogUtils() {}
+
+ /** Write the log into the {@link SharedPreferences}. */
+ public static void writeLog(Context context, Action action, String actionDescription) {
+ final SharedPreferences sharedPreferences = getSharedPreferences(context);
+ final BatteryUsageHistoricalLogEntry newLogEntry =
+ BatteryUsageHistoricalLogEntry.newBuilder()
+ .setTimestamp(System.currentTimeMillis())
+ .setAction(action)
+ .setActionDescription(actionDescription)
+ .build();
+
+ final BatteryUsageHistoricalLog existingLog =
+ parseLogFromString(sharedPreferences.getString(LOGS_KEY, ""));
+ final BatteryUsageHistoricalLog.Builder newLogBuilder = existingLog.toBuilder();
+ // Prune old entries to limit the max logging data count.
+ if (existingLog.getLogEntryCount() >= MAX_ENTRIES) {
+ newLogBuilder.removeLogEntry(0);
+ }
+ newLogBuilder.addLogEntry(newLogEntry);
+
+ final String loggingContent =
+ Base64.encodeToString(newLogBuilder.build().toByteArray(), Base64.DEFAULT);
+ sharedPreferences
+ .edit()
+ .putString(LOGS_KEY, loggingContent)
+ .apply();
+ }
+
+ /** Prints the historical log that has previously been stored by this utility. */
+ public static void printHistoricalLog(Context context, PrintWriter writer) {
+ final BatteryUsageHistoricalLog existingLog = parseLogFromString(
+ getSharedPreferences(context).getString(LOGS_KEY, ""));
+ final List<BatteryUsageHistoricalLogEntry> logEntryList = existingLog.getLogEntryList();
+ if (logEntryList.isEmpty()) {
+ writer.println("\tnothing to dump");
+ } else {
+ logEntryList.forEach(entry -> writer.println(toString(entry)));
+ }
+ }
+
+ @VisibleForTesting
+ static SharedPreferences getSharedPreferences(Context context) {
+ return context.getApplicationContext()
+ .getSharedPreferences(BATTERY_USAGE_FILE_NAME, Context.MODE_PRIVATE);
+ }
+
+ private static BatteryUsageHistoricalLog parseLogFromString(String storedLogs) {
+ return BatteryUtils.parseProtoFromString(
+ storedLogs, BatteryUsageHistoricalLog.getDefaultInstance());
+ }
+
+ private static String toString(BatteryUsageHistoricalLogEntry entry) {
+ final StringBuilder builder = new StringBuilder("\t")
+ .append(ConvertUtils.utcToLocalTimeForLogging(entry.getTimestamp()))
+ .append(" " + entry.getAction());
+ final String description = entry.getActionDescription();
+ if (description != null && !description.isEmpty()) {
+ builder.append(" " + description);
+ }
+ return builder.toString();
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java b/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java
index 9be378b..6d5082c 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/bugreport/LogUtils.java
@@ -39,6 +39,12 @@
private static final Duration DUMP_TIME_OFFSET_FOR_ENTRY = Duration.ofHours(4);
static void dumpBatteryUsageDatabaseHist(Context context, PrintWriter writer) {
+ // Dumps periodic job events.
+ writer.println("\nBattery PeriodicJob History:");
+ BatteryUsageLogUtils.printHistoricalLog(context, writer);
+ writer.flush();
+
+ // Dumps phenotype environments.
DatabaseUtils.dump(context, writer);
writer.flush();
final BatteryStateDao dao =
@@ -47,6 +53,7 @@
.batteryStateDao();
final long timeOffset =
Clock.systemUTC().millis() - DUMP_TIME_OFFSET.toMillis();
+
// Gets all distinct timestamps.
final List<Long> timestamps = dao.getDistinctTimestamps(timeOffset);
final int distinctCount = timestamps.size();
diff --git a/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProvider.java b/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProvider.java
new file mode 100644
index 0000000..7255107
--- /dev/null
+++ b/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProvider.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+
+import androidx.annotation.Nullable;
+import androidx.preference.PreferenceScreen;
+
+/**
+ * Provider for Keyboard settings related features.
+ */
+public interface KeyboardSettingsFeatureProvider {
+
+ /**
+ * Checks whether the connected device supports firmware update.
+ *
+ * @return true if the connected device supports firmware update.
+ */
+ boolean supportsFirmwareUpdate();
+
+ /**
+ * Add firmware update preference category .
+ *
+ * @param context The context to initialize the application with.
+ * @param screen The {@link PreferenceScreen} to add the firmware update preference category.
+ *
+ * @return true if the category is added successfully.
+ */
+ boolean addFirmwareUpdateCategory(Context context, PreferenceScreen screen);
+
+ /**
+ * Get custom action key icon.
+ *
+ * @param context Context for accessing resources.
+ *
+ * @return Returns the image of the icon, or null if there is no any custom icon.
+ */
+ @Nullable
+ Drawable getActionKeyIcon(Context context);
+}
diff --git a/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImpl.java b/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImpl.java
new file mode 100644
index 0000000..26b10e5
--- /dev/null
+++ b/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImpl.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+
+import androidx.preference.PreferenceScreen;
+
+/**
+ * Provider implementation for keyboard settings related features.
+ */
+public class KeyboardSettingsFeatureProviderImpl implements KeyboardSettingsFeatureProvider {
+
+ @Override
+ public boolean supportsFirmwareUpdate() {
+ return false;
+ }
+
+ @Override
+ public boolean addFirmwareUpdateCategory(Context context, PreferenceScreen screen) {
+ return false;
+ }
+
+ @Override
+ public Drawable getActionKeyIcon(Context context) {
+ return null;
+ };
+}
diff --git a/src/com/android/settings/inputmethod/KeyboardSettingsPreferenceController.java b/src/com/android/settings/inputmethod/KeyboardSettingsPreferenceController.java
index 03461af..ae6a24a 100644
--- a/src/com/android/settings/inputmethod/KeyboardSettingsPreferenceController.java
+++ b/src/com/android/settings/inputmethod/KeyboardSettingsPreferenceController.java
@@ -16,6 +16,7 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
@@ -53,8 +54,7 @@
if (mCachedDevice.getAddress().equals(hardKeyboardDeviceInfo.mBluetoothAddress)) {
Intent intent = new Intent(Settings.ACTION_HARD_KEYBOARD_SETTINGS);
intent.putExtra(
- NewKeyboardSettingsUtils.EXTRA_INTENT_FROM,
- "com.android.settings.inputmethod.KeyboardSettingsPreferenceController");
+ Settings.EXTRA_ENTRYPOINT, SettingsEnums.CONNECTED_DEVICES_SETTINGS);
intent.putExtra(
Settings.EXTRA_INPUT_DEVICE_IDENTIFIER,
hardKeyboardDeviceInfo.mDeviceIdentifier);
diff --git a/src/com/android/settings/inputmethod/ModifierKeysPickerDialogFragment.java b/src/com/android/settings/inputmethod/ModifierKeysPickerDialogFragment.java
index 949e656..28ead89 100644
--- a/src/com/android/settings/inputmethod/ModifierKeysPickerDialogFragment.java
+++ b/src/com/android/settings/inputmethod/ModifierKeysPickerDialogFragment.java
@@ -21,7 +21,9 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.hardware.input.InputManager;
import android.os.Bundle;
import android.text.Spannable;
@@ -39,11 +41,14 @@
import android.widget.ListView;
import android.widget.TextView;
+import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.DialogFragment;
import androidx.preference.Preference;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.Utils;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.ArrayList;
import java.util.Arrays;
@@ -60,6 +65,12 @@
private String mKeyDefaultName;
private String mKeyFocus;
private Activity mActivity;
+ private KeyboardSettingsFeatureProvider mFeatureProvider;
+ private Drawable mActionKeyDrawable;
+ private TextView mLeftBracket;
+ private TextView mRightBracket;
+ private ImageView mActionKeyIcon;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
private List<int[]> mRemappableKeyList =
new ArrayList<>(Arrays.asList(
@@ -83,6 +94,9 @@
super.onCreateDialog(savedInstanceState);
mActivity = getActivity();
+ mMetricsFeatureProvider = FeatureFactory.getFactory(mActivity).getMetricsFeatureProvider();
+ FeatureFactory featureFactory = FeatureFactory.getFactory(mActivity);
+ mFeatureProvider = featureFactory.getKeyboardSettingsFeatureProvider();
InputManager inputManager = mActivity.getSystemService(InputManager.class);
mKeyDefaultName = getArguments().getString(DEFAULT_KEY);
mKeyFocus = getArguments().getString(SELECTION_KEY);
@@ -97,6 +111,10 @@
for (int i = 0; i < modifierKeys.size(); i++) {
mRemappableKeyMap.put(modifierKeys.get(i), mRemappableKeyList.get(i));
}
+ Drawable drawable = mFeatureProvider.getActionKeyIcon(mActivity);
+ if (drawable != null) {
+ mActionKeyDrawable = DrawableCompat.wrap(drawable);
+ }
View dialoglayout =
LayoutInflater.from(mActivity).inflate(R.layout.modifier_key_picker_dialog, null);
@@ -125,6 +143,7 @@
doneButton.setOnClickListener(v -> {
String selectedItem = modifierKeys.get(adapter.getCurrentItem());
Spannable itemSummary;
+ logMetricsForRemapping(selectedItem);
if (selectedItem.equals(mKeyDefaultName)) {
itemSummary = new SpannableString(
mActivity.getString(R.string.modifier_keys_default_summary));
@@ -175,6 +194,28 @@
return modifierKeyDialog;
}
+ private void logMetricsForRemapping(String selectedItem) {
+ if (mKeyDefaultName.equals("Caps lock")) {
+ mMetricsFeatureProvider.action(
+ mActivity, SettingsEnums.ACTION_FROM_CAPS_LOCK_TO, selectedItem);
+ }
+
+ if (mKeyDefaultName.equals("Ctrl")) {
+ mMetricsFeatureProvider.action(
+ mActivity, SettingsEnums.ACTION_FROM_CTRL_TO, selectedItem);
+ }
+
+ if (mKeyDefaultName.equals("Action key")) {
+ mMetricsFeatureProvider.action(
+ mActivity, SettingsEnums.ACTION_FROM_ACTION_KEY_TO, selectedItem);
+ }
+
+ if (mKeyDefaultName.equals("Alt")) {
+ mMetricsFeatureProvider.action(
+ mActivity, SettingsEnums.ACTION_FROM_ALT_TO, selectedItem);
+ }
+ }
+
private void setInitialFocusItem(
List<String> modifierKeys, ModifierKeyAdapter adapter) {
if (modifierKeys.indexOf(mKeyFocus) == -1) {
@@ -226,10 +267,18 @@
checkIcon.setImageAlpha(255);
view.setBackground(
mActivity.getDrawable(R.drawable.modifier_key_lisetview_background));
+ if (mActionKeyDrawable != null && i == 2) {
+ setActionKeyIcon(view);
+ setActionKeyColor(getColorOfMaterialColorPrimary());
+ }
} else {
textView.setTextColor(getColorOfTextColorPrimary());
checkIcon.setImageAlpha(0);
view.setBackground(null);
+ if (mActionKeyDrawable != null && i == 2) {
+ setActionKeyIcon(view);
+ setActionKeyColor(getColorOfTextColorPrimary());
+ }
}
return view;
}
@@ -243,6 +292,21 @@
}
}
+ private void setActionKeyIcon(View view) {
+ mLeftBracket = view.findViewById(R.id.modifier_key_left_bracket);
+ mRightBracket = view.findViewById(R.id.modifier_key_right_bracket);
+ mActionKeyIcon = view.findViewById(R.id.modifier_key_action_key_icon);
+ mLeftBracket.setText("(");
+ mRightBracket.setText(")");
+ mActionKeyIcon.setImageDrawable(mActionKeyDrawable);
+ }
+
+ private void setActionKeyColor(int color) {
+ mLeftBracket.setTextColor(color);
+ mRightBracket.setTextColor(color);
+ DrawableCompat.setTint(mActionKeyDrawable, color);
+ }
+
private int getColorOfTextColorPrimary() {
return Utils.getColorAttrDefaultColor(mActivity, android.R.attr.textColorPrimary);
}
diff --git a/src/com/android/settings/inputmethod/ModifierKeysPreferenceController.java b/src/com/android/settings/inputmethod/ModifierKeysPreferenceController.java
index 5d8149a..77def48 100644
--- a/src/com/android/settings/inputmethod/ModifierKeysPreferenceController.java
+++ b/src/com/android/settings/inputmethod/ModifierKeysPreferenceController.java
@@ -17,12 +17,16 @@
package com.android.settings.inputmethod;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.hardware.input.InputManager;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
+import android.util.Pair;
import android.view.KeyEvent;
+import android.widget.ImageView;
+import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -31,7 +35,9 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.Utils;
+import com.android.settingslib.widget.LayoutPreference;
import java.util.ArrayList;
import java.util.Arrays;
@@ -53,6 +59,7 @@
private FragmentManager mFragmentManager;
private final InputManager mIm;
private PreferenceScreen mScreen;
+ private Drawable mDrawable;
private final List<Integer> mRemappableKeys = new ArrayList<>(
Arrays.asList(
@@ -61,6 +68,14 @@
KeyEvent.KEYCODE_ALT_LEFT, KeyEvent.KEYCODE_ALT_RIGHT,
KeyEvent.KEYCODE_CAPS_LOCK));
+ private final List<Pair<String, Integer>> mKeys = new ArrayList<>(
+ Arrays.asList(
+ Pair.create(KEY_PREFERENCE_CTRL, R.string.modifier_keys_ctrl),
+ Pair.create(KEY_PREFERENCE_META, R.string.modifier_keys_meta),
+ Pair.create(KEY_PREFERENCE_ALT, R.string.modifier_keys_alt),
+ Pair.create(KEY_PREFERENCE_CAPS_LOCK, R.string.modifier_keys_caps_lock)
+ ));
+
private String[] mKeyNames = new String[] {
mContext.getString(R.string.modifier_keys_ctrl),
mContext.getString(R.string.modifier_keys_ctrl),
@@ -74,6 +89,9 @@
super(context, key);
mIm = context.getSystemService(InputManager.class);
Objects.requireNonNull(mIm, "InputManager service cannot be null");
+ KeyboardSettingsFeatureProvider featureProvider =
+ FeatureFactory.getFactory(context).getKeyboardSettingsFeatureProvider();
+ mDrawable = featureProvider.getActionKeyIcon(context);
}
public void setFragment(Fragment parent) {
@@ -91,33 +109,59 @@
}
private void refreshUi() {
+ initDefaultKeysName();
for (Map.Entry<Integer, Integer> entry : mIm.getModifierKeyRemapping().entrySet()) {
int fromKey = entry.getKey();
int toKey = entry.getValue();
int index = mRemappableKeys.indexOf(toKey);
if (isCtrl(fromKey) && mRemappableKeys.contains(toKey)) {
- Preference preference = mScreen.findPreference(KEY_PREFERENCE_CTRL);
- preference.setSummary(changeSummaryColor(mKeyNames[index]));
+ setSummaryColor(KEY_PREFERENCE_CTRL, index);
}
if (isMeta(fromKey) && mRemappableKeys.contains(toKey)) {
- Preference preference = mScreen.findPreference(KEY_PREFERENCE_META);
- preference.setSummary(changeSummaryColor(mKeyNames[index]));
+ setSummaryColor(KEY_PREFERENCE_META, index);
}
if (isAlt(fromKey) && mRemappableKeys.contains(toKey)) {
- Preference preference = mScreen.findPreference(KEY_PREFERENCE_ALT);
- preference.setSummary(changeSummaryColor(mKeyNames[index]));
+ setSummaryColor(KEY_PREFERENCE_ALT, index);
}
if (isCapLock(fromKey) && mRemappableKeys.contains(toKey)) {
- Preference preference = mScreen.findPreference(KEY_PREFERENCE_CAPS_LOCK);
- preference.setSummary(changeSummaryColor(mKeyNames[index]));
+ setSummaryColor(KEY_PREFERENCE_CAPS_LOCK, index);
}
}
}
+ private void initDefaultKeysName() {
+ for (Pair<String, Integer> key : mKeys) {
+ LayoutPreference layoutPreference = mScreen.findPreference(key.first);
+ TextView title = layoutPreference.findViewById(R.id.title);
+ TextView summary = layoutPreference.findViewById(R.id.summary);
+ title.setText(key.second);
+ summary.setText(R.string.modifier_keys_default_summary);
+
+ if (key.first.equals(KEY_PREFERENCE_META) && mDrawable != null) {
+ setActionKeyIcon(layoutPreference, mDrawable);
+ }
+ }
+ }
+
+ private static void setActionKeyIcon(LayoutPreference preference, Drawable drawable) {
+ TextView leftBracket = preference.findViewById(R.id.modifier_key_left_bracket);
+ TextView rightBracket = preference.findViewById(R.id.modifier_key_right_bracket);
+ ImageView actionKeyIcon = preference.findViewById(R.id.modifier_key_action_key_icon);
+ leftBracket.setText("(");
+ rightBracket.setText(")");
+ actionKeyIcon.setImageDrawable(drawable);
+ }
+
+ private void setSummaryColor(String key, int targetIndex) {
+ LayoutPreference layoutPreference = mScreen.findPreference(key);
+ TextView summary = layoutPreference.findViewById(R.id.summary);
+ summary.setText(changeSummaryColor(mKeyNames[targetIndex]));
+ }
+
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (preference.getKey().equals(KEY_RESTORE_PREFERENCE)) {
@@ -137,12 +181,14 @@
ModifierKeysPickerDialogFragment fragment = new ModifierKeysPickerDialogFragment();
fragment.setTargetFragment(mParent, 0);
Bundle bundle = new Bundle();
+ TextView title = ((LayoutPreference) preference).findViewById(R.id.title);
+ TextView summary = ((LayoutPreference) preference).findViewById(R.id.summary);
bundle.putString(
ModifierKeysPickerDialogFragment.DEFAULT_KEY,
- preference.getTitle().toString());
+ title.getText().toString());
bundle.putString(
ModifierKeysPickerDialogFragment.SELECTION_KEY,
- preference.getSummary().toString());
+ summary.getText().toString());
fragment.setArguments(bundle);
fragment.show(mFragmentManager, KEY_TAG);
}
diff --git a/src/com/android/settings/inputmethod/ModifierKeysResetDialogFragment.java b/src/com/android/settings/inputmethod/ModifierKeysResetDialogFragment.java
index 755e9dd..fea6e65 100644
--- a/src/com/android/settings/inputmethod/ModifierKeysResetDialogFragment.java
+++ b/src/com/android/settings/inputmethod/ModifierKeysResetDialogFragment.java
@@ -21,6 +21,7 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.settings.SettingsEnums;
import android.hardware.input.InputManager;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -31,13 +32,18 @@
import androidx.fragment.app.DialogFragment;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class ModifierKeysResetDialogFragment extends DialogFragment {
+
private static final String MODIFIER_KEYS_CAPS_LOCK = "modifier_keys_caps_lock";
private static final String MODIFIER_KEYS_CTRL = "modifier_keys_ctrl";
private static final String MODIFIER_KEYS_META = "modifier_keys_meta";
private static final String MODIFIER_KEYS_ALT = "modifier_keys_alt";
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
private String[] mKeys = {
MODIFIER_KEYS_CAPS_LOCK,
MODIFIER_KEYS_CTRL,
@@ -51,6 +57,7 @@
super.onCreateDialog(savedInstanceState);
Activity activity = getActivity();
+ mMetricsFeatureProvider = FeatureFactory.getFactory(activity).getMetricsFeatureProvider();
InputManager inputManager = activity.getSystemService(InputManager.class);
View dialoglayout =
LayoutInflater.from(activity).inflate(R.layout.modifier_key_reset_dialog, null);
@@ -60,6 +67,7 @@
Button restoreButton = dialoglayout.findViewById(R.id.modifier_key_reset_restore_button);
restoreButton.setOnClickListener(v -> {
+ mMetricsFeatureProvider.action(activity, SettingsEnums.ACTION_CLEAR_REMAPPINGS);
inputManager.clearAllModifierKeyRemappings();
dismiss();
activity.recreate();
diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java
index 1af001b..11740ec 100644
--- a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java
+++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java
@@ -20,10 +20,6 @@
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
-import android.hardware.input.KeyboardLayout;
-import android.os.Bundle;
-import android.view.inputmethod.InputMethodInfo;
-import android.view.inputmethod.InputMethodSubtype;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -32,55 +28,23 @@
private static final String TAG = "KeyboardLayoutPicker";
- private InputManager mIm;
- private int mUserId;
- private InputDeviceIdentifier mIdentifier;
- private InputMethodInfo mInputMethodInfo;
- private InputMethodSubtype mInputMethodSubtype;
-
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mIm = getContext().getSystemService(InputManager.class);
- Bundle arguments = getArguments();
- final CharSequence title = arguments.getCharSequence(NewKeyboardSettingsUtils.EXTRA_TITLE);
- mUserId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID);
- mIdentifier =
- arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
- mInputMethodInfo =
- arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO);
- mInputMethodSubtype =
- arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);
- if (mIdentifier == null
- || NewKeyboardSettingsUtils.getInputDevice(mIm, mIdentifier) == null) {
+ InputManager im = getContext().getSystemService(InputManager.class);
+ InputDeviceIdentifier identifier =
+ getArguments().getParcelable(
+ NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
+ if (identifier == null
+ || NewKeyboardSettingsUtils.getInputDevice(im, identifier) == null) {
getActivity().finish();
return;
}
- getActivity().setTitle(title);
- use(NewKeyboardLayoutPickerController.class).initialize(this /*parent*/, mUserId,
- mIdentifier, mInputMethodInfo, mInputMethodSubtype, getSelectedLayoutLabel());
- }
-
- private String getSelectedLayoutLabel() {
- String label = getContext().getString(R.string.keyboard_default_layout);
- String layout = NewKeyboardSettingsUtils.getKeyboardLayout(
- mIm, mUserId, mIdentifier, mInputMethodInfo, mInputMethodSubtype);
- KeyboardLayout[] keyboardLayouts = NewKeyboardSettingsUtils.getKeyboardLayouts(
- mIm, mUserId, mIdentifier, mInputMethodInfo, mInputMethodSubtype);
- if (layout != null) {
- for (int i = 0; i < keyboardLayouts.length; i++) {
- if (keyboardLayouts[i].getDescriptor().equals(layout)) {
- label = keyboardLayouts[i].getLabel();
- break;
- }
- }
- }
- return label;
+ use(NewKeyboardLayoutPickerController.class).initialize(this);
}
@Override
public int getMetricsCategory() {
- // TODO: add new SettingsEnums SETTINGS_KEYBOARDS_LAYOUT_PICKER_CONTENT
return SettingsEnums.SETTINGS_KEYBOARDS_LAYOUT_PICKER;
}
diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java
index 8278be8..65b1c62 100644
--- a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java
+++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java
@@ -16,10 +16,12 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
import android.hardware.input.InputManager;
import android.hardware.input.KeyboardLayout;
+import android.os.Bundle;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype;
@@ -27,8 +29,11 @@
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -38,38 +43,47 @@
public class NewKeyboardLayoutPickerController extends BasePreferenceController implements
InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop {
+
private final InputManager mIm;
private final Map<TickButtonPreference, KeyboardLayout> mPreferenceMap;
-
private Fragment mParent;
+ private CharSequence mTitle;
private int mInputDeviceId;
private int mUserId;
private InputDeviceIdentifier mInputDeviceIdentifier;
private InputMethodInfo mInputMethodInfo;
private InputMethodSubtype mInputMethodSubtype;
-
private KeyboardLayout[] mKeyboardLayouts;
private PreferenceScreen mScreen;
private String mPreviousSelection;
+ private String mFinalSelectedLayout;
private String mLayout;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
public NewKeyboardLayoutPickerController(Context context, String key) {
super(context, key);
mIm = context.getSystemService(InputManager.class);
mInputDeviceId = -1;
mPreferenceMap = new HashMap<>();
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
- public void initialize(Fragment parent, int userId, InputDeviceIdentifier inputDeviceIdentifier,
- InputMethodInfo imeInfo, InputMethodSubtype imeSubtype, String layout) {
+ public void initialize(Fragment parent) {
mParent = parent;
- mUserId = userId;
- mInputDeviceIdentifier = inputDeviceIdentifier;
- mInputMethodInfo = imeInfo;
- mInputMethodSubtype = imeSubtype;
- mLayout = layout;
+ Bundle arguments = parent.getArguments();
+ mTitle = arguments.getCharSequence(NewKeyboardSettingsUtils.EXTRA_TITLE);
+ mUserId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID);
+ mInputDeviceIdentifier =
+ arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER);
+ mInputMethodInfo =
+ arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO);
+ mInputMethodSubtype =
+ arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE);
+ mLayout = getSelectedLayoutLabel();
+ mFinalSelectedLayout = mLayout;
mKeyboardLayouts = mIm.getKeyboardLayoutListForInputDevice(
- inputDeviceIdentifier, userId, imeInfo, imeSubtype);
+ mInputDeviceIdentifier, mUserId, mInputMethodInfo, mInputMethodSubtype);
+ parent.getActivity().setTitle(mTitle);
}
@Override
@@ -85,6 +99,11 @@
@Override
public void onStop() {
+ if (!mLayout.equals(mFinalSelectedLayout)) {
+ String change = "From:" + mLayout + ", to:" + mFinalSelectedLayout;
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_PK_LAYOUT_CHANGED, change);
+ }
mIm.unregisterInputDeviceListener(this);
mInputDeviceId = -1;
}
@@ -115,6 +134,7 @@
}
setLayout(pref);
mPreviousSelection = preference.getKey();
+ mFinalSelectedLayout = pref.getTitle().toString();
return true;
}
@@ -162,4 +182,21 @@
mInputMethodSubtype,
mPreferenceMap.get(preference).getDescriptor());
}
+
+ private String getSelectedLayoutLabel() {
+ String label = mContext.getString(R.string.keyboard_default_layout);
+ String layout = NewKeyboardSettingsUtils.getKeyboardLayout(
+ mIm, mUserId, mInputDeviceIdentifier, mInputMethodInfo, mInputMethodSubtype);
+ KeyboardLayout[] keyboardLayouts = NewKeyboardSettingsUtils.getKeyboardLayouts(
+ mIm, mUserId, mInputDeviceIdentifier, mInputMethodInfo, mInputMethodSubtype);
+ if (layout != null) {
+ for (KeyboardLayout keyboardLayout : keyboardLayouts) {
+ if (keyboardLayout.getDescriptor().equals(layout)) {
+ label = keyboardLayout.getLabel();
+ break;
+ }
+ }
+ }
+ return label;
+ }
}
diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerTitle.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerTitle.java
index abcad27..7f87826 100644
--- a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerTitle.java
+++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerTitle.java
@@ -34,8 +34,7 @@
@Override
public int getMetricsCategory() {
- // TODO: add new SettingsEnums SETTINGS_KEYBOARDS_LAYOUT_PICKER_TITLE
- return SettingsEnums.SETTINGS_KEYBOARDS_LAYOUT_PICKER;
+ return SettingsEnums.SETTINGS_KEYBOARDS_LAYOUT_PICKER_TITLE;
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
diff --git a/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java b/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java
index 697c0f0..ad68c43 100644
--- a/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java
+++ b/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java
@@ -33,12 +33,6 @@
*/
public class NewKeyboardSettingsUtils {
- /**
- * Record the class name of the intent sender for metrics.
- */
- public static final String EXTRA_INTENT_FROM =
- "com.android.settings.inputmethod.EXTRA_INTENT_FROM";
-
static final String EXTRA_TITLE = "keyboard_layout_picker_title";
static final String EXTRA_USER_ID = "user_id";
static final String EXTRA_INPUT_DEVICE_IDENTIFIER = "input_device_identifier";
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 936de38..289d7c1 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -48,6 +48,7 @@
import com.android.settings.Settings;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.ThreadUtils;
@@ -75,6 +76,7 @@
private InputManager mIm;
private InputMethodManager mImm;
private InputDeviceIdentifier mAutoInputDeviceIdentifier;
+ private KeyboardSettingsFeatureProvider mFeatureProvider;
@NonNull
private PreferenceCategory mKeyboardAssistanceCategory;
@NonNull
@@ -82,6 +84,7 @@
private Intent mIntentWaitingForResult;
private boolean mIsNewKeyboardSettings;
+ private boolean mSupportsFirmwareUpdate;
static final String EXTRA_BT_ADDRESS = "extra_bt_address";
private String mBluetoothAddress;
@@ -104,6 +107,13 @@
(SwitchPreference) mKeyboardAssistanceCategory.findPreference(
SHOW_VIRTUAL_KEYBOARD_SWITCH));
+ FeatureFactory featureFactory = FeatureFactory.getFactory(getContext());
+ mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
+ mFeatureProvider = featureFactory.getKeyboardSettingsFeatureProvider();
+ mSupportsFirmwareUpdate = mFeatureProvider.supportsFirmwareUpdate();
+ if (mSupportsFirmwareUpdate) {
+ mFeatureProvider.addFirmwareUpdateCategory(getContext(), getPreferenceScreen());
+ }
mIsNewKeyboardSettings = FeatureFlagUtils.isEnabled(
getContext(), FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_UI);
boolean isModifierKeySettingsEnabled = FeatureFlagUtils
@@ -113,7 +123,12 @@
}
InputDeviceIdentifier inputDeviceIdentifier = activity.getIntent().getParcelableExtra(
KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER);
- // TODO (b/271391879): The EXTRA_INTENT_FROM is used for the future metrics.
+ int intentFromWhere =
+ activity.getIntent().getIntExtra(android.provider.Settings.EXTRA_ENTRYPOINT, -1);
+ if (intentFromWhere != -1) {
+ mMetricsFeatureProvider.action(
+ getContext(), SettingsEnums.ACTION_OPEN_PK_SETTINGS_FROM, intentFromWhere);
+ }
if (inputDeviceIdentifier != null) {
mAutoInputDeviceIdentifier = inputDeviceIdentifier;
}
@@ -244,9 +259,16 @@
});
}
category.addPreference(pref);
+ mMetricsFeatureProvider.action(
+ getContext(),
+ SettingsEnums.ACTION_USE_SPECIFIC_KEYBOARD,
+ hardKeyboardDeviceInfo.mDeviceName);
}
mKeyboardAssistanceCategory.setOrder(1);
preferenceScreen.addPreference(mKeyboardAssistanceCategory);
+ if (mSupportsFirmwareUpdate) {
+ mFeatureProvider.addFirmwareUpdateCategory(getPrefContext(), preferenceScreen);
+ }
updateShowVirtualKeyboardSwitch();
}
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
index 1f01b98..b88928c 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
@@ -16,6 +16,7 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.hardware.input.InputManager;
@@ -66,9 +67,7 @@
return false;
}
Intent intent = new Intent(Settings.ACTION_HARD_KEYBOARD_SETTINGS);
- intent.putExtra(
- NewKeyboardSettingsUtils.EXTRA_INTENT_FROM,
- "com.android.settings.inputmethod.PhysicalKeyboardPreferenceController");
+ intent.putExtra(Settings.EXTRA_ENTRYPOINT, SettingsEnums.KEYBOARD_SETTINGS);
mContext.startActivity(intent);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java
index 7efa637..f0ee1fd 100644
--- a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java
@@ -16,6 +16,7 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.util.FeatureFlagUtils;
@@ -23,6 +24,8 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.ButtonPreference;
public class TouchGesturesButtonPreferenceController extends BasePreferenceController {
@@ -33,9 +36,11 @@
private static final String GESTURE_DIALOG_TAG = "GESTURE_DIALOG_TAG";
private Fragment mParent;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
public TouchGesturesButtonPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
public void setFragment(Fragment parent) {
@@ -63,12 +68,11 @@
@Override
public int getAvailabilityStatus() {
- boolean touchGestureDeveloperMode = FeatureFlagUtils
- .isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD_GESTURE);
- return touchGestureDeveloperMode ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ return AVAILABLE;
}
private void showTouchpadGestureEducation() {
+ mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_LEARN_TOUCHPAD_GESTURE_CLICK);
TrackpadGestureDialogFragment fragment = new TrackpadGestureDialogFragment();
fragment.setTargetFragment(mParent, 0);
fragment.show(mParent.getActivity().getSupportFragmentManager(), GESTURE_DIALOG_TAG);
diff --git a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
index 5133d04..1cf1f6f 100644
--- a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
@@ -16,16 +16,22 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputSettings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadBottomPreferenceController extends TogglePreferenceController {
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadBottomPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -36,6 +42,8 @@
@Override
public boolean setChecked(boolean isChecked) {
InputSettings.setTouchpadRightClickZone(mContext, isChecked);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_BOTTOM_RIGHT_TAP_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceController.java
index 017689d..11d7cf3 100644
--- a/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceController.java
@@ -16,18 +16,24 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadGoBackPreferenceController extends TogglePreferenceController {
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_BACK_ENABLED;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadGoBackPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -38,6 +44,8 @@
@Override
public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_GO_BACK_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceController.java b/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceController.java
index 18699e3..5027e2f 100644
--- a/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceController.java
@@ -16,18 +16,24 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadGoHomePreferenceController extends TogglePreferenceController {
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_HOME_ENABLED;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadGoHomePreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -38,6 +44,8 @@
@Override
public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_GO_HOME_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceController.java
index 21f04a3..0fb28d7 100644
--- a/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceController.java
@@ -16,18 +16,24 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadNotificationsPreferenceController extends TogglePreferenceController {
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_NOTIFICATION_ENABLED;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadNotificationsPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -38,6 +44,8 @@
@Override
public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_NOTIFICATION_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
index 71b4119..58b4772 100644
--- a/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
@@ -16,20 +16,25 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputSettings;
import androidx.preference.PreferenceScreen;
import com.android.settings.core.SliderPreferenceController;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.SeekBarPreference;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadPointerSpeedPreferenceController extends SliderPreferenceController {
private SeekBarPreference mPreference;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
public TrackpadPointerSpeedPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -53,6 +58,8 @@
return false;
}
InputSettings.setTouchpadPointerSpeed(mContext, position);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_POINTER_SPEED_CHANGED, position);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java
index eab2b33..878cbe3 100644
--- a/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java
@@ -16,18 +16,24 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadRecentAppsPreferenceController extends TogglePreferenceController {
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_OVERVIEW_ENABLED;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadRecentAppsPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -38,6 +44,8 @@
@Override
public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_RECENT_APPS_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
index 10d3013..2b74c74 100644
--- a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
@@ -16,16 +16,22 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputSettings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadReverseScrollingPreferenceController extends TogglePreferenceController {
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadReverseScrollingPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -36,6 +42,8 @@
@Override
public boolean setChecked(boolean isChecked) {
InputSettings.setTouchpadNaturalScrolling(mContext, !isChecked);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_REVERSE_SCROLLING_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java
index 84de64e..cfca856 100644
--- a/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java
@@ -16,18 +16,24 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadSwitchAppsPreferenceController extends TogglePreferenceController {
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_QUICK_SWITCH_ENABLED;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadSwitchAppsPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -38,6 +44,8 @@
@Override
public boolean setChecked(boolean isChecked) {
Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_SWITCH_APPS_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
index 8655307..9ee446b 100644
--- a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
@@ -16,16 +16,22 @@
package com.android.settings.inputmethod;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputSettings;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class TrackpadTapToClickPreferenceController extends TogglePreferenceController {
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+
public TrackpadTapToClickPreferenceController(Context context, String key) {
super(context, key);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
}
@Override
@@ -36,6 +42,8 @@
@Override
public boolean setChecked(boolean isChecked) {
InputSettings.setTouchpadTapToClick(mContext, isChecked);
+ mMetricsFeatureProvider.action(
+ mContext, SettingsEnums.ACTION_GESTURE_TAP_TO_CLICK_CHANGED, isChecked);
return true;
}
diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
index 092207b..d1e1137 100644
--- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -18,6 +18,7 @@
import android.app.FragmentTransaction;
import android.app.LocaleManager;
+import android.app.settings.SettingsEnums;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
@@ -37,15 +38,22 @@
import com.android.settings.applications.AppLocaleUtil;
import com.android.settings.applications.appinfo.AppLocaleDetails;
import com.android.settings.core.SettingsBaseActivity;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class AppLocalePickerActivity extends SettingsBaseActivity
implements LocalePickerWithRegion.LocaleSelectedListener, MenuItem.OnActionExpandListener {
private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
+ private static final int SIM_LOCALE = 1 << 0;
+ private static final int SYSTEM_LOCALE = 1 << 1;
+ private static final int APP_LOCALE = 1 << 2;
+ private static final int IME_LOCALE = 1 << 3;
private String mPackageName;
private LocalePickerWithRegion mLocalePickerWithRegion;
private AppLocaleDetails mAppLocaleDetails;
private View mAppLocaleDetailContainer;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -71,6 +79,7 @@
setTitle(R.string.app_locale_picker_title);
getActionBar().setDisplayHomeAsUpEnabled(true);
+ mMetricsFeatureProvider = FeatureFactory.getFactory(this).getMetricsFeatureProvider();
mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
this,
@@ -99,6 +108,7 @@
if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) {
setAppDefaultLocale("");
} else {
+ logLocaleSource(localeInfo);
setAppDefaultLocale(localeInfo.getLocale().toLanguageTag());
}
finish();
@@ -177,4 +187,32 @@
return false;
}
+
+ private void logLocaleSource(LocaleStore.LocaleInfo localeInfo) {
+ if (!localeInfo.isSuggested() || localeInfo.isAppCurrentLocale()) {
+ return;
+ }
+ int localeSource = 0;
+ if (hasSuggestionType(localeInfo,
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)) {
+ localeSource |= SYSTEM_LOCALE;
+ }
+ if (hasSuggestionType(localeInfo,
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)) {
+ localeSource |= APP_LOCALE;
+ }
+ if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)) {
+ localeSource |= IME_LOCALE;
+ }
+ if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)) {
+ localeSource |= SIM_LOCALE;
+ }
+ mMetricsFeatureProvider.action(this,
+ SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED, localeSource);
+ }
+
+ private static boolean hasSuggestionType(LocaleStore.LocaleInfo localeInfo,
+ int suggestionType) {
+ return localeInfo.isSuggestionOfType(suggestionType);
+ }
}
diff --git a/src/com/android/settings/localepicker/LocaleDialogFragment.java b/src/com/android/settings/localepicker/LocaleDialogFragment.java
index ad9e10f..6c37e38 100644
--- a/src/com/android/settings/localepicker/LocaleDialogFragment.java
+++ b/src/com/android/settings/localepicker/LocaleDialogFragment.java
@@ -16,6 +16,8 @@
package com.android.settings.localepicker;
+import static android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT;
+
import android.app.Activity;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
@@ -23,15 +25,17 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.FragmentManager;
import com.android.internal.app.LocaleStore;
import com.android.settings.R;
@@ -53,6 +57,12 @@
static final String ARG_SHOW_DIALOG = "arg_show_dialog";
private boolean mShouldKeepDialog;
+ private AlertDialog mAlertDialog;
+ private OnBackInvokedDispatcher mBackDispatcher;
+
+ private OnBackInvokedCallback mBackCallback = () -> {
+ Log.d(TAG, "Do not back to previous page if the dialog is displaying.");
+ };
public static LocaleDialogFragment newInstance() {
return new LocaleDialogFragment();
@@ -108,9 +118,15 @@
if (!dialogContent.mNegativeButton.isEmpty()) {
builder.setNegativeButton(dialogContent.mNegativeButton, controller);
}
- AlertDialog alertDialog = builder.create();
- alertDialog.setCanceledOnTouchOutside(false);
- return alertDialog;
+ mAlertDialog = builder.create();
+ getOnBackInvokedDispatcher().registerOnBackInvokedCallback(PRIORITY_DEFAULT, mBackCallback);
+ mAlertDialog.setCanceledOnTouchOutside(false);
+ mAlertDialog.setOnDismissListener(dialogInterface -> {
+ mAlertDialog.getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(
+ mBackCallback);
+ });
+
+ return mAlertDialog;
}
private static void setDialogTitle(View root, String content) {
@@ -130,6 +146,25 @@
}
@VisibleForTesting
+ public OnBackInvokedCallback getBackInvokedCallback() {
+ return mBackCallback;
+ }
+
+ @VisibleForTesting
+ public void setBackDispatcher(OnBackInvokedDispatcher dispatcher) {
+ mBackDispatcher = dispatcher;
+ }
+
+ @VisibleForTesting
+ public OnBackInvokedDispatcher getOnBackInvokedDispatcher() {
+ if (mBackDispatcher != null) {
+ return mBackDispatcher;
+ } else {
+ return mAlertDialog.getOnBackInvokedDispatcher();
+ }
+ }
+
+ @VisibleForTesting
LocaleDialogController getLocaleDialogController(Context context,
LocaleDialogFragment dialogFragment, LocaleListEditor parentFragment) {
return new LocaleDialogController(context, dialogFragment, parentFragment);
@@ -155,24 +190,22 @@
mParent = parentFragment;
}
- LocaleDialogController(@NonNull LocaleDialogFragment dialogFragment,
- LocaleListEditor parent) {
- this(dialogFragment.getContext(), dialogFragment, parent);
- }
-
@Override
public void onClick(DialogInterface dialog, int which) {
if (mDialogType == DIALOG_CONFIRM_SYSTEM_DEFAULT) {
int result = Activity.RESULT_CANCELED;
+ boolean changed = false;
if (which == DialogInterface.BUTTON_POSITIVE) {
result = Activity.RESULT_OK;
+ changed = true;
}
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt(ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
intent.putExtras(bundle);
mParent.onActivityResult(DIALOG_CONFIRM_SYSTEM_DEFAULT, result, intent);
- mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE);
+ mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE,
+ changed);
}
mShouldKeepDialog = false;
}
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index edd3026..f703c83 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -16,6 +16,7 @@
package com.android.settings.localepicker;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
@@ -37,6 +38,7 @@
import com.android.internal.app.LocalePicker;
import com.android.internal.app.LocaleStore;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.shortcut.ShortcutsUpdateTask;
import java.text.NumberFormat;
@@ -210,6 +212,13 @@
Log.e(TAG, String.format(Locale.US,
"Negative position in onItemMove %d -> %d", fromPosition, toPosition));
}
+
+ if (fromPosition != toPosition) {
+ FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+ .action(mContext, SettingsEnums.ACTION_REORDER_LANGUAGE,
+ mDragLocale.getLocale().toLanguageTag() + " move to " + toPosition);
+ }
+
notifyItemChanged(fromPosition); // to update the numbers
notifyItemChanged(toPosition);
notifyItemMoved(fromPosition, toPosition);
@@ -244,8 +253,13 @@
void removeChecked() {
int itemCount = mFeedItemList.size();
+ LocaleStore.LocaleInfo localeInfo;
for (int i = itemCount - 1; i >= 0; i--) {
- if (mFeedItemList.get(i).getChecked()) {
+ localeInfo = mFeedItemList.get(i);
+ if (localeInfo.getChecked()) {
+ FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+ .action(mContext, SettingsEnums.ACTION_REMOVE_LANGUAGE,
+ localeInfo.getLocale().toLanguageTag());
mFeedItemList.remove(i);
}
}
@@ -381,10 +395,13 @@
// drag locale's original position to the top.
mDragLocale = (LocaleStore.LocaleInfo) savedInstanceState.getSerializable(
CFGKEY_DRAG_LOCALE);
- mFeedItemList.removeIf(
- localeInfo -> TextUtils.equals(localeInfo.getId(), mDragLocale.getId()));
- mFeedItemList.add(0, mDragLocale);
- notifyItemRangeChanged(0, mFeedItemList.size());
+ if (mDragLocale != null) {
+ mFeedItemList.removeIf(
+ localeInfo -> TextUtils.equals(localeInfo.getId(),
+ mDragLocale.getId()));
+ mFeedItemList.add(0, mDragLocale);
+ notifyItemRangeChanged(0, mFeedItemList.size());
+ }
}
}
}
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 7ec08f7..65563ad 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -104,7 +104,6 @@
addPreferencesFromResource(R.xml.languages);
final Activity activity = getActivity();
- activity.setTitle(R.string.language_picker_title);
mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(activity);
final PreferenceScreen screen = getPreferenceScreen();
mLocalePickerPreference = screen.findPreference(KEY_LANGUAGES_PICKER);
@@ -200,9 +199,11 @@
localeInfo = (LocaleStore.LocaleInfo) data.getSerializableExtra(INTENT_LOCALE_KEY);
String preferencesTags = Settings.System.getString(
getContext().getContentResolver(), Settings.System.LOCALE_PREFERENCES);
-
- mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags));
+ localeInfo = mayAppendUnicodeTags(localeInfo, preferencesTags);
+ mAdapter.addLocale(localeInfo);
updateVisibilityOfRemoveMenu();
+ mMetricsFeatureProvider.action(getContext(), SettingsEnums.ACTION_ADD_LANGUAGE,
+ localeInfo.getLocale().toLanguageTag());
} else if (requestCode == DIALOG_CONFIRM_SYSTEM_DEFAULT) {
localeInfo = mAdapter.getFeedItemList().get(0);
if (resultCode == Activity.RESULT_OK) {
@@ -215,6 +216,9 @@
LocaleDialogFragment localeDialogFragment = LocaleDialogFragment.newInstance();
localeDialogFragment.setArguments(args);
localeDialogFragment.show(mFragmentManager, TAG_DIALOG_NOT_AVAILABLE);
+ mMetricsFeatureProvider.action(getContext(),
+ SettingsEnums.ACTION_NOT_SUPPORTED_SYSTEM_LANGUAGE,
+ localeInfo.getLocale().toLanguageTag());
}
} else {
mAdapter.notifyListChanged(localeInfo);
@@ -318,7 +322,13 @@
// to remove.
mRemoveMode = false;
mShowingRemoveDialog = false;
+ LocaleStore.LocaleInfo firstLocale =
+ mAdapter.getFeedItemList().get(0);
mAdapter.removeChecked();
+ boolean isFirstRemoved =
+ firstLocale != mAdapter.getFeedItemList().get(0);
+ showConfirmDialog(isFirstRemoved, isFirstRemoved ? firstLocale
+ : mAdapter.getFeedItemList().get(0));
setRemoveMode(false);
}
})
@@ -358,12 +368,12 @@
final LocaleLinearLayoutManager llm = new LocaleLinearLayoutManager(getContext(), mAdapter);
llm.setAutoMeasureEnabled(true);
list.setLayoutManager(llm);
-
list.setHasFixedSize(true);
list.setNestedScrollingEnabled(false);
mAdapter.setRecyclerView(list);
list.setAdapter(mAdapter);
list.setOnTouchListener(this);
+ list.requestFocus();
mAddLanguage = layout.findViewById(R.id.add_language);
mAddLanguage.setOnClickListener(new View.OnClickListener() {
@@ -384,22 +394,27 @@
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP
|| event.getAction() == MotionEvent.ACTION_CANCEL) {
- LocaleStore.LocaleInfo localeInfo = mAdapter.getFeedItemList().get(0);
- if (!localeInfo.getLocale().equals(LocalePicker.getLocales().get(0))) {
- final LocaleDialogFragment localeDialogFragment =
- LocaleDialogFragment.newInstance();
- Bundle args = new Bundle();
- args.putInt(LocaleDialogFragment.ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
- args.putSerializable(LocaleDialogFragment.ARG_TARGET_LOCALE, localeInfo);
- localeDialogFragment.setArguments(args);
- localeDialogFragment.show(mFragmentManager, TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT);
- } else {
- mAdapter.doTheUpdate();
- }
+ showConfirmDialog(false, mAdapter.getFeedItemList().get(0));
}
return false;
}
+ private void showConfirmDialog(boolean isFirstRemoved, LocaleStore.LocaleInfo localeInfo) {
+ Locale currentSystemLocale = LocalePicker.getLocales().get(0);
+ if (!localeInfo.getLocale().equals(currentSystemLocale)) {
+ final LocaleDialogFragment localeDialogFragment =
+ LocaleDialogFragment.newInstance();
+ Bundle args = new Bundle();
+ args.putInt(LocaleDialogFragment.ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
+ args.putSerializable(LocaleDialogFragment.ARG_TARGET_LOCALE,
+ isFirstRemoved ? LocaleStore.getLocaleInfo(currentSystemLocale) : localeInfo);
+ localeDialogFragment.setArguments(args);
+ localeDialogFragment.show(mFragmentManager, TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT);
+ } else {
+ mAdapter.doTheUpdate();
+ }
+ }
+
// Hide the "Remove" menu if there is only one locale in the list, show it otherwise
// This is called when the menu is first created, and then one add / remove locale
private void updateVisibilityOfRemoveMenu() {
diff --git a/src/com/android/settings/localepicker/LocaleRecyclerView.java b/src/com/android/settings/localepicker/LocaleRecyclerView.java
deleted file mode 100644
index 4a5f28b..0000000
--- a/src/com/android/settings/localepicker/LocaleRecyclerView.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 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.localepicker;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-
-import androidx.recyclerview.widget.RecyclerView;
-
-class LocaleRecyclerView extends RecyclerView {
- public LocaleRecyclerView(Context context) {
- super(context);
- }
-
- public LocaleRecyclerView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public LocaleRecyclerView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-}
diff --git a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
index 32903bd..0200e52 100644
--- a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
+++ b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
@@ -23,7 +23,6 @@
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.RecoverySystem;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -62,7 +61,7 @@
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.reset_esim_title)
.setMessage(R.string.reset_esim_desc)
- .setPositiveButton(R.string.erase_euicc_data_button, this)
+ .setPositiveButton(R.string.erase_sim_confirm_button, this)
.setNegativeButton(R.string.cancel, null)
.setOnDismissListener(this)
.create();
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 9d953bf..0cd12fe 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -23,6 +23,7 @@
import android.annotation.Nullable;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.ParcelUuid;
import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
@@ -61,6 +62,10 @@
public class SubscriptionUtil {
private static final String TAG = "SubscriptionUtil";
private static final String PROFILE_GENERIC_DISPLAY_NAME = "CARD";
+ @VisibleForTesting
+ static final String SUB_ID = "sub_id";
+ @VisibleForTesting
+ static final String KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME = "unique_subscription_displayName";
private static List<SubscriptionInfo> sAvailableResultsForTesting;
private static List<SubscriptionInfo> sActiveResultsForTesting;
@@ -265,20 +270,21 @@
// Map of SubscriptionId to DisplayName
final Supplier<Stream<DisplayInfo>> originalInfos =
() -> getAvailableSubscriptions(context)
- .stream()
- .filter(i -> {
- // Filter out null values.
- return (i != null && i.getDisplayName() != null);
- })
- .map(i -> {
- DisplayInfo info = new DisplayInfo();
- info.subscriptionInfo = i;
- String displayName = i.getDisplayName().toString();
- info.originalName = TextUtils.equals(displayName, PROFILE_GENERIC_DISPLAY_NAME)
- ? context.getResources().getString(R.string.sim_card)
- : displayName.trim();
- return info;
- });
+ .stream()
+ .filter(i -> {
+ // Filter out null values.
+ return (i != null && i.getDisplayName() != null);
+ })
+ .map(i -> {
+ DisplayInfo info = new DisplayInfo();
+ info.subscriptionInfo = i;
+ String displayName = i.getDisplayName().toString();
+ info.originalName =
+ TextUtils.equals(displayName, PROFILE_GENERIC_DISPLAY_NAME)
+ ? context.getResources().getString(R.string.sim_card)
+ : displayName.trim();
+ return info;
+ });
// TODO(goldmanj) consider using a map of DisplayName to SubscriptionInfos.
// A Unique set of display names
@@ -292,6 +298,14 @@
// If a display name is duplicate, append the final 4 digits of the phone number.
// Creates a mapping of Subscription id to original display name + phone number display name
final Supplier<Stream<DisplayInfo>> uniqueInfos = () -> originalInfos.get().map(info -> {
+ String cachedDisplayName = getDisplayNameFromSharedPreference(
+ context, info.subscriptionInfo.getSubscriptionId());
+ if (!TextUtils.isEmpty(cachedDisplayName)) {
+ Log.d(TAG, "use cached display name : " + cachedDisplayName);
+ info.uniqueName = cachedDisplayName;
+ return info;
+ }
+
if (duplicateOriginalNames.contains(info.originalName)) {
// This may return null, if the user cannot view the phone number itself.
final String phoneNumber = getBidiFormattedPhoneNumber(context,
@@ -299,15 +313,17 @@
String lastFourDigits = "";
if (phoneNumber != null) {
lastFourDigits = (phoneNumber.length() > 4)
- ? phoneNumber.substring(phoneNumber.length() - 4) : phoneNumber;
+ ? phoneNumber.substring(phoneNumber.length() - 4) : phoneNumber;
}
-
if (TextUtils.isEmpty(lastFourDigits)) {
info.uniqueName = info.originalName;
} else {
info.uniqueName = info.originalName + " " + lastFourDigits;
+ Log.d(TAG, "Cache display name [" + info.uniqueName + "] for sub id "
+ + info.subscriptionInfo.getSubscriptionId());
+ saveDisplayNameToSharedPreference(
+ context, info.subscriptionInfo.getSubscriptionId(), info.uniqueName);
}
-
} else {
info.uniqueName = info.originalName;
}
@@ -371,6 +387,27 @@
return getUniqueSubscriptionDisplayName(info.getSubscriptionId(), context);
}
+
+ private static SharedPreferences getDisplayNameSharedPreferences(Context context) {
+ return context.getSharedPreferences(
+ KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME, Context.MODE_PRIVATE);
+ }
+
+ private static SharedPreferences.Editor getDisplayNameSharedPreferenceEditor(Context context) {
+ return getDisplayNameSharedPreferences(context).edit();
+ }
+
+ private static void saveDisplayNameToSharedPreference(
+ Context context, int subId, CharSequence displayName) {
+ getDisplayNameSharedPreferenceEditor(context)
+ .putString(SUB_ID + subId, String.valueOf(displayName))
+ .apply();
+ }
+
+ private static String getDisplayNameFromSharedPreference(Context context, int subid) {
+ return getDisplayNameSharedPreferences(context).getString(SUB_ID + subid, "");
+ }
+
public static String getDisplayName(SubscriptionInfo info) {
final CharSequence name = info.getDisplayName();
if (name != null) {
diff --git a/src/com/android/settings/network/telephony/AbstractMobileNetworkSettings.java b/src/com/android/settings/network/telephony/AbstractMobileNetworkSettings.java
index 245ac83..7addb59 100644
--- a/src/com/android/settings/network/telephony/AbstractMobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/AbstractMobileNetworkSettings.java
@@ -18,7 +18,6 @@
import android.os.SystemClock;
import android.text.TextUtils;
-import android.util.Log;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -66,8 +65,7 @@
TelephonyStatusControlSession setTelephonyAvailabilityStatus(
Collection<AbstractPreferenceController> listOfPrefControllers) {
- return (new TelephonyStatusControlSession.Builder(listOfPrefControllers))
- .build();
+ return new TelephonyStatusControlSession(listOfPrefControllers, getLifecycle());
}
@Override
diff --git a/src/com/android/settings/network/telephony/TelephonyStatusControlSession.java b/src/com/android/settings/network/telephony/TelephonyStatusControlSession.java
deleted file mode 100644
index 3716f1f..0000000
--- a/src/com/android/settings/network/telephony/TelephonyStatusControlSession.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2020 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 android.util.Log;
-
-import com.android.settings.core.BasePreferenceController;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.utils.ThreadUtils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-/**
- * Session for controlling the status of TelephonyPreferenceController(s).
- *
- * Within this session, result of {@link BasePreferenceController#availabilityStatus()}
- * would be under control.
- */
-public class TelephonyStatusControlSession implements AutoCloseable {
-
- private static final String LOG_TAG = "TelephonyStatusControlSS";
-
- private Collection<AbstractPreferenceController> mControllers;
- private Collection<Future<Boolean>> mResult = new ArrayList<>();
-
- /**
- * Buider of session
- */
- public static class Builder {
- private Collection<AbstractPreferenceController> mControllers;
-
- /**
- * Constructor
- *
- * @param controllers is a collection of {@link AbstractPreferenceController}
- * which would have {@link BasePreferenceController#availabilityStatus()}
- * under control within this session.
- */
- public Builder(Collection<AbstractPreferenceController> controllers) {
- mControllers = controllers;
- }
-
- /**
- * Method to build this session.
- * @return {@link TelephonyStatusControlSession} session been setup.
- */
- public TelephonyStatusControlSession build() {
- return new TelephonyStatusControlSession(mControllers);
- }
- }
-
- private TelephonyStatusControlSession(Collection<AbstractPreferenceController> controllers) {
- mControllers = controllers;
- controllers.forEach(prefCtrl -> mResult
- .add(ThreadUtils.postOnBackgroundThread(() -> setupAvailabilityStatus(prefCtrl))));
-
- }
-
- /**
- * Close the session.
- *
- * No longer control the status.
- */
- public void close() {
- //check the background thread is finished then unset the status of availability.
-
- for (Future<Boolean> result : mResult) {
- try {
- result.get();
- } catch (ExecutionException | InterruptedException exception) {
- Log.e(LOG_TAG, "setup availability status failed!", exception);
- }
- }
- unsetAvailabilityStatus(mControllers);
- }
-
- private Boolean setupAvailabilityStatus(AbstractPreferenceController controller) {
- try {
- if (controller instanceof TelephonyAvailabilityHandler) {
- int status = ((BasePreferenceController) controller)
- .getAvailabilityStatus();
- ((TelephonyAvailabilityHandler) controller).setAvailabilityStatus(status);
- }
- return true;
- } catch (Exception exception) {
- Log.e(LOG_TAG, "Setup availability status failed!", exception);
- return false;
- }
- }
-
- private void unsetAvailabilityStatus(
- Collection<AbstractPreferenceController> controllerLists) {
- controllerLists.stream()
- .filter(controller -> controller instanceof TelephonyAvailabilityHandler)
- .map(TelephonyAvailabilityHandler.class::cast)
- .forEach(controller -> {
- controller.unsetAvailabilityStatus();
- });
- }
-}
diff --git a/src/com/android/settings/network/telephony/TelephonyStatusControlSession.kt b/src/com/android/settings/network/telephony/TelephonyStatusControlSession.kt
new file mode 100644
index 0000000..0e63c8c
--- /dev/null
+++ b/src/com/android/settings/network/telephony/TelephonyStatusControlSession.kt
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2023 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 android.util.Log
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.coroutineScope
+import com.android.settings.core.BasePreferenceController
+import com.android.settingslib.core.AbstractPreferenceController
+import com.google.common.collect.Sets
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.yield
+
+/**
+ * Session for controlling the status of TelephonyPreferenceController(s).
+ *
+ * Within this session, result of [BasePreferenceController.getAvailabilityStatus]
+ * would be under control.
+ */
+class TelephonyStatusControlSession(
+ private val controllers: Collection<AbstractPreferenceController>,
+ lifecycle: Lifecycle,
+) : AutoCloseable {
+ private var job: Job? = null
+ private val controllerSet = Sets.newConcurrentHashSet<TelephonyAvailabilityHandler>()
+
+ init {
+ job = lifecycle.coroutineScope.launch(Dispatchers.Default) {
+ for (controller in controllers) {
+ launch {
+ setupAvailabilityStatus(controller)
+ }
+ }
+ }
+ }
+
+ /**
+ * Close the session.
+ *
+ * No longer control the status.
+ */
+ override fun close() {
+ job?.cancel()
+ unsetAvailabilityStatus()
+ }
+
+ private suspend fun setupAvailabilityStatus(controller: AbstractPreferenceController): Boolean =
+ try {
+ if (controller is TelephonyAvailabilityHandler) {
+ val status = (controller as BasePreferenceController).availabilityStatus
+ yield() // prompt cancellation guarantee
+ if (controllerSet.add(controller)) {
+ controller.setAvailabilityStatus(status)
+ }
+ }
+ true
+ } catch (exception: Exception) {
+ Log.e(LOG_TAG, "Setup availability status failed!", exception)
+ false
+ }
+
+ private fun unsetAvailabilityStatus() {
+ for (controller in controllerSet) {
+ controller.unsetAvailabilityStatus()
+ }
+ }
+
+ companion object {
+ private const val LOG_TAG = "TelephonyStatusControlSS"
+ }
+}
diff --git a/src/com/android/settings/notification/SeekBarVolumizerFactory.java b/src/com/android/settings/notification/SeekBarVolumizerFactory.java
new file mode 100644
index 0000000..6fac2c1
--- /dev/null
+++ b/src/com/android/settings/notification/SeekBarVolumizerFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2023 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 android.content.Context;
+import android.net.Uri;
+import android.preference.SeekBarVolumizer;
+
+/**
+ * Testable wrapper around {@link SeekBarVolumizer} constructor.
+ */
+public class SeekBarVolumizerFactory {
+ private final Context mContext;
+
+ public SeekBarVolumizerFactory(Context context) {
+ mContext = context;
+ }
+
+ /**
+ * Creates a new SeekBarVolumizer.
+ *
+ * @param streamType of the audio manager.
+ * @param defaultUri of the volume.
+ * @param sbvc callback of the seekbar volumizer.
+ * @return a SeekBarVolumizer.
+ */
+ public SeekBarVolumizer create(int streamType, Uri defaultUri, SeekBarVolumizer.Callback sbvc) {
+ return new SeekBarVolumizer(mContext, streamType, defaultUri, sbvc);
+ }
+}
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreference.java b/src/com/android/settings/notification/VolumeSeekBarPreference.java
index 0000eba..9f14b73 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreference.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreference.java
@@ -37,6 +37,8 @@
import com.android.settings.R;
import com.android.settings.widget.SeekBarPreference;
+import java.text.NumberFormat;
+import java.util.Locale;
import java.util.Objects;
/** A slider preference that directly controls an audio stream volume (no dialog) **/
@@ -47,8 +49,9 @@
protected SeekBar mSeekBar;
private int mStream;
+ private SeekBarVolumizer mVolumizer;
@VisibleForTesting
- SeekBarVolumizer mVolumizer;
+ SeekBarVolumizerFactory mSeekBarVolumizerFactory;
private Callback mCallback;
private Listener mListener;
private ImageView mIconView;
@@ -62,30 +65,36 @@
private boolean mStopped;
@VisibleForTesting
AudioManager mAudioManager;
+ private Locale mLocale;
+ private NumberFormat mNumberFormat;
public VolumeSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setLayoutResource(R.layout.preference_volume_slider);
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mSeekBarVolumizerFactory = new SeekBarVolumizerFactory(context);
}
public VolumeSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setLayoutResource(R.layout.preference_volume_slider);
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mSeekBarVolumizerFactory = new SeekBarVolumizerFactory(context);
}
public VolumeSeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setLayoutResource(R.layout.preference_volume_slider);
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mSeekBarVolumizerFactory = new SeekBarVolumizerFactory(context);
}
public VolumeSeekBarPreference(Context context) {
super(context);
setLayoutResource(R.layout.preference_volume_slider);
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ mSeekBarVolumizerFactory = new SeekBarVolumizerFactory(context);
}
public void setStream(int stream) {
@@ -143,6 +152,7 @@
if (mCallback != null) {
mCallback.onStreamValueChanged(mStream, progress);
}
+ overrideSeekBarStateDescription(formatStateDescription(progress));
}
@Override
public void onMuted(boolean muted, boolean zenMuted) {
@@ -170,7 +180,7 @@
};
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
if (mVolumizer == null) {
- mVolumizer = new SeekBarVolumizer(getContext(), mStream, sampleUri, sbvc);
+ mVolumizer = mSeekBarVolumizerFactory.create(mStream, sampleUri, sbvc);
}
mVolumizer.start();
mVolumizer.setSeekBar(mSeekBar);
@@ -216,6 +226,33 @@
+ "/" + R.raw.media_volume);
}
+ @VisibleForTesting
+ CharSequence formatStateDescription(int progress) {
+ // This code follows the same approach in ProgressBar.java, but it rounds down the percent
+ // to match it with what the talkback feature says after any progress change. (b/285458191)
+ // Cache the locale-appropriate NumberFormat. Configuration locale is guaranteed
+ // non-null, so the first time this is called we will always get the appropriate
+ // NumberFormat, then never regenerate it unless the locale changes on the fly.
+ Locale curLocale = getContext().getResources().getConfiguration().getLocales().get(0);
+ if (mLocale == null || !mLocale.equals(curLocale)) {
+ mLocale = curLocale;
+ mNumberFormat = NumberFormat.getPercentInstance(mLocale);
+ }
+ return mNumberFormat.format(getPercent(progress));
+ }
+
+ @VisibleForTesting
+ double getPercent(float progress) {
+ final float maxProgress = getMax();
+ final float minProgress = getMin();
+ final float diffProgress = maxProgress - minProgress;
+ if (diffProgress <= 0.0f) {
+ return 0.0f;
+ }
+ final float percent = (progress - minProgress) / diffProgress;
+ return Math.floor(Math.max(0.0f, Math.min(1.0f, percent)) * 100) / 100;
+ }
+
public void setSuppressionText(String text) {
if (Objects.equals(text, mSuppressionText)) return;
mSuppressionText = text;
diff --git a/src/com/android/settings/notification/app/ConversationListPreferenceController.java b/src/com/android/settings/notification/app/ConversationListPreferenceController.java
index f893df3..6703e4e 100644
--- a/src/com/android/settings/notification/app/ConversationListPreferenceController.java
+++ b/src/com/android/settings/notification/app/ConversationListPreferenceController.java
@@ -23,6 +23,7 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.service.notification.ConversationChannelWrapper;
+import android.text.BidiFormatter;
import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
@@ -132,7 +133,7 @@
CharSequence getTitle(ConversationChannelWrapper conversation) {
ShortcutInfo si = conversation.getShortcutInfo();
return si != null
- ? si.getLabel()
+ ? BidiFormatter.getInstance().unicodeWrap(si.getLabel())
: conversation.getNotificationChannel().getName();
}
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index c536a38..97fc343 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -31,6 +31,7 @@
import com.android.settings.biometrics.face.FaceFeatureProvider;
import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
import com.android.settings.bluetooth.BluetoothFeatureProvider;
+import com.android.settings.connecteddevice.stylus.StylusFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider;
@@ -40,6 +41,7 @@
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.panel.PanelFeatureProvider;
import com.android.settings.search.SearchFeatureProvider;
@@ -130,8 +132,7 @@
/**
* Gets implementation for Battery Settings provider.
*/
- public abstract BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(
- Context context);
+ public abstract BatterySettingsFeatureProvider getBatterySettingsFeatureProvider();
public abstract DashboardFeatureProvider getDashboardFeatureProvider(Context context);
@@ -204,6 +205,16 @@
*/
public abstract WifiFeatureProvider getWifiFeatureProvider();
+ /**
+ * Retrieves implementation for keyboard settings feature.
+ */
+ public abstract KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider();
+
+ /**
+ * Retrieves implementation for stylus settings feature.
+ */
+ public abstract StylusFeatureProvider getStylusFeatureProvider();
+
public static final class FactoryNotFoundException extends RuntimeException {
public FactoryNotFoundException(Throwable throwable) {
super("Unable to create factory. Did you misconfigure Proguard?", throwable);
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 3ddda47..8c92792 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -42,6 +42,8 @@
import com.android.settings.bluetooth.BluetoothFeatureProvider;
import com.android.settings.bluetooth.BluetoothFeatureProviderImpl;
import com.android.settings.connecteddevice.dock.DockUpdaterFeatureProviderImpl;
+import com.android.settings.connecteddevice.stylus.StylusFeatureProvider;
+import com.android.settings.connecteddevice.stylus.StylusFeatureProviderImpl;
import com.android.settings.core.instrumentation.SettingsMetricsFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProviderImpl;
@@ -61,6 +63,8 @@
import com.android.settings.gestures.AssistGestureFeatureProviderImpl;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProviderImpl;
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProviderImpl;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProviderImpl;
import com.android.settings.panel.PanelFeatureProvider;
@@ -116,6 +120,8 @@
private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
private AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
private WifiFeatureProvider mWifiFeatureProvider;
+ private KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
+ private StylusFeatureProvider mStylusFeatureProvider;
@Override
public HardwareInfoFeatureProvider getHardwareInfoFeatureProvider() {
@@ -154,9 +160,9 @@
}
@Override
- public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(Context context) {
+ public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider() {
if (mBatterySettingsFeatureProvider == null) {
- mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl(context);
+ mBatterySettingsFeatureProvider = new BatterySettingsFeatureProviderImpl();
}
return mBatterySettingsFeatureProvider;
}
@@ -372,4 +378,20 @@
}
return mWifiFeatureProvider;
}
+
+ @Override
+ public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
+ if (mKeyboardSettingsFeatureProvider == null) {
+ mKeyboardSettingsFeatureProvider = new KeyboardSettingsFeatureProviderImpl();
+ }
+ return mKeyboardSettingsFeatureProvider;
+ }
+
+ @Override
+ public StylusFeatureProvider getStylusFeatureProvider() {
+ if (mStylusFeatureProvider == null) {
+ mStylusFeatureProvider = new StylusFeatureProviderImpl();
+ }
+ return mStylusFeatureProvider;
+ }
}
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 4c4795c..0bf1255 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -33,6 +33,7 @@
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_DEVICE_PASSWORD_REQUIREMENT_ONLY;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_IS_CALLING_APP_ADMIN;
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
+import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW;
import android.app.Activity;
import android.app.Dialog;
@@ -795,6 +796,9 @@
if (getIntent().getBooleanExtra(EXTRA_SHOW_OPTIONS_BUTTON, false)) {
intent.putExtra(EXTRA_SHOW_OPTIONS_BUTTON, chooseLockSkipped);
}
+ if (getIntent().getBooleanExtra(EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, false)) {
+ intent.putExtra(EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, true);
+ }
intent.putExtra(EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS, getIntent().getExtras());
// If the caller requested Gatekeeper Password Handle to be returned, we assume it
// came from biometric enrollment. onActivityResult will put the LockSettingsService
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 16c4f5b..09d1924 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -65,7 +65,6 @@
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
-import android.util.Pair;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -74,9 +73,11 @@
import android.view.inputmethod.EditorInfo;
import android.widget.CheckBox;
import android.widget.ImeAwareEditText;
+import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -87,7 +88,6 @@
import com.android.internal.widget.LockscreenCredential;
import com.android.internal.widget.PasswordValidationError;
import com.android.internal.widget.TextViewInputDisabler;
-import com.android.internal.widget.VerifyCredentialResponse;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SetupWizardUtils;
@@ -234,6 +234,7 @@
private LockscreenCredential mCurrentCredential;
private LockscreenCredential mChosenPassword;
private boolean mRequestGatekeeperPassword;
+ private boolean mRequestWriteRepairModePassword;
private ImeAwareEditText mPasswordEntry;
private TextViewInputDisabler mPasswordEntryInputDisabler;
@@ -517,7 +518,9 @@
|| DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == mPasswordType
|| DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == mPasswordType;
- setupPasswordRequirementsView(view);
+ final LinearLayout headerLayout = view.findViewById(
+ R.id.sud_layout_header);
+ setupPasswordRequirementsView(headerLayout);
mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity()));
mPasswordEntry = view.findViewById(R.id.password_entry);
@@ -561,6 +564,8 @@
ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD);
mRequestGatekeeperPassword = intent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false);
+ mRequestWriteRepairModePassword = intent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, false);
if (savedInstanceState == null) {
updateStage(Stage.Introduction);
if (confirmCredentials) {
@@ -570,6 +575,7 @@
.setTitle(getString(R.string.unlock_set_unlock_launch_picker_title))
.setReturnCredentials(true)
.setRequestGatekeeperPasswordHandle(mRequestGatekeeperPassword)
+ .setRequestWriteRepairModePassword(mRequestWriteRepairModePassword)
.setUserId(mUserId)
.show();
}
@@ -626,11 +632,33 @@
}
}
- private void setupPasswordRequirementsView(View view) {
- mPasswordRestrictionView = view.findViewById(R.id.password_requirements_view);
+ private void setupPasswordRequirementsView(@Nullable ViewGroup view) {
+ if (view == null) {
+ return;
+ }
+
+ createHintMessageView(view);
mPasswordRestrictionView.setLayoutManager(new LinearLayoutManager(getActivity()));
- mPasswordRequirementAdapter = new PasswordRequirementAdapter();
+ mPasswordRequirementAdapter = new PasswordRequirementAdapter(getActivity());
mPasswordRestrictionView.setAdapter(mPasswordRequirementAdapter);
+ view.addView(mPasswordRestrictionView);
+ }
+
+ private void createHintMessageView(ViewGroup view) {
+ if (mPasswordRestrictionView != null) {
+ return;
+ }
+
+ final TextView sucTitleView = view.findViewById(R.id.suc_layout_title);
+ final ViewGroup.MarginLayoutParams titleLayoutParams =
+ (ViewGroup.MarginLayoutParams) sucTitleView.getLayoutParams();
+ mPasswordRestrictionView = new RecyclerView(getActivity());
+ final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ lp.setMargins(titleLayoutParams.leftMargin, getResources().getDimensionPixelSize(
+ R.dimen.password_requirement_view_margin_top), titleLayoutParams.leftMargin, 0);
+ mPasswordRestrictionView.setLayoutParams(lp);
}
@Override
@@ -1009,7 +1037,10 @@
setNextEnabled(false);
mSaveAndFinishWorker = new SaveAndFinishWorker();
- mSaveAndFinishWorker.setListener(this);
+ mSaveAndFinishWorker
+ .setListener(this)
+ .setRequestGatekeeperPasswordHandle(mRequestGatekeeperPassword)
+ .setRequestWriteRepairModePassword(mRequestWriteRepairModePassword);
getFragmentManager().beginTransaction().add(mSaveAndFinishWorker,
FRAGMENT_TAG_SAVE_AND_FINISH).commit();
@@ -1029,7 +1060,7 @@
(mAutoPinConfirmOption != null && mAutoPinConfirmOption.isChecked()),
mUserId);
- mSaveAndFinishWorker.start(mLockPatternUtils, mRequestGatekeeperPassword,
+ mSaveAndFinishWorker.start(mLockPatternUtils,
mChosenPassword, mCurrentCredential, mUserId);
}
@@ -1082,50 +1113,4 @@
}
}
}
-
- public static class SaveAndFinishWorker extends SaveChosenLockWorkerBase {
-
- private LockscreenCredential mChosenPassword;
- private LockscreenCredential mCurrentCredential;
-
- public void start(LockPatternUtils utils, boolean requestGatekeeperPassword,
- LockscreenCredential chosenPassword, LockscreenCredential currentCredential,
- int userId) {
- prepare(utils, requestGatekeeperPassword, userId);
-
- mChosenPassword = chosenPassword;
- mCurrentCredential = currentCredential != null ? currentCredential
- : LockscreenCredential.createNone();
- mUserId = userId;
-
- start();
- }
-
- @Override
- protected Pair<Boolean, Intent> saveAndVerifyInBackground() {
- final boolean success = mUtils.setLockCredential(
- mChosenPassword, mCurrentCredential, mUserId);
- if (success) {
- unifyProfileCredentialIfRequested();
- }
- Intent result = null;
- if (success && mRequestGatekeeperPassword) {
- // If a Gatekeeper Password was requested, invoke the LockSettingsService code
- // path to return a Gatekeeper Password based on the credential that the user
- // chose. This should only be run if the credential was successfully set.
- final VerifyCredentialResponse response = mUtils.verifyCredential(mChosenPassword,
- mUserId, LockPatternUtils.VERIFY_FLAG_REQUEST_GK_PW_HANDLE);
-
- if (!response.isMatched() || !response.containsGatekeeperPasswordHandle()) {
- Log.e(TAG, "critical: bad response or missing GK PW handle for known good"
- + " password: " + response.toString());
- }
-
- result = new Intent();
- result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE,
- response.getGatekeeperPasswordHandle());
- }
- return Pair.create(success, result);
- }
- }
}
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index a2fd986..7569c15 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -34,7 +34,6 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log;
-import android.util.Pair;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -53,7 +52,6 @@
import com.android.internal.widget.LockPatternView.Cell;
import com.android.internal.widget.LockPatternView.DisplayMode;
import com.android.internal.widget.LockscreenCredential;
-import com.android.internal.widget.VerifyCredentialResponse;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SetupWizardUtils;
@@ -206,6 +204,7 @@
private LockscreenCredential mCurrentCredential;
private boolean mRequestGatekeeperPassword;
+ private boolean mRequestWriteRepairModePassword;
protected TextView mHeaderText;
protected LockPatternView mLockPatternView;
protected TextView mFooterText;
@@ -563,6 +562,8 @@
intent.getParcelableExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD);
mRequestGatekeeperPassword = intent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false);
+ mRequestWriteRepairModePassword = intent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, false);
if (savedInstanceState == null) {
if (confirmCredentials) {
@@ -576,6 +577,7 @@
.setTitle(getString(R.string.unlock_set_unlock_launch_picker_title))
.setReturnCredentials(true)
.setRequestGatekeeperPasswordHandle(mRequestGatekeeperPassword)
+ .setRequestWriteRepairModePassword(mRequestWriteRepairModePassword)
.setUserId(mUserId)
.show();
@@ -827,7 +829,10 @@
setRightButtonEnabled(false);
mSaveAndFinishWorker = new SaveAndFinishWorker();
- mSaveAndFinishWorker.setListener(this);
+ mSaveAndFinishWorker
+ .setListener(this)
+ .setRequestGatekeeperPasswordHandle(mRequestGatekeeperPassword)
+ .setRequestWriteRepairModePassword(mRequestWriteRepairModePassword);
getFragmentManager().beginTransaction().add(mSaveAndFinishWorker,
FRAGMENT_TAG_SAVE_AND_FINISH).commit();
@@ -843,7 +848,7 @@
profileCredential);
}
}
- mSaveAndFinishWorker.start(mLockPatternUtils, mRequestGatekeeperPassword,
+ mSaveAndFinishWorker.start(mLockPatternUtils,
mChosenPattern, mCurrentCredential, mUserId);
}
@@ -867,63 +872,4 @@
getActivity().finish();
}
}
-
- public static class SaveAndFinishWorker extends SaveChosenLockWorkerBase {
-
- private LockscreenCredential mChosenPattern;
- private LockscreenCredential mCurrentCredential;
- private boolean mLockVirgin;
-
- public void start(LockPatternUtils utils, boolean requestGatekeeperPassword,
- LockscreenCredential chosenPattern, LockscreenCredential currentCredential,
- int userId) {
- prepare(utils, requestGatekeeperPassword, userId);
-
- mCurrentCredential = currentCredential != null ? currentCredential
- : LockscreenCredential.createNone();
- mChosenPattern = chosenPattern;
- mUserId = userId;
-
- mLockVirgin = !mUtils.isPatternEverChosen(mUserId);
-
- start();
- }
-
- @Override
- protected Pair<Boolean, Intent> saveAndVerifyInBackground() {
- final int userId = mUserId;
- final boolean success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential,
- userId);
- if (success) {
- unifyProfileCredentialIfRequested();
- }
- Intent result = null;
- if (success && mRequestGatekeeperPassword) {
- // If a Gatekeeper Password was requested, invoke the LockSettingsService code
- // path to return a Gatekeeper Password based on the credential that the user
- // chose. This should only be run if the credential was successfully set.
- final VerifyCredentialResponse response = mUtils.verifyCredential(mChosenPattern,
- userId, LockPatternUtils.VERIFY_FLAG_REQUEST_GK_PW_HANDLE);
-
- if (!response.isMatched() || !response.containsGatekeeperPasswordHandle()) {
- Log.e(TAG, "critical: bad response or missing GK PW handle for known good"
- + " pattern: " + response.toString());
- }
-
- result = new Intent();
- result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE,
- response.getGatekeeperPasswordHandle());
- }
- return Pair.create(success, result);
- }
-
- @Override
- protected void finish(Intent resultData) {
- if (mLockVirgin) {
- mUtils.setVisiblePatternEnabled(true, mUserId);
- }
-
- super.finish(resultData);
- }
- }
}
diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java
index 216f7db..e5fc550 100644
--- a/src/com/android/settings/password/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java
@@ -71,6 +71,10 @@
// Gatekeeper password handle, which can subsequently be used to generate Gatekeeper
// HardwareAuthToken(s) via LockSettingsService#verifyGatekeeperPasswordHandle
public static final String EXTRA_KEY_GK_PW_HANDLE = "gk_pw_handle";
+ public static final String EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW =
+ "request_write_repair_mode_pw";
+ public static final String EXTRA_KEY_WROTE_REPAIR_MODE_CREDENTIAL =
+ "wrote_repair_mode_credential";
/**
* When EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL and EXTRA_KEY_UNIFICATION_PROFILE_ID are
@@ -152,6 +156,7 @@
@Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
@Nullable private ComponentName mRemoteLockscreenValidationServiceComponent;
private boolean mRequestGatekeeperPasswordHandle;
+ private boolean mRequestWriteRepairModePassword;
private boolean mTaskOverlay;
public Builder(@NonNull Activity activity) {
@@ -336,6 +341,17 @@
}
/**
+ * @param requestWriteRepairModePassword Set {@code true} to request that
+ * LockSettingsService writes the password data to the repair mode file after the user
+ * credential is verified successfully.
+ */
+ @NonNull public Builder setRequestWriteRepairModePassword(
+ boolean requestWriteRepairModePassword) {
+ mRequestWriteRepairModePassword = requestWriteRepairModePassword;
+ return this;
+ }
+
+ /**
* Support of ActivityResultLauncher.
*
* Which allowing the launch operation be controlled externally.
@@ -348,7 +364,8 @@
}
@NonNull public ChooseLockSettingsHelper build() {
- if (!mAllowAnyUserId && mUserId != LockPatternUtils.USER_FRP) {
+ if (!mAllowAnyUserId && mUserId != LockPatternUtils.USER_FRP
+ && mUserId != LockPatternUtils.USER_REPAIR_MODE) {
Utils.enforceSameOwner(mActivity, mUserId);
}
@@ -385,7 +402,7 @@
mBuilder.mRemoteLockscreenValidationSession,
mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId,
mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle,
- mBuilder.mTaskOverlay);
+ mBuilder.mRequestWriteRepairModePassword, mBuilder.mTaskOverlay);
}
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
@@ -396,7 +413,7 @@
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
- boolean taskOverlay) {
+ boolean requestWriteRepairModePassword, boolean taskOverlay) {
Optional<Class<?>> activityClass = determineAppropriateActivityClass(
returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession);
if (activityClass.isEmpty()) {
@@ -407,7 +424,7 @@
returnCredentials, external, forceVerifyPath, userId, alternateButton,
checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession,
remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly,
- requestGatekeeperPasswordHandle, taskOverlay);
+ requestGatekeeperPasswordHandle, requestWriteRepairModePassword, taskOverlay);
}
private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header,
@@ -418,7 +435,7 @@
@Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession,
@Nullable ComponentName remoteLockscreenValidationServiceComponent,
boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle,
- boolean taskOverlay) {
+ boolean requestWriteRepairModePassword, boolean taskOverlay) {
final Intent intent = new Intent();
intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title);
intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header);
@@ -442,6 +459,8 @@
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, allowAnyUser);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE,
requestGatekeeperPasswordHandle);
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW,
+ requestWriteRepairModePassword);
intent.setClassName(SETTINGS_PACKAGE_NAME, activityClass.getName());
intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE,
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index fabca6b..f2f6520 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -23,6 +23,7 @@
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PASSWORD;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN;
import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN;
+import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import android.app.Activity;
import android.app.KeyguardManager;
@@ -32,6 +33,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.graphics.Color;
import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricPrompt;
@@ -166,11 +168,18 @@
mDetails = intent.getCharSequenceExtra(KeyguardManager.EXTRA_DESCRIPTION);
String alternateButton = intent.getStringExtra(
KeyguardManager.EXTRA_ALTERNATE_BUTTON_LABEL);
- boolean frp = KeyguardManager.ACTION_CONFIRM_FRP_CREDENTIAL.equals(intent.getAction());
- boolean remoteValidation =
+ final boolean frp =
+ KeyguardManager.ACTION_CONFIRM_FRP_CREDENTIAL.equals(intent.getAction());
+ final boolean repairMode =
+ KeyguardManager.ACTION_CONFIRM_REPAIR_MODE_DEVICE_CREDENTIAL
+ .equals(intent.getAction());
+ final boolean remoteValidation =
KeyguardManager.ACTION_CONFIRM_REMOTE_DEVICE_CREDENTIAL.equals(intent.getAction());
mTaskOverlay = isInternalActivity()
&& intent.getBooleanExtra(KeyguardManager.EXTRA_FORCE_TASK_OVERLAY, false);
+ final boolean prepareRepairMode =
+ KeyguardManager.ACTION_PREPARE_REPAIR_MODE_DEVICE_CREDENTIAL.equals(
+ intent.getAction());
mUserId = UserHandle.myUserId();
if (isInternalActivity()) {
@@ -219,6 +228,14 @@
.setExternal(true)
.setUserId(LockPatternUtils.USER_FRP)
.show();
+ } else if (repairMode) {
+ final ChooseLockSettingsHelper.Builder builder =
+ new ChooseLockSettingsHelper.Builder(this);
+ launchedCDC = builder.setHeader(mTitle)
+ .setDescription(mDetails)
+ .setExternal(true)
+ .setUserId(LockPatternUtils.USER_REPAIR_MODE)
+ .show();
} else if (remoteValidation) {
RemoteLockscreenValidationSession remoteLockscreenValidationSession =
intent.getParcelableExtra(
@@ -244,6 +261,17 @@
.setExternal(true)
.show();
return;
+ } else if (prepareRepairMode) {
+ final ChooseLockSettingsHelper.Builder builder =
+ new ChooseLockSettingsHelper.Builder(this);
+ launchedCDC = builder.setHeader(mTitle)
+ .setDescription(mDetails)
+ .setExternal(true)
+ .setUserId(mUserId)
+ .setTaskOverlay(mTaskOverlay)
+ .setRequestWriteRepairModePassword(true)
+ .setForceVerifyPath(true)
+ .show();
} else if (isEffectiveUserManagedProfile && isInternalActivity()) {
mCredentialMode = CREDENTIAL_MANAGED;
if (isBiometricAllowed(effectiveUserId, mUserId)) {
@@ -353,6 +381,12 @@
// Translucent activity that is "visible", so it doesn't complain about finish()
// not being called before onResume().
setVisible(true);
+
+ if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)
+ != Configuration.UI_MODE_NIGHT_YES) {
+ getWindow().getInsetsController().setSystemBarsAppearance(
+ APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS);
+ }
}
@Override
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
index f4cfabc..43d8440 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseFragment.java
@@ -105,6 +105,8 @@
protected final Handler mHandler = new Handler();
protected boolean mFrp;
protected boolean mRemoteValidation;
+ protected boolean mRequestWriteRepairModePassword;
+ protected boolean mRepairMode;
protected CharSequence mAlternateButtonText;
protected BiometricManager mBiometricManager;
@Nullable protected RemoteLockscreenValidationSession mRemoteLockscreenValidationSession;
@@ -130,6 +132,8 @@
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, false);
mForceVerifyPath = intent.getBooleanExtra(
ChooseLockSettingsHelper.EXTRA_KEY_FORCE_VERIFY, false);
+ mRequestWriteRepairModePassword = intent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_WRITE_REPAIR_MODE_PW, false);
if (intent.getBooleanExtra(IS_REMOTE_LOCKSCREEN_VALIDATION, false)) {
if (FeatureFlagUtils.isEnabled(getContext(),
@@ -178,6 +182,7 @@
mUserId = Utils.getUserIdFromBundle(getActivity(), intent.getExtras(),
isInternalActivity());
mFrp = (mUserId == LockPatternUtils.USER_FRP);
+ mRepairMode = (mUserId == LockPatternUtils.USER_REPAIR_MODE);
mUserManager = UserManager.get(getActivity());
mEffectiveUserId = mUserManager.getCredentialOwnerProfile(mUserId);
mLockPatternUtils = new LockPatternUtils(getActivity());
@@ -266,7 +271,7 @@
// verifyTiedProfileChallenge. In such case, we also wanna show the user message that
// fingerprint is disabled due to device restart.
protected boolean isStrongAuthRequired() {
- return mFrp
+ return mFrp || mRepairMode
|| !mLockPatternUtils.isBiometricAllowedForUser(mEffectiveUserId)
|| !mUserManager.isUserUnlocked(mUserId);
}
diff --git a/src/com/android/settings/password/ConfirmLockPassword.java b/src/com/android/settings/password/ConfirmLockPassword.java
index 03b89f2..8d0ff14 100644
--- a/src/com/android/settings/password/ConfirmLockPassword.java
+++ b/src/com/android/settings/password/ConfirmLockPassword.java
@@ -125,7 +125,7 @@
public static class ConfirmLockPasswordFragment extends ConfirmDeviceCredentialBaseFragment
implements OnClickListener, OnEditorActionListener,
- CredentialCheckResultTracker.Listener, SaveChosenLockWorkerBase.Listener,
+ CredentialCheckResultTracker.Listener, SaveAndFinishWorker.Listener,
RemoteLockscreenValidationFragment.Listener {
private static final String FRAGMENT_TAG_CHECK_LOCK_RESULT = "check_lock_result";
private ImeAwareEditText mPasswordEntry;
@@ -284,6 +284,11 @@
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_header_frp)
: getString(R.string.lockpassword_confirm_your_pin_header_frp);
}
+ if (mRepairMode) {
+ return mIsAlpha
+ ? getString(R.string.lockpassword_confirm_repair_mode_password_header)
+ : getString(R.string.lockpassword_confirm_repair_mode_pin_header);
+ }
if (mRemoteValidation) {
return getString(R.string.lockpassword_remote_validation_header);
}
@@ -307,6 +312,11 @@
return mIsAlpha ? getString(R.string.lockpassword_confirm_your_password_details_frp)
: getString(R.string.lockpassword_confirm_your_pin_details_frp);
}
+ if (mRepairMode) {
+ return mIsAlpha
+ ? getString(R.string.lockpassword_confirm_repair_mode_password_details)
+ : getString(R.string.lockpassword_confirm_repair_mode_pin_details);
+ }
if (mRemoteValidation) {
return getContext().getString(mIsAlpha
? R.string.lockpassword_remote_validation_password_details
@@ -496,7 +506,9 @@
}
} else if (mForceVerifyPath) {
if (isInternalActivity()) {
- startVerifyPassword(credential, intent, 0 /* flags */);
+ final int flags = mRequestWriteRepairModePassword
+ ? LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW : 0;
+ startVerifyPassword(credential, intent, flags);
return;
}
} else {
@@ -621,15 +633,15 @@
if (mCheckBox.isChecked() && mRemoteLockscreenValidationFragment
.getLockscreenCredential() != null) {
Log.i(TAG, "Setting device screen lock to the other device's screen lock.");
- ChooseLockPassword.SaveAndFinishWorker saveAndFinishWorker =
- new ChooseLockPassword.SaveAndFinishWorker();
+ SaveAndFinishWorker saveAndFinishWorker = new SaveAndFinishWorker();
getFragmentManager().beginTransaction().add(saveAndFinishWorker, null)
.commit();
getFragmentManager().executePendingTransactions();
- saveAndFinishWorker.setListener(this);
+ saveAndFinishWorker
+ .setListener(this)
+ .setRequestGatekeeperPasswordHandle(true);
saveAndFinishWorker.start(
mLockPatternUtils,
- /* requestGatekeeperPassword= */ true,
mRemoteLockscreenValidationFragment.getLockscreenCredential(),
/* currentCredential= */ null,
mEffectiveUserId);
diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java
index e99a986..ffd7c64 100644
--- a/src/com/android/settings/password/ConfirmLockPattern.java
+++ b/src/com/android/settings/password/ConfirmLockPattern.java
@@ -93,7 +93,7 @@
public static class ConfirmLockPatternFragment extends ConfirmDeviceCredentialBaseFragment
implements AppearAnimationCreator<Object>, CredentialCheckResultTracker.Listener,
- SaveChosenLockWorkerBase.Listener, RemoteLockscreenValidationFragment.Listener {
+ SaveAndFinishWorker.Listener, RemoteLockscreenValidationFragment.Listener {
private static final String FRAGMENT_TAG_CHECK_LOCK_RESULT = "check_lock_result";
@@ -179,7 +179,7 @@
// ability to disable the pattern in L. Remove this block after
// ensuring it's safe to do so. (Note that ConfirmLockPassword
// doesn't have this).
- if (!mFrp && !mRemoteValidation
+ if (!mFrp && !mRemoteValidation && !mRepairMode
&& !mLockPatternUtils.isLockPatternEnabled(mEffectiveUserId)) {
getActivity().setResult(Activity.RESULT_OK);
getActivity().finish();
@@ -308,6 +308,9 @@
if (mFrp) {
return getString(R.string.lockpassword_confirm_your_pattern_details_frp);
}
+ if (mRepairMode) {
+ return getString(R.string.lockpassword_confirm_repair_mode_pattern_details);
+ }
if (mRemoteValidation) {
return getString(
R.string.lockpassword_remote_validation_pattern_details);
@@ -402,7 +405,12 @@
}
private String getDefaultHeader() {
- if (mFrp) return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
+ if (mFrp) {
+ return getString(R.string.lockpassword_confirm_your_pattern_header_frp);
+ }
+ if (mRepairMode) {
+ return getString(R.string.lockpassword_confirm_repair_mode_pattern_header);
+ }
if (mRemoteValidation) {
return getString(R.string.lockpassword_remote_validation_header);
}
@@ -512,7 +520,9 @@
}
} else if (mForceVerifyPath) {
if (isInternalActivity()) {
- startVerifyPattern(credential, intent, 0 /* flags */);
+ final int flags = mRequestWriteRepairModePassword
+ ? LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW : 0;
+ startVerifyPattern(credential, intent, flags);
return;
}
} else {
@@ -620,15 +630,15 @@
if (mCheckBox.isChecked() && mRemoteLockscreenValidationFragment
.getLockscreenCredential() != null) {
Log.i(TAG, "Setting device screen lock to the other device's screen lock.");
- ChooseLockPattern.SaveAndFinishWorker saveAndFinishWorker =
- new ChooseLockPattern.SaveAndFinishWorker();
+ SaveAndFinishWorker saveAndFinishWorker = new SaveAndFinishWorker();
getFragmentManager().beginTransaction().add(saveAndFinishWorker, null)
.commit();
getFragmentManager().executePendingTransactions();
- saveAndFinishWorker.setListener(this);
+ saveAndFinishWorker
+ .setListener(this)
+ .setRequestGatekeeperPasswordHandle(true);
saveAndFinishWorker.start(
mLockPatternUtils,
- /* requestGatekeeperPassword= */ true,
mRemoteLockscreenValidationFragment.getLockscreenCredential(),
/* currentCredential= */ null,
mEffectiveUserId);
diff --git a/src/com/android/settings/password/PasswordRequirementAdapter.java b/src/com/android/settings/password/PasswordRequirementAdapter.java
index 0e194af..a4d349e 100644
--- a/src/com/android/settings/password/PasswordRequirementAdapter.java
+++ b/src/com/android/settings/password/PasswordRequirementAdapter.java
@@ -16,6 +16,7 @@
package com.android.settings.password;
+import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -31,9 +32,12 @@
*/
public class PasswordRequirementAdapter extends
RecyclerView.Adapter<PasswordRequirementViewHolder> {
- private String[] mRequirements;
- public PasswordRequirementAdapter() {
+ private String[] mRequirements;
+ private Context mContext;
+
+ public PasswordRequirementAdapter(Context context) {
+ mContext = context;
setHasStableIds(true);
}
@@ -61,7 +65,12 @@
@Override
public void onBindViewHolder(PasswordRequirementViewHolder holder, int position) {
+ final int fontSize = mContext.getResources().getDimensionPixelSize(
+ R.dimen.password_requirement_font_size);
holder.mDescriptionText.setText(mRequirements[position]);
+ holder.mDescriptionText.setTextAppearance(R.style.ScreenLockPasswordHintTextFontStyle);
+ holder.mDescriptionText.setTextSize(fontSize / mContext.getResources()
+ .getDisplayMetrics().scaledDensity);
}
public static class PasswordRequirementViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/com/android/settings/password/PasswordUtils.java b/src/com/android/settings/password/PasswordUtils.java
index e8e309c..a7edc89 100644
--- a/src/com/android/settings/password/PasswordUtils.java
+++ b/src/com/android/settings/password/PasswordUtils.java
@@ -27,7 +27,13 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import com.android.settings.R;
import com.android.settings.Utils;
public final class PasswordUtils extends com.android.settingslib.Utils {
@@ -97,4 +103,25 @@
Log.v(TAG, "Could not talk to activity manager.", e);
}
}
+
+ /** Setup screen lock options button under the Glif Header. */
+ public static void setupScreenLockOptionsButton(Context context, View view, Button optButton) {
+ final LinearLayout headerLayout = view.findViewById(
+ R.id.sud_layout_header);
+ final TextView sucTitleView = headerLayout.findViewById(R.id.suc_layout_title);
+ if (headerLayout != null && sucTitleView != null) {
+ final ViewGroup.MarginLayoutParams layoutTitleParams =
+ (ViewGroup.MarginLayoutParams) sucTitleView.getLayoutParams();
+ final ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+ lp.leftMargin = layoutTitleParams.leftMargin;
+ lp.topMargin = (int) context.getResources().getDimensionPixelSize(
+ R.dimen.screen_lock_options_button_margin_top);
+ optButton.setPadding(0, 0, 0, 0);
+ optButton.setLayoutParams(lp);
+ optButton.setText(context.getString(R.string.setup_lock_settings_options_button_label));
+ headerLayout.addView(optButton);
+ }
+ }
}
diff --git a/src/com/android/settings/password/SaveAndFinishWorker.java b/src/com/android/settings/password/SaveAndFinishWorker.java
new file mode 100644
index 0000000..df679e5
--- /dev/null
+++ b/src/com/android/settings/password/SaveAndFinishWorker.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2015 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.password;
+
+import android.content.Intent;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.util.Log;
+import android.util.Pair;
+import android.widget.Toast;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.Fragment;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.VerifyCredentialResponse;
+import com.android.settings.R;
+import com.android.settings.safetycenter.LockScreenSafetySource;
+
+/**
+ * An invisible retained worker fragment to track the AsyncWork that saves (and optionally
+ * verifies if a challenge is given) the chosen lock credential (pattern/pin/password).
+ */
+public class SaveAndFinishWorker extends Fragment {
+ private static final String TAG = "SaveAndFinishWorker";
+
+ private Listener mListener;
+ private boolean mFinished;
+ private Intent mResultData;
+
+ private LockPatternUtils mUtils;
+ private boolean mRequestGatekeeperPassword;
+ private boolean mRequestWriteRepairModePassword;
+ private boolean mWasSecureBefore;
+ private int mUserId;
+ private int mUnificationProfileId = UserHandle.USER_NULL;
+ private LockscreenCredential mUnificationProfileCredential;
+ private LockscreenCredential mChosenCredential;
+ private LockscreenCredential mCurrentCredential;
+
+ private boolean mBlocking;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ }
+
+ public SaveAndFinishWorker setListener(Listener listener) {
+ if (mListener == listener) {
+ return this;
+ }
+
+ mListener = listener;
+ if (mFinished && mListener != null) {
+ mListener.onChosenLockSaveFinished(mWasSecureBefore, mResultData);
+ }
+ return this;
+ }
+
+ @VisibleForTesting
+ void prepare(LockPatternUtils utils, LockscreenCredential chosenCredential,
+ LockscreenCredential currentCredential, int userId) {
+ mUtils = utils;
+ mUserId = userId;
+ // This will be a no-op for non managed profiles.
+ mWasSecureBefore = mUtils.isSecure(mUserId);
+ mFinished = false;
+ mResultData = null;
+
+ mChosenCredential = chosenCredential;
+ mCurrentCredential = currentCredential != null ? currentCredential
+ : LockscreenCredential.createNone();
+ }
+
+ public void start(LockPatternUtils utils, LockscreenCredential chosenCredential,
+ LockscreenCredential currentCredential, int userId) {
+ prepare(utils, chosenCredential, currentCredential, userId);
+ if (mBlocking) {
+ finish(saveAndVerifyInBackground().second);
+ } else {
+ new Task().execute();
+ }
+ }
+
+ /**
+ * Executes the save and verify work in background.
+ * @return pair where the first is a boolean confirming whether the change was successful or not
+ * and second is the Intent which has the challenge token or is null.
+ */
+ @VisibleForTesting
+ Pair<Boolean, Intent> saveAndVerifyInBackground() {
+ final int userId = mUserId;
+ if (!mUtils.setLockCredential(mChosenCredential, mCurrentCredential, userId)) {
+ return Pair.create(false, null);
+ }
+
+ unifyProfileCredentialIfRequested();
+
+ @LockPatternUtils.VerifyFlag int flags = 0;
+ if (mRequestGatekeeperPassword) {
+ // If a Gatekeeper Password was requested, invoke the LockSettingsService code
+ // path to return a Gatekeeper Password based on the credential that the user
+ // chose. This should only be run if the credential was successfully set.
+ flags |= LockPatternUtils.VERIFY_FLAG_REQUEST_GK_PW_HANDLE;
+ }
+ if (mRequestWriteRepairModePassword) {
+ flags |= LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW;
+ }
+ if (flags == 0) {
+ return Pair.create(true, null);
+ }
+
+ Intent result = new Intent();
+ final VerifyCredentialResponse response = mUtils.verifyCredential(mChosenCredential,
+ userId, flags);
+ if (response.isMatched()) {
+ if (mRequestGatekeeperPassword && response.containsGatekeeperPasswordHandle()) {
+ result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE,
+ response.getGatekeeperPasswordHandle());
+ } else if (mRequestGatekeeperPassword) {
+ Log.e(TAG, "critical: missing GK PW handle for known good credential: " + response);
+ }
+ } else {
+ Log.e(TAG, "critical: bad response for known good credential: " + response);
+ }
+ if (mRequestWriteRepairModePassword) {
+ // Notify the caller if repair mode credential is saved successfully
+ result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_WROTE_REPAIR_MODE_CREDENTIAL,
+ response.isMatched());
+ }
+
+ return Pair.create(true, result);
+ }
+
+ private void finish(Intent resultData) {
+ mFinished = true;
+ mResultData = resultData;
+ if (mListener != null) {
+ mListener.onChosenLockSaveFinished(mWasSecureBefore, mResultData);
+ }
+ if (mUnificationProfileCredential != null) {
+ mUnificationProfileCredential.zeroize();
+ }
+ LockScreenSafetySource.onLockScreenChange(getContext());
+ }
+
+ public SaveAndFinishWorker setRequestGatekeeperPasswordHandle(boolean value) {
+ mRequestGatekeeperPassword = value;
+ return this;
+ }
+
+ public SaveAndFinishWorker setRequestWriteRepairModePassword(boolean value) {
+ mRequestWriteRepairModePassword = value;
+ return this;
+ }
+
+ public SaveAndFinishWorker setBlocking(boolean blocking) {
+ mBlocking = blocking;
+ return this;
+ }
+
+ public SaveAndFinishWorker setProfileToUnify(
+ int profileId, LockscreenCredential credential) {
+ mUnificationProfileId = profileId;
+ mUnificationProfileCredential = credential.duplicate();
+ return this;
+ }
+
+ private void unifyProfileCredentialIfRequested() {
+ if (mUnificationProfileId != UserHandle.USER_NULL) {
+ mUtils.setSeparateProfileChallengeEnabled(mUnificationProfileId, false,
+ mUnificationProfileCredential);
+ }
+ }
+
+ private class Task extends AsyncTask<Void, Void, Pair<Boolean, Intent>> {
+
+ @Override
+ protected Pair<Boolean, Intent> doInBackground(Void... params){
+ return saveAndVerifyInBackground();
+ }
+
+ @Override
+ protected void onPostExecute(Pair<Boolean, Intent> resultData) {
+ if (!resultData.first) {
+ Toast.makeText(getContext(), R.string.lockpassword_credential_changed,
+ Toast.LENGTH_LONG).show();
+ }
+ finish(resultData.second);
+ }
+ }
+
+ interface Listener {
+ void onChosenLockSaveFinished(boolean wasSecureBefore, Intent resultData);
+ }
+}
diff --git a/src/com/android/settings/password/SaveChosenLockWorkerBase.java b/src/com/android/settings/password/SaveChosenLockWorkerBase.java
deleted file mode 100644
index 4864941..0000000
--- a/src/com/android/settings/password/SaveChosenLockWorkerBase.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2015 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.password;
-
-import android.content.Intent;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.util.Pair;
-import android.widget.Toast;
-
-import androidx.fragment.app.Fragment;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.LockscreenCredential;
-import com.android.settings.R;
-import com.android.settings.safetycenter.LockScreenSafetySource;
-
-/**
- * An invisible retained worker fragment to track the AsyncWork that saves (and optionally
- * verifies if a challenge is given) the chosen lock credential (pattern/pin/password).
- */
-abstract class SaveChosenLockWorkerBase extends Fragment {
-
- private Listener mListener;
- private boolean mFinished;
- private Intent mResultData;
-
- protected LockPatternUtils mUtils;
- protected boolean mRequestGatekeeperPassword;
- protected boolean mWasSecureBefore;
- protected int mUserId;
- protected int mUnificationProfileId = UserHandle.USER_NULL;
- protected LockscreenCredential mUnificationProfileCredential;
-
- private boolean mBlocking;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setRetainInstance(true);
- }
-
- public void setListener(Listener listener) {
- if (mListener == listener) {
- return;
- }
-
- mListener = listener;
- if (mFinished && mListener != null) {
- mListener.onChosenLockSaveFinished(mWasSecureBefore, mResultData);
- }
- }
-
- protected void prepare(LockPatternUtils utils, boolean requestGatekeeperPassword, int userId) {
- mUtils = utils;
- mUserId = userId;
- mRequestGatekeeperPassword = requestGatekeeperPassword;
- // This will be a no-op for non managed profiles.
- mWasSecureBefore = mUtils.isSecure(mUserId);
- mFinished = false;
- mResultData = null;
- }
-
- protected void start() {
- if (mBlocking) {
- finish(saveAndVerifyInBackground().second);
- } else {
- new Task().execute();
- }
- }
-
- /**
- * Executes the save and verify work in background.
- * @return pair where the first is a boolean confirming whether the change was successful or not
- * and second is the Intent which has the challenge token or is null.
- */
- protected abstract Pair<Boolean, Intent> saveAndVerifyInBackground();
-
- protected void finish(Intent resultData) {
- mFinished = true;
- mResultData = resultData;
- if (mListener != null) {
- mListener.onChosenLockSaveFinished(mWasSecureBefore, mResultData);
- }
- if (mUnificationProfileCredential != null) {
- mUnificationProfileCredential.zeroize();
- }
- LockScreenSafetySource.onLockScreenChange(getContext());
- }
-
- public void setBlocking(boolean blocking) {
- mBlocking = blocking;
- }
-
- public void setProfileToUnify(int profileId, LockscreenCredential credential) {
- mUnificationProfileId = profileId;
- mUnificationProfileCredential = credential.duplicate();
- }
-
- protected void unifyProfileCredentialIfRequested() {
- if (mUnificationProfileId != UserHandle.USER_NULL) {
- mUtils.setSeparateProfileChallengeEnabled(mUnificationProfileId, false,
- mUnificationProfileCredential);
- }
- }
-
- private class Task extends AsyncTask<Void, Void, Pair<Boolean, Intent>> {
-
- @Override
- protected Pair<Boolean, Intent> doInBackground(Void... params){
- return saveAndVerifyInBackground();
- }
-
- @Override
- protected void onPostExecute(Pair<Boolean, Intent> resultData) {
- if (!resultData.first) {
- Toast.makeText(getContext(), R.string.lockpassword_credential_changed,
- Toast.LENGTH_LONG).show();
- }
- finish(resultData.second);
- }
- }
-
- interface Listener {
- void onChosenLockSaveFinished(boolean wasSecureBefore, Intent resultData);
- }
-}
diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 0101aa5..d0d7d93 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -24,6 +24,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
+import android.view.ContextThemeWrapper;
import android.view.View;
import android.widget.Button;
@@ -97,7 +98,10 @@
}
if (showOptionsButton && anyOptionsShown) {
- mOptionsButton = view.findViewById(R.id.screen_lock_options);
+ mOptionsButton = new Button(new ContextThemeWrapper(getActivity(),
+ R.style.SudGlifButton_Tertiary));
+ mOptionsButton.setId(R.id.screen_lock_options);
+ PasswordUtils.setupScreenLockOptionsButton(getActivity(), view, mOptionsButton);
mOptionsButton.setVisibility(View.VISIBLE);
mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId)
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 2cad181..560906d 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -23,6 +23,7 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -83,7 +84,10 @@
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) {
- mOptionsButton = view.findViewById(R.id.screen_lock_options);
+ mOptionsButton = new Button(new ContextThemeWrapper(getActivity(),
+ R.style.SudGlifButton_Tertiary));
+ mOptionsButton.setId(R.id.screen_lock_options);
+ PasswordUtils.setupScreenLockOptionsButton(getActivity(), view, mOptionsButton);
mOptionsButton.setOnClickListener((btn) ->
ChooseLockTypeDialogFragment.newInstance(mUserId)
.show(getChildFragmentManager(), TAG_SKIP_SCREEN_LOCK_DIALOG));
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
index e3a8d23..2a99e99 100644
--- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
@@ -153,7 +153,7 @@
private void handleLanguageSelect(Preference preference) {
String selectedLanguage = preference.getKey();
mMetricsFeatureProvider.action(mContext,
- SettingsEnums.ACTION_CHOOSE_LANGUAGE_FOR_NUMBERS_PREFERENCES);
+ SettingsEnums.ACTION_CHOOSE_LANGUAGE_FOR_NUMBERS_PREFERENCES, selectedLanguage);
final Bundle extra = new Bundle();
extra.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
ARG_VALUE_NUMBERING_SYSTEM_SELECT);
@@ -177,7 +177,8 @@
saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
numberingSystem);
mMetricsFeatureProvider.action(mContext,
- SettingsEnums.ACTION_SET_NUMBERS_PREFERENCES);
+ SettingsEnums.ACTION_SET_NUMBERS_PREFERENCES,
+ updatedLocale.getDisplayName() + ": " + numberingSystem);
// After updated locale to framework, this fragment will recreate,
// so it needs to update the argument of selected language.
Bundle bundle = new Bundle();
diff --git a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
index 1e39fff..432ce0e 100644
--- a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
+++ b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
@@ -59,6 +59,8 @@
TickButtonPreference pref = new TickButtonPreference(mContext);
mPreferenceCategory.addPreference(pref);
final String item = unitValues[i];
+ final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
+ mContext, getExtensionTypes());
pref.setTitle(getPreferenceTitle(item));
pref.setKey(item);
pref.setOnPreferenceClickListener(clickedPref -> {
@@ -66,11 +68,10 @@
RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
? null : item);
- mMetricsFeatureProvider.action(mContext, getMetricsActionKey());
+ mMetricsFeatureProvider.action(mContext, getMetricsActionKey(),
+ getPreferenceTitle(value) + " > " + getPreferenceTitle(item));
return true;
});
- String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(mContext,
- getExtensionTypes());
pref.setSelected(!value.isEmpty() && item.equals(value));
}
}
diff --git a/src/com/android/settings/security/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java
index e219b44..8fae6e1 100644
--- a/src/com/android/settings/security/ScreenPinningSettings.java
+++ b/src/com/android/settings/security/ScreenPinningSettings.java
@@ -23,7 +23,6 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.widget.Switch;
@@ -38,14 +37,12 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.password.ChooseLockGeneric;
+import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
-
-import java.util.Arrays;
-import java.util.List;
/**
* Screen pinning settings.
*/
@@ -56,6 +53,7 @@
private static final String KEY_USE_SCREEN_LOCK = "use_screen_lock";
private static final String KEY_FOOTER = "screen_pinning_settings_screen_footer";
private static final int CHANGE_LOCK_METHOD_REQUEST = 43;
+ private static final int CONFIRM_REQUEST = 1000;
private SettingsMainSwitchBar mSwitchBar;
private SwitchPreference mUseScreenLock;
@@ -129,10 +127,10 @@
}
private boolean setScreenLockUsed(boolean isEnabled) {
+ LockPatternUtils lockPatternUtils = new LockPatternUtils(getActivity());
+ final int passwordQuality = lockPatternUtils
+ .getKeyguardStoredPasswordQuality(UserHandle.myUserId());
if (isEnabled) {
- LockPatternUtils lockPatternUtils = new LockPatternUtils(getActivity());
- int passwordQuality = lockPatternUtils
- .getKeyguardStoredPasswordQuality(UserHandle.myUserId());
if (passwordQuality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
Intent chooseLockIntent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
chooseLockIntent.putExtra(
@@ -141,6 +139,12 @@
startActivityForResult(chooseLockIntent, CHANGE_LOCK_METHOD_REQUEST);
return false;
}
+ } else {
+ if (passwordQuality != DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
+ final ChooseLockSettingsHelper.Builder builder =
+ new ChooseLockSettingsHelper.Builder(getActivity(), this);
+ return builder.setRequestCode(CONFIRM_REQUEST).show();
+ }
}
setScreenLockUsedSetting(isEnabled);
return true;
@@ -162,6 +166,8 @@
setScreenLockUsed(validPassQuality);
// Make sure the screen updates.
mUseScreenLock.setChecked(validPassQuality);
+ } else if (requestCode == CONFIRM_REQUEST) {
+ setScreenLockUsedSetting(false);
}
}
@@ -245,14 +251,5 @@
* For search
*/
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
-
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
- boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.screen_pinning_settings;
- return Arrays.asList(sir);
- }
- };
+ new BaseSearchIndexProvider(R.xml.screen_pinning_settings);
}
diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java
index 7d39938..e7b0185 100644
--- a/src/com/android/settings/sim/SimDialogActivity.java
+++ b/src/com/android/settings/sim/SimDialogActivity.java
@@ -280,8 +280,20 @@
public void showEnableAutoDataSwitchDialog() {
final FragmentManager fragmentManager = getSupportFragmentManager();
SimDialogFragment fragment = createFragment(ENABLE_AUTO_DATA_SWITCH);
- fragment.show(fragmentManager, Integer.toString(ENABLE_AUTO_DATA_SWITCH));
+ if (fragmentManager.isStateSaved()) {
+ Log.w(TAG, "Failed to show EnableAutoDataSwitchDialog. The fragmentManager "
+ + "is StateSaved.");
+ forceClose();
+ return;
+ }
+ try {
+ fragment.show(fragmentManager, Integer.toString(ENABLE_AUTO_DATA_SWITCH));
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to show EnableAutoDataSwitchDialog.", e);
+ forceClose();
+ return;
+ }
if (getResources().getBoolean(
R.bool.config_auto_data_switch_enables_cross_sim_calling)) {
// If auto data switch is already enabled on the non-DDS, the dialog for enabling it
diff --git a/src/com/android/settings/slices/RestrictedSliceUtils.java b/src/com/android/settings/slices/RestrictedSliceUtils.java
new file mode 100644
index 0000000..a5b5a14
--- /dev/null
+++ b/src/com/android/settings/slices/RestrictedSliceUtils.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2023 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.slices;
+
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.provider.SettingsSlicesContract;
+
+/**
+ * A utility class to check slice Uris for restriction.
+ */
+public class RestrictedSliceUtils {
+
+ /**
+ * Uri for the notifying open networks Slice.
+ */
+ private static final Uri NOTIFY_OPEN_NETWORKS_SLICE_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath("notify_open_networks")
+ .build();
+
+ /**
+ * Uri for the auto turning on Wi-Fi Slice.
+ */
+ private static final Uri AUTO_TURN_ON_WIFI_SLICE_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath("enable_wifi_wakeup")
+ .build();
+
+ /**
+ * Uri for the usb tethering Slice.
+ */
+ private static final Uri USB_TETHERING_SLICE_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath("enable_usb_tethering")
+ .build();
+
+ /**
+ * Uri for the bluetooth tethering Slice.
+ */
+ private static final Uri BLUETOOTH_TETHERING_SLICE_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath("enable_bluetooth_tethering_2")
+ .build();
+
+ /**
+ * Returns true if the slice Uri restricts access to guest user.
+ */
+ public static boolean isGuestRestricted(Uri sliceUri) {
+ if (AUTO_TURN_ON_WIFI_SLICE_URI.equals(sliceUri)
+ || NOTIFY_OPEN_NETWORKS_SLICE_URI.equals(sliceUri)
+ || BLUETOOTH_TETHERING_SLICE_URI.equals(sliceUri)
+ || USB_TETHERING_SLICE_URI.equals(sliceUri)
+ || CustomSliceRegistry.MOBILE_DATA_SLICE_URI.equals(sliceUri)) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index 12272a7..5d2bde3 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -30,6 +30,7 @@
import android.net.Uri;
import android.os.Binder;
import android.os.StrictMode;
+import android.os.UserManager;
import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.text.TextUtils;
@@ -233,6 +234,14 @@
getContext().getTheme().rebase();
}
+ // Checking if some semi-sensitive slices are requested by a guest user. If so, will
+ // return an empty slice.
+ final UserManager userManager = getContext().getSystemService(UserManager.class);
+ if (userManager.isGuestUser() && RestrictedSliceUtils.isGuestRestricted(sliceUri)) {
+ Log.i(TAG, "Guest user access denied.");
+ return null;
+ }
+
// Before adding a slice to {@link CustomSliceManager}, please get approval
// from the Settings team.
if (CustomSliceRegistry.isValidUri(sliceUri)) {
diff --git a/src/com/android/settings/spa/SettingsSpaEnvironment.kt b/src/com/android/settings/spa/SettingsSpaEnvironment.kt
index 455fe9f..db88784 100644
--- a/src/com/android/settings/spa/SettingsSpaEnvironment.kt
+++ b/src/com/android/settings/spa/SettingsSpaEnvironment.kt
@@ -20,6 +20,7 @@
import android.util.FeatureFlagUtils
import com.android.settings.spa.app.AllAppListPageProvider
import com.android.settings.spa.app.AppsMainPageProvider
+import com.android.settings.spa.app.appcompat.UserAspectRatioAppsPageProvider
import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
import com.android.settings.spa.app.appinfo.CloneAppInfoSettingsProvider
import com.android.settings.spa.app.backgroundinstall.BackgroundInstalledAppsPageProvider
@@ -29,12 +30,14 @@
import com.android.settings.spa.app.specialaccess.InstallUnknownAppsListProvider
import com.android.settings.spa.app.specialaccess.MediaManagementAppsAppListProvider
import com.android.settings.spa.app.specialaccess.ModifySystemSettingsAppListProvider
+import com.android.settings.spa.app.specialaccess.NfcTagAppsSettingsProvider
import com.android.settings.spa.app.specialaccess.PictureInPictureListProvider
import com.android.settings.spa.app.specialaccess.SpecialAppAccessPageProvider
import com.android.settings.spa.app.specialaccess.WifiControlAppListProvider
import com.android.settings.spa.app.specialaccess.UseFullScreenIntentAppListProvider
import com.android.settings.spa.core.instrumentation.SpaLogProvider
import com.android.settings.spa.development.UsageStatsPageProvider
+import com.android.settings.spa.development.compat.PlatformCompatAppListPageProvider
import com.android.settings.spa.home.HomePageProvider
import com.android.settings.spa.network.NetworkAndInternetPageProvider
import com.android.settings.spa.notification.AppListNotificationsPageProvider
@@ -61,6 +64,7 @@
InstallUnknownAppsListProvider,
AlarmsAndRemindersAppListProvider,
WifiControlAppListProvider,
+ NfcTagAppsSettingsProvider,
)
}
@@ -81,7 +85,9 @@
LanguageAndInputPageProvider,
AppLanguagesPageProvider,
UsageStatsPageProvider,
+ PlatformCompatAppListPageProvider,
BackgroundInstalledAppsPageProvider,
+ UserAspectRatioAppsPageProvider,
CloneAppInfoSettingsProvider,
NetworkAndInternetPageProvider,
) + togglePermissionAppListTemplate.createPageProviders(),
@@ -93,5 +99,5 @@
override val logger =
if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_ENABLE_SPA_METRICS))
SpaLogProvider
- else object: SpaLogger {}
+ else object : SpaLogger {}
}
diff --git a/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProvider.kt b/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProvider.kt
new file mode 100644
index 0000000..34b6b66
--- /dev/null
+++ b/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProvider.kt
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2023 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.spa.app.appcompat
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageInfo
+import android.content.pm.PackageManager
+import android.content.pm.PackageManager.GET_ACTIVITIES
+import android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET
+import android.os.Build
+import android.os.Bundle
+import android.util.Log
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.lifecycle.compose.ExperimentalLifecycleComposeApi
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import com.android.settings.R
+import com.android.settings.applications.appcompat.UserAspectRatioManager
+import com.android.settings.spa.app.appinfo.AppInfoSettingsProvider
+import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
+import com.android.settingslib.spa.framework.common.SettingsPageProvider
+import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
+import com.android.settingslib.spa.framework.common.createSettingsPage
+import com.android.settingslib.spa.framework.compose.navigator
+import com.android.settingslib.spa.framework.compose.rememberContext
+import com.android.settingslib.spa.framework.compose.toState
+import com.android.settingslib.spa.framework.theme.SettingsDimension
+import com.android.settingslib.spa.framework.util.asyncMap
+import com.android.settingslib.spa.framework.util.filterItem
+import com.android.settingslib.spa.widget.preference.Preference
+import com.android.settingslib.spa.widget.preference.PreferenceModel
+import com.android.settingslib.spa.widget.ui.SettingsBody
+import com.android.settingslib.spa.widget.ui.SpinnerOption
+import com.android.settingslib.spaprivileged.model.app.AppListModel
+import com.android.settingslib.spaprivileged.model.app.AppRecord
+import com.android.settingslib.spaprivileged.model.app.userId
+import com.android.settingslib.spaprivileged.template.app.AppList
+import com.android.settingslib.spaprivileged.template.app.AppListInput
+import com.android.settingslib.spaprivileged.template.app.AppListItem
+import com.android.settingslib.spaprivileged.template.app.AppListItemModel
+import com.android.settingslib.spaprivileged.template.app.AppListPage
+import com.google.common.annotations.VisibleForTesting
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.flowOn
+
+object UserAspectRatioAppsPageProvider : SettingsPageProvider {
+ override val name = "UserAspectRatioAppsPage"
+ private val owner = createSettingsPage()
+
+ override fun isEnabled(arguments: Bundle?): Boolean =
+ UserAspectRatioManager.isFeatureEnabled(SpaEnvironmentFactory.instance.appContext)
+
+ @Composable
+ override fun Page(arguments: Bundle?) =
+ UserAspectRatioAppList()
+
+ @Composable
+ @VisibleForTesting
+ fun EntryItem() =
+ Preference(object : PreferenceModel {
+ override val title = stringResource(R.string.screen_size_title)
+ override val summary = getSummary().toState()
+ override val onClick = navigator(name)
+ })
+
+ @VisibleForTesting
+ fun buildInjectEntry() = SettingsEntryBuilder
+ .createInject(owner)
+ .setSearchDataFn { null }
+ .setUiLayoutFn { EntryItem() }
+
+ @Composable
+ @VisibleForTesting
+ fun getSummary(): String = stringResource(R.string.screen_size_summary, Build.MODEL)
+}
+
+@Composable
+fun UserAspectRatioAppList(
+ appList: @Composable AppListInput<UserAspectRatioAppListItemModel>.() -> Unit
+ = { AppList() },
+) {
+ AppListPage(
+ title = stringResource(R.string.screen_size_title),
+ listModel = rememberContext(::UserAspectRatioAppListModel),
+ appList = appList,
+ header = {
+ Box(Modifier.padding(SettingsDimension.itemPadding)) {
+ SettingsBody(UserAspectRatioAppsPageProvider.getSummary())
+ }
+ }
+ )
+}
+
+data class UserAspectRatioAppListItemModel(
+ override val app: ApplicationInfo,
+ val override: Int,
+ val suggested: Boolean,
+ val canDisplay: Boolean,
+) : AppRecord
+
+class UserAspectRatioAppListModel(private val context: Context)
+ : AppListModel<UserAspectRatioAppListItemModel> {
+
+ private val packageManager = context.packageManager
+ private val userAspectRatioManager = UserAspectRatioManager(context)
+
+ override fun getSpinnerOptions(
+ recordList: List<UserAspectRatioAppListItemModel>
+ ): List<SpinnerOption> {
+ val hasSuggested = recordList.any { it.suggested }
+ val hasOverride = recordList.any { it.override != USER_MIN_ASPECT_RATIO_UNSET }
+ val options = mutableListOf(SpinnerItem.All)
+ // Add suggested filter first as default
+ if (hasSuggested) options.add(0, SpinnerItem.Suggested)
+ if (hasOverride) options += SpinnerItem.Overridden
+ return options.map {
+ SpinnerOption(
+ id = it.ordinal,
+ text = context.getString(it.stringResId),
+ )
+ }
+ }
+
+ @Composable
+ override fun AppListItemModel<UserAspectRatioAppListItemModel>.AppItem() {
+ val app = record.app
+ AppListItem(
+ onClick = AppInfoSettingsProvider.navigator(app)
+ )
+ }
+
+ override fun transform(userIdFlow: Flow<Int>, appListFlow: Flow<List<ApplicationInfo>>) =
+ userIdFlow.combine(appListFlow) { uid, appList ->
+ appList.asyncMap { app ->
+ UserAspectRatioAppListItemModel(
+ app = app,
+ suggested = !app.isSystemApp && getPackageAndActivityInfo(
+ app)?.isFixedOrientationOrAspectRatio() == true,
+ override = userAspectRatioManager.getUserMinAspectRatioValue(
+ app.packageName, uid),
+ canDisplay = userAspectRatioManager.canDisplayAspectRatioUi(app),
+ )
+ }
+ }
+
+ override fun filter(
+ userIdFlow: Flow<Int>,
+ option: Int,
+ recordListFlow: Flow<List<UserAspectRatioAppListItemModel>>
+ ): Flow<List<UserAspectRatioAppListItemModel>> = recordListFlow.filterItem(
+ when (SpinnerItem.values().getOrNull(option)) {
+ SpinnerItem.Suggested -> ({ it.canDisplay && it.suggested })
+ SpinnerItem.Overridden -> ({ it.override != USER_MIN_ASPECT_RATIO_UNSET })
+ else -> ({ it.canDisplay })
+ }
+ )
+
+ @OptIn(ExperimentalLifecycleComposeApi::class)
+ @Composable
+ override fun getSummary(option: Int, record: UserAspectRatioAppListItemModel) : State<String> =
+ remember(record.override) {
+ flow {
+ emit(userAspectRatioManager.getUserMinAspectRatioEntry(record.override))
+ }.flowOn(Dispatchers.IO)
+ }.collectAsStateWithLifecycle(initialValue = stringResource(R.string.summary_placeholder))
+
+ private fun getPackageAndActivityInfo(app: ApplicationInfo): PackageInfo? = try {
+ packageManager.getPackageInfoAsUser(app.packageName, GET_ACTIVITIES_FLAGS, app.userId)
+ } catch (e: Exception) {
+ // Query PackageManager.getPackageInfoAsUser() with GET_ACTIVITIES_FLAGS could cause
+ // exception sometimes. Since we reply on this flag to retrieve the Picture In Picture
+ // packages, we need to catch the exception to alleviate the impact before PackageManager
+ // fixing this issue or provide a better api.
+ Log.e(TAG, "Exception while getPackageInfoAsUser", e)
+ null
+ }
+
+ companion object {
+ private const val TAG = "AspectRatioAppsListModel"
+ private fun PackageInfo.isFixedOrientationOrAspectRatio() =
+ activities?.any { a -> a.isFixedOrientation || a.hasFixedAspectRatio() } ?: false
+ private val GET_ACTIVITIES_FLAGS =
+ PackageManager.PackageInfoFlags.of(GET_ACTIVITIES.toLong())
+ }
+}
+
+private enum class SpinnerItem(val stringResId: Int) {
+ Suggested(R.string.user_aspect_ratio_suggested_apps_label),
+ All(R.string.filter_all_apps),
+ Overridden(R.string.user_aspect_ratio_overridden_apps_label)
+}
\ No newline at end of file
diff --git a/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettings.kt b/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettings.kt
new file mode 100644
index 0000000..3dede42
--- /dev/null
+++ b/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettings.kt
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2023 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.spa.app.specialaccess
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager.GET_ACTIVITIES
+import android.content.pm.PackageManager.PackageInfoFlags
+import android.nfc.NfcAdapter
+import android.util.Log
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.livedata.observeAsState
+import com.android.settings.R
+import com.android.settingslib.spaprivileged.model.app.AppRecord
+import com.android.settingslib.spaprivileged.model.app.userId
+import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListModel
+import com.android.settingslib.spaprivileged.template.app.TogglePermissionAppListProvider
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.map
+
+object NfcTagAppsSettingsProvider : TogglePermissionAppListProvider {
+ override val permissionType = "NfcTagAppsSettings"
+ override fun createModel(context: Context) = NfcTagAppsSettingsListModel(context)
+}
+
+data class NfcTagAppsSettingsRecord(
+ override val app: ApplicationInfo,
+ val controller: NfcTagAppsSettingsController,
+ val isSupported: Boolean,
+) : AppRecord
+
+class NfcTagAppsSettingsListModel(private val context: Context) :
+ TogglePermissionAppListModel<NfcTagAppsSettingsRecord> {
+ override val pageTitleResId = R.string.change_nfc_tag_apps_title
+ override val switchTitleResId = R.string.change_nfc_tag_apps_detail_switch
+ override val footerResId = R.string.change_nfc_tag_apps_detail_summary
+
+ private val packageManager = context.packageManager
+
+ override fun transform(
+ userIdFlow: Flow<Int>,
+ appListFlow: Flow<List<ApplicationInfo>>
+ ): Flow<List<NfcTagAppsSettingsRecord>> =
+ userIdFlow.combine(appListFlow) { userId, appList ->
+ // The appListFlow always refreshed on resume, need to update nfcTagAppsSettingsPackages
+ // here to handle status change.
+ val nfcTagAppsSettingsPackages = getNfcTagAppsSettingsPackages(userId)
+ appList.map { app ->
+ createNfcTagAppsSettingsRecord(
+ app = app,
+ isAllowed = nfcTagAppsSettingsPackages[app.packageName],
+ )
+ }
+ }
+
+ private fun getNfcTagAppsSettingsPackages(userId: Int): Map<String, Boolean> {
+ NfcAdapter.getDefaultAdapter(context)?.let { nfcAdapter ->
+ if (nfcAdapter.isTagIntentAppPreferenceSupported) {
+ return nfcAdapter.getTagIntentAppPreferenceForUser(userId)
+ }
+ }
+ return emptyMap()
+ }
+
+ override fun transformItem(app: ApplicationInfo) =
+ createNfcTagAppsSettingsRecord(
+ app = app,
+ isAllowed = getNfcTagAppsSettingsPackages(app.userId)[app.packageName],
+ )
+
+ private fun createNfcTagAppsSettingsRecord(
+ app: ApplicationInfo,
+ isAllowed: Boolean?,
+ ) =
+ NfcTagAppsSettingsRecord(
+ app = app,
+ isSupported = isAllowed != null,
+ controller = NfcTagAppsSettingsController(isAllowed == true),
+ )
+
+ override fun filter(
+ userIdFlow: Flow<Int>,
+ recordListFlow: Flow<List<NfcTagAppsSettingsRecord>>
+ ) = recordListFlow.map { recordList -> recordList.filter { it.isSupported } }
+
+ @Composable
+ override fun isAllowed(record: NfcTagAppsSettingsRecord) =
+ record.controller.isAllowed.observeAsState()
+
+ override fun isChangeable(record: NfcTagAppsSettingsRecord) = true
+
+ override fun setAllowed(record: NfcTagAppsSettingsRecord, newAllowed: Boolean) {
+ NfcAdapter.getDefaultAdapter(context)?.let {
+ if (
+ it.setTagIntentAppPreferenceForUser(
+ record.app.userId,
+ record.app.packageName,
+ newAllowed
+ ) == NfcAdapter.TAG_INTENT_APP_PREF_RESULT_SUCCESS
+ ) {
+ record.controller.setAllowed(newAllowed)
+ } else {
+ Log.e(TAG, "Error updating TagIntentAppPreference")
+ }
+ }
+ }
+
+ private companion object {
+ const val TAG = "NfcTagAppsSettingsListModel"
+ val GET_ACTIVITIES_FLAGS = PackageInfoFlags.of(GET_ACTIVITIES.toLong())
+ }
+}
diff --git a/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettingsController.kt b/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettingsController.kt
new file mode 100644
index 0000000..6e1b7b3
--- /dev/null
+++ b/src/com/android/settings/spa/app/specialaccess/NfcTagAppsSettingsController.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 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.spa.app.specialaccess
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+
+class NfcTagAppsSettingsController(initialStatus: Boolean) {
+ val isAllowed: LiveData<Boolean>
+ get() = _allowed
+
+ fun setAllowed(newAllowed: Boolean) {
+ _allowed.postValue(newAllowed)
+ }
+ private val _allowed = MutableLiveData<Boolean>(initialStatus)
+}
diff --git a/src/com/android/settings/spa/development/UsageStats.kt b/src/com/android/settings/spa/development/UsageStats.kt
index b681d75..4d9c455 100644
--- a/src/com/android/settings/spa/development/UsageStats.kt
+++ b/src/com/android/settings/spa/development/UsageStats.kt
@@ -32,7 +32,6 @@
AppListPage(
title = stringResource(R.string.testing_usage_stats),
listModel = rememberContext(::UsageStatsListModel),
- primaryUserOnly = true,
)
}
}
diff --git a/src/com/android/settings/spa/development/compat/PlatformCompatAppList.kt b/src/com/android/settings/spa/development/compat/PlatformCompatAppList.kt
new file mode 100644
index 0000000..5f3b4e7
--- /dev/null
+++ b/src/com/android/settings/spa/development/compat/PlatformCompatAppList.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 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.spa.development.compat
+
+import android.os.Bundle
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.res.stringResource
+import com.android.settings.R
+import com.android.settingslib.spa.framework.common.SettingsPageProvider
+import com.android.settingslib.spa.framework.compose.rememberContext
+import com.android.settingslib.spaprivileged.template.app.AppListPage
+
+object PlatformCompatAppListPageProvider : SettingsPageProvider {
+ override val name = "PlatformCompatAppList"
+
+ @Composable
+ override fun Page(arguments: Bundle?) {
+ AppListPage(
+ title = stringResource(R.string.platform_compat_dashboard_title),
+ listModel = rememberContext(::PlatformCompatAppListModel),
+ noItemMessage = stringResource(R.string.platform_compat_dialog_text_no_apps),
+ )
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/spa/development/compat/PlatformCompatAppListModel.kt b/src/com/android/settings/spa/development/compat/PlatformCompatAppListModel.kt
new file mode 100644
index 0000000..c6752b9
--- /dev/null
+++ b/src/com/android/settings/spa/development/compat/PlatformCompatAppListModel.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023 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.spa.development.compat
+
+import android.app.settings.SettingsEnums
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.os.Build
+import androidx.compose.runtime.Composable
+import androidx.core.os.bundleOf
+import com.android.settings.core.SubSettingLauncher
+import com.android.settings.development.compat.PlatformCompatDashboard
+import com.android.settingslib.spa.framework.compose.stateOf
+import com.android.settingslib.spa.framework.util.filterItem
+import com.android.settingslib.spa.framework.util.mapItem
+import com.android.settingslib.spaprivileged.model.app.AppListModel
+import com.android.settingslib.spaprivileged.model.app.AppRecord
+import com.android.settingslib.spaprivileged.model.app.hasFlag
+import com.android.settingslib.spaprivileged.model.app.userHandle
+import com.android.settingslib.spaprivileged.template.app.AppListItem
+import com.android.settingslib.spaprivileged.template.app.AppListItemModel
+import kotlinx.coroutines.flow.Flow
+
+data class PlatformCompatAppRecord(
+ override val app: ApplicationInfo,
+) : AppRecord
+
+class PlatformCompatAppListModel(
+ private val context: Context,
+) : AppListModel<PlatformCompatAppRecord> {
+
+ override fun transform(userIdFlow: Flow<Int>, appListFlow: Flow<List<ApplicationInfo>>) =
+ appListFlow.mapItem(::PlatformCompatAppRecord)
+
+ override fun filter(
+ userIdFlow: Flow<Int>, option: Int, recordListFlow: Flow<List<PlatformCompatAppRecord>>,
+ ) = recordListFlow.filterItem { record ->
+ Build.IS_DEBUGGABLE || record.app.hasFlag(ApplicationInfo.FLAG_DEBUGGABLE)
+ }
+
+ @Composable
+ override fun getSummary(option: Int, record: PlatformCompatAppRecord) =
+ stateOf(record.app.packageName)
+
+ @Composable
+ override fun AppListItemModel<PlatformCompatAppRecord>.AppItem() {
+ AppListItem { navigateToAppCompat(app = record.app) }
+ }
+
+ private fun navigateToAppCompat(app: ApplicationInfo) {
+ SubSettingLauncher(context)
+ .setDestination(PlatformCompatDashboard::class.qualifiedName)
+ .setSourceMetricsCategory(SettingsEnums.DEVELOPMENT)
+ .setArguments(bundleOf(PlatformCompatDashboard.COMPAT_APP to app.packageName))
+ .setUserHandle(app.userHandle)
+ .launch()
+ }
+}
diff --git a/src/com/android/settings/spa/development/compat/PlatformCompatPreferenceController.kt b/src/com/android/settings/spa/development/compat/PlatformCompatPreferenceController.kt
new file mode 100644
index 0000000..c0a421c
--- /dev/null
+++ b/src/com/android/settings/spa/development/compat/PlatformCompatPreferenceController.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2023 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.spa.development.compat
+
+import android.content.Context
+import androidx.preference.Preference
+import com.android.settings.core.BasePreferenceController
+import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
+
+class PlatformCompatPreferenceController(context: Context, preferenceKey: String) :
+ BasePreferenceController(context, preferenceKey) {
+ override fun getAvailabilityStatus() = AVAILABLE
+
+ override fun handlePreferenceTreeClick(preference: Preference): Boolean {
+ if (preference.key == mPreferenceKey) {
+ mContext.startSpaActivity(PlatformCompatAppListPageProvider.name)
+ return true
+ }
+ return false
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/users/GuestTelephonyPreferenceController.java b/src/com/android/settings/users/GuestTelephonyPreferenceController.java
index a935b8a..83e4bfc 100644
--- a/src/com/android/settings/users/GuestTelephonyPreferenceController.java
+++ b/src/com/android/settings/users/GuestTelephonyPreferenceController.java
@@ -17,6 +17,7 @@
package com.android.settings.users;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserManager;
@@ -33,14 +34,11 @@
private final UserManager mUserManager;
private final UserCapabilities mUserCaps;
- private Bundle mDefaultGuestRestrictions;
public GuestTelephonyPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mUserManager = context.getSystemService(UserManager.class);
mUserCaps = UserCapabilities.create(context);
- mDefaultGuestRestrictions = mUserManager.getDefaultGuestRestrictions();
- mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_SMS, true);
}
@Override
@@ -54,13 +52,16 @@
@Override
public boolean isChecked() {
- return !mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS, false);
+ return !mUserManager.getDefaultGuestRestrictions()
+ .getBoolean(UserManager.DISALLOW_OUTGOING_CALLS, false);
}
@Override
public boolean setChecked(boolean isChecked) {
- mDefaultGuestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS, !isChecked);
- mUserManager.setDefaultGuestRestrictions(mDefaultGuestRestrictions);
+ Bundle guestRestrictions = mUserManager.getDefaultGuestRestrictions();
+ guestRestrictions.putBoolean(UserManager.DISALLOW_SMS, true);
+ guestRestrictions.putBoolean(UserManager.DISALLOW_OUTGOING_CALLS, !isChecked);
+ mUserManager.setDefaultGuestRestrictions(guestRestrictions);
return true;
}
@@ -73,6 +74,7 @@
public void updateState(Preference preference) {
super.updateState(preference);
mUserCaps.updateAddUserCapabilities(mContext);
- preference.setVisible(isAvailable() && mUserCaps.mUserSwitcherEnabled);
+ preference.setVisible(isAvailable() && mUserCaps.mUserSwitcherEnabled
+ && mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY));
}
}
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 2f9031e..402d4b1 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -79,6 +79,7 @@
/** Whether to enable the app_copying fragment. */
private static final boolean SHOW_APP_COPYING_PREF = false;
+ private static final int MESSAGE_PADDING = 20;
private UserManager mUserManager;
private UserCapabilities mUserCaps;
@@ -274,6 +275,7 @@
context.getDrawable(com.android.settingslib.R.drawable.ic_admin_panel_settings));
dialogHelper.setTitle(R.string.user_revoke_admin_confirm_title);
dialogHelper.setMessage(R.string.user_revoke_admin_confirm_message);
+ dialogHelper.setMessagePadding(MESSAGE_PADDING);
dialogHelper.setPositiveButton(R.string.remove, view -> {
updateUserAdminStatus(false);
dialogHelper.getDialog().dismiss();
@@ -294,6 +296,7 @@
context.getDrawable(com.android.settingslib.R.drawable.ic_admin_panel_settings));
dialogHelper.setTitle(com.android.settingslib.R.string.user_grant_admin_title);
dialogHelper.setMessage(com.android.settingslib.R.string.user_grant_admin_message);
+ dialogHelper.setMessagePadding(MESSAGE_PADDING);
dialogHelper.setPositiveButton(com.android.settingslib.R.string.user_grant_admin_button,
view -> {
updateUserAdminStatus(true);
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 28e02ec..93b7c78 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -885,7 +885,6 @@
this::startActivityForResult,
userIcon,
user.name,
- getString(com.android.settingslib.R.string.profile_info_settings_title),
(newUserName, newUserIcon) -> {
if (newUserIcon != userIcon) {
ThreadUtils.postOnBackgroundThread(() ->
@@ -978,10 +977,10 @@
return;
}
try {
- getContext().getSystemService(UserManager.class)
- .removeUserWhenPossible(UserHandle.of(UserHandle.myUserId()),
- /* overrideDevicePolicy= */ false);
- ActivityManager.getService().switchUser(UserHandle.USER_SYSTEM);
+ mUserManager.removeUserWhenPossible(
+ UserHandle.of(UserHandle.myUserId()), /* overrideDevicePolicy= */ false);
+ ActivityManager.getService().switchUser(
+ mUserManager.getPreviousForegroundUser().getIdentifier());
} catch (RemoteException re) {
Log.e(TAG, "Unable to remove self user");
}
@@ -1100,7 +1099,7 @@
}
mMetricsFeatureProvider.action(getActivity(),
SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED);
- switchToUserId(UserHandle.USER_SYSTEM);
+ switchToUserId(mUserManager.getPreviousForegroundUser().getIdentifier());
}
private int createGuest() {
@@ -1140,8 +1139,8 @@
// Create a new guest in the foreground, and then immediately switch to it
int newGuestUserId = createGuest();
if (newGuestUserId == UserHandle.USER_NULL) {
- Log.e(TAG, "Could not create new guest, switching back to system user");
- switchToUserId(UserHandle.USER_SYSTEM);
+ Log.e(TAG, "Could not create new guest, switching back to previous user");
+ switchToUserId(mUserManager.getPreviousForegroundUser().getIdentifier());
mUserManager.removeUser(oldGuestUserId);
WindowManagerGlobal.getWindowManagerService().lockNow(/* options= */ null);
return;
diff --git a/src/com/android/settings/wifi/WifiAPITest.java b/src/com/android/settings/wifi/WifiAPITest.java
index 15465ed..c8bcf7f 100644
--- a/src/com/android/settings/wifi/WifiAPITest.java
+++ b/src/com/android/settings/wifi/WifiAPITest.java
@@ -69,7 +69,7 @@
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.layout.wifi_api_test);
+ addPreferencesFromResource(R.xml.wifi_api_test);
final PreferenceScreen preferenceScreen = getPreferenceScreen();
diff --git a/src/com/android/settings/wifi/WifiEntryPreference.java b/src/com/android/settings/wifi/WifiEntryPreference.java
index 5b44887..7206666 100644
--- a/src/com/android/settings/wifi/WifiEntryPreference.java
+++ b/src/com/android/settings/wifi/WifiEntryPreference.java
@@ -15,6 +15,8 @@
*/
package com.android.settings.wifi;
+import static com.android.settingslib.wifi.WifiUtils.getHotspotIconResource;
+
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
@@ -37,6 +39,7 @@
import com.android.settingslib.Utils;
import com.android.settingslib.wifi.WifiUtils;
import com.android.wifitrackerlib.BaseWifiTracker;
+import com.android.wifitrackerlib.HotspotNetworkEntry;
import com.android.wifitrackerlib.WifiEntry;
/**
@@ -145,13 +148,17 @@
*/
public void refresh() {
setTitle(mWifiEntry.getTitle());
- final int level = mWifiEntry.getLevel();
- final boolean showX = mWifiEntry.shouldShowXLevelIcon();
- if (level != mLevel || showX != mShowX) {
- mLevel = level;
- mShowX = showX;
- updateIcon(mShowX, mLevel);
- notifyChanged();
+ if (mWifiEntry instanceof HotspotNetworkEntry) {
+ updateHotspotIcon(((HotspotNetworkEntry) mWifiEntry).getDeviceType());
+ } else {
+ int level = mWifiEntry.getLevel();
+ boolean showX = mWifiEntry.shouldShowXLevelIcon();
+
+ if (level != mLevel || showX != mShowX) {
+ mLevel = level;
+ mShowX = showX;
+ updateIcon(mShowX, mLevel);
+ }
}
setSummary(mWifiEntry.getSummary(false /* concise */));
@@ -201,14 +208,7 @@
return accent ? android.R.attr.colorAccent : android.R.attr.colorControlNormal;
}
- @VisibleForTesting
- void updateIcon(boolean showX, int level) {
- if (level == -1) {
- setIcon(null);
- return;
- }
-
- final Drawable drawable = mIconInjector.getIcon(showX, level);
+ private void setIconWithTint(Drawable drawable) {
if (drawable != null) {
// Must use Drawable#setTintList() instead of Drawable#setTint() to show the grey
// icon when the preference is disabled.
@@ -219,6 +219,20 @@
}
}
+ @VisibleForTesting
+ void updateIcon(boolean showX, int level) {
+ if (level == -1) {
+ setIcon(null);
+ return;
+ }
+ setIconWithTint(mIconInjector.getIcon(showX, level));
+ }
+
+ @VisibleForTesting
+ void updateHotspotIcon(int deviceType) {
+ setIconWithTint(getContext().getDrawable(getHotspotIconResource(deviceType)));
+ }
+
@Nullable
private StateListDrawable getFrictionStateListDrawable() {
TypedArray frictionSld;
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index 3890ddf..098787c 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -201,8 +201,10 @@
void showAlert(Intent intent) {
final Context context = getActivity();
- final CharSequence title = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_TITLE);
- final CharSequence message = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_MESSAGE);
+ final CharSequence title =
+ intent.getCharSequenceExtra(ImsManager.EXTRA_WFC_REGISTRATION_FAILURE_TITLE);
+ final CharSequence message =
+ intent.getCharSequenceExtra(ImsManager.EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE);
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(message)
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 4c5a4bf..2e1bc31 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -637,29 +637,23 @@
}
private void refreshTxSpeed() {
- if (mWifiInfo == null
- || mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED) {
+ String summary = mWifiEntry.getTxSpeedString();
+ if (TextUtils.isEmpty(summary)) {
mTxLinkSpeedPref.setVisible(false);
return;
}
-
- int txLinkSpeedMbps = mWifiInfo.getTxLinkSpeedMbps();
- mTxLinkSpeedPref.setVisible(txLinkSpeedMbps >= 0);
- mTxLinkSpeedPref.setSummary(mContext.getString(
- R.string.tx_link_speed, mWifiInfo.getTxLinkSpeedMbps()));
+ mTxLinkSpeedPref.setVisible(true);
+ mTxLinkSpeedPref.setSummary(summary);
}
private void refreshRxSpeed() {
- if (mWifiInfo == null
- || mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED) {
+ String summary = mWifiEntry.getRxSpeedString();
+ if (TextUtils.isEmpty(summary)) {
mRxLinkSpeedPref.setVisible(false);
return;
}
-
- int rxLinkSpeedMbps = mWifiInfo.getRxLinkSpeedMbps();
- mRxLinkSpeedPref.setVisible(rxLinkSpeedMbps >= 0);
- mRxLinkSpeedPref.setSummary(mContext.getString(
- R.string.rx_link_speed, mWifiInfo.getRxLinkSpeedMbps()));
+ mRxLinkSpeedPref.setVisible(true);
+ mRxLinkSpeedPref.setSummary(summary);
}
private void refreshSsid() {
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index c2111d6..1a268f5 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -617,6 +617,9 @@
}
private void onDeviceAvailable() {
+ if (mWifiP2pManager == null || sChannel == null) {
+ return;
+ }
mWifiP2pManager.requestNetworkInfo(sChannel, networkInfo -> {
if (sChannel == null) return;
mWifiP2pManager.requestConnectionInfo(sChannel, wifip2pinfo -> {
diff --git a/tests/robotests/assets/exempt_not_implementing_instrumentable b/tests/robotests/assets/exempt_not_implementing_instrumentable
index 04ef0ef..28e1e73 100644
--- a/tests/robotests/assets/exempt_not_implementing_instrumentable
+++ b/tests/robotests/assets/exempt_not_implementing_instrumentable
@@ -1,8 +1,7 @@
com.android.settings.deletionhelper.ActivationWarningFragment
com.android.settings.applications.appops.AppOpsCategory
com.android.settings.CustomListPreference$CustomListPreferenceDialogFragment
-com.android.settings.password.ChooseLockPassword$SaveAndFinishWorker
-com.android.settings.password.ChooseLockPattern$SaveAndFinishWorker
+com.android.settings.password.SaveAndFinishWorker
com.android.settings.RestrictedListPreference$RestrictedListPreferenceDialogFragment
com.android.settings.password.ConfirmDeviceCredentialBaseFragment$LastTryDialog
com.android.settings.password.CredentialCheckResultTracker
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java
index e14e271..ea2852f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardTest.java
@@ -38,6 +38,7 @@
import android.view.accessibility.AccessibilityManager;
import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@@ -93,6 +94,7 @@
when(mAccessibilityManager.getInstalledAccessibilityServiceList()).thenReturn(
mAccessibilityServices);
doReturn(mActivity).when(mFragment).getActivity();
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java
index 6305014..0aab5bb 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AvailableHearingDeviceUpdaterTest.java
@@ -18,7 +18,6 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothDevice;
@@ -80,8 +79,9 @@
@Test
public void isFilterMatch_connectedHearingDevice_returnTrue() {
CachedBluetoothDevice connectedHearingDevice = mCachedBluetoothDevice;
- when(connectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(true);
- doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
+ when(connectedHearingDevice.isHearingAidDevice()).thenReturn(true);
+ when(mBluetoothDevice.isConnected()).thenReturn(true);
+ when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(
new ArrayList<>(List.of(connectedHearingDevice)));
@@ -91,8 +91,9 @@
@Test
public void isFilterMatch_nonConnectedHearingDevice_returnFalse() {
CachedBluetoothDevice nonConnectedHearingDevice = mCachedBluetoothDevice;
- when(nonConnectedHearingDevice.isConnectedHearingAidDevice()).thenReturn(false);
- doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
+ when(nonConnectedHearingDevice.isHearingAidDevice()).thenReturn(true);
+ when(mBluetoothDevice.isConnected()).thenReturn(false);
+ when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(
new ArrayList<>(List.of(nonConnectedHearingDevice)));
@@ -103,7 +104,8 @@
public void isFilterMatch_connectedBondingHearingDevice_returnFalse() {
CachedBluetoothDevice connectedBondingHearingDevice = mCachedBluetoothDevice;
when(connectedBondingHearingDevice.isHearingAidDevice()).thenReturn(true);
- doReturn(BluetoothDevice.BOND_BONDING).when(mBluetoothDevice).getBondState();
+ when(mBluetoothDevice.isConnected()).thenReturn(true);
+ when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDING);
when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(
new ArrayList<>(List.of(connectedBondingHearingDevice)));
@@ -114,8 +116,8 @@
public void isFilterMatch_hearingDeviceNotInCachedDevicesList_returnFalse() {
CachedBluetoothDevice notInCachedDevicesListDevice = mCachedBluetoothDevice;
when(notInCachedDevicesListDevice.isHearingAidDevice()).thenReturn(true);
- doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
- doReturn(false).when(mBluetoothDevice).isConnected();
+ when(mBluetoothDevice.isConnected()).thenReturn(true);
+ when(mBluetoothDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(new ArrayList<>());
assertThat(mUpdater.isFilterMatched(notInCachedDevicesListDevice)).isEqualTo(false);
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidHelperTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidHelperTest.java
index 194b766..3889cf0 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HearingAidHelperTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidHelperTest.java
@@ -95,8 +95,7 @@
}
@Test
- public void isHearingAidSupported_supported_returnTrue() {
- mBluetoothAdapter.enable();
+ public void isHearingAidSupported_ashaSupported_returnTrue() {
mShadowBluetoothAdapter.clearSupportedProfiles();
mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
@@ -104,15 +103,20 @@
}
@Test
- public void isHearingAidSupported_bluetoothOff_returnFalse() {
+ public void isHearingAidSupported_hapSupported_returnTrue() {
mShadowBluetoothAdapter.clearSupportedProfiles();
- mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
- mBluetoothAdapter.disable();
+ mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HAP_CLIENT);
+
+ assertThat(mHelper.isHearingAidSupported()).isTrue();
+ }
+
+ @Test
+ public void isHearingAidSupported_unsupported_returnFalse() {
+ mShadowBluetoothAdapter.clearSupportedProfiles();
assertThat(mHelper.isHearingAidSupported()).isFalse();
}
-
@Test
public void isAllHearingAidRelatedProfilesReady_allReady_returnTrue() {
when(mHearingAidProfile.isProfileReady()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
index 09db6e9..56ab082 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
@@ -37,8 +37,10 @@
import com.android.settings.utils.ActivityControllerWrapper;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.CsipSetCoordinatorProfile;
import com.android.settingslib.bluetooth.HearingAidInfo;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import org.junit.Before;
import org.junit.Rule;
@@ -52,6 +54,9 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
+import java.util.ArrayList;
+import java.util.List;
+
/** Tests for {@link HearingAidUtils}. */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowAlertDialogCompat.class, ShadowBluetoothAdapter.class,
@@ -72,6 +77,8 @@
private LocalBluetoothManager mLocalBluetoothManager;
@Mock
private CachedBluetoothDeviceManager mCachedDeviceManager;
+ @Mock
+ private CsipSetCoordinatorProfile mCsipSetCoordinatorProfile;
private BluetoothDevice mBluetoothDevice;
private BluetoothAdapter mBluetoothAdapter;
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
@@ -137,6 +144,38 @@
}
@Test
+ public void launchHearingAidPairingDialog_deviceSupportsCsip_csipEnabled_noDialog() {
+ when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
+ when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+ HearingAidInfo.DeviceMode.MODE_BINAURAL);
+ when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+ HearingAidInfo.DeviceSide.SIDE_LEFT);
+ makeDeviceSupportCsip();
+ makeDeviceEnableCsip(true);
+
+ HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(dialog).isNull();
+ }
+
+ @Test
+ public void launchHearingAidPairingDialog_deviceSupportsCsip_csipDisabled_dialogShown() {
+ when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
+ when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
+ HearingAidInfo.DeviceMode.MODE_BINAURAL);
+ when(mCachedBluetoothDevice.getDeviceSide()).thenReturn(
+ HearingAidInfo.DeviceSide.SIDE_LEFT);
+ makeDeviceSupportCsip();
+ makeDeviceEnableCsip(false);
+
+ HearingAidUtils.launchHearingAidPairingDialog(mFragmentManager, mCachedBluetoothDevice);
+
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ assertThat(dialog.isShowing()).isTrue();
+ }
+
+ @Test
public void launchHearingAidPairingDialog_dialogShown() {
when(mCachedBluetoothDevice.isConnectedAshaHearingAidDevice()).thenReturn(true);
when(mCachedBluetoothDevice.getDeviceMode()).thenReturn(
@@ -150,6 +189,17 @@
assertThat(dialog.isShowing()).isTrue();
}
+ private void makeDeviceSupportCsip() {
+ List<LocalBluetoothProfile> uuids = new ArrayList<>();
+ uuids.add(mCsipSetCoordinatorProfile);
+ when(mCachedBluetoothDevice.getProfiles()).thenReturn(uuids);
+ }
+
+ private void makeDeviceEnableCsip(boolean enabled) {
+ when(mCsipSetCoordinatorProfile.isEnabled(mCachedBluetoothDevice.getDevice()))
+ .thenReturn(enabled);
+ }
+
private void setupEnvironment() {
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
index 1cd301f..4ee2a2d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
@@ -22,6 +22,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -29,6 +30,7 @@
import android.content.Context;
import androidx.fragment.app.FragmentActivity;
+import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
@@ -73,6 +75,7 @@
final LayoutPreference resetPreference =
new LayoutPreference(mContext, R.layout.accessibility_text_reading_reset_button);
doReturn(mContext).when(mFragment).getContext();
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
doReturn(resetPreference).when(mFragment).findPreference(RESET_KEY);
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
index 84783b21..aa622f5 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
@@ -20,6 +20,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,6 +28,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@@ -75,6 +77,7 @@
mFragment =
spy(new TestToggleScreenMagnificationPreferenceFragmentForSetupWizard(mContext));
doReturn(mActivity).when(mFragment).getActivity();
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
index c604652..77e5b1f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
@@ -20,6 +20,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -28,6 +29,7 @@
import android.content.Context;
import android.os.Bundle;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
@@ -72,6 +74,7 @@
public void setUp() {
mFragment = spy(new TestToggleScreenReaderPreferenceFragmentForSetupWizard(mContext));
doReturn(mActivity).when(mFragment).getActivity();
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
index 7893831..8878064 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
@@ -20,6 +20,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -28,6 +29,7 @@
import android.content.Context;
import android.os.Bundle;
+import androidx.lifecycle.LifecycleOwner;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
@@ -72,6 +74,7 @@
public void setUp() {
mFragment = spy(new TestToggleSelectToSpeakPreferenceFragmentForSetupWizard(mContext));
doReturn(mActivity).when(mFragment).getActivity();
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
when(mActivity.getSwitchBar()).thenReturn(mSwitchBar);
doReturn(mFooterBarMixin).when(mGlifLayoutView).getMixin(FooterBarMixin.class);
}
diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
deleted file mode 100644
index da5ada7..0000000
--- a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
+++ /dev/null
@@ -1,125 +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.applications;
-
-import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-
-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.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.ModuleInfo;
-import android.content.pm.PackageManager;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.datausage.AppStateDataUsageBridge;
-import com.android.settings.testutils.shadow.ShadowApplicationsState;
-import com.android.settings.testutils.shadow.ShadowUserManager;
-import com.android.settingslib.applications.ApplicationsState;
-
-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;
-import org.robolectric.annotation.Config;
-
-import java.util.ArrayList;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUserManager.class, ShadowApplicationsState.class})
-public class SpecialAppAccessPreferenceControllerTest {
-
- private Context mContext;
- @Mock
- private ApplicationsState.Session mSession;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private PackageManager mPackageManager;
-
- private SpecialAppAccessPreferenceController mController;
- private Preference mPreference;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
- when(mContext.getApplicationContext()).thenReturn(mContext);
- ShadowUserManager.getShadow().setProfileIdsWithDisabled(new int[]{0});
- doReturn(mPackageManager).when(mContext).getPackageManager();
- doReturn(new ArrayList<ModuleInfo>()).when(mPackageManager).getInstalledModules(anyInt());
- mController = new SpecialAppAccessPreferenceController(mContext, "test_key");
- mPreference = new Preference(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
-
- mController.mSession = mSession;
- }
-
- @Test
- public void getAvailabilityState_unsearchable() {
- assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
- }
-
- @Test
- public void updateState_shouldSetSummary() {
- final ArrayList<ApplicationsState.AppEntry> apps = new ArrayList<>();
- final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
- entry.hasLauncherEntry = true;
- entry.info = new ApplicationInfo();
- entry.extraInfo = new AppStateDataUsageBridge.DataUsageState(
- true /* allowlisted */, false /* denylisted */);
- apps.add(entry);
- when(mSession.getAllApps()).thenReturn(apps);
-
- mController.displayPreference(mScreen);
- mController.onExtraInfoUpdated();
-
- assertThat(mPreference.getSummary())
- .isEqualTo(mContext.getResources().getQuantityString(
- R.plurals.special_access_summary, 1, 1));
- }
-
- @Test
- public void updateState_wrongExtraInfo_shouldNotIncludeInSummary() {
- final ArrayList<ApplicationsState.AppEntry> apps = new ArrayList<>();
- final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
- entry.hasLauncherEntry = true;
- entry.info = new ApplicationInfo();
- entry.extraInfo = new AppStateNotificationBridge.NotificationsSentState();
- apps.add(entry);
- when(mSession.getAllApps()).thenReturn(apps);
-
- mController.displayPreference(mScreen);
- mController.onExtraInfoUpdated();
-
- assertThat(mPreference.getSummary())
- .isEqualTo(mContext.getResources().getQuantityString(
- R.plurals.special_access_summary, 0, 0));
- }
-}
diff --git a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java b/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
deleted file mode 100644
index f039c97..0000000
--- a/tests/robotests/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.java
+++ /dev/null
@@ -1,74 +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.applications.specialaccess;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.res.Resources;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-public class DataSaverControllerTest {
-
- private Context mContext;
- private Resources mResources;
- private DataSaverController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-
- mResources = spy(mContext.getResources());
- when(mContext.getResources()).thenReturn(mResources);
-
- mController = new DataSaverController(mContext, "key");
- }
-
- @Test
- public void testDataSaver_byDefault_shouldBeShown() {
- when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(true);
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Ignore
- @Test
- @Config(qualifiers = "mcc999")
- public void testDataSaver_ifDisabledByCarrier_shouldNotBeShown() {
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void testDataSaver_ifDisabled_shouldNotBeShown() {
- when(mResources.getBoolean(R.bool.config_show_data_saver)).thenReturn(false);
- assertThat(mController.isAvailable()).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
index c4da133..df15e5c 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceEnrollIntroductionTest.java
@@ -40,6 +40,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.hardware.face.Face;
import android.hardware.face.FaceManager;
import android.hardware.face.FaceSensorProperties;
@@ -116,6 +117,7 @@
private FaceEnrollIntroduction mSpyActivity;
private FakeFeatureFactory mFakeFeatureFactory;
private ShadowUserManager mUserManager;
+ private Resources mResources;
enum GateKeeperAction {CALL_SUPER, RETURN_BYTE_ARRAY, THROW_CREDENTIAL_NOT_MATCH}
@@ -245,6 +247,14 @@
when(mFaceManager.getEnrolledFaces(anyInt())).thenReturn(faces);
}
+ private void setFaceManagerToHaveWithUserId(int numEnrollments, int userId) {
+ List<Face> faces = new ArrayList<>();
+ for (int i = 0; i < numEnrollments; i++) {
+ faces.add(new Face("Face " + i /* name */, 1 /*faceId */, 1 /* deviceId */));
+ }
+ when(mFaceManager.getEnrolledFaces(userId)).thenReturn(faces);
+ }
+
@Test
public void intro_CheckCanEnroll() {
setFaceManagerToHave(0 /* numEnrollments */);
@@ -546,4 +556,40 @@
assertThat(mActivity.getPostureCallback()).isNull();
}
+ @Test
+ public void testFaceEnrollIntroduction_maxFacesNotEnrolled_addUserProfile() {
+ // Enroll a face for one user
+ setFaceManagerToHaveWithUserId(1, 0);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mResources = spy(mContext.getResources());
+ when(mResources.getInteger(R.integer.suw_max_faces_enrollable)).thenReturn(1);
+
+ mController = Robolectric.buildActivity(TestFaceEnrollIntroduction.class, new Intent());
+ mActivity = (TestFaceEnrollIntroduction) mController.get();
+
+ mController.create();
+
+ // The maximum number of faces is already enrolled
+ int result = mActivity.checkMaxEnrolled();
+ assertThat(result).isEqualTo(R.string.face_intro_error_max);
+
+ // Add another user profile
+ mUserManager.addUser(10, "", 0);
+ final Intent intent = new Intent();
+ intent.putExtra(Intent.EXTRA_USER_ID, 10);
+
+ when(mResources.getInteger(R.integer.suw_max_faces_enrollable)).thenReturn(2);
+
+ mController = Robolectric.buildActivity(TestFaceEnrollIntroduction.class, intent);
+ mActivity = (TestFaceEnrollIntroduction) mController.get();
+
+ mController.create();
+
+ // The maximum number of faces hasn't been enrolled, so a new face
+ // can be enrolled for the added user profile
+ result = mActivity.checkMaxEnrolled();
+ assertThat(result).isEqualTo(0);
+ }
+
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index 0f12d1e..a23eded 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -148,6 +148,23 @@
}
@Test
+ public void fingerprintUdfpsEnrollInitStage_afterOnEnrollmentHelp_shouldVibrate() {
+ initializeActivityFor(TYPE_UDFPS_OPTICAL);
+
+ assertThat(getLayout().getDescriptionText()).isNotEqualTo("");
+
+ mActivity.configureEnrollmentStage(0 /* lottie */);
+ mActivity.onEnrollmentHelp(1/* FINGERPRINT_ACQUIRED_PARTIAL */, mContext.getString(
+ com.android.internal.R.string.fingerprint_acquired_partial));
+
+ verify(mVibrator, never()).vibrate(anyInt(), anyString(), any(), anyString(), any());
+
+ mActivity.onEnrollmentProgressChange(1, 1);
+ verify(mVibrator).vibrate(anyInt(), anyString(), any(), anyString(), any());
+
+ }
+
+ @Test
public void fingerprintUdfpsOverlayEnrollment_gainFocus_shouldNotCancel() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
index 69f10d6..3eba91c 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
@@ -85,6 +85,7 @@
private Context mContext;
private TestFingerprintEnrollIntroduction mFingerprintEnrollIntroduction;
+ private ActivityController<TestFingerprintEnrollIntroduction> mController;
private static final int MAX_ENROLLMENTS = 5;
private static final byte[] EXPECTED_TOKEN = new byte[] { 10, 20, 30, 40 };
@@ -121,9 +122,8 @@
void setupFingerprintEnrollIntroWith(@NonNull Intent intent) {
- final ActivityController<TestFingerprintEnrollIntroduction> controller =
- Robolectric.buildActivity(TestFingerprintEnrollIntroduction.class, intent);
- mFingerprintEnrollIntroduction = controller.get();
+ mController = Robolectric.buildActivity(TestFingerprintEnrollIntroduction.class, intent);
+ mFingerprintEnrollIntroduction = mController.get();
mFingerprintEnrollIntroduction.mMockedFingerprintManager = mFingerprintManager;
mFingerprintEnrollIntroduction.mMockedGatekeeperPasswordProvider =
mGatekeeperPasswordProvider;
@@ -137,7 +137,7 @@
when(mLockPatternUtils.getActivePasswordQuality(userId))
.thenReturn(PASSWORD_QUALITY_SOMETHING);
- controller.create();
+ mController.create();
}
void setFingerprintManagerToHave(int numEnrollments) {
@@ -277,6 +277,18 @@
}
}
+ @Test
+ public void clickNext_onActivityResult_pause_shouldFinish() {
+ setupFingerprintEnrollIntroWith(newTokenOnlyIntent());
+ mController.resume();
+ mFingerprintEnrollIntroduction.clickNextBtn();
+ mController.pause().stop();
+ assertThat(mFingerprintEnrollIntroduction.shouldFinishWhenBackgrounded()).isEqualTo(false);
+
+ mController.resume().pause().stop();
+ assertThat(mFingerprintEnrollIntroduction.shouldFinishWhenBackgrounded()).isEqualTo(true);
+ }
+
private Intent newTokenOnlyIntent() {
return new Intent()
.putExtra(EXTRA_KEY_CHALLENGE_TOKEN, new byte[] { 1 });
@@ -362,5 +374,16 @@
protected void getChallenge(GenerateChallengeCallback callback) {
callback.onChallengeGenerated(mNewSensorId, mUserId, mNewChallenge);
}
+
+ @Override
+ protected boolean shouldFinishWhenBackgrounded() {
+ return super.shouldFinishWhenBackgrounded();
+ }
+
+ //mock click next btn
+ public void clickNextBtn() {
+ super.onNextButtonClick(null);
+ }
+
}
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
index 18b05ad..8b70550 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
@@ -16,12 +16,14 @@
package com.android.settings.biometrics.fingerprint;
+import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.ADD_FINGERPRINT_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_FINGERPRINT_ADD;
+import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_REQUIRE_SCREEN_ON_TO_AUTH;
import static com.google.common.truth.Truth.assertThat;
@@ -39,11 +41,16 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.UserInfo;
import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.FingerprintManager;
+import android.hardware.fingerprint.FingerprintSensorProperties;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.UserHandle;
+import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@@ -61,6 +68,7 @@
import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settingslib.RestrictedSwitchPreference;
import org.junit.After;
import org.junit.Before;
@@ -68,6 +76,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -81,6 +90,9 @@
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
ShadowUserManager.class, ShadowLockPatternUtils.class})
public class FingerprintSettingsFragmentTest {
+ private static final int PRIMARY_USER_ID = 0;
+ private static final int GUEST_USER_ID = 10;
+
private FingerprintSettingsFragment mFragment;
private Context mContext;
private FragmentActivity mActivity;
@@ -92,11 +104,26 @@
@Mock
private FragmentTransaction mFragmentTransaction;
+ @Captor
+ private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor =
+ ArgumentCaptor.forClass(CancellationSignal.class);
+ @Captor
+ private ArgumentCaptor<FingerprintManager.AuthenticationCallback>
+ mAuthenticationCallbackArgumentCaptor = ArgumentCaptor.forClass(
+ FingerprintManager.AuthenticationCallback.class);
+
+ private FingerprintAuthenticateSidecar mFingerprintAuthenticateSidecar;
+
@Before
public void setUp() {
- doReturn(true).when(mFingerprintManager).isHardwareDetected();
ShadowUtils.setFingerprintManager(mFingerprintManager);
FakeFeatureFactory.setupForTest();
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mFragment = spy(new FingerprintSettingsFragment());
+ doReturn(mContext).when(mFragment).getContext();
+
+ doReturn(true).when(mFingerprintManager).isHardwareDetected();
}
@After
@@ -146,19 +173,71 @@
false)).isTrue();
}
+ // Test the case when FingerprintAuthenticateSidecar receives an error callback from the
+ // framework or from another authentication client. The cancellation signal should not be set
+ // to null because there may exist a running authentication client.
+ // The signal can only be cancelled from the caller in FingerprintSettings.
+ @Test
+ public void testCancellationSignalLifeCycle() {
+ setUpFragment(false);
+
+ mFingerprintAuthenticateSidecar.setFingerprintManager(mFingerprintManager);
+
+ doNothing().when(mFingerprintManager).authenticate(any(),
+ mCancellationSignalArgumentCaptor.capture(),
+ mAuthenticationCallbackArgumentCaptor.capture(), any(), anyInt());
+
+ mFingerprintAuthenticateSidecar.startAuthentication(1);
+
+ assertThat(mAuthenticationCallbackArgumentCaptor.getValue()).isNotNull();
+ assertThat(mCancellationSignalArgumentCaptor.getValue()).isNotNull();
+
+ // Authentication error callback should not cancel the signal.
+ mAuthenticationCallbackArgumentCaptor.getValue().onAuthenticationError(0, "");
+ assertThat(mFingerprintAuthenticateSidecar.isCancelled()).isFalse();
+
+ // The signal should be cancelled when caller stops the authentication.
+ mFingerprintAuthenticateSidecar.stopAuthentication();
+ assertThat(mFingerprintAuthenticateSidecar.isCancelled()).isTrue();
+ }
+
+ @Test
+ public void testGuestUserRequireScreenOnToAuth() {
+ Settings.Secure.putIntForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.SFPS_PERFORMANT_AUTH_ENABLED,
+ 0,
+ UserHandle.of(PRIMARY_USER_ID).getIdentifier());
+
+ Settings.Secure.putIntForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.SFPS_PERFORMANT_AUTH_ENABLED,
+ 1,
+ UserHandle.of(GUEST_USER_ID).getIdentifier());
+
+ setUpFragment(false, GUEST_USER_ID, TYPE_POWER_BUTTON);
+
+ final RestrictedSwitchPreference requireScreenOnToAuthPreference = mFragment.findPreference(
+ KEY_REQUIRE_SCREEN_ON_TO_AUTH);
+ assertThat(requireScreenOnToAuthPreference.isChecked()).isTrue();
+ }
+
private void setUpFragment(boolean showChooseLock) {
+ setUpFragment(showChooseLock, PRIMARY_USER_ID, TYPE_UDFPS_OPTICAL);
+ }
+
+ private void setUpFragment(boolean showChooseLock, int userId,
+ @FingerprintSensorProperties.SensorType int sensorType) {
+ ShadowUserManager.getShadow().addProfile(new UserInfo(userId, "", 0));
+
Intent intent = new Intent();
if (!showChooseLock) {
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, 1L);
}
-
+ intent.putExtra(Intent.EXTRA_USER_ID, userId);
mActivity = spy(Robolectric.buildActivity(FragmentActivity.class, intent).get());
- mContext = spy(ApplicationProvider.getApplicationContext());
-
- mFragment = spy(new FingerprintSettingsFragment());
doReturn(mActivity).when(mFragment).getActivity();
- doReturn(mContext).when(mFragment).getContext();
FragmentManager fragmentManager = mock(FragmentManager.class);
doReturn(mFragmentTransaction).when(fragmentManager).beginTransaction();
@@ -166,9 +245,13 @@
doReturn(fragmentManager).when(mFragment).getFragmentManager();
doReturn(fragmentManager).when(mActivity).getSupportFragmentManager();
+ mFingerprintAuthenticateSidecar = new FingerprintAuthenticateSidecar();
+ doReturn(mFingerprintAuthenticateSidecar).when(fragmentManager).findFragmentByTag(
+ "authenticate_sidecar");
+
doNothing().when(mFragment).startActivityForResult(any(Intent.class), anyInt());
- setSensor();
+ setSensor(sensorType);
// Start fragment
mFragment.onAttach(mContext);
@@ -177,14 +260,14 @@
mFragment.onResume();
}
- private void setSensor() {
+ private void setSensor(@FingerprintSensorProperties.SensorType int sensorType) {
final ArrayList<FingerprintSensorPropertiesInternal> props = new ArrayList<>();
props.add(new FingerprintSensorPropertiesInternal(
0 /* sensorId */,
SensorProperties.STRENGTH_STRONG,
1 /* maxEnrollmentsPerUser */,
new ArrayList<ComponentInfoInternal>(),
- TYPE_UDFPS_OPTICAL,
+ sensorType,
true /* resetLockoutRequiresHardwareAuthToken */));
doReturn(props).when(mFingerprintManager).getSensorPropertiesInternal();
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBaseTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBaseTest.java
index 184f521..7c598e0 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBaseTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePairingDetailBaseTest.java
@@ -202,7 +202,7 @@
new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
true, BluetoothDevicePreference.SortType.TYPE_FIFO);
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(TEST_DEVICE_ADDRESS);
- mFragment.mDevicePreferenceMap.put(mCachedBluetoothDevice, preference);
+ mFragment.getDevicePreferenceMap().put(mCachedBluetoothDevice, preference);
when(mCachedBluetoothDevice.isConnected()).thenReturn(true);
when(mCachedBluetoothDevice.getDevice()).thenReturn(device);
@@ -210,7 +210,7 @@
mFragment.onProfileConnectionStateChanged(mCachedBluetoothDevice,
BluetoothProfile.A2DP, BluetoothAdapter.STATE_CONNECTED);
- assertThat(mFragment.mDevicePreferenceMap.size()).isEqualTo(0);
+ assertThat(mFragment.getDevicePreferenceMap().size()).isEqualTo(0);
}
@Test
@@ -221,7 +221,7 @@
true, BluetoothDevicePreference.SortType.TYPE_FIFO);
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(TEST_DEVICE_ADDRESS);
final BluetoothDevice device2 = mBluetoothAdapter.getRemoteDevice(TEST_DEVICE_ADDRESS_B);
- mFragment.mDevicePreferenceMap.put(mCachedBluetoothDevice, preference);
+ mFragment.getDevicePreferenceMap().put(mCachedBluetoothDevice, preference);
when(mCachedBluetoothDevice.isConnected()).thenReturn(true);
when(mCachedBluetoothDevice.getDevice()).thenReturn(device);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
index 5fbfee8..ce67051 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
@@ -27,7 +27,12 @@
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.os.Bundle;
+import android.view.View;
+import androidx.annotation.NonNull;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ApplicationProvider;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
@@ -53,6 +58,20 @@
private final Context mContext = ApplicationProvider.getApplicationContext();
+ private final Lifecycle mFakeLifecycle = new Lifecycle() {
+ @Override
+ public void addObserver(@NonNull LifecycleObserver observer) {}
+
+ @Override
+ public void removeObserver(@NonNull LifecycleObserver observer) {}
+
+ @NonNull
+ @Override
+ public State getCurrentState() {
+ return State.CREATED;
+ }
+ };
+
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private LocalBluetoothManager mLocalManager;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -74,6 +93,8 @@
.findPreference(BluetoothPairingDetail.KEY_AVAIL_DEVICES);
doReturn(mFooterPreference).when(mFragment)
.findPreference(BluetoothPairingDetail.KEY_FOOTER_PREF);
+ doReturn(new View(mContext)).when(mFragment).getView();
+ doReturn((LifecycleOwner) () -> mFakeLifecycle).when(mFragment).getViewLifecycleOwner();
doReturn(Collections.emptyList()).when(mDeviceManager).getCachedDevicesCopy();
mFragment.mBluetoothAdapter = mBluetoothAdapter;
@@ -82,7 +103,7 @@
mFragment.mDeviceListGroup = mAvailableDevicesCategory;
mFragment.onViewCreated(mFragment.getView(), Bundle.EMPTY);
}
-//
+
@Test
public void initPreferencesFromPreferenceScreen_findPreferences() {
mFragment.initPreferencesFromPreferenceScreen();
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
deleted file mode 100644
index 4f46ce9..0000000
--- a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
+++ /dev/null
@@ -1,237 +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.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothUuid;
-import android.bluetooth.le.BluetoothLeScanner;
-import android.bluetooth.le.ScanCallback;
-import android.bluetooth.le.ScanFilter;
-import android.bluetooth.le.ScanSettings;
-import android.content.Context;
-import android.content.res.Resources;
-
-import androidx.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
-import com.android.settingslib.bluetooth.CachedBluetoothDevice;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-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;
-import org.robolectric.annotation.Config;
-
-import java.util.Collections;
-import java.util.List;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowBluetoothAdapter.class})
-public class DeviceListPreferenceFragmentTest {
-
- private static final String FOOTAGE_MAC_STRING = "Bluetooth mac: xxxx";
-
- @Mock
- private Resources mResource;
- @Mock
- private Context mContext;
- @Mock
- private BluetoothLeScanner mBluetoothLeScanner;
-
- private TestFragment mFragment;
- private Preference mMyDevicePreference;
-
-
- private BluetoothAdapter mBluetoothAdapter;
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
-
- mFragment = spy(new TestFragment());
- doReturn(mContext).when(mFragment).getContext();
- doReturn(mResource).when(mFragment).getResources();
- mBluetoothAdapter = spy(BluetoothAdapter.getDefaultAdapter());
- mFragment.mBluetoothAdapter = mBluetoothAdapter;
-
- mMyDevicePreference = new Preference(RuntimeEnvironment.application);
- }
-
- @Test
- public void setUpdateMyDevicePreference_setTitleCorrectly() {
- doReturn(FOOTAGE_MAC_STRING).when(mFragment)
- .getString(eq(R.string.bluetooth_footer_mac_message), any());
-
- mFragment.updateFooterPreference(mMyDevicePreference);
-
- assertThat(mMyDevicePreference.getTitle()).isEqualTo(FOOTAGE_MAC_STRING);
- }
-
- @Test
- public void testEnableDisableScanning_testStateAfterEanbleDisable() {
- mFragment.enableScanning();
- verify(mFragment).startScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
-
- mFragment.disableScanning();
- verify(mFragment).stopScanning();
- assertThat(mFragment.mScanEnabled).isFalse();
- }
-
- @Test
- public void testScanningStateChanged_testScanStarted() {
- mFragment.enableScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
- verify(mFragment).startScanning();
-
- mFragment.onScanningStateChanged(true);
- verify(mFragment, times(1)).startScanning();
- }
-
- @Test
- public void testScanningStateChanged_testScanFinished() {
- // Could happen when last scanning not done while current scan gets enabled
- mFragment.enableScanning();
- verify(mFragment).startScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
-
- mFragment.onScanningStateChanged(false);
- verify(mFragment, times(2)).startScanning();
- }
-
- @Test
- public void testScanningStateChanged_testScanStateMultiple() {
- // Could happen when last scanning not done while current scan gets enabled
- mFragment.enableScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
- verify(mFragment).startScanning();
-
- mFragment.onScanningStateChanged(true);
- verify(mFragment, times(1)).startScanning();
-
- mFragment.onScanningStateChanged(false);
- verify(mFragment, times(2)).startScanning();
-
- mFragment.onScanningStateChanged(true);
- verify(mFragment, times(2)).startScanning();
-
- mFragment.disableScanning();
- verify(mFragment).stopScanning();
-
- mFragment.onScanningStateChanged(false);
- verify(mFragment, times(2)).startScanning();
-
- mFragment.onScanningStateChanged(true);
- verify(mFragment, times(2)).startScanning();
- }
-
- @Test
- public void testScanningStateChanged_testScanFinishedAfterDisable() {
- mFragment.enableScanning();
- verify(mFragment).startScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
-
- mFragment.disableScanning();
- verify(mFragment).stopScanning();
- assertThat(mFragment.mScanEnabled).isFalse();
-
- mFragment.onScanningStateChanged(false);
- verify(mFragment, times(1)).startScanning();
- }
-
- @Test
- public void testScanningStateChanged_testScanStartedAfterDisable() {
- mFragment.enableScanning();
- verify(mFragment).startScanning();
- assertThat(mFragment.mScanEnabled).isTrue();
-
- mFragment.disableScanning();
- verify(mFragment).stopScanning();
- assertThat(mFragment.mScanEnabled).isFalse();
-
- mFragment.onScanningStateChanged(true);
- verify(mFragment, times(1)).startScanning();
- }
-
- @Test
- public void startScanning_setLeScanFilter_shouldStartLeScan() {
- final ScanFilter leScanFilter = new ScanFilter.Builder()
- .setServiceData(BluetoothUuid.HEARING_AID, new byte[]{0}, new byte[]{0})
- .build();
- doReturn(mBluetoothLeScanner).when(mBluetoothAdapter).getBluetoothLeScanner();
-
- mFragment.setFilter(Collections.singletonList(leScanFilter));
- mFragment.startScanning();
-
- verify(mBluetoothLeScanner).startScan(eq(Collections.singletonList(leScanFilter)),
- any(ScanSettings.class), any(ScanCallback.class));
- }
-
- /**
- * Fragment to test since {@code DeviceListPreferenceFragment} is abstract
- */
- public static class TestFragment extends DeviceListPreferenceFragment {
-
- public TestFragment() {
- super("");
- }
-
- @Override
- public int getMetricsCategory() {
- return 0;
- }
-
- @Override
- public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {}
-
- @Override
- protected void initPreferencesFromPreferenceScreen() {}
-
- @Override
- public String getDeviceListKey() {
- return null;
- }
-
- @Override
- protected String getLogTag() {
- return null;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return 0;
- }
-
- @Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return null;
- }
- }
-}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.kt b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.kt
new file mode 100644
index 0000000..5a21aff
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.kt
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2023 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.bluetooth
+
+import android.bluetooth.BluetoothAdapter
+import android.bluetooth.BluetoothDevice
+import android.bluetooth.BluetoothUuid
+import android.bluetooth.le.BluetoothLeScanner
+import android.bluetooth.le.ScanCallback
+import android.bluetooth.le.ScanFilter
+import android.content.Context
+import android.content.res.Resources
+import androidx.preference.Preference
+import com.android.settings.R
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter
+import com.android.settingslib.bluetooth.BluetoothDeviceFilter
+import com.android.settingslib.bluetooth.CachedBluetoothDevice
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mock
+import org.mockito.Mockito.doNothing
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Spy
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.RuntimeEnvironment
+import org.robolectric.annotation.Config
+import org.mockito.Mockito.`when` as whenever
+
+@RunWith(RobolectricTestRunner::class)
+@Config(shadows = [ShadowBluetoothAdapter::class])
+class DeviceListPreferenceFragmentTest {
+ @get:Rule
+ val mockito: MockitoRule = MockitoJUnit.rule()
+
+ @Mock
+ private lateinit var resource: Resources
+
+ @Mock
+ private lateinit var context: Context
+
+ @Mock
+ private lateinit var bluetoothLeScanner: BluetoothLeScanner
+
+ @Mock
+ private lateinit var cachedDeviceManager: CachedBluetoothDeviceManager
+
+ @Mock
+ private lateinit var cachedDevice: CachedBluetoothDevice
+
+ @Spy
+ private var fragment = TestFragment()
+
+ private lateinit var myDevicePreference: Preference
+ private lateinit var bluetoothAdapter: BluetoothAdapter
+
+ @Before
+ fun setUp() {
+ doReturn(context).`when`(fragment).context
+ doReturn(resource).`when`(fragment).resources
+ doNothing().`when`(fragment).onDeviceAdded(cachedDevice)
+ bluetoothAdapter = spy(BluetoothAdapter.getDefaultAdapter())
+ fragment.mBluetoothAdapter = bluetoothAdapter
+ fragment.mCachedDeviceManager = cachedDeviceManager
+
+ myDevicePreference = Preference(RuntimeEnvironment.application)
+ }
+
+ @Test
+ fun setUpdateMyDevicePreference_setTitleCorrectly() {
+ doReturn(FOOTAGE_MAC_STRING).`when`(fragment)
+ .getString(eq(R.string.bluetooth_footer_mac_message), any())
+
+ fragment.updateFooterPreference(myDevicePreference)
+
+ assertThat(myDevicePreference.title).isEqualTo(FOOTAGE_MAC_STRING)
+ }
+
+ @Test
+ fun testEnableDisableScanning_testStateAfterEnableDisable() {
+ fragment.enableScanning()
+ verify(fragment).startScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+
+ fragment.disableScanning()
+ verify(fragment).stopScanning()
+ assertThat(fragment.mScanEnabled).isFalse()
+ }
+
+ @Test
+ fun testScanningStateChanged_testScanStarted() {
+ fragment.enableScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+ verify(fragment).startScanning()
+
+ fragment.onScanningStateChanged(true)
+ verify(fragment, times(1)).startScanning()
+ }
+
+ @Test
+ fun testScanningStateChanged_testScanFinished() {
+ // Could happen when last scanning not done while current scan gets enabled
+ fragment.enableScanning()
+ verify(fragment).startScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+
+ fragment.onScanningStateChanged(false)
+ verify(fragment, times(2)).startScanning()
+ }
+
+ @Test
+ fun testScanningStateChanged_testScanStateMultiple() {
+ // Could happen when last scanning not done while current scan gets enabled
+ fragment.enableScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+ verify(fragment).startScanning()
+
+ fragment.onScanningStateChanged(true)
+ verify(fragment, times(1)).startScanning()
+
+ fragment.onScanningStateChanged(false)
+ verify(fragment, times(2)).startScanning()
+
+ fragment.onScanningStateChanged(true)
+ verify(fragment, times(2)).startScanning()
+
+ fragment.disableScanning()
+ verify(fragment).stopScanning()
+
+ fragment.onScanningStateChanged(false)
+ verify(fragment, times(2)).startScanning()
+
+ fragment.onScanningStateChanged(true)
+ verify(fragment, times(2)).startScanning()
+ }
+
+ @Test
+ fun testScanningStateChanged_testScanFinishedAfterDisable() {
+ fragment.enableScanning()
+ verify(fragment).startScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+
+ fragment.disableScanning()
+ verify(fragment).stopScanning()
+ assertThat(fragment.mScanEnabled).isFalse()
+
+ fragment.onScanningStateChanged(false)
+ verify(fragment, times(1)).startScanning()
+ }
+
+ @Test
+ fun testScanningStateChanged_testScanStartedAfterDisable() {
+ fragment.enableScanning()
+ verify(fragment).startScanning()
+ assertThat(fragment.mScanEnabled).isTrue()
+
+ fragment.disableScanning()
+ verify(fragment).stopScanning()
+ assertThat(fragment.mScanEnabled).isFalse()
+
+ fragment.onScanningStateChanged(true)
+ verify(fragment, times(1)).startScanning()
+ }
+
+ @Test
+ fun startScanning_setLeScanFilter_shouldStartLeScan() {
+ val leScanFilter = ScanFilter.Builder()
+ .setServiceData(BluetoothUuid.HEARING_AID, byteArrayOf(0), byteArrayOf(0))
+ .build()
+ doReturn(bluetoothLeScanner).`when`(bluetoothAdapter).bluetoothLeScanner
+
+ fragment.setFilter(listOf(leScanFilter))
+ fragment.startScanning()
+
+ verify(bluetoothLeScanner).startScan(eq(listOf(leScanFilter)), any(), any<ScanCallback>())
+ }
+
+ @Test
+ fun addCachedDevices_whenFilterIsNull_onDeviceAddedIsCalled() = runBlocking {
+ val mockCachedDevice = mock(CachedBluetoothDevice::class.java)
+ whenever(cachedDeviceManager.cachedDevicesCopy).thenReturn(listOf(mockCachedDevice))
+ fragment.lifecycleScope = this
+
+ fragment.addCachedDevices(filterForCachedDevices = null)
+ delay(100)
+
+ verify(fragment).onDeviceAdded(mockCachedDevice)
+ }
+
+ @Test
+ fun addCachedDevices_whenFilterMatched_onDeviceAddedIsCalled() = runBlocking {
+ val mockBluetoothDevice = mock(BluetoothDevice::class.java)
+ whenever(mockBluetoothDevice.bondState).thenReturn(BluetoothDevice.BOND_NONE)
+ whenever(cachedDevice.device).thenReturn(mockBluetoothDevice)
+ whenever(cachedDeviceManager.cachedDevicesCopy).thenReturn(listOf(cachedDevice))
+ fragment.lifecycleScope = this
+
+ fragment.addCachedDevices(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER)
+ delay(100)
+
+ verify(fragment).onDeviceAdded(cachedDevice)
+ }
+
+ @Test
+ fun addCachedDevices_whenFilterNoMatch_onDeviceAddedNotCalled() = runBlocking {
+ val mockBluetoothDevice = mock(BluetoothDevice::class.java)
+ whenever(mockBluetoothDevice.bondState).thenReturn(BluetoothDevice.BOND_BONDED)
+ whenever(cachedDevice.device).thenReturn(mockBluetoothDevice)
+ whenever(cachedDeviceManager.cachedDevicesCopy).thenReturn(listOf(cachedDevice))
+ fragment.lifecycleScope = this
+
+ fragment.addCachedDevices(BluetoothDeviceFilter.UNBONDED_DEVICE_FILTER)
+ delay(100)
+
+ verify(fragment, never()).onDeviceAdded(cachedDevice)
+ }
+
+ /**
+ * Fragment to test since `DeviceListPreferenceFragment` is abstract
+ */
+ open class TestFragment : DeviceListPreferenceFragment(null) {
+ override fun getMetricsCategory() = 0
+ override fun initPreferencesFromPreferenceScreen() {}
+ override val deviceListKey = "device_list"
+ override fun getLogTag() = null
+ override fun getPreferenceScreenResId() = 0
+ }
+
+ private companion object {
+ const val FOOTAGE_MAC_STRING = "Bluetooth mac: xxxx"
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java
index f4fa397..3c459de 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java
@@ -18,6 +18,10 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doNothing;
@@ -27,13 +31,17 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.Dialog;
import android.app.role.RoleManager;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.Process;
import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.view.InputDevice;
@@ -48,6 +56,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
+import com.android.settings.dashboard.profileselector.UserAdapter;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -59,7 +68,9 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
@RunWith(RobolectricTestRunner.class)
public class StylusDevicesControllerTest {
@@ -79,6 +90,8 @@
@Mock
private PackageManager mPm;
@Mock
+ private UserManager mUserManager;
+ @Mock
private RoleManager mRm;
@Mock
private Lifecycle mLifecycle;
@@ -87,7 +100,6 @@
@Mock
private BluetoothDevice mBluetoothDevice;
-
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
@@ -101,6 +113,7 @@
when(mContext.getSystemService(InputMethodManager.class)).thenReturn(mImm);
when(mContext.getSystemService(RoleManager.class)).thenReturn(mRm);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
doNothing().when(mContext).startActivity(any());
when(mImm.getCurrentInputMethodInfo()).thenReturn(mInputMethodInfo);
@@ -115,6 +128,8 @@
when(mPm.getApplicationInfo(eq(NOTES_PACKAGE_NAME),
any(PackageManager.ApplicationInfoFlags.class))).thenReturn(new ApplicationInfo());
when(mPm.getApplicationLabel(any(ApplicationInfo.class))).thenReturn(NOTES_APP_LABEL);
+ when(mUserManager.getUsers()).thenReturn(Arrays.asList(new UserInfo(0, "default", 0)));
+ when(mUserManager.isManagedProfile(anyInt())).thenReturn(false);
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
@@ -228,22 +243,50 @@
when(mInputMethodInfo.supportsStylusHandwriting()).thenReturn(false);
showScreen(mController);
- Preference handwritingPref = mPreferenceContainer.getPreference(1);
+ Preference handwritingPref = mPreferenceContainer.getPreference(1);
assertThat(handwritingPref.isVisible()).isFalse();
}
@Test
- public void defaultNotesPreference_showsNotesRoleApp() {
+ public void defaultNotesPreference_singleUser_showsNotesRoleApp() {
showScreen(mController);
- Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
+ Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
assertThat(defaultNotesPref.getTitle().toString()).isEqualTo(
mContext.getString(R.string.stylus_default_notes_app));
assertThat(defaultNotesPref.getSummary().toString()).isEqualTo(NOTES_APP_LABEL.toString());
}
@Test
+ public void defaultNotesPreference_workProfileUser_showsWorkNotesRoleApp() {
+ when(mUserManager.isManagedProfile(0)).thenReturn(true);
+
+ showScreen(mController);
+
+ Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
+ assertThat(defaultNotesPref.getTitle().toString()).isEqualTo(
+ mContext.getString(R.string.stylus_default_notes_app));
+ assertThat(defaultNotesPref.getSummary().toString()).isEqualTo(
+ mContext.getString(R.string.stylus_default_notes_summary_work,
+ NOTES_APP_LABEL.toString()));
+ }
+
+ @Test
+ public void defaultNotesPreference_noApplicationInfo_showsBlankSummary()
+ throws PackageManager.NameNotFoundException {
+ when(mPm.getApplicationInfo(eq(NOTES_PACKAGE_NAME),
+ any(PackageManager.ApplicationInfoFlags.class))).thenReturn(null);
+
+ showScreen(mController);
+
+ Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
+ assertThat(defaultNotesPref.getTitle().toString()).isEqualTo(
+ mContext.getString(R.string.stylus_default_notes_app));
+ assertThat(defaultNotesPref.getSummary().toString()).isEqualTo("");
+ }
+
+ @Test
public void defaultNotesPreference_roleHolderChanges_updatesPreference() {
showScreen(mController);
Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
@@ -267,7 +310,7 @@
}
@Test
- public void defaultNotesPreferenceClick_sendsManageDefaultRoleIntent() {
+ public void defaultNotesPreferenceClick_singleUser_sendsManageDefaultRoleIntent() {
final String permissionPackageName = "permissions.package";
when(mPm.getPermissionControllerPackageName()).thenReturn(permissionPackageName);
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
@@ -282,6 +325,76 @@
assertThat(intent.getPackage()).isEqualTo(permissionPackageName);
assertThat(intent.getStringExtra(Intent.EXTRA_ROLE_NAME)).isEqualTo(
RoleManager.ROLE_NOTES);
+ assertNull(mController.mDialog);
+ }
+
+ @Test
+ public void defaultNotesPreferenceClick_multiUserManagedProfile_showsProfileSelectorDialog() {
+ mContext.setTheme(R.style.Theme_AppCompat);
+ final String permissionPackageName = "permissions.package";
+ final UserHandle currentUser = Process.myUserHandle();
+ List<UserInfo> userInfos = Arrays.asList(
+ new UserInfo(currentUser.getIdentifier(), "current", 0),
+ new UserInfo(1, "profile", UserInfo.FLAG_PROFILE)
+ );
+ when(mUserManager.getUsers()).thenReturn(userInfos);
+ when(mUserManager.isManagedProfile(1)).thenReturn(true);
+ when(mUserManager.getUserInfo(currentUser.getIdentifier())).thenReturn(userInfos.get(0));
+ when(mUserManager.getUserInfo(1)).thenReturn(userInfos.get(1));
+ when(mUserManager.getProfileParent(1)).thenReturn(userInfos.get(0));
+ when(mPm.getPermissionControllerPackageName()).thenReturn(permissionPackageName);
+
+ showScreen(mController);
+ Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
+ mController.onPreferenceClick(defaultNotesPref);
+
+ assertTrue(mController.mDialog.isShowing());
+ }
+
+ @Test
+ public void defaultNotesPreferenceClick_noManagedProfile_sendsManageDefaultRoleIntent() {
+ final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ mContext.setTheme(R.style.Theme_AppCompat);
+ final String permissionPackageName = "permissions.package";
+ final UserHandle currentUser = Process.myUserHandle();
+ List<UserInfo> userInfos = Arrays.asList(
+ new UserInfo(currentUser.getIdentifier(), "current", 0),
+ new UserInfo(1, "other", UserInfo.FLAG_FULL)
+ );
+ when(mUserManager.getUsers()).thenReturn(userInfos);
+ when(mUserManager.isManagedProfile(1)).thenReturn(false);
+ when(mUserManager.getUserInfo(currentUser.getIdentifier())).thenReturn(userInfos.get(0));
+ when(mUserManager.getUserInfo(1)).thenReturn(userInfos.get(1));
+ when(mUserManager.getProfileParent(any())).thenReturn(null);
+ when(mPm.getPermissionControllerPackageName()).thenReturn(permissionPackageName);
+
+ showScreen(mController);
+ Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
+ mController.onPreferenceClick(defaultNotesPref);
+
+ verify(mContext).startActivity(captor.capture());
+ Intent intent = captor.getValue();
+ assertThat(intent.getAction()).isEqualTo(Intent.ACTION_MANAGE_DEFAULT_APP);
+ assertThat(intent.getPackage()).isEqualTo(permissionPackageName);
+ assertThat(intent.getStringExtra(Intent.EXTRA_ROLE_NAME)).isEqualTo(
+ RoleManager.ROLE_NOTES);
+ assertNull(mController.mDialog);
+ }
+
+ @Test
+ public void profileSelectDialogClickCallback_onClick_sendsIntent() {
+ Intent intent = new Intent();
+ UserHandle user1 = mock(UserHandle.class);
+ UserHandle user2 = mock(UserHandle.class);
+ List<UserHandle> users = Arrays.asList(user1, user2);
+ mController.mDialog = new Dialog(mContext);
+ UserAdapter.OnClickListener callback = mController
+ .createProfileDialogClickCallback(intent, users);
+
+ callback.onClick(1);
+
+ assertEquals(intent.getExtra(Intent.EXTRA_USER), user2);
+ verify(mContext).startActivity(intent);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareControllerTest.java
new file mode 100644
index 0000000..5922016
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusUsbFirmwareControllerTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+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;
+
+import java.util.Collections;
+import java.util.HashMap;
+
+@RunWith(RobolectricTestRunner.class)
+public class StylusUsbFirmwareControllerTest {
+
+ private Context mContext;
+ private FakeFeatureFactory mFeatureFactory;
+ private Lifecycle mLifecycle;
+ private PreferenceScreen mScreen;
+
+ private StylusUsbFirmwareController mController;
+ @Mock
+ private StylusUsiDetailsFragment mFragment;
+ @Mock
+ private UsbManager mUsbManager;
+ private PreferenceCategory mPreferenceCategory;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(RuntimeEnvironment.application);
+ mLifecycle = new Lifecycle(() -> mLifecycle);
+
+ when(mFragment.getContext()).thenReturn(mContext);
+
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ mController = new StylusUsbFirmwareController(mContext, "stylus_usb_firmware");
+
+ PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ mScreen = preferenceManager.createPreferenceScreen(mContext);
+
+ mPreferenceCategory = new PreferenceCategory(mContext);
+ mPreferenceCategory.setKey(mController.getPreferenceKey());
+ }
+
+ @Test
+ public void displayPreference_featurePresentUsbStylusAttached_preferenceAdded() {
+ attachUsbDevice();
+ enableFullStylusFeature();
+
+ mController.displayPreference(mScreen);
+
+ assertNotNull(mScreen.findPreference("stylus_usb_firmware"));
+ }
+
+ @Test
+ public void displayPreference_featureAbsentUsbStylusAttached_preferenceNotAdded() {
+ attachUsbDevice();
+ mController.mUsbConnectionListener.onUsbStylusConnectionChanged(
+ mock(UsbDevice.class), true);
+
+ mController.displayPreference(mScreen);
+
+ assertNull(mScreen.findPreference(mController.getPreferenceKey()));
+ }
+
+ @Test
+ public void onUsbStylusConnectionChanged_featurePresentUsbStylusAttached_preferenceAdded() {
+ mController.displayPreference(mScreen);
+
+ attachUsbDevice();
+ enableFullStylusFeature();
+ mController.mUsbConnectionListener.onUsbStylusConnectionChanged(
+ mock(UsbDevice.class), true);
+
+ assertNotNull(mScreen.findPreference(mController.getPreferenceKey()));
+ }
+
+ @Test
+ public void onUsbStylusConnectionChanged_featureAbsentUsbStylusAttached_preferenceRemoved() {
+ mController.displayPreference(mScreen);
+
+ attachUsbDevice();
+ mController.mUsbConnectionListener.onUsbStylusConnectionChanged(
+ mock(UsbDevice.class), true);
+
+ assertNull(mScreen.findPreference(mController.getPreferenceKey()));
+ }
+
+ @Test
+ public void hasUsbStylusFirmwareUpdateFeature_featurePresent_true() {
+ when(mFeatureFactory.getStylusFeatureProvider()
+ .isUsbFirmwareUpdateEnabled(any())).thenReturn(true);
+ attachUsbDevice();
+
+ assertTrue(StylusUsbFirmwareController
+ .hasUsbStylusFirmwareUpdateFeature(mock(UsbDevice.class)));
+ }
+
+ @Test
+ public void hasUsbStylusFirmwareUpdateFeature_featureNotPresent_false() {
+ when(mFeatureFactory.getStylusFeatureProvider()
+ .isUsbFirmwareUpdateEnabled(any())).thenReturn(false);
+ attachUsbDevice();
+
+ assertFalse(StylusUsbFirmwareController
+ .hasUsbStylusFirmwareUpdateFeature(mock(UsbDevice.class)));
+ }
+
+ private void attachUsbDevice() {
+ when(mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager);
+ HashMap<String, UsbDevice> deviceList = new HashMap<>();
+ deviceList.put("0", mock(UsbDevice.class));
+ when(mUsbManager.getDeviceList()).thenReturn(deviceList);
+ }
+
+ private void enableFullStylusFeature() {
+ when(mFeatureFactory.getStylusFeatureProvider()
+ .isUsbFirmwareUpdateEnabled(any())).thenReturn(true);
+ when(mFeatureFactory.getStylusFeatureProvider()
+ .getUsbFirmwareUpdatePreferences(any()))
+ .thenReturn(Collections.singletonList(mock(Preference.class)));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiverTest.java
new file mode 100644
index 0000000..ccaefb2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/UsbStylusBroadcastReceiverTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 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.connecteddevice.stylus;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+
+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 UsbStylusBroadcastReceiverTest {
+ private Context mContext;
+ private UsbStylusBroadcastReceiver mReceiver;
+ private FakeFeatureFactory mFeatureFactory;
+ @Mock
+ private UsbStylusBroadcastReceiver.UsbStylusConnectionListener mListener;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application;
+ mReceiver = new UsbStylusBroadcastReceiver(mContext, mListener);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ }
+
+ @Test
+ public void onReceive_usbDeviceAttachedStylus_invokeCallback() {
+ when(mFeatureFactory.mStylusFeatureProvider.isUsbFirmwareUpdateEnabled(any()))
+ .thenReturn(true);
+ final UsbDevice usbDevice = mock(UsbDevice.class);
+ final Intent intent = new Intent();
+ intent.setAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
+ intent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice);
+
+ mReceiver.onReceive(mContext, intent);
+
+ verify(mListener).onUsbStylusConnectionChanged(usbDevice, true);
+ }
+
+ @Test
+ public void onReceive_usbDeviceDetachedStylus_invokeCallback() {
+ when(mFeatureFactory.mStylusFeatureProvider.isUsbFirmwareUpdateEnabled(any()))
+ .thenReturn(true);
+ final UsbDevice usbDevice = mock(UsbDevice.class);
+ final Intent intent = new Intent();
+ intent.setAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
+ intent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice);
+
+ mReceiver.onReceive(mContext, intent);
+
+ verify(mListener).onUsbStylusConnectionChanged(usbDevice, false);
+ }
+
+ @Test
+ public void onReceive_usbDeviceAttachedNotStylus_doesNotInvokeCallback() {
+ when(mFeatureFactory.mStylusFeatureProvider.isUsbFirmwareUpdateEnabled(any()))
+ .thenReturn(false);
+ final UsbDevice usbDevice = mock(UsbDevice.class);
+ final Intent intent = new Intent();
+ intent.setAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
+ intent.putExtra(UsbManager.EXTRA_DEVICE, usbDevice);
+
+ mReceiver.onReceive(mContext, intent);
+
+ verifyNoMoreInteractions(mListener);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/ShowKeyPressesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ShowKeyPressesPreferenceControllerTest.java
new file mode 100644
index 0000000..b7fb902
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/ShowKeyPressesPreferenceControllerTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2023 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.development;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+
+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 ShowKeyPressesPreferenceControllerTest {
+
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private SwitchPreference mPreference;
+
+ private Context mContext;
+
+ private ShowKeyPressesPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = new ShowKeyPressesPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void updateState_showKeyPressesEnabled_shouldCheckedPreference() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, ShowTapsPreferenceController.SETTING_VALUE_ON);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ public void updateState_showKeyPressesDisabled_shouldUncheckedPreference() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, ShowTapsPreferenceController.SETTING_VALUE_OFF);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(false);
+ }
+
+ @Test
+ public void onPreferenceChange_preferenceChecked_shouldEnableShowKeyPresses() {
+ mController.onPreferenceChange(mPreference, true /* new value */);
+
+ final int showKeyPresses = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, -1 /* default */);
+
+ assertThat(showKeyPresses).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_ON);
+ }
+
+ @Test
+ public void onPreferenceChange_preferenceUnchecked_shouldDisableShowKeyPresses() {
+ mController.onPreferenceChange(mPreference, false /* new value */);
+
+ final int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, -1 /* default */);
+
+ assertThat(showTapsMode).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_OFF);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_preferenceShouldBeEnabled() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ final int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.SHOW_KEY_PRESSES, -1 /* default */);
+
+ assertThat(showTapsMode).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_OFF);
+ verify(mPreference).setEnabled(false);
+ verify(mPreference).setChecked(false);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceControllerTest.java
new file mode 100644
index 0000000..4d1b4d0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryCycleCountPreferenceControllerTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.BatteryManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class BatteryCycleCountPreferenceControllerTest {
+ private BatteryCycleCountPreferenceController mController;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mController = new BatteryCycleCountPreferenceController(mContext,
+ "battery_info_cycle_count");
+ }
+
+ @Test
+ public void getAvailabilityStatus_returnAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_returnExpectedResult() {
+ final Intent batteryIntent = new Intent();
+ batteryIntent.putExtra(BatteryManager.EXTRA_CYCLE_COUNT, 10);
+ doReturn(batteryIntent).when(mContext).registerReceiver(any(), any());
+
+ assertThat(mController.getSummary()).isEqualTo("10");
+ }
+
+ @Test
+ public void getSummary_noValue_returnUnavailable() {
+ final Intent batteryIntent = new Intent();
+ doReturn(batteryIntent).when(mContext).registerReceiver(any(), any());
+
+ assertThat(mController.getSummary()).isEqualTo(
+ mContext.getText(R.string.battery_cycle_count_not_available));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceControllerTest.java
new file mode 100644
index 0000000..ff8ea62
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryFirstUseDatePreferenceControllerTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowBatteryManager;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowBatteryManager.class})
+public class BatteryFirstUseDatePreferenceControllerTest {
+ private BatteryFirstUseDatePreferenceController mController;
+ private Context mContext;
+ private BatteryManager mBatteryManager;
+ private ShadowBatteryManager mShadowBatteryManager;
+ private FakeFeatureFactory mFactory;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mBatteryManager = mContext.getSystemService(BatteryManager.class);
+ mShadowBatteryManager = shadowOf(mBatteryManager);
+ mFactory = FakeFeatureFactory.setupForTest();
+ mController = new BatteryFirstUseDatePreferenceController(mContext,
+ "battery_info_first_use_date");
+ }
+
+ @Test
+ public void getAvailabilityStatus_dateAvailable_returnAvailable() {
+ when(mFactory.batterySettingsFeatureProvider.isFirstUseDateAvailable(eq(mContext),
+ anyLong())).thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_dateUnavailable_returnNotAvailable() {
+ when(mFactory.batterySettingsFeatureProvider.isFirstUseDateAvailable(eq(mContext),
+ anyLong())).thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getSummary_available_returnExpectedDate() {
+ when(mFactory.batterySettingsFeatureProvider.isFirstUseDateAvailable(eq(mContext),
+ anyLong())).thenReturn(true);
+ mShadowBatteryManager.setLongProperty(BatteryManager.BATTERY_PROPERTY_FIRST_USAGE_DATE,
+ 1669680000L);
+
+ final CharSequence result = mController.getSummary();
+
+ assertThat(result.toString()).isEqualTo("November 29, 2022");
+ }
+
+ @Test
+ public void getSummary_unavailable_returnNull() {
+ when(mFactory.batterySettingsFeatureProvider.isFirstUseDateAvailable(eq(mContext),
+ anyLong())).thenReturn(false);
+
+ assertThat(mController.getSummary()).isNull();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceControllerTest.java
new file mode 100644
index 0000000..608ce00
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/batteryinfo/BatteryManufactureDatePreferenceControllerTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2023 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.batteryinfo;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
+import android.content.Context;
+import android.os.BatteryManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowBatteryManager;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowBatteryManager.class})
+public class BatteryManufactureDatePreferenceControllerTest {
+
+ private BatteryManufactureDatePreferenceController mController;
+ private Context mContext;
+ private BatteryManager mBatteryManager;
+ private ShadowBatteryManager mShadowBatteryManager;
+ private FakeFeatureFactory mFactory;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mBatteryManager = mContext.getSystemService(BatteryManager.class);
+ mShadowBatteryManager = shadowOf(mBatteryManager);
+ mFactory = FakeFeatureFactory.setupForTest();
+ mController = new BatteryManufactureDatePreferenceController(mContext,
+ "battery_info_manufacture_date");
+ }
+
+ @Test
+ public void getAvailabilityStatus_dateAvailable_returnAvailable() {
+ when(mFactory.batterySettingsFeatureProvider.isManufactureDateAvailable(eq(mContext),
+ anyLong())).thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_dateUnavailable_returnNotAvailable() {
+ when(mFactory.batterySettingsFeatureProvider.isManufactureDateAvailable(eq(mContext),
+ anyLong())).thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ public void getSummary_available_returnExpectedDate() {
+ when(mFactory.batterySettingsFeatureProvider.isManufactureDateAvailable(eq(mContext),
+ anyLong())).thenReturn(true);
+ mShadowBatteryManager.setLongProperty(BatteryManager.BATTERY_PROPERTY_MANUFACTURING_DATE,
+ 1669680000L);
+
+ final CharSequence result = mController.getSummary();
+
+ assertThat(result.toString()).isEqualTo("November 29, 2022");
+ }
+
+ @Test
+ public void getSummary_unavailable_returnNull() {
+ when(mFactory.batterySettingsFeatureProvider.isManufactureDateAvailable(eq(mContext),
+ anyLong())).thenReturn(false);
+
+ assertThat(mController.getSummary()).isNull();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java
new file mode 100644
index 0000000..c994818
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/StayAwakeOnFoldPreferenceControllerTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2023 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.display;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class StayAwakeOnFoldPreferenceControllerTest {
+
+ @Mock
+ private Resources mResources;
+ private Context mContext;
+ private StayAwakeOnFoldPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mResources = Mockito.mock(Resources.class);
+ mController = new StayAwakeOnFoldPreferenceController(mContext, "key", mResources);
+ }
+
+ @Test
+ public void getAvailabilityStatus_withConfigNoShow_returnUnsupported() {
+ when(mResources.getBoolean(R.bool.config_stay_awake_on_fold)).thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_withConfigNoShow_returnAvailable() {
+ when(mResources.getBoolean(R.bool.config_stay_awake_on_fold)).thenReturn(true);
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void setChecked_enableStayAwakeOnFold_setChecked() {
+ mController.setChecked(true);
+
+ assertThat(isStayAwakeOnFoldEnabled())
+ .isTrue();
+ }
+
+ @Test
+ public void setChecked_disableStayAwakeOnFold_setUnchecked() {
+ mController.setChecked(false);
+
+ assertThat(isStayAwakeOnFoldEnabled())
+ .isFalse();
+ }
+
+ @Test
+ public void isChecked_enableStayAwakeOnFold_returnTrue() {
+ enableStayAwakeOnFoldPreference();
+
+ assertThat(mController.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_disableStayAwakeOnFold_returnFalse() {
+ disableStayAwakeOnFoldPreference();
+
+ assertThat(mController.isChecked()).isFalse();
+ }
+
+ private void enableStayAwakeOnFoldPreference() {
+ Settings.System.putInt(
+ mContext.getContentResolver(),
+ Settings.System.STAY_AWAKE_ON_FOLD,
+ 1);
+ }
+
+ private void disableStayAwakeOnFoldPreference() {
+ Settings.System.putInt(
+ mContext.getContentResolver(),
+ Settings.System.STAY_AWAKE_ON_FOLD,
+ 0);
+ }
+
+ private boolean isStayAwakeOnFoldEnabled() {
+ return (Settings.System.getInt(
+ mContext.getContentResolver(),
+ Settings.System.STAY_AWAKE_ON_FOLD,
+ 0) == 1);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoricalLogUtilTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeLogUtilsTest.java
similarity index 60%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoricalLogUtilTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeLogUtilsTest.java
index cb5de7d..87de62f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoricalLogUtilTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeLogUtilsTest.java
@@ -33,7 +33,7 @@
import java.io.StringWriter;
@RunWith(RobolectricTestRunner.class)
-public final class BatteryHistoricalLogUtilTest {
+public final class BatteryOptimizeLogUtilsTest {
private final StringWriter mTestStringWriter = new StringWriter();
private final PrintWriter mTestPrintWriter = new PrintWriter(mTestStringWriter);
@@ -43,19 +43,19 @@
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
- BatteryHistoricalLogUtil.getSharedPreferences(mContext).edit().clear().commit();
+ BatteryOptimizeLogUtils.getSharedPreferences(mContext).edit().clear().commit();
}
@Test
public void printHistoricalLog_withDefaultLogs() {
- BatteryHistoricalLogUtil.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
+ BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
assertThat(mTestStringWriter.toString()).contains("nothing to dump");
}
@Test
public void writeLog_withExpectedLogs() {
- BatteryHistoricalLogUtil.writeLog(mContext, Action.APPLY, "pkg1", "logs");
- BatteryHistoricalLogUtil.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
+ BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs");
+ BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
assertThat(mTestStringWriter.toString()).contains(
"pkg1\taction:APPLY\tevent:logs");
@@ -63,21 +63,27 @@
@Test
public void writeLog_multipleLogs_withCorrectCounts() {
- for (int i = 0; i < BatteryHistoricalLogUtil.MAX_ENTRIES; i++) {
- BatteryHistoricalLogUtil.writeLog(mContext, Action.LEAVE, "pkg" + i, "logs");
+ final int expectedCount = 10;
+ for (int i = 0; i < expectedCount; i++) {
+ BatteryOptimizeLogUtils.writeLog(mContext, Action.LEAVE, "pkg" + i, "logs");
}
- BatteryHistoricalLogUtil.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
+ BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
- assertThat(mTestStringWriter.toString().split("LEAVE").length).isEqualTo(41);
+ assertActionCount("LEAVE", expectedCount);
}
@Test
public void writeLog_overMaxEntriesLogs_withCorrectCounts() {
- for (int i = 0; i < BatteryHistoricalLogUtil.MAX_ENTRIES + 10; i++) {
- BatteryHistoricalLogUtil.writeLog(mContext, Action.RESET, "pkg" + i, "logs");
+ for (int i = 0; i < BatteryOptimizeLogUtils.MAX_ENTRIES + 10; i++) {
+ BatteryOptimizeLogUtils.writeLog(mContext, Action.RESET, "pkg" + i, "logs");
}
- BatteryHistoricalLogUtil.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
+ BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
- assertThat(mTestStringWriter.toString().split("RESET").length).isEqualTo(41);
+ assertActionCount("RESET", BatteryOptimizeLogUtils.MAX_ENTRIES);
+ }
+
+ private void assertActionCount(String token, int count) {
+ final String dumpResults = mTestStringWriter.toString();
+ assertThat(dumpResults.split(token).length).isEqualTo(count + 1);
}
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
new file mode 100644
index 0000000..66050a0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySettingsFeatureProviderImplTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 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.fuelgauge;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class BatterySettingsFeatureProviderImplTest {
+ private BatterySettingsFeatureProviderImpl mImpl;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mImpl = new BatterySettingsFeatureProviderImpl();
+ mContext = ApplicationProvider.getApplicationContext();
+ }
+
+ @Test
+ public void isManufactureDateAvailable_returnFalse() {
+ assertThat(mImpl.isManufactureDateAvailable(mContext, 1000L)).isFalse();
+ }
+
+ @Test
+ public void isFirstUseDateAvailable_returnFalse() {
+ assertThat(mImpl.isFirstUseDateAvailable(mContext, 1000L)).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
index 3513168..ecac4f9 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryTipTest.java
@@ -18,11 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
-import android.view.View;
import android.os.Parcel;
import android.os.Parcelable;
+import android.view.View;
-import androidx.annotation.IdRes;
+import androidx.annotation.DrawableRes;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
@@ -45,7 +45,7 @@
private static final String TITLE = "title";
private static final String SUMMARY = "summary";
- @IdRes
+ @DrawableRes
private static final int ICON_ID = R.drawable.ic_fingerprint;
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
index dec5d7d..108d6e2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
@@ -40,6 +40,7 @@
import com.android.settings.fuelgauge.batteryusage.BatteryEntry.NameAndIcon;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,8 +51,6 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
-import java.util.Locale;
-
@RunWith(RobolectricTestRunner.class)
public class BatteryEntryTest {
@@ -232,17 +231,7 @@
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(0);
}
- @Test
- public void testUidCache_switchLocale_shouldCleanCache() {
- Locale.setDefault(new Locale("en_US"));
- BatteryEntry.sUidCache.put(Integer.toString(APP_UID), null);
- assertThat(BatteryEntry.sUidCache).isNotEmpty();
-
- Locale.setDefault(new Locale("zh_TW"));
- createBatteryEntryForApp(null, null, HIGH_DRAIN_PACKAGE);
- assertThat(BatteryEntry.sUidCache).isEmpty(); // check if cache is clear
- }
-
+ @Ignore
@Test
public void getKey_UidBatteryConsumer() {
final BatteryEntry entry = createBatteryEntryForApp(null, null, null);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtilsTest.java
new file mode 100644
index 0000000..12c040e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BatteryUsageLogUtilsTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2022 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.fuelgauge.batteryusage.bugreport;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.fuelgauge.BatteryUsageHistoricalLogEntry.Action;
+
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.robolectric.RobolectricTestRunner;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@RunWith(RobolectricTestRunner.class)
+public final class BatteryUsageLogUtilsTest {
+
+ private StringWriter mTestStringWriter;
+ private PrintWriter mTestPrintWriter;
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mTestStringWriter = new StringWriter();
+ mTestPrintWriter = new PrintWriter(mTestStringWriter);
+ BatteryUsageLogUtils.getSharedPreferences(mContext).edit().clear().commit();
+ }
+
+ @Test
+ public void printHistoricalLog_withDefaultLogs() {
+ final String expectedInformation = "nothing to dump";
+ // Environment checking.
+ assertThat(mTestStringWriter.toString().contains(expectedInformation)).isFalse();
+
+ BatteryUsageLogUtils.printHistoricalLog(mContext, mTestPrintWriter);
+ assertThat(mTestStringWriter.toString()).contains(expectedInformation);
+ }
+
+ @Test
+ public void writeLog_multipleLogs_withCorrectCounts() {
+ final int expectedCount = 10;
+ for (int i = 0; i < expectedCount; i++) {
+ BatteryUsageLogUtils.writeLog(mContext, Action.SCHEDULE_JOB, "");
+ }
+ BatteryUsageLogUtils.writeLog(mContext, Action.EXECUTE_JOB, "");
+
+ BatteryUsageLogUtils.printHistoricalLog(mContext, mTestPrintWriter);
+
+ assertActionCount("SCHEDULE_JOB", expectedCount);
+ assertActionCount("EXECUTE_JOB", 1);
+ }
+
+ @Test
+ public void writeLog_overMaxEntriesLogs_withCorrectCounts() {
+ BatteryUsageLogUtils.writeLog(mContext, Action.SCHEDULE_JOB, "");
+ BatteryUsageLogUtils.writeLog(mContext, Action.SCHEDULE_JOB, "");
+ for (int i = 0; i < BatteryUsageLogUtils.MAX_ENTRIES * 2; i++) {
+ BatteryUsageLogUtils.writeLog(mContext, Action.EXECUTE_JOB, "");
+ }
+
+ BatteryUsageLogUtils.printHistoricalLog(mContext, mTestPrintWriter);
+
+ final String dumpResults = mTestStringWriter.toString();
+ assertThat(dumpResults.contains("SCHEDULE_JOB")).isFalse();
+ assertActionCount("EXECUTE_JOB", BatteryUsageLogUtils.MAX_ENTRIES);
+ }
+
+ private void assertActionCount(String token, int count) {
+ final String dumpResults = mTestStringWriter.toString();
+ assertThat(dumpResults.split(token).length).isEqualTo(count + 1);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProviderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProviderTest.java
index 8365ae4..45d4065 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProviderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProviderTest.java
@@ -87,6 +87,7 @@
mBugReportContentProvider.dump(FileDescriptor.out, mPrintWriter, new String[] {});
String dumpContent = mStringWriter.toString();
+ assertThat(dumpContent).contains("Battery PeriodicJob History");
assertThat(dumpContent).contains("Battery DatabaseHistory");
assertThat(dumpContent).contains(PACKAGE_NAME1);
assertThat(dumpContent).contains(PACKAGE_NAME2);
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadBottomPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadBottomPreferenceControllerTest.java
index 1b061ec..3c51cf3 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadBottomPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadBottomPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
@@ -26,25 +31,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadBottomPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadBottomPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "trackpad_bottom_right_tap";
private static final String SETTING_KEY = Settings.System.TOUCHPAD_RIGHT_CLICK_ZONE;
private Context mContext;
private TrackpadBottomPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadBottomPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -70,6 +83,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_BOTTOM_RIGHT_TAP_CHANGED),
+ eq(true));
}
@Test
@@ -83,6 +100,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_BOTTOM_RIGHT_TAP_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java
index 0e1705e..85d56ef 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -25,25 +30,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadGoBackPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadGoBackPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "gesture_go_back";
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_BACK_ENABLED;
private Context mContext;
private TrackpadGoBackPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadGoBackPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -65,6 +78,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_GO_BACK_CHANGED),
+ eq(true));
}
@Test
@@ -74,6 +91,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_GO_BACK_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java
index 3289bcc..6b3b3f5 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -25,25 +30,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadGoHomePreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadGoHomePreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "gesture_go_home";
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_HOME_ENABLED;
private Context mContext;
private TrackpadGoHomePreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadGoHomePreferenceController(mContext, PREFERENCE_KEY);
}
@@ -65,6 +78,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_GO_HOME_CHANGED),
+ eq(true));
}
@Test
@@ -74,6 +91,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_GO_HOME_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java
index 3df1627..005bc9f 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -25,25 +30,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadNotificationsPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadNotificationsPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "gesture_notifications";
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_NOTIFICATION_ENABLED;
private Context mContext;
private TrackpadNotificationsPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadNotificationsPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -65,6 +78,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_NOTIFICATION_CHANGED),
+ eq(true));
}
@Test
@@ -74,6 +91,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_NOTIFICATION_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
index daf1773..1cfda12 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.hardware.input.InputSettings;
import android.os.UserHandle;
@@ -26,15 +31,21 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadPointerSpeedPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadPointerSpeedPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "trackpad_pointer_speed";
private static final String SETTING_KEY = Settings.System.TOUCHPAD_POINTER_SPEED;
@@ -42,10 +53,12 @@
private Context mContext;
private TrackpadPointerSpeedPreferenceController mController;
private int mDefaultSpeed;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadPointerSpeedPreferenceController(mContext, PREFERENCE_KEY);
mDefaultSpeed = Settings.System.getIntForUser(
mContext.getContentResolver(),
@@ -85,6 +98,10 @@
assertThat(result).isTrue();
assertThat(mController.getSliderPosition()).isEqualTo(inputSpeed);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_POINTER_SPEED_CHANGED),
+ eq(1));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java
index dbed542..2ef53a6 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -25,25 +30,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadRecentAppsPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadRecentAppsPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "gesture_recent_apps";
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_OVERVIEW_ENABLED;
private Context mContext;
private TrackpadRecentAppsPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadRecentAppsPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -65,6 +78,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_RECENT_APPS_CHANGED),
+ eq(true));
}
@Test
@@ -74,6 +91,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_RECENT_APPS_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceControllerTest.java
index a99abb8..e74261e 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceControllerTest.java
@@ -16,9 +16,13 @@
package com.android.settings.inputmethod;
-
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
@@ -27,25 +31,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadReverseScrollingPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadReverseScrollingPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "trackpad_reverse_scrolling";
private static final String SETTING_KEY = Settings.System.TOUCHPAD_NATURAL_SCROLLING;
private Context mContext;
private TrackpadReverseScrollingPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadReverseScrollingPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -71,6 +83,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_REVERSE_SCROLLING_CHANGED),
+ eq(true));
}
@Test
@@ -84,6 +100,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_REVERSE_SCROLLING_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java
index 3f16025..5e354d2 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.provider.Settings;
@@ -25,25 +30,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadSwitchAppsPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadSwitchAppsPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "gesture_switch_apps";
private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_QUICK_SWITCH_ENABLED;
private Context mContext;
private TrackpadSwitchAppsPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadSwitchAppsPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -65,6 +78,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_SWITCH_APPS_CHANGED),
+ eq(true));
}
@Test
@@ -74,6 +91,10 @@
int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_SWITCH_APPS_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceControllerTest.java
index b4b8921..3784cc7 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceControllerTest.java
@@ -18,6 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
@@ -26,25 +31,33 @@
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link TrackpadTapToClickPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class TrackpadTapToClickPreferenceControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
private static final String PREFERENCE_KEY = "trackpad_tap_to_click";
private static final String SETTING_KEY = Settings.System.TOUCHPAD_TAP_TO_CLICK;
private Context mContext;
private TrackpadTapToClickPreferenceController mController;
+ private FakeFeatureFactory mFeatureFactory;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
mController = new TrackpadTapToClickPreferenceController(mContext, PREFERENCE_KEY);
}
@@ -70,6 +83,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(1);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_TAP_TO_CLICK_CHANGED),
+ eq(true));
}
@Test
@@ -83,6 +100,10 @@
UserHandle.USER_CURRENT);
assertThat(result).isEqualTo(0);
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(),
+ eq(SettingsEnums.ACTION_GESTURE_TAP_TO_CLICK_CHANGED),
+ eq(false));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java b/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
index 48caecd..8fb3a5d 100644
--- a/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
+++ b/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
@@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -27,6 +29,7 @@
import android.app.Activity;
import android.app.ApplicationPackageManager;
import android.app.LocaleConfig;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -45,6 +48,7 @@
import com.android.internal.app.LocaleStore;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.AppLocaleUtil;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.After;
import org.junit.Before;
@@ -79,6 +83,7 @@
public class AppLocalePickerActivityTest {
private static final String TEST_PACKAGE_NAME = "com.android.settings";
private static final Uri TEST_PACKAGE_URI = Uri.parse("package:" + TEST_PACKAGE_NAME);
+ private FakeFeatureFactory mFeatureFactory;
@Mock
LocaleStore.LocaleInfo mLocaleInfo;
@@ -99,6 +104,7 @@
when(mLocaleConfig.getStatus()).thenReturn(LocaleConfig.STATUS_SUCCESS);
when(mLocaleConfig.getSupportedLocales()).thenReturn(LocaleList.forLanguageTags("en-US"));
ReflectionHelpers.setStaticField(AppLocaleUtil.class, "sLocaleConfig", mLocaleConfig);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
}
@After
@@ -210,6 +216,37 @@
assertThat(controller.get().isFinishing()).isTrue();
}
+ @Test
+ public void onLocaleSelected_logLocaleSource() {
+ ActivityController<TestAppLocalePickerActivity> controller =
+ initActivityController(true);
+ LocaleList.setDefault(LocaleList.forLanguageTags("ja-JP,en-CA,en-US"));
+ Locale locale = new Locale("en", "US");
+ when(mLocaleInfo.getLocale()).thenReturn(locale);
+ when(mLocaleInfo.isSystemLocale()).thenReturn(false);
+ when(mLocaleInfo.isSuggested()).thenReturn(true);
+ when(mLocaleInfo.isSuggestionOfType(LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)).thenReturn(
+ true);
+ when(mLocaleInfo.isSuggestionOfType(
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)).thenReturn(
+ true);
+ when(mLocaleInfo.isSuggestionOfType(
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)).thenReturn(
+ true);
+ when(mLocaleInfo.isSuggestionOfType(
+ LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)).thenReturn(
+ true);
+
+ controller.create();
+ AppLocalePickerActivity mActivity = controller.get();
+ mActivity.onLocaleSelected(mLocaleInfo);
+
+ int localeSource = 15; // SIM_LOCALE | SYSTEM_LOCALE |IME_LOCALE|APP_LOCALE
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(), eq(SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED),
+ eq(localeSource));
+ }
+
private ActivityController<TestAppLocalePickerActivity> initActivityController(
boolean hasPackageName) {
Intent data = new Intent();
diff --git a/tests/robotests/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java b/tests/robotests/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java
new file mode 100644
index 0000000..57f2b01
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2023 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.localepicker;
+
+import static com.android.settings.localepicker.LocaleDialogFragment.ARG_DIALOG_TYPE;
+import static com.android.settings.localepicker.LocaleDialogFragment.ARG_TARGET_LOCALE;
+import static com.android.settings.localepicker.LocaleDialogFragment.DIALOG_CONFIRM_SYSTEM_DEFAULT;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.os.Bundle;
+import android.window.OnBackInvokedDispatcher;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+import com.android.internal.app.LocaleStore;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+import com.android.settings.utils.ActivityControllerWrapper;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.Locale;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class})
+public class LocaleDialogFragmentTest {
+
+ @Mock
+ private OnBackInvokedDispatcher mOnBackInvokedDispatcher;
+
+ private FragmentActivity mActivity;
+ private LocaleDialogFragment mDialogFragment;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ mActivity = (FragmentActivity) ActivityControllerWrapper.setup(
+ Robolectric.buildActivity(FragmentActivity.class)).get();
+ mDialogFragment = LocaleDialogFragment.newInstance();
+ LocaleStore.LocaleInfo localeInfo = LocaleStore.getLocaleInfo(Locale.ENGLISH);
+ Bundle args = new Bundle();
+ args.putInt(ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
+ args.putSerializable(ARG_TARGET_LOCALE, localeInfo);
+ mDialogFragment.setArguments(args);
+ FragmentManager fragmentManager = mActivity.getSupportFragmentManager();
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+ fragmentTransaction.add(mDialogFragment, null);
+ fragmentTransaction.commit();
+ }
+
+ @Test
+ public void onCreateDialog_onBackInvokedCallbackIsRegistered() {
+ mDialogFragment.setBackDispatcher(mOnBackInvokedDispatcher);
+ mDialogFragment.onCreateDialog(null);
+
+ verify(mOnBackInvokedDispatcher).registerOnBackInvokedCallback(
+ eq(OnBackInvokedDispatcher.PRIORITY_DEFAULT), any());
+ }
+
+ @Test
+ public void onBackInvoked_dialogIsStillDisplaying() {
+ mDialogFragment.setBackDispatcher(mOnBackInvokedDispatcher);
+ AlertDialog alertDialog = (AlertDialog) mDialogFragment.onCreateDialog(null);
+ alertDialog.show();
+ assertThat(alertDialog).isNotNull();
+ assertThat(alertDialog.isShowing()).isTrue();
+
+ mOnBackInvokedDispatcher.registerOnBackInvokedCallback(
+ eq(OnBackInvokedDispatcher.PRIORITY_DEFAULT), any());
+
+ mDialogFragment.getBackInvokedCallback().onBackInvoked();
+
+ assertThat(alertDialog.isShowing()).isTrue();
+
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java b/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
index 16d51be..5a529f8 100644
--- a/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
+++ b/tests/robotests/src/com/android/settings/localepicker/LocaleListEditorTest.java
@@ -27,6 +27,7 @@
import android.app.Activity;
import android.app.IActivityManager;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
@@ -57,6 +58,7 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.ArrayList;
import java.util.List;
@@ -91,6 +93,8 @@
private View mView;
@Mock
private IActivityManager mActivityService;
+ @Mock
+ private MetricsFeatureProvider mMetricsFeatureProvider;
@Before
public void setUp() throws Exception {
@@ -108,6 +112,8 @@
RuntimeEnvironment.application.getSystemService(Context.USER_SERVICE));
ReflectionHelpers.setField(mLocaleListEditor, "mAdapter", mAdapter);
ReflectionHelpers.setField(mLocaleListEditor, "mFragmentManager", mFragmentManager);
+ ReflectionHelpers.setField(mLocaleListEditor, "mMetricsFeatureProvider",
+ mMetricsFeatureProvider);
when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
FakeFeatureFactory.setupForTest();
}
@@ -200,6 +206,38 @@
}
@Test
+ public void showConfirmDialog_systemLocaleSelected_shouldShowLocaleChangeDialog()
+ throws Exception {
+ //pre-condition
+ setUpLocaleConditions();
+ final Configuration config = new Configuration();
+ config.setLocales((LocaleList.forLanguageTags("zh-TW,en-US")));
+ when(mActivityService.getConfiguration()).thenReturn(config);
+ when(mAdapter.getFeedItemList()).thenReturn(mLocaleList);
+ when(mAdapter.getCheckedCount()).thenReturn(1);
+ when(mAdapter.getItemCount()).thenReturn(2);
+ when(mAdapter.isFirstLocaleChecked()).thenReturn(true);
+ ReflectionHelpers.setField(mLocaleListEditor, "mRemoveMode", true);
+ ReflectionHelpers.setField(mLocaleListEditor, "mShowingRemoveDialog", true);
+
+ //launch the first dialog
+ mLocaleListEditor.showRemoveLocaleWarningDialog();
+
+ final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+
+ assertThat(dialog).isNotNull();
+
+ // click the remove button
+ dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+
+ assertThat(dialog.isShowing()).isFalse();
+
+ // check the second dialog is showing
+ verify(mFragmentTransaction).add(any(LocaleDialogFragment.class),
+ eq(TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT));
+ }
+
+ @Test
public void mayAppendUnicodeTags_appendUnicodeTags_success() {
LocaleStore.LocaleInfo localeInfo = LocaleStore.fromLocale(Locale.forLanguageTag("en-US"));
diff --git a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java
index 59f0bcb..47bf99d 100644
--- a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceTest.java
@@ -17,62 +17,81 @@
package com.android.settings.notification;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
import android.media.AudioManager;
+import android.os.LocaleList;
import android.preference.SeekBarVolumizer;
import android.widget.SeekBar;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
+import java.util.Locale;
+
@RunWith(RobolectricTestRunner.class)
public class VolumeSeekBarPreferenceTest {
private static final CharSequence CONTENT_DESCRIPTION = "TEST";
+ private static final int STREAM = 5;
@Mock
private AudioManager mAudioManager;
@Mock
private VolumeSeekBarPreference mPreference;
@Mock
private Context mContext;
+
+ @Mock
+ private Resources mRes;
+ @Mock
+ private Configuration mConfig;
@Mock
private SeekBar mSeekBar;
+ @Captor
+ private ArgumentCaptor<SeekBarVolumizer.Callback> mSbvc;
@Mock
private SeekBarVolumizer mVolumizer;
+ @Mock
+ private SeekBarVolumizerFactory mSeekBarVolumizerFactory;
private VolumeSeekBarPreference.Listener mListener;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
+ when(mSeekBarVolumizerFactory.create(eq(STREAM), eq(null), mSbvc.capture()))
+ .thenReturn(mVolumizer);
+ doCallRealMethod().when(mPreference).setStream(anyInt());
doCallRealMethod().when(mPreference).updateContentDescription(CONTENT_DESCRIPTION);
mPreference.mSeekBar = mSeekBar;
mPreference.mAudioManager = mAudioManager;
- mPreference.mVolumizer = mVolumizer;
+ mPreference.mSeekBarVolumizerFactory = mSeekBarVolumizerFactory;
mListener = () -> mPreference.updateContentDescription(CONTENT_DESCRIPTION);
}
@Test
public void setStream_shouldSetMinMaxAndProgress() {
- final int stream = 5;
final int max = 17;
final int min = 1;
final int progress = 4;
- when(mAudioManager.getStreamMaxVolume(stream)).thenReturn(max);
- when(mAudioManager.getStreamMinVolumeInt(stream)).thenReturn(min);
- when(mAudioManager.getStreamVolume(stream)).thenReturn(progress);
- doCallRealMethod().when(mPreference).setStream(anyInt());
+ when(mAudioManager.getStreamMaxVolume(STREAM)).thenReturn(max);
+ when(mAudioManager.getStreamMinVolumeInt(STREAM)).thenReturn(min);
+ when(mAudioManager.getStreamVolume(STREAM)).thenReturn(progress);
- mPreference.setStream(stream);
+ mPreference.setStream(STREAM);
verify(mPreference).setMax(max);
verify(mPreference).setMin(min);
@@ -84,6 +103,7 @@
doCallRealMethod().when(mPreference).setListener(mListener);
doCallRealMethod().when(mPreference).init();
+ mPreference.setStream(STREAM);
mPreference.setListener(mListener);
mPreference.init();
@@ -94,8 +114,69 @@
public void init_listenerNotSet_noException() {
doCallRealMethod().when(mPreference).init();
+ mPreference.setStream(STREAM);
mPreference.init();
verify(mPreference, never()).updateContentDescription(CONTENT_DESCRIPTION);
}
+
+ @Test
+ public void init_changeProgress_overrideStateDescriptionCalled() {
+ final int progress = 4;
+ when(mPreference.formatStateDescription(progress)).thenReturn(CONTENT_DESCRIPTION);
+ doCallRealMethod().when(mPreference).init();
+
+ mPreference.setStream(STREAM);
+ mPreference.init();
+
+ verify(mSeekBarVolumizerFactory).create(eq(STREAM), eq(null), mSbvc.capture());
+
+ mSbvc.getValue().onProgressChanged(mSeekBar, 4, true);
+
+ verify(mPreference).overrideSeekBarStateDescription(CONTENT_DESCRIPTION);
+ }
+
+ @Test
+ public void init_changeProgress_stateDescriptionValueUpdated() {
+ final int max = 17;
+ final int min = 1;
+ int progress = 4;
+ when(mAudioManager.getStreamMaxVolume(STREAM)).thenReturn(max);
+ when(mAudioManager.getStreamMinVolumeInt(STREAM)).thenReturn(min);
+ when(mAudioManager.getStreamVolume(STREAM)).thenReturn(progress);
+ when(mPreference.getMin()).thenReturn(min);
+ when(mPreference.getMax()).thenReturn(max);
+ when(mPreference.getContext()).thenReturn(mContext);
+ when(mContext.getResources()).thenReturn(mRes);
+ when(mRes.getConfiguration()).thenReturn(mConfig);
+ when(mConfig.getLocales()).thenReturn(new LocaleList(Locale.US));
+ doCallRealMethod().when(mPreference).init();
+
+ mPreference.setStream(STREAM);
+ mPreference.init();
+
+ // On progress change, Round down the percent to match it with what the talkback says.
+ // (b/285458191)
+ // when progress is 4, the percent is 0.187. The state description should be set to 18%.
+ testFormatStateDescription(progress, "18%");
+
+ progress = 6;
+
+ // when progress is 6, the percent is 0.3125. The state description should be set to 31%.
+ testFormatStateDescription(progress, "31%");
+
+ progress = 7;
+
+ // when progress is 7, the percent is 0.375. The state description should be set to 37%.
+ testFormatStateDescription(progress, "37%");
+ }
+
+ private void testFormatStateDescription(int progress, String expected) {
+ doCallRealMethod().when(mPreference).formatStateDescription(progress);
+ doCallRealMethod().when(mPreference).getPercent(progress);
+
+ mSbvc.getValue().onProgressChanged(mSeekBar, progress, true);
+
+ verify(mPreference).overrideSeekBarStateDescription(expected);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index 12a540d..5db998a 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -60,6 +60,7 @@
import com.android.internal.widget.LockscreenCredential;
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
+import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;
@@ -543,29 +544,38 @@
}
@Test
- public void updatePreferenceText_supportBiometrics_showFaceAndFingerprint() {
+ public void updatePreferenceText_supportBiometrics_setScreenLockFingerprintFace_inOrder() {
ShadowStorageManager.setIsFileEncrypted(false);
final Intent intent = new Intent().putExtra(EXTRA_KEY_FOR_BIOMETRICS, true);
initActivity(intent);
-
final String supportFingerprint = capitalize(mActivity.getResources().getString(
R.string.security_settings_fingerprint));
final String supportFace = capitalize(mActivity.getResources().getString(
R.string.keywords_face_settings));
- String pinTitle =
+
+ // The strings of golden copy
+ final String pinFingerprintFace = mActivity.getText(R.string.unlock_set_unlock_pin_title)
+ + BiometricUtils.SEPARATOR + supportFingerprint + BiometricUtils.SEPARATOR
+ + supportFace;
+ final String patternFingerprintFace = mActivity.getText(
+ R.string.unlock_set_unlock_pattern_title) + BiometricUtils.SEPARATOR
+ + supportFingerprint + BiometricUtils.SEPARATOR + supportFace;
+ final String passwordFingerprintFace = mActivity.getText(
+ R.string.unlock_set_unlock_password_title) + BiometricUtils.SEPARATOR
+ + supportFingerprint + BiometricUtils.SEPARATOR + supportFace;
+
+ // The strings obtain from preferences
+ final String pinTitle =
(String) mFragment.findPreference(ScreenLockType.PIN.preferenceKey).getTitle();
- String patternTitle =
+ final String patternTitle =
(String) mFragment.findPreference(ScreenLockType.PATTERN.preferenceKey).getTitle();
- String passwordTitle =
+ final String passwordTitle =
(String) mFragment.findPreference(ScreenLockType.PASSWORD.preferenceKey).getTitle();
- assertThat(pinTitle).contains(supportFingerprint);
- assertThat(pinTitle).contains(supportFace);
- assertThat(patternTitle).contains(supportFingerprint);
- assertThat(patternTitle).contains(supportFace);
- assertThat(passwordTitle).contains(supportFingerprint);
- assertThat(passwordTitle).contains(supportFace);
+ assertThat(pinTitle).isEqualTo(pinFingerprintFace);
+ assertThat(patternTitle).isEqualTo(patternFingerprintFace);
+ assertThat(passwordTitle).isEqualTo(passwordFingerprintFace);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
index 3fe3322..09914f1 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -65,7 +65,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
@@ -74,7 +73,6 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowDrawable;
-@Ignore
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
SettingsShadowResources.class,
@@ -397,24 +395,7 @@
}
@Test
- public void processAndValidatePasswordRequirements_autoPinDisabled_defaultPinMinimumLength() {
- DeviceConfig.setProperty(NAMESPACE_AUTO_PIN_CONFIRMATION, FLAG_ENABLE_AUTO_PIN_CONFIRMATION,
- /* value= */ "false", /* makeDefault= */ false);
- PasswordPolicy policy = new PasswordPolicy();
- policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
-
- assertPasswordValidationResult(
- /* minMetrics */ policy.getMinMetrics(),
- /* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
- /* passwordType= */ PASSWORD_QUALITY_NUMERIC,
- /* userEnteredPassword= */ LockscreenCredential.createPassword("11"),
- "PIN must be at least 4 digits");
- }
-
- @Test
- public void processAndValidatePasswordRequirements_autoPinEnabled_defaultPinMinimumLength() {
- DeviceConfig.setProperty(NAMESPACE_AUTO_PIN_CONFIRMATION, FLAG_ENABLE_AUTO_PIN_CONFIRMATION,
- /* value= */ "true", /* makeDefault= */ false);
+ public void processAndValidatePasswordRequirements_defaultPinMinimumLength() {
PasswordPolicy policy = new PasswordPolicy();
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
@@ -525,38 +506,6 @@
assertThat(pinAutoConfirmOption.isChecked()).isFalse();
}
- @Test
- public void autoPinConfirmOption_featureDisabled_shouldRemainInvisibleAndUnchecked() {
- DeviceConfig.setProperty(NAMESPACE_AUTO_PIN_CONFIRMATION, FLAG_ENABLE_AUTO_PIN_CONFIRMATION,
- /* value= */ "false", /* makeDefault= */ false);
- ChooseLockPassword passwordActivity = setupActivityWithPinTypeAndDefaultPolicy();
-
- ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(passwordActivity);
- ScrollToParentEditText passwordEntry = passwordActivity.findViewById(R.id.password_entry);
- CheckBox pinAutoConfirmOption = passwordActivity
- .findViewById(R.id.auto_pin_confirm_enabler);
- TextView securityMessage =
- passwordActivity.findViewById(R.id.auto_pin_confirm_security_message);
-
- passwordEntry.setText("1234");
- fragment.updateUi();
- assertThat(pinAutoConfirmOption.getVisibility()).isEqualTo(View.GONE);
- assertThat(securityMessage.getVisibility()).isEqualTo(View.GONE);
- assertThat(pinAutoConfirmOption.isChecked()).isFalse();
-
- passwordEntry.setText("123456");
- fragment.updateUi();
- assertThat(pinAutoConfirmOption.getVisibility()).isEqualTo(View.GONE);
- assertThat(securityMessage.getVisibility()).isEqualTo(View.GONE);
- assertThat(pinAutoConfirmOption.isChecked()).isFalse();
-
- passwordEntry.setText("12345678");
- fragment.updateUi();
- assertThat(pinAutoConfirmOption.getVisibility()).isEqualTo(View.GONE);
- assertThat(securityMessage.getVisibility()).isEqualTo(View.GONE);
- assertThat(pinAutoConfirmOption.isChecked()).isFalse();
- }
-
private ChooseLockPassword setupActivityWithPinTypeAndDefaultPolicy() {
PasswordPolicy policy = new PasswordPolicy();
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index a3e2ed4..8bccf1a 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -26,6 +26,7 @@
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
+import android.widget.LinearLayout;
import androidx.appcompat.app.AlertDialog;
@@ -107,6 +108,20 @@
}
@Test
+ public void createActivity_withShowOptionsButtonExtra_shouldShowButtonUnderSudHeader() {
+ SetupChooseLockPassword activity = createSetupChooseLockPassword();
+ final LinearLayout headerLayout = activity.findViewById(
+ R.id.sud_layout_header);
+ assertThat(headerLayout).isNotNull();
+
+ final Button optionsButton = headerLayout.findViewById(R.id.screen_lock_options);
+ assertThat(optionsButton).isNotNull();
+
+ optionsButton.performClick();
+ assertThat(ShadowDialog.getLatestDialog()).isNotNull();
+ }
+
+ @Test
@Config(shadows = ShadowChooseLockGenericController.class)
public void createActivity_withShowOptionsButtonExtra_buttonNotVisibleIfNoVisibleLockTypes() {
SetupChooseLockPassword activity = createSetupChooseLockPassword();
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index b7d249d..4903a28 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -119,6 +119,7 @@
private Context mContext;
private SettingsSliceProvider mProvider;
private ShadowPackageManager mPackageManager;
+ private ShadowUserManager mShadowUserManager;
@Mock
private SliceManager mManager;
@@ -157,6 +158,7 @@
when(mManager.getPinnedSlices()).thenReturn(Collections.emptyList());
mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
+ mShadowUserManager = ShadowUserManager.getShadow();
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
}
@@ -293,6 +295,37 @@
}
@Test
+ public void onBindSlice_guestRestricted_returnsNull() {
+ final String key = "enable_usb_tethering";
+ mShadowUserManager.setGuestUser(true);
+ final Uri testUri = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath(key)
+ .build();
+
+ final Slice slice = mProvider.onBindSlice(testUri);
+
+ assertThat(slice).isNull();
+ }
+
+ @Test
+ public void onBindSlice_notGuestRestricted_returnsNotNull() {
+ final String key = "enable_usb_tethering";
+ final Uri testUri = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
+ .appendPath(key)
+ .build();
+
+ final Slice slice = mProvider.onBindSlice(testUri);
+
+ assertThat(slice).isNotNull();
+ }
+
+ @Test
public void getDescendantUris_fullActionUri_returnsSelf() {
final Collection<Uri> descendants = mProvider.onGetSliceDescendants(ACTION_SLICE_URI);
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index 29a6da3..5891aa1 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -29,6 +29,7 @@
import com.android.settings.biometrics.face.FaceFeatureProvider;
import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
import com.android.settings.bluetooth.BluetoothFeatureProvider;
+import com.android.settings.connecteddevice.stylus.StylusFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider;
@@ -39,6 +40,7 @@
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.overlay.DockUpdaterFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
@@ -95,6 +97,8 @@
public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
public WifiFeatureProvider mWifiFeatureProvider;
+ public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
+ public StylusFeatureProvider mStylusFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -147,6 +151,8 @@
mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
mWifiFeatureProvider = mock(WifiFeatureProvider.class);
+ mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
+ mStylusFeatureProvider = mock(StylusFeatureProvider.class);
}
@Override
@@ -170,7 +176,7 @@
}
@Override
- public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(Context context) {
+ public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider() {
return batterySettingsFeatureProvider;
}
@@ -303,4 +309,14 @@
public WifiFeatureProvider getWifiFeatureProvider() {
return mWifiFeatureProvider;
}
+
+ @Override
+ public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
+ return mKeyboardSettingsFeatureProvider;
+ }
+
+ @Override
+ public StylusFeatureProvider getStylusFeatureProvider() {
+ return mStylusFeatureProvider;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
index df38420..324a829 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -55,6 +55,7 @@
private int[] profileIdsForUser = new int[0];
private boolean mUserSwitchEnabled;
private Bundle mDefaultGuestUserRestriction = new Bundle();
+ private boolean mIsGuestUser = false;
private @UserManager.UserSwitchabilityResult int mSwitchabilityStatus =
UserManager.SWITCHABILITY_STATUS_OK;
@@ -270,4 +271,13 @@
mUserProfileInfos.get(i).flags |= UserInfo.FLAG_ADMIN;
}
}
+
+ @Implementation
+ protected boolean isGuestUser() {
+ return mIsGuestUser;
+ }
+
+ public void setGuestUser(boolean isGuestUser) {
+ mIsGuestUser = isGuestUser;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/users/GuestTelephonyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/GuestTelephonyPreferenceControllerTest.java
index aa84cb6..c4b514c 100644
--- a/tests/robotests/src/com/android/settings/users/GuestTelephonyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/users/GuestTelephonyPreferenceControllerTest.java
@@ -18,12 +18,14 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeTrue;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.SystemProperties;
import android.os.UserManager;
@@ -103,6 +105,8 @@
@Test
public void updateState_Admin_shouldDisplayPreference() {
+ assumeTrue("Device does not have telephony feature ",
+ mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY));
SystemProperties.set("fw.max_users", Long.toBinaryString(4));
mDpm.setDeviceOwner(null);
mUserManager.setIsAdminUser(true);
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
index a60b531..316beb3 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
@@ -18,11 +18,15 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.graphics.drawable.Drawable;
+import android.net.wifi.sharedconnectivity.app.NetworkProviderInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
@@ -31,6 +35,7 @@
import com.android.settingslib.R;
import com.android.settingslib.wifi.WifiUtils;
+import com.android.wifitrackerlib.HotspotNetworkEntry;
import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before;
@@ -52,6 +57,8 @@
@Mock
private WifiEntry mMockWifiEntry;
@Mock
+ private HotspotNetworkEntry mHotspotNetworkEntry;
+ @Mock
private WifiUtils.InternetIconInjector mMockIconInjector;
@Mock
@@ -256,4 +263,26 @@
public void getSecondTargetResId_shouldNotReturnZero() {
assertThat(mPref.getSecondTargetResId()).isNotEqualTo(0);
}
+
+ @Test
+ public void refresh_itsHotspotNetworkEntry_shouldUpdateHotspotIcon() {
+ int deviceType = NetworkProviderInfo.DEVICE_TYPE_PHONE;
+ when(mHotspotNetworkEntry.getDeviceType()).thenReturn(deviceType);
+ WifiEntryPreference pref = spy(
+ new WifiEntryPreference(mContext, mHotspotNetworkEntry, mMockIconInjector));
+
+ pref.refresh();
+
+ verify(pref).updateHotspotIcon(deviceType);
+ }
+
+ @Test
+ public void refresh_notHotspotNetworkEntry_shouldNotUpdateHotspotIcon() {
+ WifiEntryPreference pref = spy(
+ new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector));
+
+ pref.refresh();
+
+ verify(pref, never()).updateHotspotIcon(anyInt());
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
index c86a023..dcd9b36 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -701,10 +701,10 @@
}
@Test
- public void linkSpeedPref_shouldNotShowIfNotSet() {
+ public void linkSpeedPref_shouldNotShowIfSpeedStringIsEmpty() {
setUpForConnectedNetwork();
setUpSpyController();
- when(mMockWifiInfo.getTxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+ when(mMockWifiEntry.getTxSpeedString()).thenReturn("");
displayAndResume();
@@ -712,42 +712,22 @@
}
@Test
- public void linkSpeedPref_shouldVisibleForConnectedNetwork() {
+ public void linkSpeedPref_shouldBeVisibleIfSpeedStringIsNotEmpty() {
setUpForConnectedNetwork();
setUpSpyController();
- String expectedLinkSpeed = mContext.getString(R.string.tx_link_speed, TX_LINK_SPEED);
+ when(mMockWifiEntry.getTxSpeedString()).thenReturn("100 Mbps");
displayAndResume();
verify(mMockTxLinkSpeedPref).setVisible(true);
- verify(mMockTxLinkSpeedPref).setSummary(expectedLinkSpeed);
+ verify(mMockTxLinkSpeedPref).setSummary("100 Mbps");
}
@Test
- public void linkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
-
- verify(mMockTxLinkSpeedPref).setVisible(false);
- verify(mMockTxLinkSpeedPref, never()).setSummary(any(String.class));
- }
-
- @Test
- public void linkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
- setUpForNotInRangeNetwork();
-
- displayAndResume();
-
- verify(mMockTxLinkSpeedPref).setVisible(false);
- verify(mMockTxLinkSpeedPref, never()).setSummary(any(String.class));
- }
-
- @Test
- public void rxLinkSpeedPref_shouldNotShowIfNotSet() {
+ public void rxLinkSpeedPref_shouldNotShowIfSpeedStringIsEmpty() {
setUpForConnectedNetwork();
setUpSpyController();
- when(mMockWifiInfo.getRxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+ when(mMockWifiEntry.getRxSpeedString()).thenReturn("");
displayAndResume();
@@ -755,35 +735,15 @@
}
@Test
- public void rxLinkSpeedPref_shouldVisibleForConnectedNetwork() {
+ public void rxLinkSpeedPref_shouldBeVisibleIfSpeedStringIsNotEmpty() {
setUpForConnectedNetwork();
setUpSpyController();
- String expectedLinkSpeed = mContext.getString(R.string.rx_link_speed, RX_LINK_SPEED);
+ when(mMockWifiEntry.getRxSpeedString()).thenReturn("100 Mbps");
displayAndResume();
verify(mMockRxLinkSpeedPref).setVisible(true);
- verify(mMockRxLinkSpeedPref).setSummary(expectedLinkSpeed);
- }
-
- @Test
- public void rxLinkSpeedPref_shouldInvisibleForDisconnectedNetwork() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
-
- verify(mMockRxLinkSpeedPref).setVisible(false);
- verify(mMockRxLinkSpeedPref, never()).setSummary(any(String.class));
- }
-
- @Test
- public void rxLinkSpeedPref_shouldInvisibleForNotInRangeNetwork() {
- setUpForNotInRangeNetwork();
-
- displayAndResume();
-
- verify(mMockRxLinkSpeedPref).setVisible(false);
- verify(mMockRxLinkSpeedPref, never()).setSummary(any(String.class));
+ verify(mMockRxLinkSpeedPref).setSummary("100 Mbps");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
index fbe184d..25a59a9 100644
--- a/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/p2p/WifiP2pSettingsTest.java
@@ -21,6 +21,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -151,6 +152,13 @@
}
@Test
+ public void onDeviceInfoAvailable_nullChannel_shouldBeIgnored() {
+ mFragment.sChannel = null;
+ mFragment.onDeviceInfoAvailable(mock(WifiP2pDevice.class));
+ verify(mWifiP2pManager, never()).requestNetworkInfo(any(), any());
+ }
+
+ @Test
public void beSearching_getP2pStateDisabledIntent_shouldBeFalse() {
final Bundle bundle = new Bundle();
final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
diff --git a/tests/spa_unit/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.kt b/tests/spa_unit/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.kt
new file mode 100644
index 0000000..c2413af
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/applications/specialaccess/DataSaverControllerTest.kt
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2023 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.specialaccess
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.res.Resources
+import android.net.NetworkPolicyManager
+import android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.R
+import com.android.settings.applications.specialaccess.DataSaverController.Companion.getUnrestrictedSummary
+import com.android.settings.core.BasePreferenceController.AVAILABLE
+import com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE
+import com.android.settingslib.spaprivileged.model.app.AppListRepository
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Spy
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+import org.mockito.Mockito.`when` as whenever
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@RunWith(AndroidJUnit4::class)
+class DataSaverControllerTest {
+ @get:Rule
+ val mockito: MockitoRule = MockitoJUnit.rule()
+
+ @Spy
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ @Spy
+ private val resources: Resources = context.resources
+
+ @Mock
+ private lateinit var networkPolicyManager: NetworkPolicyManager
+
+ @Mock
+ private lateinit var dataSaverController: DataSaverController
+
+ @Before
+ fun setUp() {
+ whenever(context.applicationContext).thenReturn(context)
+ whenever(context.resources).thenReturn(resources)
+ whenever(NetworkPolicyManager.from(context)).thenReturn(networkPolicyManager)
+
+ dataSaverController = DataSaverController(context, "key")
+ }
+
+ @Test
+ fun getAvailabilityStatus_whenConfigOn_available() {
+ whenever(resources.getBoolean(R.bool.config_show_data_saver)).thenReturn(true)
+ assertThat(dataSaverController.availabilityStatus).isEqualTo(AVAILABLE)
+ }
+
+ @Test
+ fun getAvailabilityStatus_whenConfigOff_unsupportedOnDevice() {
+ whenever(resources.getBoolean(R.bool.config_show_data_saver)).thenReturn(false)
+ assertThat(dataSaverController.availabilityStatus).isEqualTo(UNSUPPORTED_ON_DEVICE)
+ }
+
+ @Test
+ fun getUnrestrictedSummary_whenTwoAppsAllowed() = runTest {
+ whenever(
+ networkPolicyManager.getUidsWithPolicy(POLICY_ALLOW_METERED_BACKGROUND)
+ ).thenReturn(intArrayOf(APP1.uid, APP2.uid))
+
+ val summary =
+ getUnrestrictedSummary(context = context, appListRepository = FakeAppListRepository)
+
+ assertThat(summary)
+ .isEqualTo("2 apps allowed to use unrestricted data when Data Saver is on")
+ }
+
+ @Test
+ fun getUnrestrictedSummary_whenNoAppsAllowed() = runTest {
+ whenever(
+ networkPolicyManager.getUidsWithPolicy(POLICY_ALLOW_METERED_BACKGROUND)
+ ).thenReturn(intArrayOf())
+
+ val summary =
+ getUnrestrictedSummary(context = context, appListRepository = FakeAppListRepository)
+
+ assertThat(summary)
+ .isEqualTo("0 apps allowed to use unrestricted data when Data Saver is on")
+ }
+
+ private companion object {
+ val APP1 = ApplicationInfo().apply { uid = 10001 }
+ val APP2 = ApplicationInfo().apply { uid = 10002 }
+ val APP3 = ApplicationInfo().apply { uid = 10003 }
+
+ object FakeAppListRepository : AppListRepository {
+ override suspend fun loadApps(
+ userId: Int,
+ loadInstantApps: Boolean,
+ matchAnyUserForAdmin: Boolean,
+ ) = emptyList<ApplicationInfo>()
+
+ override fun showSystemPredicate(
+ userIdFlow: Flow<Int>,
+ showSystemFlow: Flow<Boolean>,
+ ): Flow<(app: ApplicationInfo) -> Boolean> = flowOf { false }
+
+ override fun getSystemPackageNamesBlocking(userId: Int): Set<String> = emptySet()
+
+ override suspend fun loadAndFilterApps(userId: Int, isSystemApp: Boolean) =
+ listOf(APP1, APP2, APP3)
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt b/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt
new file mode 100644
index 0000000..dc6a421
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 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.datausage
+
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.datausage.DataUsageFormatter.getBytesDisplayUnit
+import com.google.common.truth.Truth.assertThat
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class DataUsageFormatterTest {
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ @Test
+ fun getUnitDisplayName_megaByte() {
+ val displayName = context.resources.getBytesDisplayUnit(ONE_MEGA_BYTE_IN_BYTES)
+
+ assertThat(displayName).isEqualTo("MB")
+ }
+
+ @Test
+ fun getUnitDisplayName_gigaByte() {
+ val displayName = context.resources.getBytesDisplayUnit(ONE_GIGA_BYTE_IN_BYTES)
+
+ assertThat(displayName).isEqualTo("GB")
+ }
+
+ private companion object {
+ const val ONE_MEGA_BYTE_IN_BYTES = 1024L * 1024
+ const val ONE_GIGA_BYTE_IN_BYTES = 1024L * 1024 * 1024
+ }
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/TelephonyStatusControlSessionTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/TelephonyStatusControlSessionTest.kt
new file mode 100644
index 0000000..7e6a91b
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/TelephonyStatusControlSessionTest.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2023 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 android.content.Context
+import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.core.BasePreferenceController
+import com.android.settingslib.spa.testutils.waitUntil
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@RunWith(AndroidJUnit4::class)
+class TelephonyStatusControlSessionTest {
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ @Test
+ fun init() = runTest {
+ val controller = TestController(context)
+
+ val session = TelephonyStatusControlSession(
+ controllers = listOf(controller),
+ lifecycle = TestLifecycleOwner().lifecycle,
+ )
+
+ waitUntil { controller.availabilityStatus == STATUS }
+ session.close()
+ }
+
+ @Test
+ fun close() = runTest {
+ val controller = TestController(context)
+
+ val session = TelephonyStatusControlSession(
+ controllers = listOf(controller),
+ lifecycle = TestLifecycleOwner().lifecycle,
+ )
+ session.close()
+
+ assertThat(controller.availabilityStatus).isNull()
+ }
+
+ private companion object {
+ const val KEY = "key"
+ const val STATUS = BasePreferenceController.AVAILABLE
+ }
+
+ private class TestController(context: Context) : BasePreferenceController(context, KEY),
+ TelephonyAvailabilityHandler {
+
+ var availabilityStatus: Int? = null
+ override fun getAvailabilityStatus(): Int = STATUS
+
+ override fun setAvailabilityStatus(status: Int) {
+ availabilityStatus = status
+ }
+
+ override fun unsetAvailabilityStatus() {
+ availabilityStatus = null
+ }
+ }
+}
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProviderTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProviderTest.kt
new file mode 100644
index 0000000..e0eb5b2
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appcompat/UserAspectRatioAppsPageProviderTest.kt
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2023 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.spa.app.appcompat
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN
+import android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET
+import android.os.Build
+import androidx.compose.runtime.State
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.R
+import com.android.settingslib.spa.framework.compose.stateOf
+import com.android.settingslib.spa.testutils.FakeNavControllerWrapper
+import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull
+import com.android.settingslib.spaprivileged.template.app.AppListItemModel
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.runTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * To run this test: atest SettingsSpaUnitTests:UserAspectRatioAppsPageProviderTest
+ */
+@RunWith(AndroidJUnit4::class)
+class UserAspectRatioAppsPageProviderTest {
+ @get:Rule
+ val composeTestRule = createComposeRule()
+
+ private val context: Context = ApplicationProvider.getApplicationContext()
+ private val fakeNavControllerWrapper = FakeNavControllerWrapper()
+
+ @Test
+ fun aspectRatioAppsPageProvider_name() {
+ assertThat(UserAspectRatioAppsPageProvider.name).isEqualTo(EXPECTED_PROVIDER_NAME)
+ }
+
+ @Test
+ fun injectEntry_title() {
+ setInjectEntry()
+ composeTestRule.onNodeWithText(context.getString(R.string.screen_size_title))
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun injectEntry_summary() {
+ setInjectEntry()
+ composeTestRule.onNodeWithText(context.getString(R.string.screen_size_summary, Build.MODEL))
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun injectEntry_onClick_navigate() {
+ setInjectEntry()
+ composeTestRule.onNodeWithText(context.getString(R.string.screen_size_title)).performClick()
+ assertThat(fakeNavControllerWrapper.navigateCalledWith).isEqualTo("UserAspectRatioAppsPage")
+ }
+
+ private fun setInjectEntry() {
+ composeTestRule.setContent {
+ fakeNavControllerWrapper.Wrapper {
+ UserAspectRatioAppsPageProvider.buildInjectEntry().build().UiLayout()
+ }
+ }
+ }
+
+ @Test
+ fun title_displayed() {
+ composeTestRule.setContent {
+ UserAspectRatioAppList {}
+ }
+
+ composeTestRule.onNodeWithText(context.getString(R.string.screen_size_title))
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun item_labelDisplayed() {
+ setItemContent()
+
+ composeTestRule.onNodeWithText(LABEL).assertIsDisplayed()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun aspectRatioAppListModel_transform() = runTest {
+ val listModel = UserAspectRatioAppListModel(context)
+ val recordListFlow = listModel.transform(flowOf(USER_ID), flowOf(listOf(APP)))
+ val recordList = recordListFlow.firstWithTimeoutOrNull()!!
+
+ assertThat(recordList).hasSize(1)
+ assertThat(recordList[0].app).isSameInstanceAs(APP)
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun aspectRatioAppListModel_filter() = runTest {
+ val listModel = UserAspectRatioAppListModel(context)
+
+ val recordListFlow = listModel.filter(flowOf(USER_ID), 0,
+ flowOf(listOf(APP_RECORD_NOT_DISPLAYED, APP_RECORD_SUGGESTED)))
+
+ val recordList = checkNotNull(recordListFlow.firstWithTimeoutOrNull())
+ assertThat(recordList).containsExactly(APP_RECORD_SUGGESTED)
+ }
+
+ private fun setItemContent() {
+ composeTestRule.setContent {
+ fakeNavControllerWrapper.Wrapper {
+ with(UserAspectRatioAppListModel(context)) {
+ AppListItemModel(
+ record = APP_RECORD_SUGGESTED,
+ label = LABEL,
+ summary = stateOf(SUMMARY)
+ ).AppItem()
+ }
+ }
+ }
+ }
+
+ @Test
+ fun aspectRatioAppListModel_getSummaryDefault() {
+ val summaryState = setSummaryState(USER_MIN_ASPECT_RATIO_UNSET)
+ assertThat(summaryState.value)
+ .isEqualTo(context.getString(R.string.user_aspect_ratio_app_default))
+ }
+
+ @Test
+ fun aspectRatioAppListModel_getSummaryWhenSplitScreen() {
+ val summaryState = setSummaryState(USER_MIN_ASPECT_RATIO_SPLIT_SCREEN)
+ assertThat(summaryState.value)
+ .isEqualTo(context.getString(R.string.user_aspect_ratio_half_screen))
+ }
+
+ private fun setSummaryState(override: Int): State<String> {
+ val listModel = UserAspectRatioAppListModel(context)
+ lateinit var summaryState: State<String>
+ composeTestRule.setContent {
+ summaryState = listModel.getSummary(option = 0,
+ record = UserAspectRatioAppListItemModel(
+ app = APP,
+ override = override,
+ suggested = false,
+ canDisplay = true,
+ ))
+ }
+ return summaryState
+ }
+
+
+ private companion object {
+ private const val EXPECTED_PROVIDER_NAME = "UserAspectRatioAppsPage"
+ private const val PACKAGE_NAME = "package.name"
+ private const val USER_ID = 0
+ private const val LABEL = "Label"
+ private const val SUMMARY = "Summary"
+
+ private val APP = ApplicationInfo().apply {
+ packageName = PACKAGE_NAME
+ }
+ private val APP_RECORD_SUGGESTED = UserAspectRatioAppListItemModel(
+ APP,
+ override = USER_MIN_ASPECT_RATIO_UNSET,
+ suggested = true,
+ canDisplay = true
+ )
+ private val APP_RECORD_NOT_DISPLAYED = UserAspectRatioAppListItemModel(
+ APP,
+ override = USER_MIN_ASPECT_RATIO_UNSET,
+ suggested = true,
+ canDisplay = false
+ )
+ }
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/spa/development/compat/PlatformCompatAppListModelTest.kt b/tests/spa_unit/src/com/android/settings/spa/development/compat/PlatformCompatAppListModelTest.kt
new file mode 100644
index 0000000..78aca85
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/spa/development/compat/PlatformCompatAppListModelTest.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2023 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.spa.development.compat
+
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
+import android.content.pm.PackageManager.PackageInfoFlags
+import androidx.compose.runtime.State
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.any
+import org.mockito.Mockito.anyInt
+import org.mockito.Spy
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoRule
+import org.mockito.Mockito.`when` as whenever
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@RunWith(AndroidJUnit4::class)
+class PlatformCompatAppListModelTest {
+ @get:Rule
+ val composeTestRule = createComposeRule()
+
+ @get:Rule
+ val mockito: MockitoRule = MockitoJUnit.rule()
+
+ @Spy
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ @Mock
+ private lateinit var packageManager: PackageManager
+
+ private lateinit var listModel: PlatformCompatAppListModel
+
+ @Before
+ fun setUp() {
+ whenever(context.packageManager).thenReturn(packageManager)
+ whenever(packageManager.getInstalledPackagesAsUser(any<PackageInfoFlags>(), anyInt()))
+ .thenReturn(emptyList())
+ listModel = PlatformCompatAppListModel(context)
+ }
+
+ @Test
+ fun transform() = runTest {
+ val recordListFlow = listModel.transform(
+ userIdFlow = flowOf(USER_ID),
+ appListFlow = flowOf(listOf(APP)),
+ )
+
+ val recordList = recordListFlow.first()
+ assertThat(recordList).hasSize(1)
+ val record = recordList[0]
+ assertThat(record.app).isSameInstanceAs(APP)
+ }
+
+ @Test
+ fun getSummary() = runTest {
+ val summaryState = getSummaryState(APP)
+
+ assertThat(summaryState.value).isEqualTo(PACKAGE_NAME)
+ }
+
+ private fun getSummaryState(app: ApplicationInfo): State<String> {
+ lateinit var summary: State<String>
+ composeTestRule.setContent {
+ summary = listModel.getSummary(
+ option = 0,
+ record = PlatformCompatAppRecord(app),
+ )
+ }
+ return summary
+ }
+
+ private companion object {
+ const val USER_ID = 0
+ const val PACKAGE_NAME = "package.name"
+ val APP = ApplicationInfo().apply {
+ packageName = PACKAGE_NAME
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
index 99d4f32..6320fc7 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -25,6 +25,7 @@
import com.android.settings.biometrics.face.FaceFeatureProvider
import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider
import com.android.settings.bluetooth.BluetoothFeatureProvider
+import com.android.settings.connecteddevice.stylus.StylusFeatureProvider
import com.android.settings.dashboard.DashboardFeatureProvider
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider
@@ -34,6 +35,7 @@
import com.android.settings.fuelgauge.PowerUsageFeatureProvider
import com.android.settings.gestures.AssistGestureFeatureProvider
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider
import com.android.settings.localepicker.LocaleFeatureProvider
import com.android.settings.overlay.DockUpdaterFeatureProvider
import com.android.settings.overlay.FeatureFactory
@@ -84,9 +86,7 @@
TODO("Not yet implemented")
}
- override fun getBatterySettingsFeatureProvider(
- context: Context?,
- ): BatterySettingsFeatureProvider {
+ override fun getBatterySettingsFeatureProvider(): BatterySettingsFeatureProvider {
TODO("Not yet implemented")
}
@@ -187,4 +187,12 @@
override fun getWifiFeatureProvider(): WifiFeatureProvider {
TODO("Not yet implemented")
}
+
+ override fun getKeyboardSettingsFeatureProvider(): KeyboardSettingsFeatureProvider {
+ TODO("Not yet implemented")
+ }
+
+ override fun getStylusFeatureProvider(): StylusFeatureProvider {
+ TODO("Not yet implemented")
+ }
}
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
index 4e2b3be..1587e00 100644
--- a/tests/unit/Android.bp
+++ b/tests/unit/Android.bp
@@ -21,6 +21,7 @@
],
static_libs: [
+ "androidx.arch.core_core-testing",
"androidx.test.core",
"androidx.test.rules",
"androidx.test.espresso.core",
@@ -32,6 +33,7 @@
"platform-test-annotations",
"truth-prebuilt",
"ub-uiautomator",
+ "kotlinx_coroutines_test",
// Don't add SettingsLib libraries here - you can use them directly as they are in the
// instrumented Settings app.
],
@@ -40,8 +42,11 @@
javacflags: ["-Xep:CheckReturnValue:WARN"]
},
- // Include all test java files.
- srcs: ["src/**/*.java"],
+ // Include all test java/kotlin files.
+ srcs: [
+ "src/**/*.java",
+ "src/**/*.kt",
+ ],
platform_apis: true,
test_suites: ["device-tests"],
diff --git a/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java
new file mode 100644
index 0000000..36f2f54
--- /dev/null
+++ b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2023 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.appcompat;
+
+import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_16_9;
+import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_3_2;
+import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_4_3;
+import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_SPLIT_SCREEN;
+import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET;
+
+import static com.android.settings.applications.appcompat.UserAspectRatioManager.KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ResolveInfo;
+import android.provider.DeviceConfig;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.testutils.ResourcesUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * To run this test: atest SettingsUnitTests:UserAspectRatioManagerTest
+ */
+@RunWith(AndroidJUnit4.class)
+public class UserAspectRatioManagerTest {
+
+ private Context mContext;
+ private UserAspectRatioManager mUtils;
+ private String mOriginalFlag;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mUtils = spy(new UserAspectRatioManager(mContext));
+ mOriginalFlag = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
+ KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS);
+ }
+
+ @After
+ public void tearDown() {
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
+ KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS, mOriginalFlag, true /* makeDefault */);
+ }
+
+ @Test
+ public void testCanDisplayAspectRatioUi() {
+ final ApplicationInfo canDisplay = new ApplicationInfo();
+ canDisplay.packageName = "com.app.candisplay";
+ addResolveInfoLauncherEntry(canDisplay.packageName);
+
+ assertTrue(mUtils.canDisplayAspectRatioUi(canDisplay));
+
+ final ApplicationInfo noLauncherEntry = new ApplicationInfo();
+ noLauncherEntry.packageName = "com.app.nolauncherentry";
+
+ assertFalse(mUtils.canDisplayAspectRatioUi(noLauncherEntry));
+ }
+
+ @Test
+ public void testIsFeatureEnabled() {
+ assertFalse(UserAspectRatioManager.isFeatureEnabled(mContext));
+
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_WINDOW_MANAGER,
+ KEY_ENABLE_USER_ASPECT_RATIO_SETTINGS, "true", false /* makeDefault */);
+ assertTrue(UserAspectRatioManager.isFeatureEnabled(mContext));
+ }
+
+ @Test
+ public void testGetUserMinAspectRatioEntry() {
+ // R.string.user_aspect_ratio_app_default
+ final String appDefault = ResourcesUtils.getResourcesString(mContext,
+ "user_aspect_ratio_app_default");
+ assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET))
+ .isEqualTo(appDefault);
+ // should always return default if value does not correspond to anything
+ assertThat(mUtils.getUserMinAspectRatioEntry(-1))
+ .isEqualTo(appDefault);
+ // R.string.user_aspect_ratio_half_screen
+ assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_SPLIT_SCREEN))
+ .isEqualTo(ResourcesUtils.getResourcesString(mContext,
+ "user_aspect_ratio_half_screen"));
+ // R.string.user_aspect_ratio_3_2
+ assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_3_2))
+ .isEqualTo(ResourcesUtils.getResourcesString(mContext, "user_aspect_ratio_3_2"));
+ // R,string.user_aspect_ratio_4_3
+ assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_4_3))
+ .isEqualTo(ResourcesUtils.getResourcesString(mContext, "user_aspect_ratio_4_3"));
+ // R.string.user_aspect_ratio_16_9
+ assertThat(mUtils.getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_16_9))
+ .isEqualTo(ResourcesUtils.getResourcesString(mContext, "user_aspect_ratio_16_9"));
+ }
+
+ private void addResolveInfoLauncherEntry(String packageName) {
+ final ResolveInfo resolveInfo = mock(ResolveInfo.class);
+ final ActivityInfo activityInfo = mock(ActivityInfo.class);
+ activityInfo.packageName = packageName;
+ resolveInfo.activityInfo = activityInfo;
+ mUtils.addInfoHasLauncherEntry(resolveInfo);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/bluetooth/BlockingPrefWithSliceControllerTest.java b/tests/unit/src/com/android/settings/bluetooth/BlockingPrefWithSliceControllerTest.java
index 65b6977..d5a2585 100644
--- a/tests/unit/src/com/android/settings/bluetooth/BlockingPrefWithSliceControllerTest.java
+++ b/tests/unit/src/com/android/settings/bluetooth/BlockingPrefWithSliceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.bluetooth;
+import static androidx.slice.builders.ListBuilder.ICON_IMAGE;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -24,8 +26,8 @@
import static org.mockito.Mockito.verify;
import android.app.PendingIntent;
-import android.content.Context;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -42,20 +44,20 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.bluetooth.BlockingPrefWithSliceController;
-
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
+@RunWith(AndroidJUnit4.class)
public class BlockingPrefWithSliceControllerTest {
private static final String KEY = "bt_device_slice_category";
- private static final String TEST_URI_AUTHORITY = "com.android.authority.test";
+ private static final String TEST_URI_AUTHORITY = "com.android.settings";
private static final String TEST_EXTRA_INTENT = "EXTRA_INTENT";
private static final String TEST_EXTRA_PENDING_INTENT = "EXTRA_PENDING_INTENT";
private static final String TEST_INTENT_ACTION = "test";
@@ -71,6 +73,8 @@
private LiveData<Slice> mLiveData;
@Mock
private PreferenceCategory mPreferenceCategory;
+ @Captor
+ ArgumentCaptor<Preference> mPreferenceArgumentCaptor;
private Context mContext;
private BlockingPrefWithSliceController mController;
@@ -130,6 +134,14 @@
verify(mController.mPreferenceCategory).addPreference(any());
}
+ @Test
+ public void onChanged_sliceWithoutValidIntent_makePreferenceUnselectable() {
+ mController.onChanged(buildTestSlice());
+
+ verify(mController.mPreferenceCategory).addPreference(mPreferenceArgumentCaptor.capture());
+ assertThat(mPreferenceArgumentCaptor.getValue().isSelectable()).isFalse();
+ }
+
private Slice buildTestSlice() {
Uri uri =
new Uri.Builder()
@@ -141,7 +153,7 @@
IconCompat icon = mock(IconCompat.class);
listBuilder.addRow(
new RowBuilder()
- .setTitleItem(icon, ListBuilder.ICON_IMAGE)
+ .setTitleItem(icon, ICON_IMAGE)
.setTitle(TEST_SLICE_TITLE)
.setSubtitle(TEST_SLICE_SUBTITLE)
.setPrimaryAction(
@@ -153,7 +165,7 @@
PendingIntent.FLAG_UPDATE_CURRENT
| PendingIntent.FLAG_IMMUTABLE),
icon,
- ListBuilder.ICON_IMAGE,
+ ICON_IMAGE,
"")));
return listBuilder.build();
}
diff --git a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt
new file mode 100644
index 0000000..0509d8a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FakeFingerprintManagerInteractor.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2023 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.fingerprint2.domain.interactor
+
+import android.hardware.biometrics.SensorProperties
+import android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flow
+
+/** Fake to be used by other classes to easily fake the FingerprintManager implementation. */
+class FakeFingerprintManagerInteractor : FingerprintManagerInteractor {
+
+ var enrollableFingerprints: Int = 5
+ var enrolledFingerprintsInternal: MutableList<FingerprintViewModel> = mutableListOf()
+ var challengeToGenerate: Pair<Long, ByteArray> = Pair(-1L, byteArrayOf())
+ var authenticateAttempt = FingerprintAuthAttemptViewModel.Success(1)
+ var pressToAuthEnabled = true
+
+ var sensorProps =
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ emptyList() /* ComponentInfoInternal */,
+ TYPE_POWER_BUTTON,
+ true /* resetLockoutRequiresHardwareAuthToken */
+ )
+ )
+
+ override suspend fun authenticate(): FingerprintAuthAttemptViewModel {
+ return authenticateAttempt
+ }
+
+ override suspend fun generateChallenge(gateKeeperPasswordHandle: Long): Pair<Long, ByteArray> {
+ return challengeToGenerate
+ }
+ override val enrolledFingerprints: Flow<List<FingerprintViewModel>> = flow {
+ emit(enrolledFingerprintsInternal)
+ }
+
+ override fun canEnrollFingerprints(numFingerprints: Int): Flow<Boolean> = flow {
+ emit(numFingerprints < enrollableFingerprints)
+ }
+
+ override val maxEnrollableFingerprints: Flow<Int> = flow { emit(enrollableFingerprints) }
+
+ override suspend fun removeFingerprint(fp: FingerprintViewModel): Boolean {
+ return enrolledFingerprintsInternal.remove(fp)
+ }
+
+ override suspend fun renameFingerprint(fp: FingerprintViewModel, newName: String) {}
+
+ override suspend fun hasSideFps(): Boolean {
+ return sensorProps.any { it.isAnySidefpsType }
+ }
+
+ override suspend fun pressToAuthEnabled(): Boolean {
+ return pressToAuthEnabled
+ }
+
+ override suspend fun sensorPropertiesInternal(): List<FingerprintSensorPropertiesInternal> =
+ sensorProps
+}
diff --git a/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt
new file mode 100644
index 0000000..7af740a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/fingerprint2/domain/interactor/FingerprintManagerInteractorTest.kt
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2023 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.fingerprint2.domain.interactor
+
+import android.content.Context
+import android.content.Intent
+import android.content.res.Resources
+import android.hardware.fingerprint.Fingerprint
+import android.hardware.fingerprint.FingerprintManager
+import android.hardware.fingerprint.FingerprintManager.CryptoObject
+import android.hardware.fingerprint.FingerprintManager.FINGERPRINT_ERROR_LOCKOUT_PERMANENT
+import android.os.CancellationSignal
+import android.os.Handler
+import androidx.test.core.app.ApplicationProvider
+import com.android.settings.biometrics.GatekeeperPasswordProvider
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractor
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintManagerInteractorImpl
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.password.ChooseLockSettingsHelper
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.cancelAndJoin
+import kotlinx.coroutines.flow.last
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.anyLong
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.ArgumentMatchers.nullable
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class FingerprintManagerInteractorTest {
+
+ @JvmField @Rule var rule = MockitoJUnit.rule()
+ private lateinit var underTest: FingerprintManagerInteractor
+ private var context: Context = ApplicationProvider.getApplicationContext()
+ private var backgroundDispatcher = StandardTestDispatcher()
+ @Mock private lateinit var fingerprintManager: FingerprintManager
+ @Mock private lateinit var gateKeeperPasswordProvider: GatekeeperPasswordProvider
+
+ private var testScope = TestScope(backgroundDispatcher)
+ private var pressToAuthProvider = { true }
+
+ @Before
+ fun setup() {
+ underTest =
+ FingerprintManagerInteractorImpl(
+ context,
+ backgroundDispatcher,
+ fingerprintManager,
+ gateKeeperPasswordProvider,
+ pressToAuthProvider,
+ )
+ }
+
+ @Test
+ fun testEmptyFingerprints() =
+ testScope.runTest {
+ Mockito.`when`(fingerprintManager.getEnrolledFingerprints(Mockito.anyInt()))
+ .thenReturn(emptyList())
+
+ val emptyFingerprintList: List<Fingerprint> = emptyList()
+ assertThat(underTest.enrolledFingerprints.last()).isEqualTo(emptyFingerprintList)
+ }
+
+ @Test
+ fun testOneFingerprint() =
+ testScope.runTest {
+ val expected = Fingerprint("Finger 1,", 2, 3L)
+ val fingerprintList: List<Fingerprint> = listOf(expected)
+ Mockito.`when`(fingerprintManager.getEnrolledFingerprints(Mockito.anyInt()))
+ .thenReturn(fingerprintList)
+
+ val list = underTest.enrolledFingerprints.last()
+ assertThat(list.size).isEqualTo(fingerprintList.size)
+ val actual = list[0]
+ assertThat(actual.name).isEqualTo(expected.name)
+ assertThat(actual.fingerId).isEqualTo(expected.biometricId)
+ assertThat(actual.deviceId).isEqualTo(expected.deviceId)
+ }
+
+ @Test
+ fun testCanEnrollFingerprint() =
+ testScope.runTest {
+ val mockContext = Mockito.mock(Context::class.java)
+ val resources = Mockito.mock(Resources::class.java)
+ Mockito.`when`(mockContext.resources).thenReturn(resources)
+ Mockito.`when`(resources.getInteger(anyInt())).thenReturn(3)
+ underTest =
+ FingerprintManagerInteractorImpl(
+ mockContext,
+ backgroundDispatcher,
+ fingerprintManager,
+ gateKeeperPasswordProvider,
+ pressToAuthProvider,
+ )
+
+ assertThat(underTest.canEnrollFingerprints(2).last()).isTrue()
+ assertThat(underTest.canEnrollFingerprints(3).last()).isFalse()
+ }
+
+ @Test
+ fun testGenerateChallenge() =
+ testScope.runTest {
+ val byteArray = byteArrayOf(5, 3, 2)
+ val challenge = 100L
+ val intent = Intent()
+ intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, challenge)
+ Mockito.`when`(
+ gateKeeperPasswordProvider.requestGatekeeperHat(
+ any(Intent::class.java),
+ anyLong(),
+ anyInt()
+ )
+ )
+ .thenReturn(byteArray)
+
+ val generateChallengeCallback: ArgumentCaptor<FingerprintManager.GenerateChallengeCallback> =
+ ArgumentCaptor.forClass(FingerprintManager.GenerateChallengeCallback::class.java)
+
+ var result: Pair<Long, ByteArray?>? = null
+ val job = testScope.launch { result = underTest.generateChallenge(1L) }
+ runCurrent()
+
+ Mockito.verify(fingerprintManager)
+ .generateChallenge(anyInt(), capture(generateChallengeCallback))
+ generateChallengeCallback.value.onChallengeGenerated(1, 2, challenge)
+
+ runCurrent()
+ job.cancelAndJoin()
+
+ assertThat(result?.first).isEqualTo(challenge)
+ assertThat(result?.second).isEqualTo(byteArray)
+ }
+
+ @Test
+ fun testRemoveFingerprint_succeeds() =
+ testScope.runTest {
+ val fingerprintViewModelToRemove = FingerprintViewModel("Finger 2", 1, 2L)
+ val fingerprintToRemove = Fingerprint("Finger 2", 1, 2L)
+
+ val removalCallback: ArgumentCaptor<FingerprintManager.RemovalCallback> =
+ ArgumentCaptor.forClass(FingerprintManager.RemovalCallback::class.java)
+
+ var result: Boolean? = null
+ val job =
+ testScope.launch { result = underTest.removeFingerprint(fingerprintViewModelToRemove) }
+ runCurrent()
+
+ Mockito.verify(fingerprintManager)
+ .remove(any(Fingerprint::class.java), anyInt(), capture(removalCallback))
+ removalCallback.value.onRemovalSucceeded(fingerprintToRemove, 1)
+
+ runCurrent()
+ job.cancelAndJoin()
+
+ assertThat(result).isTrue()
+ }
+
+ @Test
+ fun testRemoveFingerprint_fails() =
+ testScope.runTest {
+ val fingerprintViewModelToRemove = FingerprintViewModel("Finger 2", 1, 2L)
+ val fingerprintToRemove = Fingerprint("Finger 2", 1, 2L)
+
+ val removalCallback: ArgumentCaptor<FingerprintManager.RemovalCallback> =
+ ArgumentCaptor.forClass(FingerprintManager.RemovalCallback::class.java)
+
+ var result: Boolean? = null
+ val job =
+ testScope.launch { result = underTest.removeFingerprint(fingerprintViewModelToRemove) }
+ runCurrent()
+
+ Mockito.verify(fingerprintManager)
+ .remove(any(Fingerprint::class.java), anyInt(), capture(removalCallback))
+ removalCallback.value.onRemovalError(
+ fingerprintToRemove,
+ 100,
+ "Oh no, we couldn't find that one"
+ )
+
+ runCurrent()
+ job.cancelAndJoin()
+
+ assertThat(result).isFalse()
+ }
+
+ @Test
+ fun testRenameFingerprint_succeeds() =
+ testScope.runTest {
+ val fingerprintToRename = FingerprintViewModel("Finger 2", 1, 2L)
+
+ underTest.renameFingerprint(fingerprintToRename, "Woo")
+
+ Mockito.verify(fingerprintManager)
+ .rename(eq(fingerprintToRename.fingerId), anyInt(), safeEq("Woo"))
+ }
+
+ @Test
+ fun testAuth_succeeds() =
+ testScope.runTest {
+ val fingerprint = Fingerprint("Woooo", 100, 101L)
+
+ var result: FingerprintAuthAttemptViewModel? = null
+ val job = launch { result = underTest.authenticate() }
+
+ val authCallback: ArgumentCaptor<FingerprintManager.AuthenticationCallback> =
+ ArgumentCaptor.forClass(FingerprintManager.AuthenticationCallback::class.java)
+
+ runCurrent()
+
+ Mockito.verify(fingerprintManager)
+ .authenticate(
+ nullable(CryptoObject::class.java),
+ any(CancellationSignal::class.java),
+ capture(authCallback),
+ nullable(Handler::class.java),
+ anyInt()
+ )
+ authCallback.value.onAuthenticationSucceeded(
+ FingerprintManager.AuthenticationResult(null, fingerprint, 1, false)
+ )
+
+ runCurrent()
+ job.cancelAndJoin()
+ assertThat(result).isEqualTo(FingerprintAuthAttemptViewModel.Success(fingerprint.biometricId))
+ }
+
+ @Test
+ fun testAuth_lockout() =
+ testScope.runTest {
+ var result: FingerprintAuthAttemptViewModel? = null
+ val job = launch { result = underTest.authenticate() }
+
+ val authCallback: ArgumentCaptor<FingerprintManager.AuthenticationCallback> =
+ ArgumentCaptor.forClass(FingerprintManager.AuthenticationCallback::class.java)
+
+ runCurrent()
+
+ Mockito.verify(fingerprintManager)
+ .authenticate(
+ nullable(CryptoObject::class.java),
+ any(CancellationSignal::class.java),
+ capture(authCallback),
+ nullable(Handler::class.java),
+ anyInt()
+ )
+ authCallback.value.onAuthenticationError(FINGERPRINT_ERROR_LOCKOUT_PERMANENT, "Lockout!!")
+
+ runCurrent()
+ job.cancelAndJoin()
+ assertThat(result)
+ .isEqualTo(
+ FingerprintAuthAttemptViewModel.Error(FINGERPRINT_ERROR_LOCKOUT_PERMANENT, "Lockout!!")
+ )
+ }
+
+ private fun <T : Any> safeEq(value: T): T = eq(value) ?: value
+ private fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture()
+ private fun <T> any(type: Class<T>): T = Mockito.any<T>(type)
+}
diff --git a/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsNavigationViewModelTest.kt b/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsNavigationViewModelTest.kt
new file mode 100644
index 0000000..4e1f6b1
--- /dev/null
+++ b/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsNavigationViewModelTest.kt
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2023 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.fingerprint2.viewmodel
+
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.EnrollFirstFingerprint
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsNavigationViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FinishSettings
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FinishSettingsWithResult
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.LaunchConfirmDeviceCredential
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.NextStepViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.ShowSettings
+import com.android.settings.fingerprint2.domain.interactor.FakeFingerprintManagerInteractor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.resetMain
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.test.setMain
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class FingerprintSettingsNavigationViewModelTest {
+
+ @JvmField @Rule var rule = MockitoJUnit.rule()
+
+ @get:Rule val instantTaskRule = InstantTaskExecutorRule()
+
+ private lateinit var underTest: FingerprintSettingsNavigationViewModel
+ private val defaultUserId = 0
+ private var backgroundDispatcher = StandardTestDispatcher()
+ private var testScope = TestScope(backgroundDispatcher)
+ private lateinit var fakeFingerprintManagerInteractor: FakeFingerprintManagerInteractor
+
+ @Before
+ fun setup() {
+ fakeFingerprintManagerInteractor = FakeFingerprintManagerInteractor()
+ backgroundDispatcher = StandardTestDispatcher()
+ testScope = TestScope(backgroundDispatcher)
+ Dispatchers.setMain(backgroundDispatcher)
+
+ underTest =
+ FingerprintSettingsNavigationViewModel.FingerprintSettingsNavigationModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ null,
+ null,
+ )
+ .create(FingerprintSettingsNavigationViewModel::class.java)
+ }
+
+ @After
+ fun tearDown() {
+ Dispatchers.resetMain()
+ }
+
+ @Test
+ fun testNoGateKeeper_launchesConfirmDeviceCredential() =
+ testScope.runTest {
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ runCurrent()
+ assertThat(nextStep).isEqualTo(LaunchConfirmDeviceCredential(defaultUserId))
+ job.cancel()
+ }
+
+ @Test
+ fun testConfirmDevice_fails() =
+ testScope.runTest {
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(false, null)
+ runCurrent()
+
+ assertThat(nextStep).isInstanceOf(FinishSettings::class.java)
+ job.cancel()
+ }
+
+ @Test
+ fun confirmDeviceSuccess_noGateKeeper() =
+ testScope.runTest {
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, null)
+ runCurrent()
+
+ assertThat(nextStep).isInstanceOf(FinishSettings::class.java)
+ job.cancel()
+ }
+
+ @Test
+ fun confirmDeviceSuccess_launchesEnrollment_ifNoPreviousEnrollments() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(EnrollFirstFingerprint(defaultUserId, 10L, null, null))
+ job.cancel()
+ }
+
+ @Test
+ fun firstEnrollment_fails() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollFirstFailure("We failed!!")
+ runCurrent()
+
+ assertThat(nextStep).isInstanceOf(FinishSettings::class.java)
+ job.cancel()
+ }
+
+ @Test
+ fun firstEnrollment_failsWithReason() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ val failStr = "We failed!!"
+ val failReason = 101
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollFirstFailure(failStr, failReason)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(FinishSettingsWithResult(failReason, failStr))
+ job.cancel()
+ }
+
+ @Test
+ fun firstEnrollmentSucceeds_noToken() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollFirst(null, null)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(FinishSettings("Error, empty token"))
+ job.cancel()
+ }
+
+ @Test
+ fun firstEnrollmentSucceeds_noKeyChallenge() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ val byteArray = ByteArray(1) { 3 }
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollFirst(byteArray, null)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(FinishSettings("Error, empty keyChallenge"))
+ job.cancel()
+ }
+
+ @Test
+ fun firstEnrollment_succeeds() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf()
+
+ var nextStep: NextStepViewModel? = null
+ val job = testScope.launch { underTest.nextStep.collect { nextStep = it } }
+
+ val byteArray = ByteArray(1) { 3 }
+ val keyChallenge = 89L
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollFirst(byteArray, keyChallenge)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(ShowSettings)
+ job.cancel()
+ }
+
+ @Test
+ fun enrollAdditionalFingerprints_fails() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+ fakeFingerprintManagerInteractor.challengeToGenerate = Pair(4L, byteArrayOf(3, 3, 1))
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ runCurrent()
+ underTest.onEnrollAdditionalFailure()
+ runCurrent()
+
+ assertThat(nextStep).isInstanceOf(FinishSettings::class.java)
+ job.cancel()
+ }
+
+ @Test
+ fun enrollAdditional_success() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ underTest.onEnrollSuccess()
+
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(ShowSettings)
+ job.cancel()
+ }
+
+ @Test
+ fun confirmDeviceCredential_withEnrolledFingerprint_showsSettings() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+ fakeFingerprintManagerInteractor.challengeToGenerate = Pair(10L, byteArrayOf(1, 2, 3))
+
+ var nextStep: NextStepViewModel? = null
+ val job = launch { underTest.nextStep.collect { nextStep = it } }
+
+ underTest.onConfirmDevice(true, 10L)
+ runCurrent()
+
+ assertThat(nextStep).isEqualTo(ShowSettings)
+ job.cancel()
+ }
+}
diff --git a/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsViewModelTest.kt b/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsViewModelTest.kt
new file mode 100644
index 0000000..d430827
--- /dev/null
+++ b/tests/unit/src/com/android/settings/fingerprint2/viewmodel/FingerprintSettingsViewModelTest.kt
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2023 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.fingerprint2.viewmodel
+
+import android.hardware.biometrics.SensorProperties
+import android.hardware.fingerprint.FingerprintSensorProperties
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
+import androidx.arch.core.executor.testing.InstantTaskExecutorRule
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintAuthAttemptViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsNavigationViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintSettingsViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.FingerprintViewModel
+import com.android.settings.biometrics.fingerprint2.ui.viewmodel.PreferenceViewModel
+import com.android.settings.fingerprint2.domain.interactor.FakeFingerprintManagerInteractor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.collectLatest
+import kotlinx.coroutines.flow.take
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.test.StandardTestDispatcher
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.advanceTimeBy
+import kotlinx.coroutines.test.resetMain
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.test.setMain
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.junit.MockitoJUnit
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class FingerprintSettingsViewModelTest {
+
+ @JvmField @Rule var rule = MockitoJUnit.rule()
+
+ @get:Rule val instantTaskRule = InstantTaskExecutorRule()
+
+ private lateinit var underTest: FingerprintSettingsViewModel
+ private lateinit var navigationViewModel: FingerprintSettingsNavigationViewModel
+ private val defaultUserId = 0
+ private var backgroundDispatcher = StandardTestDispatcher()
+ private var testScope = TestScope(backgroundDispatcher)
+ private lateinit var fakeFingerprintManagerInteractor: FakeFingerprintManagerInteractor
+
+ @Before
+ fun setup() {
+ fakeFingerprintManagerInteractor = FakeFingerprintManagerInteractor()
+ backgroundDispatcher = StandardTestDispatcher()
+ testScope = TestScope(backgroundDispatcher)
+ Dispatchers.setMain(backgroundDispatcher)
+
+ navigationViewModel =
+ FingerprintSettingsNavigationViewModel.FingerprintSettingsNavigationModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ null,
+ null,
+ )
+ .create(FingerprintSettingsNavigationViewModel::class.java)
+
+ underTest =
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ .create(FingerprintSettingsViewModel::class.java)
+ }
+
+ @After
+ fun tearDown() {
+ Dispatchers.resetMain()
+ }
+
+ @Test
+ fun authenticate_DoesNotRun_ifOptical() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.sensorProps =
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ emptyList() /* ComponentInfoInternal */,
+ FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
+ true /* resetLockoutRequiresHardwareAuthToken */
+ )
+ )
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+
+ underTest =
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ .create(FingerprintSettingsViewModel::class.java)
+
+ var authAttempt: FingerprintAuthAttemptViewModel? = null
+ val job = launch { underTest.authFlow.take(5).collectLatest { authAttempt = it } }
+
+ underTest.shouldAuthenticate(true)
+ // Ensure we are showing settings
+ navigationViewModel.onConfirmDevice(true, 10L)
+
+ runCurrent()
+ advanceTimeBy(400)
+
+ assertThat(authAttempt).isNull()
+ job.cancel()
+ }
+
+ @Test
+ fun authenticate_DoesNotRun_ifUltrasonic() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.sensorProps =
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ emptyList() /* ComponentInfoInternal */,
+ FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC,
+ true /* resetLockoutRequiresHardwareAuthToken */
+ )
+ )
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+
+ underTest =
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ .create(FingerprintSettingsViewModel::class.java)
+
+ var authAttempt: FingerprintAuthAttemptViewModel? = null
+ val job = launch { underTest.authFlow.take(5).collectLatest { authAttempt = it } }
+
+ underTest.shouldAuthenticate(true)
+ navigationViewModel.onConfirmDevice(true, 10L)
+ advanceTimeBy(400)
+ runCurrent()
+
+ assertThat(authAttempt).isNull()
+ job.cancel()
+ }
+
+ @Test
+ fun authenticate_DoesRun_ifNotUdfps() =
+ testScope.runTest {
+ fakeFingerprintManagerInteractor.sensorProps =
+ listOf(
+ FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */,
+ SensorProperties.STRENGTH_STRONG,
+ 5 /* maxEnrollmentsPerUser */,
+ emptyList() /* ComponentInfoInternal */,
+ FingerprintSensorProperties.TYPE_POWER_BUTTON,
+ true /* resetLockoutRequiresHardwareAuthToken */
+ )
+ )
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal =
+ mutableListOf(FingerprintViewModel("a", 1, 3L))
+ val success = FingerprintAuthAttemptViewModel.Success(1)
+ fakeFingerprintManagerInteractor.authenticateAttempt = success
+
+ underTest =
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ .create(FingerprintSettingsViewModel::class.java)
+
+ var authAttempt: FingerprintAuthAttemptViewModel? = null
+
+ val job = launch { underTest.authFlow.take(5).collectLatest { authAttempt = it } }
+ underTest.shouldAuthenticate(true)
+ navigationViewModel.onConfirmDevice(true, 10L)
+ advanceTimeBy(400)
+ runCurrent()
+
+ assertThat(authAttempt).isEqualTo(success)
+ job.cancel()
+ }
+
+ @Test
+ fun deleteDialog_showAndDismiss() = runTest {
+ val fingerprintToDelete = FingerprintViewModel("A", 1, 10L)
+ fakeFingerprintManagerInteractor.enrolledFingerprintsInternal = mutableListOf(fingerprintToDelete)
+
+ underTest =
+ FingerprintSettingsViewModel.FingerprintSettingsViewModelFactory(
+ defaultUserId,
+ fakeFingerprintManagerInteractor,
+ backgroundDispatcher,
+ navigationViewModel,
+ )
+ .create(FingerprintSettingsViewModel::class.java)
+
+ var dialog: PreferenceViewModel? = null
+ val dialogJob = launch { underTest.isShowingDialog.collect { dialog = it } }
+
+ // Move to the ShowSettings state
+ navigationViewModel.onConfirmDevice(true, 10L)
+ runCurrent()
+ underTest.onDeleteClicked(fingerprintToDelete)
+ runCurrent()
+
+ assertThat(dialog is PreferenceViewModel.DeleteDialog)
+ assertThat(dialog).isEqualTo(PreferenceViewModel.DeleteDialog(fingerprintToDelete))
+
+ underTest.deleteFingerprint(fingerprintToDelete)
+ underTest.onDeleteDialogFinished()
+ runCurrent()
+
+ assertThat(dialog).isNull()
+
+ dialogJob.cancel()
+ }
+}
diff --git a/tests/unit/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImplTest.java b/tests/unit/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImplTest.java
new file mode 100644
index 0000000..6675d5a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/inputmethod/KeyboardSettingsFeatureProviderImplTest.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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.os.Looper;
+
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class KeyboardSettingsFeatureProviderImplTest {
+
+ private Context mContext;
+ private KeyboardSettingsFeatureProviderImpl mFeatureProvider;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mFeatureProvider = new KeyboardSettingsFeatureProviderImpl();
+ }
+
+ @Test
+ public void supportsFirmwareUpdate_defaultValue_returnsFalse() {
+ assertThat(mFeatureProvider.supportsFirmwareUpdate()).isFalse();
+ }
+
+ @Test
+ public void addFirmwareUpdateCategory_defaultValue_returnsFalse() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+ PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext);
+
+ assertThat(mFeatureProvider.addFirmwareUpdateCategory(mContext, screen)).isFalse();
+ }
+
+ @Test
+ public void getActionKeyIcon_defaultValue_returnsNull() {
+ assertThat(mFeatureProvider.getActionKeyIcon(mContext)).isNull();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 63dca7e..f063042 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -16,26 +16,32 @@
package com.android.settings.network;
+import static com.android.settings.network.SubscriptionUtil.KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME;
+import static com.android.settings.network.SubscriptionUtil.SUB_ID;
+
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
-import com.android.settings.R;
-
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.settings.R;
+
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@@ -445,6 +451,35 @@
}
@Test
+ public void getUniqueDisplayName_hasRecord_useRecordBeTheResult() {
+ final SubscriptionInfo info1 = mock(SubscriptionInfo.class);
+ final SubscriptionInfo info2 = mock(SubscriptionInfo.class);
+ when(info1.getSubscriptionId()).thenReturn(SUBID_1);
+ when(info2.getSubscriptionId()).thenReturn(SUBID_2);
+ when(info1.getDisplayName()).thenReturn(CARRIER_1);
+ when(info2.getDisplayName()).thenReturn(CARRIER_1);
+ when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(
+ Arrays.asList(info1, info2));
+
+ SharedPreferences sp = mock(SharedPreferences.class);
+ when(mContext.getSharedPreferences(
+ KEY_UNIQUE_SUBSCRIPTION_DISPLAYNAME, Context.MODE_PRIVATE)).thenReturn(sp);
+ when(sp.getString(eq(SUB_ID + SUBID_1), anyString())).thenReturn(CARRIER_1 + "6789");
+ when(sp.getString(eq(SUB_ID + SUBID_2), anyString())).thenReturn(CARRIER_1 + "4321");
+
+
+ final CharSequence nameOfSub1 =
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(info1, mContext);
+ final CharSequence nameOfSub2 =
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(info2, mContext);
+
+ assertThat(nameOfSub1).isNotNull();
+ assertThat(nameOfSub2).isNotNull();
+ assertEquals(CARRIER_1 + "6789", nameOfSub1.toString());
+ assertEquals(CARRIER_1 + "4321", nameOfSub2.toString());
+ }
+
+ @Test
public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
}
diff --git a/tests/unit/src/com/android/settings/password/SaveAndFinishWorkerTest.java b/tests/unit/src/com/android/settings/password/SaveAndFinishWorkerTest.java
new file mode 100644
index 0000000..88e3150
--- /dev/null
+++ b/tests/unit/src/com/android/settings/password/SaveAndFinishWorkerTest.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2023 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.password;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.VerifyCredentialResponse;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class SaveAndFinishWorkerTest {
+ @Test
+ public void testSetRequestWriteRepairModePassword_setLockCredentialFail() {
+ int userId = 0;
+ int flags = LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW;
+ var chosenCredential = LockscreenCredential.createPassword("1234");
+ var currentCredential = LockscreenCredential.createNone();
+ var worker = new SaveAndFinishWorker();
+ var lpu = mock(LockPatternUtils.class);
+
+ when(lpu.setLockCredential(chosenCredential, currentCredential, userId)).thenReturn(false);
+
+ worker.setRequestWriteRepairModePassword(true);
+ worker.prepare(lpu, chosenCredential, currentCredential, userId);
+ var result = worker.saveAndVerifyInBackground();
+
+ verify(lpu).setLockCredential(chosenCredential, currentCredential, userId);
+ verify(lpu, never()).verifyCredential(chosenCredential, userId, flags);
+ assertThat(result.first).isFalse();
+ }
+
+ @Test
+ public void testSetRequestWriteRepairModePassword_verifyCredentialFail() {
+ int userId = 0;
+ int flags = LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW;
+ var chosenCredential = LockscreenCredential.createPassword("1234");
+ var currentCredential = LockscreenCredential.createNone();
+ var worker = new SaveAndFinishWorker();
+ var lpu = mock(LockPatternUtils.class);
+ var response = VerifyCredentialResponse.fromError();
+
+ when(lpu.setLockCredential(chosenCredential, currentCredential, userId)).thenReturn(true);
+ when(lpu.verifyCredential(chosenCredential, userId, flags)).thenReturn(response);
+
+ worker.setRequestWriteRepairModePassword(true);
+ worker.prepare(lpu, chosenCredential, currentCredential, userId);
+ var result = worker.saveAndVerifyInBackground();
+
+ verify(lpu).setLockCredential(chosenCredential, currentCredential, userId);
+ verify(lpu).verifyCredential(chosenCredential, userId, flags);
+ assertThat(result.first).isTrue();
+ assertThat(result.second.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_WROTE_REPAIR_MODE_CREDENTIAL, true))
+ .isFalse();
+ }
+
+ @Test
+ public void testSetRequestWriteRepairModePassword_verifyCredentialSucceed() {
+ int userId = 0;
+ int flags = LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW;
+ var chosenCredential = LockscreenCredential.createPassword("1234");
+ var currentCredential = LockscreenCredential.createNone();
+ var worker = new SaveAndFinishWorker();
+ var lpu = mock(LockPatternUtils.class);
+ var response = new VerifyCredentialResponse.Builder().build();
+
+ when(lpu.setLockCredential(chosenCredential, currentCredential, userId)).thenReturn(true);
+ when(lpu.verifyCredential(chosenCredential, userId, flags)).thenReturn(response);
+
+ worker.setRequestWriteRepairModePassword(true);
+ worker.prepare(lpu, chosenCredential, currentCredential, userId);
+ var result = worker.saveAndVerifyInBackground();
+
+ verify(lpu).setLockCredential(chosenCredential, currentCredential, userId);
+ verify(lpu).verifyCredential(chosenCredential, userId, flags);
+ assertThat(result.first).isTrue();
+ assertThat(result.second.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_WROTE_REPAIR_MODE_CREDENTIAL, false))
+ .isTrue();
+ }
+
+ @Test
+ public void testSetRequestWriteRepairModePassword_verifyCredentialSucceed_noGkPwHandle() {
+ int userId = 0;
+ int flags = LockPatternUtils.VERIFY_FLAG_WRITE_REPAIR_MODE_PW
+ | LockPatternUtils.VERIFY_FLAG_REQUEST_GK_PW_HANDLE;
+ var chosenCredential = LockscreenCredential.createPassword("1234");
+ var currentCredential = LockscreenCredential.createNone();
+ var worker = new SaveAndFinishWorker();
+ var lpu = mock(LockPatternUtils.class);
+ var response = new VerifyCredentialResponse.Builder().build();
+
+ when(lpu.setLockCredential(chosenCredential, currentCredential, userId)).thenReturn(true);
+ when(lpu.verifyCredential(chosenCredential, userId, flags)).thenReturn(response);
+
+ worker.setRequestWriteRepairModePassword(true);
+ worker.setRequestGatekeeperPasswordHandle(true);
+ worker.prepare(lpu, chosenCredential, currentCredential, userId);
+ var result = worker.saveAndVerifyInBackground();
+
+ verify(lpu).setLockCredential(chosenCredential, currentCredential, userId);
+ verify(lpu).verifyCredential(chosenCredential, userId, flags);
+ assertThat(result.first).isTrue();
+ assertThat(result.second.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_WROTE_REPAIR_MODE_CREDENTIAL, false))
+ .isTrue();
+ assertThat(result.second.getLongExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_GK_PW_HANDLE, -1))
+ .isEqualTo(-1);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index 697217b..49ce2cc 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -27,6 +27,7 @@
import com.android.settings.biometrics.face.FaceFeatureProvider;
import com.android.settings.biometrics2.factory.BiometricsRepositoryProvider;
import com.android.settings.bluetooth.BluetoothFeatureProvider;
+import com.android.settings.connecteddevice.stylus.StylusFeatureProvider;
import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.deviceinfo.hardwareinfo.HardwareInfoFeatureProvider;
@@ -37,6 +38,7 @@
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.homepage.contextualcards.ContextualCardFeatureProvider;
+import com.android.settings.inputmethod.KeyboardSettingsFeatureProvider;
import com.android.settings.localepicker.LocaleFeatureProvider;
import com.android.settings.overlay.DockUpdaterFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
@@ -90,6 +92,8 @@
public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
public WifiFeatureProvider mWifiFeatureProvider;
+ public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider;
+ public StylusFeatureProvider mStylusFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -133,6 +137,8 @@
mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
mWifiFeatureProvider = mock(WifiFeatureProvider.class);
+ mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class);
+ mStylusFeatureProvider = mock(StylusFeatureProvider.class);
}
@Override
@@ -156,7 +162,7 @@
}
@Override
- public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(Context context) {
+ public BatterySettingsFeatureProvider getBatterySettingsFeatureProvider() {
return batterySettingsFeatureProvider;
}
@@ -289,4 +295,14 @@
public WifiFeatureProvider getWifiFeatureProvider() {
return mWifiFeatureProvider;
}
+
+ @Override
+ public KeyboardSettingsFeatureProvider getKeyboardSettingsFeatureProvider() {
+ return mKeyboardSettingsFeatureProvider;
+ }
+
+ @Override
+ public StylusFeatureProvider getStylusFeatureProvider() {
+ return mStylusFeatureProvider;
+ }
}