Merge "Add textAlignment for preference_widget_summary" into oc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index da88f76..781e816 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -902,23 +902,13 @@
android:icon="@drawable/ic_settings_night_display"
android:taskAffinity="">
<intent-filter android:priority="1">
- <action android:name="android.intent.action.MAIN" />
- <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
- </intent-filter>
- <intent-filter android:priority="1">
<action android:name="android.settings.NIGHT_DISPLAY_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.display.NightDisplaySettings" />
- <meta-data android:name="com.android.settings.dismiss"
- android:value="30" />
- <meta-data android:name="com.android.settings.title"
- android:resource="@string/night_display_suggestion_title" />
- <meta-data android:name="com.android.settings.summary"
- android:resource="@string/night_display_suggestion_summary" />
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
</activity>
<activity android:name="Settings$DeviceInfoSettingsActivity"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index f8c9c51..f102ed2 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Ontleding sedert battery laas volgelaai is"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Laas volgelaai"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Oorblywende batterytyd is benaderd en kan op grond van gebruik verander"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Terwyl program gebruik word"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"In die agtergrond"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batterygebruik"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> van totale programgebruik (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Foonberging"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Gebruik van <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"vol"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Maak program skoon"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 58be673..6101494 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"መጨረሻ ላይ ሙሉ ኃይል ከነበረበት ጊዜ ጀምሮ ያለው ትንታኔ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ሙሉ ኃይል የነበረበት መጨረሻ ጊዜ"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ቀሪ የባትሪ አጠቃቀም ግምታዊ ሲሆን በአጠቃቀም መሠረት ሊቀየር ይችላል"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"መተግበሪያውን እየተጠቀሙ ሳለ"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"በጀርባ ውስጥ ሳለ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"የባትሪ አጠቃቀም"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"ከጠቅላላው የመተግበሪያ አጠቃቀም <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g> ሚአሰ)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"የስልክ ማከማቻ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"ከ<xliff:g id="TOTAL">%1$s</xliff:g> ጥቅም ላይ የዋለው"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ሙሉ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"መተግበሪያን አጽዳ"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 162cc85..f3a12d2 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -2093,7 +2093,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"تحليل الاستخدام منذ آخر شحن كامل"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"آخر شحن كامل"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"الوقت المتبقي حتى انتهاء البطارية تقريبي ويمكن أن يتغير حسب الاستخدام"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"أثناء استخدام التطبيق"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"أثناء الاستخدام في الخلفية"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"استخدام البطارية"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> من إجمالي استخدام التطبيق (<xliff:g id="POWER">%2$d</xliff:g> ملي أمبير في الساعة)"</string>
@@ -3776,7 +3777,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"سعة تخزين الهاتف"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"سعة تخزين مستخدمة من <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ممتلئة"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"مسح التطبيق"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 1e7f015..04ec74e 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Sonuncu tam doldurmadan sonrakı istifadə problemi"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Sonuncu tam doldurma"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Qalan batareya vaxtı təxminidir və istifadəyə əsasən dəyişə bilər"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Tətbiq istifadə edərkən"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Arxa fonda olarkən"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batareya istifadəsi"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Ümumi tətbiq istifadəsindən <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefon yaddaşı"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> istifadə olunub"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"tam"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Tətbiqi silin"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index ca80237..e9c5d5a 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Разбивка след последното пълно зареждане"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Последно пълно зареждане"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Данните за оставащия живот на батерията са приблизителни и могат да се променят въз основа на използването"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"При използване на приложението"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"При работа на заден план"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Използване на батерията"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> от общия капацитет, използван от приложенията (<xliff:g id="POWER">%2$d</xliff:g> мАч)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Хранилище на телефона"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Използвано от <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"пълно"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Изчистване на приложението"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index f5b8f22..d322f66 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"শেষবার সম্পূর্ণ চার্জ দেওয়ার পর থেকে ব্যাটারি ব্যবহারের বিবরণ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"শেষবার সম্পূর্ণ চার্জ দেওয়ার সময়"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ব্যাটারি ব্যবহারের অবশিষ্ট সময়টি হল আনুমানিক এবং ব্যবহারের উপর ভিত্তি করে সেটি বদলে যেতে পারে"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"অ্যাপ ব্যবহার করার সময়"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"যখন এটি পটভূমিতে"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ব্যাটারির ব্যবহার"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"মোট অ্যাপ ব্যবহার এর <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ফোনের সঞ্চয়স্থান"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> এর মধ্যে ব্যবহার হয়েছে"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"পূর্ণ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"অ্যাপের ডেটা সাফ করুন"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 74fc579..2ba1b65 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Desglossament des de l\'última càrrega completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última càrrega completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"El temps restant de la bateria és aproximat i pot variar en funció de l\'ús"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Quan s\'utilitza l\'aplicació"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Quan està en segon pla"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Ús de la bateria"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> de l\'ús total de l\'aplicació (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -2418,7 +2419,7 @@
<string name="vpn_no_vpns_added" msgid="5002741367858707244">"No s\'ha afegit cap VPN"</string>
<string name="vpn_always_on_summary" msgid="2821344524094363617">"Mantén-te connectat a la VPN sempre"</string>
<string name="vpn_always_on_summary_not_supported" msgid="592304911378771510">"No és compatible amb aquesta aplicació"</string>
- <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"Sempre activa"</string>
+ <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"Sempre activada"</string>
<string name="vpn_require_connection" msgid="8388183166574269666">"Bloqueja les connexions sense VPN"</string>
<string name="vpn_require_connection_title" msgid="159053539340576331">"La connexió VPN ha de ser obligatòria?"</string>
<string name="vpn_lockdown_summary" msgid="2200032066376720339">"Selecciona un perfil de VPN per estar-hi sempre connectat. El trànsit de la xarxa només es permetrà quan estiguis connectat a aquesta VPN."</string>
@@ -2950,7 +2951,7 @@
<string name="switch_on_text" msgid="1124106706920572386">"Activat"</string>
<string name="switch_off_text" msgid="1139356348100829659">"Desactivat"</string>
<string name="screen_pinning_title" msgid="2292573232264116542">"Fixació de pantalla"</string>
- <string name="screen_pinning_description" msgid="3360904523688769289">"Si aquesta opció està activada, pots fixar la pantalla per mantenir-la visible fins que desactivis aquesta opció.\n\nPer fer-ho:\n\n1. Assegura\'t que l\'opció per fixar la pantalla estigui activada.\n\n2. Obre la pantalla que vulguis fixar.\n\n3. Toca Visió general.\n\n4. Fes lliscar el dit cap amunt i toca la icona de fixació."</string>
+ <string name="screen_pinning_description" msgid="3360904523688769289">"Si aquesta opció està activada, pots fixar la pantalla per mantenir-la visible fins que desactivis aquesta opció.\n\nPer fer-ho:\n\n1. Assegura\'t que l\'opció per fixar la pantalla estigui activada.\n\n2. Obre la pantalla que vulguis fixar.\n\n3. Toca Aplicacions recents.\n\n4. Fes lliscar el dit cap amunt i toca la icona de fixació."</string>
<string name="screen_pinning_unlock_pattern" msgid="8282268570060313339">"Sol·licita el patró de desbloqueig per anul·lar"</string>
<string name="screen_pinning_unlock_pin" msgid="8757588350454795286">"Demana el codi PIN per anul·lar"</string>
<string name="screen_pinning_unlock_password" msgid="2514079566873826434">"Demana la contrasenya per anul·lar"</string>
@@ -3116,7 +3117,7 @@
<string name="usb_use_charging_only" msgid="2180443097365214467">"carregar aquest dispositiu"</string>
<string name="usb_use_charging_only_desc" msgid="3066256793008540627">"Carrega només aquest dispositiu"</string>
<string name="usb_use_power_only" msgid="6426550616883919530">"subministrar corrent"</string>
- <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Carrega el dispositiu connectat. Només funciona amb dispositius que són compatibles amb la càrrega USB."</string>
+ <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Carrega el dispositiu connectat. Només funciona amb dispositius que són compatibles amb la càrrega per USB."</string>
<string name="usb_use_file_transfers" msgid="7409600791007250137">"transferir fitxers"</string>
<string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Transfereix fitxers a un altre dispositiu"</string>
<string name="usb_use_photo_transfers" msgid="7794775645350330454">"Transferir fotos (PTP)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Emmagatzematge del telèfon"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Utilitzat de: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ple"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Esborra l\'aplicació"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 03aacbe..5a43ae4 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Přehled od posledního úplného nabití"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Poslední úplné nabití"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Zbývající doba výdrže baterie je přibližná a může se změnit podle způsobu používání"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Při používání aplikace"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Na pozadí"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Využití baterie"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> z celkového využití aplikacemi (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Úložiště telefonu"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Využito z <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"plné"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Vymazat aplikaci"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 12d1e5d..7ce0cdd 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Oversigt siden sidste fulde opladning"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Sidste fulde opladning"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Den resterende batteritid er omtrentlig og kan ændre sig afhængigt af forbrug"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Når appen er i brug"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Når den er i baggrunden"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batteriforbrug"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> af det samlede appforbrug (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefonens lager"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Anvendt lagerplads ud af <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"fuld"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Ryd appen"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3b4f730..6706064 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Aufschlüsselung des Verbrauchs seit letzter vollständiger Aufladung"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Letzte vollständige Aufladung"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Die verbleibende Akkulaufzeit ist eine Schätzung und kann sich je nach Nutzung ändern"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Beim Verwenden der App"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Im Hintergrund"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akkunutzung"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> der gesamten App-Nutzung (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Smartphone-Speicher"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Von <xliff:g id="TOTAL">%1$s</xliff:g> verwendet"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"voll"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"App löschen"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index b50266f..0dd134f 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Ανάλυση από την τελευταία πλήρη φόρτιση"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Τελευταία πλήρης φόρτιση"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Ο χρόνος της μπαταρίας που απομένει υπολογίζεται κατά προσέγγιση και μπορεί να αλλάξει ανάλογα με τη χρήση"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Κατά τη χρήση της εφαρμογής"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Κατά την εκτέλεση στο παρασκήνιο"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Χρήση της μπαταρίας"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> της συνολικής χρήσης της εφαρμογής (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Αποθηκ. χώρος τηλεφώνου"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Σε χρήση από τα <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"πλήρης"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Διαγραφή δεδομένων εφαρμογής"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 4ffe677..78b0197 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Breakdown since last full charge"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Last full charge"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Remaining battery time is approximate and can change based on usage"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"While using app"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"While in background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Battery usage"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> of total app usage (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Phone storage"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Used of <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"full"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Clear app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 4ffe677..78b0197 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Breakdown since last full charge"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Last full charge"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Remaining battery time is approximate and can change based on usage"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"While using app"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"While in background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Battery usage"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> of total app usage (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Phone storage"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Used of <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"full"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Clear app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 4ffe677..78b0197 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Breakdown since last full charge"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Last full charge"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Remaining battery time is approximate and can change based on usage"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"While using app"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"While in background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Battery usage"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> of total app usage (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Phone storage"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Used of <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"full"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Clear app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 84157a6..bd3183c 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Desglose desde la última carga completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última carga completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"El tiempo restante de batería es aproximado y puede cambiar en función del uso"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Mientras la app está en uso"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Mientras se ejecuta en segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Uso de la batería"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> del consumo total de las apps (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3570,7 +3571,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Almacenamiento del teléf."</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"En uso de <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"lleno"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Borrar app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 1c9d489..f3c3cbe 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Desglose desde la última carga completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última carga completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"El tiempo de batería restante es aproximado y puede variar en función del uso"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"En uso"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"En segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Uso de la batería"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> del total del uso de las aplicaciones (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Almacenamiento teléfono"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Utilizado de <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"completo"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Borrar aplicación"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index b367166..ce59e9b 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Üksikasjalik teave alates viimasest täislaadimisest"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Viimane täislaadimine"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Aku järelejäänud tööaeg on ligikaudne ja võib olenevalt kasutusest muutuda."</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Rakenduse kasutamise ajal"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Taustal"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akukasutus"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> kõigi rakenduste akukasutusest (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefoni salvestusruum"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Kasutatud <xliff:g id="TOTAL">%1$s</xliff:g>-st"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"täis"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Tühjenda rakendus"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 3849cc0..180d436 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Guztiz kargatu zen azken aldiaz geroztik emandako erabilerari buruzko datuak"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Azkenekoz guztiz kargatu zenetik"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Gelditzen den bateriari buruzko informazioa gutxi gorabeherakoa da eta aldatu egin liteke erabileraren arabera"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Aplikazioa erabili bitartean"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Atzeko planoan dagoen bitartean"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Bateriaren erabilera"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Aplikazio guztien erabileraren <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefonoko memoria"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Memoria osotik (<xliff:g id="TOTAL">%1$s</xliff:g>) erabilitakoa"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"beteta"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Garbitu aplikazioa"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 8a460b5..ffb04b7 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"تفکیک مصرف شارژ از زمان آخرین شارژ کامل"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"آخرین شارژ کامل"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"زمان باقیمانده از شارژ باتری تقریبی است و بسته به استفاده میتواند تغییر کند"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"درحالت استفاده از برنامه"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"درحالت پسزمینه"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"مصرف باتری"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> از میزان کل مصرف برنامه (<xliff:g id="POWER">%2$d</xliff:g> میلیآمپرساعت)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"حافظه تلفن"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"مصرفشده از <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"کامل"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"پاک کردن برنامه"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3d68908..178d264 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Erittely virrankulutuksesta edellisen täyden latauksen jälkeen"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Edellisen täyden latauksen jälkeen"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Akun jäljellä oleva varaus on arvio ja voi muuttua käytön perusteella."</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Sovelluksen käytön aikana"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Taustalla"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akun käyttö"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> kaikesta sovellusten virrankulutuksesta (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Puhelimen tallennustila"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Tallennustilasta (<xliff:g id="TOTAL">%1$s</xliff:g>) käytössä"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"täysi"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Tyhjennä sovelluksen tiedot"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index ab269f6..6c1aa5c 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Détails de l\'utilisation depuis la dernière charge complète"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Dernière charge complète"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"L\'autonomie restante de la pile est approximative et peut changer en fonction de l\'utilisation"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Lorsque l\'application est utilisée"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Lorsqu\'elle fonctionne en arrière-plan"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Utilisation de la pile"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> de l\'utilisation totale de l\'application (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Stockage du téléphone"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Utilisé(s) sur <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"utilisé"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Effacer les données de l\'application"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 43d12be..b53d974 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Répartition depuis la dernière charge complète"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Dernière charge complète"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"La durée d\'autonomie restante est approximative et peut changer en fonction de l\'utilisation"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Lorsque l\'application est utilisée"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Lorsque l\'application s\'exécute en arrière-plan"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Utilisation de la batterie"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> de l\'utilisation totale par les applications (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Espace stockage téléphone"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Utilisés sur <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"Plein"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Effacer les données de l\'application"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 0ef276b..421bc98 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Análise detallada desde a última carga completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última carga completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"O tempo restante da batería é aproximado e pode cambiar en función do uso"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Mentres se utiliza a aplicación"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Mentres está en segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Uso da batería"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> do uso total da aplicación (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -2418,7 +2419,7 @@
<string name="vpn_no_vpns_added" msgid="5002741367858707244">"Non se engadiron VPN"</string>
<string name="vpn_always_on_summary" msgid="2821344524094363617">"Permanece conectado á VPN sempre"</string>
<string name="vpn_always_on_summary_not_supported" msgid="592304911378771510">"Opción non admitida nesta aplicación"</string>
- <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"Opción Sempre activada habilitada"</string>
+ <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"VPN sempre activada: habilitada"</string>
<string name="vpn_require_connection" msgid="8388183166574269666">"Bloquear conexións sen VPN"</string>
<string name="vpn_require_connection_title" msgid="159053539340576331">"Requirir conexión VPN?"</string>
<string name="vpn_lockdown_summary" msgid="2200032066376720339">"Selecciona un perfil de VPN ao que permanecer sempre conectado. Só se permitirá tráfico de rede cando esteas conectado a esta VPN."</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Almacenamento do teléfono"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"En uso de: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"todo"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Borrar aplicación"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 6c2af4e..3a77c6b 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"છેલ્લા સંપૂર્ણ ચાર્જ પછીનું વિશ્લેષણ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"છેલ્લા સંપૂર્ણ ચાર્જનો સમય"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"બાકી બૅટરી સમય અનુમાનિત છે અને વપરાશના આધારે બદલાય શકે છે"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ઍપ્લિકેશનનો ઉપયોગ કરતા હોય ત્યારે"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"પૃષ્ઠભૂમિમાં હોય ત્યારે"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"બૅટરી વપરાશ"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> કુલ ઍપ્લિકેશન વપરાશ (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ફોન સ્ટૉરેજ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g>માંથી ઉપયોગમાં લેવાયો"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"પૂર્ણ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ઍપ્લિકેશન સાફ કરો"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 728edaa..b2ed5e5 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -333,7 +333,7 @@
<string name="encryption_and_credential_settings_title" msgid="6514904533438791561">"एन्क्रिप्शन और क्रेडेंशियल"</string>
<string name="encryption_and_credential_settings_summary" msgid="8721883002237981248">"फ़ोन एन्क्रिप्ट किया गया है"</string>
<string name="lockscreen_settings_title" msgid="3922976395527087455">"लॉक स्क्रीन प्राथमिकताएं"</string>
- <string name="lockscreen_settings_summary" msgid="8788089950462346171">"सभी नोटिफिकेशन सामग्री दिखाएं"</string>
+ <string name="lockscreen_settings_summary" msgid="8788089950462346171">"सभी नोटिफ़िकेशन सामग्री दिखाएं"</string>
<string name="security_settings_summary" msgid="967393342537986570">"मेरा स्थान, स्क्रीन अनलॉक, सिम कार्ड लॉक, प्रमाणिकता मेमोरी लॉक सेट करें"</string>
<string name="cdma_security_settings_summary" msgid="6068799952798901542">"मेरा स्थान, स्क्रीन अनलॉक, प्रमाणिकता मेमोरी लॉक सेट करें"</string>
<string name="security_passwords_title" msgid="2881269890053568809">"निजता"</string>
@@ -451,7 +451,7 @@
<string name="setup_lock_settings_picker_message" product="default" msgid="3692856437543730446">"डिवाइस सुरक्षा सुविधाओं को सक्रिय करके अन्य लोगों को आपकी अनुमति के बिना इस फ़ोन का उपयोग करने से रोकें. वह स्क्रीन लॉक चुनें जिसका आप उपयोग करना चाहते हैं."</string>
<string name="lock_settings_picker_fingerprint_message" msgid="4755230324778371292">"अपनी बैकअप स्क्रीन लॉक विधि चुनें"</string>
<string name="unlock_set_unlock_launch_picker_title" msgid="2084576942666016993">"स्क्रीन लॉक"</string>
- <string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5967714169972542586">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / निष्क्रिय होने के तत्काल बाद"</string>
+ <string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5967714169972542586">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / निष्क्रिय होने के तुरंत बाद"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="4696710373399258413">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> निष्क्रिय होने के बाद"</string>
<string name="unlock_set_unlock_launch_picker_title_profile" msgid="124176557311393483">"कार्य प्रोफ़ाइल लॉक"</string>
<string name="unlock_set_unlock_launch_picker_change_title" msgid="5045866882028324941">"लॉक स्क्रीन बदलें"</string>
@@ -690,7 +690,7 @@
<string name="wifi_notify_open_networks" msgid="76298880708051981">"खुले नेटवर्क का नोटिफ़िकेशन"</string>
<string name="wifi_notify_open_networks_summary" msgid="2761326999921366960">"बढ़िया इंटरनेट देने वाला सार्वजनिक नेटवर्क मिलने पर बताएं"</string>
<string name="wifi_wakeup" msgid="8815640989361538036">"वाई-फ़ाई अपने आप चालू करें"</string>
- <string name="wifi_wakeup_summary" msgid="2530814331062997163">"वाई-फ़ाई लगभग बढ़िया इंटरनेट देने वाले सहेजे गए नेटवर्क, जैसे कि आपके घर के इंटरनेट को अपने आप चालू कर देगा"</string>
+ <string name="wifi_wakeup_summary" msgid="2530814331062997163">"वाई-फ़ाई बढ़िया इंटरनेट देने वाले सहेजे गए नेटवर्क के पास होने पर अपने आप चालू हो जाएगा, जैसे कि आपके घर का नेटवर्क"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"खराब कनेक्शन से बचें"</string>
<string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"जब तक वाई-फ़ाई नेटवर्क में अच्छा इंटरनेट कनेक्शन न हो, तब तक उसका उपयोग न करें"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"उन्हीं नेटवर्क का उपयोग करें जिनमें अच्छा इंटरनेट कनेक्शन है"</string>
@@ -963,11 +963,11 @@
<string name="auto_brightness_title" msgid="6341042882350279391">"स्क्रीन की रोशनी ठीक करें"</string>
<string name="auto_brightness_summary" msgid="1799041158760605375">"अपने हिसाब से स्क्रीन की रोशनी ठीक करें"</string>
<string name="auto_brightness_summary_off" msgid="2802336459335410626">"बंद"</string>
- <string name="auto_brightness_summary_very_low" msgid="6483976609035853764">"पसंदीदा स्क्रीन की रोशनी बहुत कम है"</string>
- <string name="auto_brightness_summary_low" msgid="5609877905833960427">"पसंदीदा स्क्रीन की रोशनी कम है"</string>
- <string name="auto_brightness_summary_default" msgid="7225666614394726845">"पसंदीदा स्क्रीन की रोशनी डिफ़ॉल्ट है"</string>
- <string name="auto_brightness_summary_high" msgid="7172304165631136027">"पसंदीदा स्क्रीन की रोशनी अधिक है"</string>
- <string name="auto_brightness_summary_very_high" msgid="979277812582279078">"पसंदीदा स्क्रीन की रोशनी बहुत अधिक है"</string>
+ <string name="auto_brightness_summary_very_low" msgid="6483976609035853764">"पसंदीदा स्क्रीन रोशनी का लेवल बहुत कम है"</string>
+ <string name="auto_brightness_summary_low" msgid="5609877905833960427">"पसंदीदा स्क्रीन रोशनी का लेवल कम है"</string>
+ <string name="auto_brightness_summary_default" msgid="7225666614394726845">"पसंदीदा स्क्रीन रोशनी का लेवल डिफ़ॉल्ट है"</string>
+ <string name="auto_brightness_summary_high" msgid="7172304165631136027">"पसंदीदा स्क्रीन रोशनी का लेवल अधिक है"</string>
+ <string name="auto_brightness_summary_very_high" msgid="979277812582279078">"पसंदीदा स्क्रीन रोशनी का लेवल बहुत अधिक है"</string>
<string name="auto_brightness_off_title" msgid="2996864829946190795">"बंद"</string>
<string name="auto_brightness_very_low_title" msgid="8252988638614126320">"बहुत कम"</string>
<string name="auto_brightness_low_title" msgid="1632186441514863377">"कम"</string>
@@ -1774,8 +1774,8 @@
<string name="accessibility_preference_magnification_summary" msgid="5867883657521404509">"स्क्रीन पर ज़ूम इन करें"</string>
<string name="accessibility_screen_magnification_short_summary" msgid="3411979839172752057">"ज़ूम करने के लिए 3 बार टैप करें"</string>
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="3693116360267980492">"ज़ूम करने के लिए किसी बटन पर टैप करें"</string>
- <string name="accessibility_screen_magnification_summary" msgid="5258868553337478505"><b>"ज़ूम करने के लिए"</b>", स्क्रीन पर 3 बार तेज़ी से टैप करें.\n"<ul><li>"स्क्रॉल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"</li>\n<li>"ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"</li></ul>\n\n<b>"थोड़ी देर तक ज़ूम करने के लिए"</b>", स्क्रीन पर 3 बार तेज़ी से टैप करें और तीसरे टैप पर अपनी अंगुली दबाए रखें.\n"<ul><li>"स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"</li>\n<li>"ज़ूम आउट करने के लिए अपनी अंगुली उठा लें"</li></ul>\n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."</string>
- <string name="accessibility_screen_magnification_navbar_summary" msgid="1996584694050087161">"आवर्धन बंद किए जाने पर, तुरंत आवर्धित करने के लिए स्क्रीन के नीचे दिए गए एक्सेस-योग्यता बटन का उपयोग करें.\n\n"<b>"ज़ूम करने के लिए"</b>", एक्सेस-योग्यता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"<ul><li>"स्क्रॉल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"</li>\n<li>"ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"</li></ul>\n\n<b>"थोड़े समय तक ज़ूम करने के लिए"</b>", एक्सेस-योग्यता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी स्पर्श करके रखें.\n"<ul><li>"स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"</li>\n<li>"ज़ूम आउट करने के लिए अंगुली उठा लें"</li></ul>\n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."</string>
+ <string name="accessibility_screen_magnification_summary" msgid="5258868553337478505"><b>"ज़ूम करने के लिए"</b>", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें.\n"<ul><li>"स्क्रॉल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"</li>\n<li>"ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"</li></ul>\n\n<b>"थोड़ी देर तक ज़ूम करने के लिए"</b>", स्क्रीन पर 3 बार जल्दी-जल्दी टैप करें और तीसरे टैप पर अपनी अंगुली दबाए रखें.\n"<ul><li>"स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"</li>\n<li>"ज़ूम आउट करने के लिए अपनी अंगुली उठा लें"</li></ul>\n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."</string>
+ <string name="accessibility_screen_magnification_navbar_summary" msgid="1996584694050087161">"आवर्धन चालू किए जाने पर, तुरंत आवर्धित करने के लिए स्क्रीन के नीचे दिए गए एक्सेस-योग्यता बटन का उपयोग करें.\n\n"<b>"ज़ूम करने के लिए"</b>", एक्सेस-योग्यता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी टैप करें.\n"<ul><li>"स्क्रॉल करने के लिए 2 या उससे ज़्यादा अंगुलियां खींचें"</li>\n<li>"ज़ूम एडजस्ट करने के लिए 2 या उससे ज़्यादा अंगुलियों से पिंच करें"</li></ul>\n\n<b>"थोड़े समय तक ज़ूम करने के लिए"</b>", एक्सेस-योग्यता बटन पर टैप करें, फिर स्क्रीन पर कहीं भी स्पर्श करके रखें.\n"<ul><li>"स्क्रीन पर यहां-वहां ले जाने के लिए खींचें"</li>\n<li>"ज़ूम आउट करने के लिए अंगुली उठा लें"</li></ul>\n\n"आप कीबोर्ड या नेविगेशन बार पर ज़ूम इन नहीं कर सकते हैं."</string>
<string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="70533120652758190">"एक्सेस-योग्यता बटन <xliff:g id="SERVICE">%1$s</xliff:g> पर सेट है. आवर्धन का उपयोग करने के लिए, एक्सेस-योग्यता बटन को स्पर्श करके रखें, फिर आवर्धन चुनें."</string>
<string name="accessibility_global_gesture_preference_title" msgid="6752037184140789970">"सरल उपयोग शॉर्टकट"</string>
<string name="accessibility_shortcut_service_title" msgid="4779360749706905640">"शॉर्टकट सेवा"</string>
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"पिछली बार पूरी तरह चार्ज होने के बाद से अब तक का विश्लेषण"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"पिछली बार पूरी तरह चार्ज होने का समय"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"बचा हुआ बैटरी समय अनुमानित है और वह उपयोग के आधार पर बदल सकता है"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ऐप्लिकेशन का उपयोग करते समय"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"बैकग्राउंड में होने पर"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"बैटरी उपयोग"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"कुल ऐप्लिकेशन उपयोग <xliff:g id="PERCENT">%1$s</xliff:g> का (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -2385,9 +2386,9 @@
<string name="vpn_no_ca_cert" msgid="8776029412793353361">"(सर्वर सत्यापित न करें)"</string>
<string name="vpn_no_server_cert" msgid="2167487440231913330">"(सर्वर से प्राप्त)"</string>
<string name="vpn_always_on_invalid_reason_type" msgid="7574518311224455825">"यह VPN प्रकार हमेशा कनेक्ट नहीं रह सकता"</string>
- <string name="vpn_always_on_invalid_reason_server" msgid="477304620899799383">"हमेशा-चालू VPN सिर्फ़ सांख्यिक सर्वर पतों का समर्थन करता है"</string>
+ <string name="vpn_always_on_invalid_reason_server" msgid="477304620899799383">"हमेशा-चालू VPN सिर्फ़ संख्या वाले सर्वर पतों का समर्थन करता है"</string>
<string name="vpn_always_on_invalid_reason_no_dns" msgid="2226648961940273294">"हमेशा-चालू VPN के लिए एक DNS सर्वर तय किया जाना चाहिए"</string>
- <string name="vpn_always_on_invalid_reason_dns" msgid="3551394495620249972">"DNS सर्वर के पते हमेशा-चालू VPN के लिए सांख्यिक होने चाहिए"</string>
+ <string name="vpn_always_on_invalid_reason_dns" msgid="3551394495620249972">"DNS सर्वर के पते हमेशा-चालू VPN के लिए संख्या रूप में होने चाहिए"</string>
<string name="vpn_always_on_invalid_reason_other" msgid="5959352052515258208">"जो जानकारी डाली गई है वह हमेशा-चालू VPN का समर्थन नहीं करती"</string>
<string name="vpn_cancel" msgid="1979937976123659332">"अभी नहीं"</string>
<string name="vpn_done" msgid="8678655203910995914">"ख़ारिज करें"</string>
@@ -2795,10 +2796,10 @@
<string name="notification_importance_low" msgid="8881468429453766553">"कोई ध्वनि नहीं"</string>
<string name="notification_importance_default" msgid="5958338024601957516">"ध्वनि करें"</string>
<string name="notification_importance_high" msgid="2082429479238228527">"ध्वनि करें और स्क्रीन पर दिखाएं"</string>
- <string name="notification_importance_min_summary" msgid="8233873580287975662">"कम: कोई ध्वनि या विजुअल रुकावट नहीं"</string>
+ <string name="notification_importance_min_summary" msgid="8233873580287975662">"कम: कोई ध्वनि या विज़ुअल रुकावट नहीं"</string>
<string name="notification_importance_low_summary" msgid="1296192045494524565">"मध्यम: कोई ध्वनि नहीं"</string>
<string name="notification_importance_default_summary" msgid="5730277944596984792">"उच्च: ध्वनि करें"</string>
- <string name="notification_importance_high_summary" msgid="3248683220940159642">"तत्काल: ध्वनि करें और स्क्रीन पर पॉप करें"</string>
+ <string name="notification_importance_high_summary" msgid="3248683220940159642">"तुरंत: ध्वनि करें और स्क्रीन पर पॉप करें"</string>
<string name="allow_sound" msgid="6585849855452076626">"ध्वनि की अनुमति दें"</string>
<string name="show_silently_summary" msgid="7616604629123146565">"वर्तमान स्क्रीन पर इन नोटिफिकेशन के लिए ना तो ध्वनि करें, ना कंपन करें और ना ही झलक दिखाएं."</string>
<string name="default_notification_assistant" msgid="7631945224761430146">"नोटिफिकेशन सहायक"</string>
@@ -2836,7 +2837,7 @@
<string name="notification_channels_other" msgid="5645317113885788226">"अन्य"</string>
<string name="no_channels" msgid="3077375508177744586">"इस ऐप्लिकेशन ने कोई भी नोटिफ़िकेशन पोस्ट नहीं किया है"</string>
<string name="app_settings_link" msgid="8894946007543660906">"ऐप्लिकेशन में मौजूद दूसरी सेटिंग"</string>
- <string name="app_notification_listing_summary_zero" msgid="6482582965081108108">"सभी ऐप्लिकेशन के लिए बंद किया गया"</string>
+ <string name="app_notification_listing_summary_zero" msgid="6482582965081108108">"सभी ऐप्लिकेशन के लिए चालू किया गया"</string>
<plurals name="app_notification_listing_summary_others" formatted="false" msgid="5668835155965827890">
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ऐप्लिकेशन के लिए बंद किया गया</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ऐप्लिकेशन के लिए बंद किया गया</item>
@@ -3033,7 +3034,7 @@
<string name="filter_work_apps" msgid="24519936790795574">"कार्यस्थल"</string>
<string name="filter_notif_all_apps" msgid="2299049859443680242">"ऐप्लिकेशन: सभी"</string>
<string name="filter_notif_blocked_apps" msgid="3300375727887991342">"ऐप्लिकेशन: बंद हैं"</string>
- <string name="filter_notif_urgent_channels" msgid="3972473613117159653">"श्रेणियां: अत्यंत महत्व"</string>
+ <string name="filter_notif_urgent_channels" msgid="3972473613117159653">"श्रेणियां: अत्यंत महत्वपूर्ण"</string>
<string name="filter_notif_low_channels" msgid="4128487387390004604">"श्रेणियां: कम महत्व के"</string>
<string name="filter_notif_blocked_channels" msgid="5880190882221644289">"श्रेणियां: बंद हैं"</string>
<string name="filter_notif_dnd_channels" msgid="1817930848881696728">"श्रेणियां: परेशान न करें ओवरराइड करती हैं"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"फ़ोन की जगह"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> में से उपयोग किया गया"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"अधिकतम"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ऐप्लिकेशन साफ़ करें"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 7eb5b77..e1e3fc2 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -2030,7 +2030,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Razrada od posljednjeg potpunog punjenja"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Posljednje potpuno punjenje"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Preostalo vrijeme trajanja baterije približno je i može se mijenjati ovisno o upotrebi"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Dok se aplikacija upotrebljava"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Dok radi u pozadini"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Potrošnja baterije"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> od ukupne potrošnje aplikacija (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3623,7 +3624,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Pohrana na telefonu"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Upotrijebljeno od <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"potpuna"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Izbriši podatke aplikacije"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index cd55d12..cb9a322 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Statisztikák az utolsó teljes feltöltés óta"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Utolsó teljes feltöltés"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"A fennmaradó akkumulátor-üzemidő becsült érték, a használattól függően módosulhat"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Alkalmazáshasználat közben"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Miközben a háttérben van"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akkumulátorhasználat"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"A teljes alkalmazáshasználat <xliff:g id="PERCENT">%1$s</xliff:g>-a (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3574,7 +3575,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefontárhely"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"A(z) <xliff:g id="TOTAL">%1$s</xliff:g> tárhelyből felhasznált mennyiség"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"teljes"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Alkalmazás törlése"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 53c911a..28d3819 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Բաշխումը վերջին լրիվ լիցքավորումից հետո"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Վերջին լրիվ լիցքավորումը"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Մարտկոցի օգտագործման մնացած ժամանակը մոտավոր է և օգտագործումից կախված կարող է փոխվել"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Հավելվածն օգտագործելիս"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Ֆոնում"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Մարտկոցի օգտագործում"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Հավելվածների ընդհանուր օգտագործման <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g> մԱժ)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Հեռախոսի հիշողություն"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Օգտագործված է <xliff:g id="TOTAL">%1$s</xliff:g>-ից"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"լցված"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Մաքրել հավելվածի տվյալները"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 52b9a1e..0482c50 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Info penggunaan sejak pengisian baterai terakhir hingga penuh"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Pengisian baterai penuh terakhir"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Sisa waktu penggunaan baterai merupakan hasil perkiraan dan dapat berubah berdasarkan penggunaan"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Saat menggunakan aplikasi"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Saat di background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Penggunaan baterai"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> dari total penggunaan aplikasi (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Penyimpanan ponsel"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Terpakai <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"penuh"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Hapus aplikasi"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 3546439..f6ed62d 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Greining frá síðustu fullu hleðslu"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Síðasta fulla hleðsla"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Eftirstandandi rafhlöðutími er áætlaður og gæti breyst út frá notkun"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Þegar forrit er notað"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Í bakgrunni"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Rafhlöðunotkun"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> af forritsnotkun í heild (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Geymslurými símans"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Notað af <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"fullt"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Hreinsa forrit"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index e1b6d3b..181628d 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Analisi dettagliata dall\'ultima ricarica completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Ultima ricarica completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"La durata rimanente della batteria è approssimativa e può variare in base all\'utilizzo"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Con app in uso"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"In background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Utilizzo batteria"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> dell\'utilizzo totale delle app (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -2418,7 +2419,7 @@
<string name="vpn_no_vpns_added" msgid="5002741367858707244">"Nessuna VPN aggiunta"</string>
<string name="vpn_always_on_summary" msgid="2821344524094363617">"Rimani sempre connesso alla VPN"</string>
<string name="vpn_always_on_summary_not_supported" msgid="592304911378771510">"Non supportata da questa app"</string>
- <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"Always-on attiva"</string>
+ <string name="vpn_always_on_summary_active" msgid="8800736191241875669">"VPN sempre attiva abilitata"</string>
<string name="vpn_require_connection" msgid="8388183166574269666">"Blocca connessioni senza VPN"</string>
<string name="vpn_require_connection_title" msgid="159053539340576331">"Connessione VPN obbligatoria?"</string>
<string name="vpn_lockdown_summary" msgid="2200032066376720339">"Seleziona un profilo VPN a cui rimanere sempre connesso. Il traffico di rete sarà consentito solo quando sei connesso a questa VPN."</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Memoria telefono"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Spazio utilizzato di <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"massima"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Cancella dati dall\'app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 618d077..d9f1a26 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"פירוט מאז הטעינה המלאה האחרונה"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"הטעינה המלאה האחרונה"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"זמן השימוש הנותר בסוללה הינו משוער ועשוי להשתנות על פי השימוש בפועל"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"בעת השימוש באפליקציה"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"בזמן שהיא ברקע"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"שימוש בסוללה"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> מתוך סה\"כ השימוש באפליקציה (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3676,7 +3677,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"אחסון בטלפון"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"בשימוש מתוך <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"מלא"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"נקה אפליקציה"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index eb2abf1..f1378ab 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"前回のフル充電からの内訳"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"前回のフル充電"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"電池の残り時間は概算値であり、使用状況によって変わります"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"アプリを使用中の場合"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"バックグラウンドの場合"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"電池使用量"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"アプリ使用量全体の <xliff:g id="PERCENT">%1$s</xliff:g>(<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3576,8 +3577,7 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"スマートフォン ストレージ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"/ <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for storage_percent_full (7052264724265314100) -->
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
<skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"アプリを削除"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index c21a956..1abd899 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"დეტალები ბოლო სრული დატენვიდან"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ბოლო სრული დატენვა"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ბატარეის მუშაობის დარჩენილი დრო მიახლოებითია და შეიძლება შეიცვალოს მოხმარების მიხედვით"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"აპის გამოყენებისას"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ფონურ რეჟიმში ყოფნისას"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ბატარეის მოხმარება"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"აპების სართო მოხმარების <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>მა·სთ)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ტელეფონის მეხსიერება"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"გამოყენებულია <xliff:g id="TOTAL">%1$s</xliff:g>-დან"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"გამოყ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"აპის გასუფთავება"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 905f27f..c349797 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Соңғы толық зарядталғаннан кейін пайдаланылғаны"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Соңғы толық зарядталуы"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Қалған батарея зарядының уақыты шамамен көрсетілген және оның тұтынылуына қарай өзгеруі мүмкін"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Қолданбаны пайдаланғанда"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Фондық режимде болғанда"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Батарея зарядының тұтынылуы"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Қолданбаның жалпы тұтынуының <xliff:g id="PERCENT">%1$s</xliff:g>-ы (<xliff:g id="POWER">%2$d</xliff:g>мА)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Телефон жады"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> жалпы жадтан қолданылған"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"толық"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Қолданбаны деректерін өшіру"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 58e8e85..ee7d9ff 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"លែងដំណើរការចាប់តាំងពីសាកថ្មពេញលើកចុងក្រោយ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"សាកថ្មពេញលើកចុងក្រោយ"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ម៉ោងថ្មនៅសល់គឺជាតួលេខប្រហាក់ប្រហែល ហើយវាអាចផ្លាស់ប្តូរទៅតាមការប្រើប្រាស់"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ខណៈពេលកំពុងប្រើប្រាស់កម្មវិធី"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ខណៈពេលនៅផ្ទៃខាងក្រោយ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ការប្រើប្រាស់ថ្ម"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> នៃការប្រើប្រាស់កម្មវិធីសរុប (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ទំហំផ្ទុកក្នុងទូរសព្ទ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"បានប្រើអស់នៃទំហំសរុប <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ពេញ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ជម្រះកម្មវិធី"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 29d1c40..78bf57b 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"ಕೊನೆಯ ಬಾರಿ ಸಂಪೂರ್ಣ ಚಾರ್ಜ್ ಆದ ನಂತರದ ಬಳಕೆಯ ವಿವರ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ಕೊನೆಯ ಬಾರಿ ಸಂಪೂರ್ಣ ಚಾರ್ಜ್ ಮಾಡಿದ್ದು"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ಉಳಿದಿರುವ ಬ್ಯಾಟರಿ ಸಮಯವು ಅಂದಾಜು ಮಾತ್ರ. ಬಳಕೆಯನ್ನು ಆಧರಿಸಿ ಇದು ಬದಲಾಗಬಹುದು"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ಅಪ್ಲಿಕೇಶನ್ ಬಳಸುವಾಗ"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಇರುವಾಗ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ಬ್ಯಾಟರಿ ಬಳಕೆ"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"ಅಪ್ಲಿಕೇಶನ್ನ ಒಟ್ಟು ಬಳಕೆಯ <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ಫೋನ್ ಸಂಗ್ರಹಣೆ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> ನಲ್ಲಿ ಬಳಸಿರುವುದು"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ಪೂರ್ಣ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ಅಪ್ಲಿಕೇಶನ್ ತೆರವುಗೊಳಿಸಿ"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 176e7bd..498d583 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"마지막 충전 완료 후 사용 내역 분석"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"마지막 충전 완료 후"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"남은 배터리 사용 시간은 대략적인 수치이며, 사용량에 따라 변경될 수 있습니다."</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"앱을 사용 중일 때"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"백그라운드에 있을 때"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"배터리 사용량"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"전체 앱 사용량의 <xliff:g id="PERCENT">%1$s</xliff:g>(<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"휴대전화 저장공간"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>"<xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"/<xliff:g id="TOTAL">%1$s</xliff:g> 사용"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"사용 중"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"앱 삭제"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 3cbf708..2892133 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -2008,7 +2008,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Акыркы жолу толук кубатталгандан бери колдонулушун чагылдырган таблица"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Акыркы жолу толук кубатталгандан бери"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Батареянын иштей турган убактысы болжол менен көрсөтүлгөн жана колдонулушуна жараша өзгөрүшү мүмкүн"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Колдонмону пайдаланып жатканда"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Фондук режимде"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Батарея колдонулушу"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Батареяны сарптаган колдонмолордун ичинен <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>мА/с.)"</string>
@@ -3571,7 +3572,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Телефондун сактагычы"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> ичинен колдонулганы"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"толук"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Колдонмонун дайындарын тазалоо"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index cec86f1..6ee7d1a 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"ວິເຄາະນັບຕັ້ງແຕ່ສາກເຕັມຫຼ້າສຸດ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ສາກເຕັມຫຼ້າສຸດ"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ເວລາແບັດເຕີຣີທີ່ຍັງເຫຼືອແມ່ນເປັນການປະມານການ ແລະ ສາມາດປ່ຽນແປງໄດ້ຕາມການນຳໃຊ້"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ໃນຂະນະນຳໃຊ້ແອັບ"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ໃນຂະນະຢູ່ໃນພື້ນຫຼັງ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ການໃຊ້ແບັດເຕີຣີ"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> ຂອງການນຳໃຊ້ແອັບທັງໝົດ (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ບ່ອນຈັດເກັບຂໍ້ມູນໂທລະສັບ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"ໃຊ້ໄປແລ້ວຈາກ <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ເຕັມ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ລຶບລ້າງແອັບ"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index d4c800c..a7a5780 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Naudojimo nuo paskutinio visiško įkrovimo analizė"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Paskutinis visiškas įkrovimas"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Likęs akumuliatoriaus veikimo laikas yra apytikslis ir gali pasikeisti atsižvelgiant į naudojimą"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Kai programa naudojama"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Kai veikia fone"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akumuliatoriaus energijos vartojimas"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> viso programos naudojimo (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefono saugykla"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Naudojama iš <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"visiškas"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Išvalyti programą"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 143ee13..868a02c 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -2030,7 +2030,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Sadalījums kopš pēdējās pilnās uzlādes"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Pēdējā pilnā uzlāde"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Atlikušais akumulatora darbības ilgums ir aptuvens un var mainīties atkarībā no lietojuma."</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Izmantojot lietotni"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Darbojoties fonā"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Akumulatora lietojums"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> no kopējā jaudas patēriņa lietotnēs (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3623,7 +3624,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Tālruņa krātuve"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Izmantoti no <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"aizņemts"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Notīrīt lietotni"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index ea01759..1fa825b 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Детали по последното целосно полнење"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Последно целосно полнење"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Преостанатото време на батеријата е приближно и може да се промени во зависност од употребата"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Употреба при користење апликации"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Употреба во заднина"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Употреба на батеријата"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> од вкупната употреба на апликациите (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Меморија на телефонот"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Искористено од <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"целосна"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Исчисти ја апликацијата"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 1399c2c..22a7323 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"അവസാനം പൂർണ്ണമായി ചാർജ്ജുചെയ്തതിന് ശേഷമുള്ള ഉപയോഗ വിശദാംശങ്ങൾ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"അവസാനം പൂർണ്ണമായി ചാർജ്ജുചെയ്തത്"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ശേഷിക്കുന്ന ബാറ്ററി സമയം ഏകദേശ കണക്കാണ്, ഉപയോഗത്തിനനുസരിച്ച് അത് മാറാം"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ആപ്പ് ഉപയോഗിക്കുമ്പോൾ"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"പശ്ചാത്തലത്തിൽ ആയിരിക്കുമ്പോൾ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ബാറ്ററി ഉപയോഗം"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"മൊത്തം ആപ്പ് ഉപയോഗത്തിന്റെ <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ഫോൺ സ്റ്റോറേജ്"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> ഉപയോഗിച്ചു"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"മുഴുവൻ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ആപ്പ് മായ്ക്കുക"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index c686032..7c5f849 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -2011,7 +2011,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Сүүлд бүрэн цэнэглэснээс хойших ашиглалтын мэдээлэл"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Сүүлийн бүрэн цэнэглэлт"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Батерейны хугацааг зөвхөн таамагласан бөгөөд ашиглалтаас шалтгаалан өөрчлөгдөж болно"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Аппыг ашиглаж байх үед"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Цаана байх үед"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Батерей ашиглалт"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"нийт апп ашиглалтын <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Зургийн сан"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g>-с ашигласан"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"дүүрэн"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Апп устгах"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 9018db9..9a13656 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"शेवटच्या पूर्ण चार्जपासून खंड"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"शेवटचे पूर्ण चार्ज"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"शिल्लक बॅटरी वेळ अंदाजे आहे आणि वापराच्या आधारे बदलू शकतो"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"अॅप वापरताना"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"पार्श्वभूमीत असताना"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"बॅटरी वापर"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"एकूण अॅप वापराचे <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"फोन संचय"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small></string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> पैकी वापरले"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"पूर्ण"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"अॅप साफ करा"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index fe3ea7f..ef8fdfe 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Pecahan sejak cas penuh terakhir"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Cas penuh terakhir"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Baki masa bateri adalah anggaran dan boleh berubah berdasarkan penggunaan"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Semasa menggunakan apl"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Semasa di latar belakang"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Penggunaan bateri"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> daripada jumlah penggunaan apl (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Storan telefon"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Digunakan daripada <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"penuh"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Kosongkan apl"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 30dc25f..bfb2422 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"နောက်ဆုံးအကြိမ် အားအပြည့်သွင်းခဲ့သည့် အချိန်မှစ၍ ခွဲခြမ်းစိတ်ဖြာချက်"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"နောက်ဆုံးအကြိမ် အားအပြည့် သွင်းခဲ့ချိန်"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ကျန်ရှိနေသော ဘက်ထရီကြာချိန်သည် ခန့်မှန်းခြေသာဖြစ်ပြီး အသုံးပြုမှုအပေါ် အခြေခံ၍ ပြောင်းလဲနိုင်ပါသည်"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"အက်ပ်ကို သုံးနေစဉ်"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"နောက်ခံတွင် ဖွင့်ထားစဉ်"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ဘက်ထရီ အသုံးပြုမှု"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"စုစုပေါင်း အက်ပ်အသုံးပြုမှု၏<xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ဖုန်း၏ သိုလှောင်ခန်း"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> အနက်မှ အသုံးပြုပြီးပါပြီ"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"အပြည့်"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"အက်ပ်ကို ရှင်းရန်"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 7d9a79a..6b27ea2 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Oversikt siden sist batteriet var fulladet"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Sist batteriet var fulladet"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Gjenværende batteritid er omtrentlig og kan endres basert på bruk"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Mens du bruker appen"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Mens den er i bakgrunnen"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batteribruk"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> av total appbruk (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefonlagring"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Brukt av <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"full"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Fjern appen"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 0d0357b..2be11bf 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"पछिल्लो पटक पूर्ण चार्ज भएदेखिको विश्लेषण"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"पछिल्लो पटकको पूर्ण चार्ज"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"बाँकी रहेको ब्याट्रीको अवधि अनुमानित हो र प्रयोग अनुसार यो मान बदलिन सक्छ"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"अनुप्रयोग प्रयोग गरिरहँदा"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"पृष्ठभूमिमा हुँदा"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ब्याट्रीको प्रयोग"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"अनुप्रयोगको कुल प्रयोगको <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3574,7 +3575,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"फोनको भण्डारण"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> मध्ये प्रयोग भएको"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"पूर्ण"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"अनुप्रयोगको डेटा खाली गर्नुहोस्"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 43ce06a..e9f88be 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Uitsplitsing sinds laatste volledige lading"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Laatste volledige lading"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Resterende batterijtijd is een schatting en hangt af van het gebruik"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Wanneer de app wordt gebruikt"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Wanneer op de achtergrond"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batterijgebruik"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> van het totale app-gebruik (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefoonopslag"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Gebruikt van <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"vol"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Gegevens van app wissen"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 1502a24..7f0093e 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"ਪਿਛਲੀ ਵਾਰ ਪੂਰਾ ਚਾਰਜ ਕਰਨ ਤੋਂ ਬਾਅਦ ਬੈਟਰੀ ਦੀ ਵਰਤੋਂ ਦੇ ਵੇਰਵੇ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ਪਿਛਲੀ ਵਾਰ ਪੂਰਾ ਚਾਰਜ"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ਬਾਕੀ ਰਹਿੰਦਾ ਬੈਟਰੀ ਸਮਾਂ ਅਨੁਮਾਨਿਤ ਹੈ ਅਤੇ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਬਦਲ ਸਕਦਾ ਹੈ"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ਐਪ ਵਰਤਣ ਦੌਰਾਨ"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਹੋਣ ਦੌਰਾਨ"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"ਬੈਟਰੀ ਵਰਤੋਂ"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"ਕੁੱਲ ਐਪ ਵਰਤੋਂ ਦਾ <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ਫ਼ੋਨ ਸਟੋਰੇਜ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> ਵਿੱਚੋਂ ਵਰਤਿਆ"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"ਸੰਪੂਰਨ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ਐਪ ਕਲੀਅਰ ਕਰੋ"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index b741574..01ef29e 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Zestawienie od ostatniego pełnego naładowania"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Ostatnie naładowanie"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Pozostały czas pracy na baterii jest przybliżony i może się zmienić w zależności od wykorzystania"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Podczas korzystania z aplikacji"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"W tle"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Wykorzystanie baterii"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> z łącznego wykorzystania przez aplikacje (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Pamięć telefonu"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Wykorzystane z <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"zajęte"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Wyczyść dane aplikacji"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index d6eeb00..09e16b1 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Detalhamento desde a última carga completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última carga completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"O tempo restante de bateria é aproximado e pode mudar de acordo com o uso"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Enquanto o app estiver em uso"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Quando estiver em segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Uso da bateria"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> do uso total do app (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Armazen. do smartphone"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Usados <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"máximo"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Limpar app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 49be27d..16160fd 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Detalhes desde o último carregamento completo"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Último carregamento completo"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"O tempo restante da bateria é um valor aproximado e pode variar em função da utilização"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Ao utilizar a aplicação"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Em segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Utilização da bateria"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> do total da utilização de aplicações (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Armazenamento telemóvel"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Utilizado de <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"cheio"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Limpar aplicação"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d6eeb00..09e16b1 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Detalhamento desde a última carga completa"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Última carga completa"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"O tempo restante de bateria é aproximado e pode mudar de acordo com o uso"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Enquanto o app estiver em uso"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Quando estiver em segundo plano"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Uso da bateria"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> do uso total do app (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Armazen. do smartphone"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Usados <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"máximo"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Limpar app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index d4d9fbf..d9113ea 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -2030,7 +2030,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Detaliere de la ultima încărcare completă"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Ultima încărcare completă"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Timpul de funcționare rămas pentru baterie este aproximativ și se poate modifica în funcție de utilizare"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"În timp ce utilizează aplicația"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"În timp ce se află în fundal"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Utilizarea bateriei"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> din utilizarea totală de către aplicații (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3152,7 +3153,7 @@
<string name="usb_use_charging_only" msgid="2180443097365214467">"Încărcați acest dispozitiv"</string>
<string name="usb_use_charging_only_desc" msgid="3066256793008540627">"Doar încărcați acest dispozitiv"</string>
<string name="usb_use_power_only" msgid="6426550616883919530">"Alimentați cu energie"</string>
- <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Încărcați dispozitivul conectat. Acesta funcționează numai cu dispozitive care acceptă încărcarea prin USB."</string>
+ <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Încărcați dispozitivul conectat. Funcționează numai cu dispozitive care acceptă încărcarea prin USB."</string>
<string name="usb_use_file_transfers" msgid="7409600791007250137">"Transferați fișiere"</string>
<string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Transferați fișiere pe un alt dispozitiv"</string>
<string name="usb_use_photo_transfers" msgid="7794775645350330454">"Transferați fotografii (PTP)"</string>
@@ -3162,7 +3163,7 @@
<string name="usb_use" msgid="3256040963685055320">"Folosiți conexiunea USB ca să"</string>
<string name="usb_pref" msgid="1400617804525116158">"USB"</string>
<string name="usb_summary_charging_only" msgid="7544327009143659751">"Încărcarea acestui dispozitiv"</string>
- <string name="usb_summary_power_only" msgid="3629517713817003738">"Alimentarea cu curent"</string>
+ <string name="usb_summary_power_only" msgid="3629517713817003738">"Alimentarea altui dispozitiv"</string>
<string name="usb_summary_file_transfers" msgid="6435943692610175111">"Transferul de fișiere"</string>
<string name="usb_summary_photo_transfers" msgid="8440204169576585250">"Transferul de fotografii (PTP)"</string>
<string name="usb_summary_MIDI" msgid="5687906612187885908">"Dispozitivul se folosește ca MIDI"</string>
@@ -3623,7 +3624,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Stocare pe telefon"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Folosit din <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"complet"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Ștergeți aplicația"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index bed28a5..34afe5d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Использование с момента полной зарядки"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"С момента последней полной зарядки"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Оставшееся время работы указано приблизительно и может меняться в зависимости от интенсивности использования"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"При использовании приложения"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"В фоновом режиме"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Расход заряда батареи"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> от общего расхода приложением (<xliff:g id="POWER">%2$d</xliff:g> мА·ч)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Хранилище телефона"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Всего: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"заполнен"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Удалить данные приложения"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 8d639a6..2e10caf 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"අවසන් පූර්ණ ආරෝපණයෙන් පසුව ප්රභේදනය"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"අවසන් පූර්ණ ආරෝපණය"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"ඉතිරි බැටරි කාලය දළ අගයක් වන අතර භාවිතය අනුව වෙනස් විය හැකිය"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"යෙදුම භාවිතා කරන විට"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"පසුබිමේ සිටින අතරතුර"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"බැටරි භාවිතය"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"සම්පූර්ණ යෙදුම් භාවිතයෙන් <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"දුරකථන ගබඞාව"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> න් භාවිත කළ"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"පූර්ණ"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"යෙදුම හිස් කරන්න"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8278148..5daa68f 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Prehľad od posledného úplného dobitia"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Posledné úplné dobitie"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Údaje o zostávajúcej výdrži batérie sú približné a môžu sa meniť v závislosti od využitia"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Pri používaní"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Na pozadí"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Využitie batérie"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> celkového využitia aplikáciou (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Úložisko telefónu"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Využité z <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"plné"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Vymazať aplikáciu"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 2a05b89..4911d12 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Razčlenjen prikaz od zadnje polne napolnjenosti akumulatorja"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Zadnja polna napolnjenost akumulatorja"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Preostali čas delovanja akumulatorja je približen, ker je odvisen od uporabe in se lahko spremeni."</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Med uporabo aplikacije"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Med izvajanjem v ozadju"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Poraba akumulatorja"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> od skupne porabe aplikacij (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Pomnilnik telefona"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Uporabljeno od <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"polno"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Počisti aplikacijo"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 0d614fa..bdd4b24 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Analiza që nga ngarkimi i fundit i plotë"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Ngarkimi i fundit i plotë"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Koha e mbetur e baterisë është e përafërt dhe mund të ndryshojë sipas përdorimit"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Kur përdor aplikacionin"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Kur është në sfond"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Përdorimi i baterisë"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> nga përdorimi total i aplikacioneve (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Hapësira ruajtëse e telefonit"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Përdorur nga <xliff:g id="TOTAL">%1$s</xliff:g> gjithsej"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"e plotë"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Pastro aplikacionin"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 68e757a..de838b04 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -2030,7 +2030,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Преглед од последњег потпуног пуњења"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Последње потпуно пуњење"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Преостало трајање батерије је приближно и може да се мења у зависности од начина коришћења"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Током коришћења апликације"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Док је у позадини"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Потрошња батерије"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> укупне потрошње апликација (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3623,7 +3624,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Меморија телефона"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Искоришћено од укупно <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"пуна"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Обриши апликацију"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index e4a7bdf..caf5461 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Fördelning sedan senaste fulladdningen"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Sedan senaste fulladdning"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Den återstående batteritiden är ungefärlig och kan ändras beroende på användning"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"När appen används"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"I bakgrunden"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batteriförbrukning"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> av den totala appanvändningen (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Mobilens lagringsutrymme"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"av <xliff:g id="TOTAL">%1$s</xliff:g> används"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"max"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Rensa app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index fcebde7..049e0f0 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Uchanganuzi tangu mara ya mwisho ilipojaa chaji"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Tangu ilipojaa chaji mara ya mwisho"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Muda wa matumizi ya betri uliosalia umekadiriwa tu na unaweza kubadilika kulingana na matumizi"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Unapotumia programu"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Ikitumika chini chini"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Matumizi ya betri"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> ya jumla ya matumizi ya programu (mAh<xliff:g id="POWER">%2$d</xliff:g>)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Hifadhi ya simu"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Hifadhi iliyotumika kati ya <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"imejaa"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Futa data kwenye programu"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index d1a9e06..70d1762 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"கடைசியாக முழுவதும் சார்ஜ் ஆனதிலிருந்து பிரேக் டவுன்"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"கடைசியாக முழு சார்ஜ் செய்தது:"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"மீதமிருக்கும் பேட்டரி நேரம் தோராயமானதாகும், உபயோகத்தின் அடிப்படையில் மாறலாம்"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"பயன்பாட்டைப் பயன்படுத்தும் போது"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"பின்னணியில் இருக்கும் போது"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"பேட்டரி உபயோகம்"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"மொத்தப் பயன்பாட்டு உபயோகத்தில் <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"மொபைல் சேமிப்பகம்"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> இல் பயன்படுத்தியது:"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"முழு"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"பயன்பாட்டை அழி"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index c0f8a46..f580042 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"చివరిసారి పూర్తిగా ఛార్జ్ చేసినప్పటి నుండి వినియోగ వివరాలు"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"చివరిసారిగా పూర్తిగా ఛార్జ్ చేసిన సమయం"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"మిగిలి ఉన్న బ్యాటరీ సమయం కేవలం అంచనా సమాచారమే, వినియోగాన్ని బట్టి మారవచ్చు"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"అనువర్తనాన్ని ఉపయోగిస్తున్నప్పుడు"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"నేపథ్యంలో ఉన్నప్పుడు"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"బ్యాటరీ వినియోగం"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"మొత్తం అనువర్తన వినియోగంలో <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"ఫోన్ నిల్వ"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g>లో ఉపయోగించబడింది"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"పూర్తిగా"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"అనువర్తనం డేటాను క్లియర్ చేయి"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 96f8c40..b228fb1 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"รายละเอียดนับตั้งแต่ชาร์จจนเต็มครั้งล่าสุด"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"ชาร์จจนเต็มครั้งล่าสุด"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"เวลาแบตเตอรี่ที่เหลือเป็นเพียงการประมาณการและอาจเปลี่ยนไปตามการใช้งาน"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ขณะกำลังใช้แอป"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"ขณะอยู่ในพื้นหลัง"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"การใช้งานแบตเตอรี่"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> ของการใช้งานแบตเตอรี่ทั้งหมด (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"พื้นที่เก็บข้อมูลโทรศัพท์"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"ที่ใช้ไปจากทั้งหมด <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"เต็ม"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ล้างแอป"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 228364f..2f95ee7 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Breakdown mula noong huling napuno ang baterya"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Noong huling napuno ang baterya"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Hindi tumpak ang natitirang tagal ng baterya at maaari itong magbago ayon sa paggamit"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Habang ginagamit ang app"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Habang nasa background"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Paggamit ng baterya"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> ng kabuuang paggamit ng app (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Storage ng telepono"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Nagamit sa <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"puno"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"I-clear ang app"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 2ac54f3..488cee8 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Son tam şarjdan sonraki kullanım dökümü"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Son tam şarj"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Kalan pil süresi yaklaşık bir değerdir ve kullanıma dayalı olarak değişebilir"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Uygulama kullanılırken"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Arka plandayken"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Pil kullanımı"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Toplam uygulama kullanımının <xliff:g id="PERCENT">%1$s</xliff:g> kadarı (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefon depolama alanı"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Toplam <xliff:g id="TOTAL">%1$s</xliff:g> alanın kullanılan kısmı"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"tam"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Uygulamayı temizle"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 1a9af9d..06936b9 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -2051,7 +2051,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Статистика використання після останнього повного заряджання"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Останнє повне заряджання"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Час роботи акумулятора приблизний і може змінитися залежно від використання пристрою"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Під час використання додатка"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"У фоновому режимі"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Використання заряду"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> від загального заряду, який використовує додаток (<xliff:g id="POWER">%2$d</xliff:g> мА/год)"</string>
@@ -3674,7 +3675,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Пам’ять телефона"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Використовується з <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"максимум"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Очистити дані додатка"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index caad328..262120e 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"پچھلے مکمل چارج کے بعد سے تجزیہ"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"پچھلا مکمل چارج"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"باقی بیٹری کا وقت تخمینی ہے اور استعمال کی بنیاد پر تبدیل ہو سکتا ہے"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"ایپ استعمال کرنے کے دوران"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"پس منظر کے دوران"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"بیٹری کا استعمال"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"مجموعی ایپ کے استعمال میں سے <xliff:g id="PERCENT">%1$s</xliff:g> (mAh<xliff:g id="POWER">%2$d</xliff:g>)"</string>
@@ -3123,8 +3124,8 @@
<string name="usb_use_MIDI_desc" msgid="8473936990076693175">"اس آلہ کو بطور MIDI استعمال کریں"</string>
<string name="usb_use" msgid="3256040963685055320">"USB کو اس لئے استعمال کریں"</string>
<string name="usb_pref" msgid="1400617804525116158">"USB"</string>
- <string name="usb_summary_charging_only" msgid="7544327009143659751">"یہ آلہ چارج ہو رہا ہے"</string>
- <string name="usb_summary_power_only" msgid="3629517713817003738">"پاور سپلائی ہو رہی ہے"</string>
+ <string name="usb_summary_charging_only" msgid="7544327009143659751">"اس آلہ کو چارج کرنا"</string>
+ <string name="usb_summary_power_only" msgid="3629517713817003738">"پاور سپلائی کرنا"</string>
<string name="usb_summary_file_transfers" msgid="6435943692610175111">"فائلیں منتقل کرنا"</string>
<string name="usb_summary_photo_transfers" msgid="8440204169576585250">"تصاویر منتقل کرنا (PTP)"</string>
<string name="usb_summary_MIDI" msgid="5687906612187885908">"آلے کو بطور MIDI استعمال کرنا"</string>
@@ -3570,7 +3571,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"فون اسٹوریج"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"<xliff:g id="TOTAL">%1$s</xliff:g> میں سے استعمال ہو گئی"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"مکمل"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"ایپ صاف کریں"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 7b4c49f..f372e46 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"To‘liq quvvat olganidan beri sarflangan quvvat"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Oxirgi marta to‘liq quvvat olganidan beri"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Qolgan batareya vaqti taxminiy va foydalanish intensivligiga qarab o‘zgarishi mumkin"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Ilova ishlatilayotganda"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Fon rejimida"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Batareya sarfi"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"Jami ilovalar sarfining <xliff:g id="PERCENT">%1$s</xliff:g> qismi (<xliff:g id="POWER">%2$d</xliff:g> mA*soat)"</string>
@@ -3125,7 +3126,7 @@
<string name="usb_use_MIDI_desc" msgid="8473936990076693175">"Bu qurilmadan MIDI sifatida foydalanish"</string>
<string name="usb_use" msgid="3256040963685055320">"USB rejimi"</string>
<string name="usb_pref" msgid="1400617804525116158">"USB"</string>
- <string name="usb_summary_charging_only" msgid="7544327009143659751">"Bu qurilmani quvvatlash"</string>
+ <string name="usb_summary_charging_only" msgid="7544327009143659751">"Shu qurilmani quvvatlash"</string>
<string name="usb_summary_power_only" msgid="3629517713817003738">"Quvvat uzatish"</string>
<string name="usb_summary_file_transfers" msgid="6435943692610175111">"Fayllarni o‘tkazish"</string>
<string name="usb_summary_photo_transfers" msgid="8440204169576585250">"Suratlarni o‘tkazish (PTP)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Telefon xotirasi"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Jami: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"to‘la"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Ilova ma’lumotlarini tozalash"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index ddbdc81..73a6bc7 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Chi tiết từ lần sạc đầy gần đây nhất"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Lần sạc đầy gần đây nhất"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Thời gian sử dụng pin còn lại chỉ mang tính tương đối và có thể thay đổi tùy theo mức sử dụng"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Khi sử dụng ứng dụng"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Khi ở chế độ nền"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Mức sử dụng pin"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> trong tổng số mức sử dụng ứng dụng (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Bộ nhớ điện thoại"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Đã sử dụng <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"đầy"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Xóa ứng dụng"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c2a4883..b718d78 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"自上次充满电后的详细用量信息"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"上次充满电"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"电池的剩余使用时间为大致数据,且可能会因使用情形而变化"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"在使用应用时"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"在后台运行时"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"电池用量"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"应用总用电量的 <xliff:g id="PERCENT">%1$s</xliff:g>(<xliff:g id="POWER">%2$d</xliff:g> 毫安时)"</string>
@@ -3572,7 +3573,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"手机存储空间"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"使用量:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"已满"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"清除应用"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 336b945..dcf6b17 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -2010,7 +2010,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"自上次完全充電後的詳細使用情況"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"上次完全充電後"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"剩餘電池使用時間只屬約數,視乎使用情況而定"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"使用應用程式時"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"在背景中執行時"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"電池用量"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"應用程式總電池用量的 <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3575,7 +3576,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"手機儲存空間"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"使用量:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"已滿"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"清除應用程式"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 2f40472..8c14424 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -2009,7 +2009,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"上次充飽後的詳細用量資訊"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"上次充飽後的用量"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"電池的剩餘使用時間為約略值,且會因使用情形而有所變動"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"使用應用程式時"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"在背景執行時"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"電池用量"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"總應用程式用量的 <xliff:g id="PERCENT">%1$s</xliff:g> (<xliff:g id="POWER">%2$d</xliff:g> mAh)"</string>
@@ -3576,7 +3577,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"手機儲存空間"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"使用量:<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"已用"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"清除應用程式"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 1fa3664..c17ec03 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -2010,7 +2010,8 @@
<string name="battery_detail_since_full_charge" msgid="7515347842046955855">"Ukwaphuka kusuka ekushajeni okuphelele"</string>
<string name="battery_last_full_charge" msgid="7151251641099019361">"Ukushija okuphelele kokugcina"</string>
<string name="battery_footer_summary" msgid="4701358808575132647">"Isikhathi esisele sebhethri siyalinganiselwa futhi singashintsha ngokuya ngokusebenzisa"</string>
- <string name="battery_detail_foreground" msgid="1956633410428316726">"Ngenkathi isebenzisa uhlelo lokusebenza"</string>
+ <!-- no translation found for battery_detail_foreground (3350401514602032183) -->
+ <skip />
<string name="battery_detail_background" msgid="1929644393553768999">"Ngenkathi kusemuva"</string>
<string name="battery_detail_power_usage" msgid="6485766868610469101">"Ukusetshenziswa kwebhethri"</string>
<string name="battery_detail_power_percentage" msgid="8064814503316094497">"<xliff:g id="PERCENT">%1$s</xliff:g> kokusebenza kohlelo lokusebenza okuphelele (<xliff:g id="POWER">%2$d</xliff:g>mAh)"</string>
@@ -3573,7 +3574,8 @@
<string name="storage_settings_2" product="default" msgid="4306047711760327031">"Isitoreji sefoni"</string>
<string name="storage_size_large_alternate" msgid="3550744227788333060">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" <xliff:g id="UNIT">^2</xliff:g>"</small>""</string>
<string name="storage_volume_total" msgid="3499221850532701342">"Kusetshenziswe okungu-<xliff:g id="TOTAL">%1$s</xliff:g>"</string>
- <string name="storage_percent_full" msgid="7052264724265314100">"kugcwele"</string>
+ <!-- no translation found for storage_percent_full (6095012055875077036) -->
+ <skip />
<string name="clear_instant_app_data" msgid="2004222610585890909">"Sula uhlelo lokusebenza"</string>
<!-- no translation found for clear_instant_app_confirmation (7451671214898856857) -->
<skip />
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 8980568..873576c 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -388,6 +388,21 @@
<item>GTC</item>
</string-array>
+ <!-- Type of EAP method when EAP SIM, AKA, AKA' are supported -->
+ <string-array name="wifi_peap_phase2_entries_with_sim_auth">
+ <item>None</item>
+ <!-- Do not translate. -->
+ <item>MSCHAPV2</item>
+ <!-- Do not translate. -->
+ <item>GTC</item>
+ <!-- Do not translate. -->
+ <item>SIM</item>
+ <!-- Do not translate. -->
+ <item>AKA</item>
+ <!-- Do not translate. -->
+ <item>AKA\'</item>
+ </string-array>
+
<!-- Phase 2 options for rest of EAP methods -->
<string-array name="wifi_phase2_entries">
<item>None</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 35a6f51..fba0ef5 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -743,15 +743,13 @@
<!-- Main Settings screen setting option title for the item to take you to the accounts screen [CHAR LIMIT=22] -->
<string name="account_settings_title">Accounts</string>
<!-- Main Settings screen setting option title for the item to take you to the security screen -->
- <string name="security_settings_title">Security & screen lock</string>
+ <string name="security_settings_title">Security & Location</string>
<!-- Security Settings screen setting option title for the item to take you to the encryption and credential screen -->
<string name="encryption_and_credential_settings_title">Encryption & credentials</string>
<!-- Security Settings screen Encryption and crendential summary -->
<string name="encryption_and_credential_settings_summary">Phone encrypted</string>
<!-- Security Settings screen setting option title for the item to take you to the lock screen preference screen [CHAR LIMIT=60] -->
<string name="lockscreen_settings_title">Lock screen preferences</string>
- <!-- Security Settings screen setting option summary for the item to take you to the lock screen preference screen -->
- <string name="lockscreen_settings_summary">Show all notification content</string>
<!-- Main Settings screen setting option summary text for the item tot ake you to the security and location screen -->
<string name="security_settings_summary">Set My Location, screen unlock, SIM card lock, credential storage lock</string>
@@ -764,9 +762,9 @@
<!-- In the security screen, the header title for security statuses -->
<string name="security_status_title">Security status</string>
<!-- Summary for Security settings, explaining a few important settings under it [CHAR LIMIT=NONE]-->
- <string name="security_dashboard_summary">Location, fingerprint</string>
+ <string name="security_dashboard_summary">Screen lock, fingerprint</string>
<!-- Summary for Security settings when fingerprint is not supported [CHAR LIMIT=NONE]-->
- <string name="security_dashboard_summary_no_fingerprint">Location</string>
+ <string name="security_dashboard_summary_no_fingerprint">Screen lock</string>
<!-- Fingerprint enrollment and settings --><skip />
<!-- Title shown for menu item that launches fingerprint settings or enrollment [CHAR LIMIT=22] -->
<string name="security_settings_fingerprint_preference_title">Fingerprint</string>
@@ -2289,7 +2287,7 @@
<!-- Adaptive brightness settings screen, setting option summary to enable adaptive brightness when user prefers very high brightness.
Meant to make it clear that preferring very high brightness uses more battery. [CHAR LIMIT=100] -->
<string name="auto_brightness_very_high_summary">Increased battery usage</string>
- <!-- Adaptive brightness settings screen, disclaimer that explains in more detail about how adaptive brightness works [CHAR LIMIT=100] -->
+ <!-- Adaptive brightness settings screen, disclaimer that explains in more detail about how adaptive brightness works [CHAR LIMIT=150] -->
<string name="auto_brightness_disclaimer">Optimize brightness level for available light. When this feature is on, you can still adjust brightness temporarily.</string>
<!-- Night display screen, setting option name to enable night display (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
@@ -2367,6 +2365,8 @@
<string name="screensaver_settings_disabled_prompt">To control what happens when the phone is docked and/or sleeping, turn screen saver on.</string>
<!-- Dream settings screen, action label, when to dream -->
<string name="screensaver_settings_when_to_dream">When to start</string>
+ <!-- Dream settings screen, action label, current selected screen saver -->
+ <string name="screensaver_settings_current">Current screen saver</string>
<!-- Dream settings screen, button label to start dreaming -->
<string name="screensaver_settings_dream_start">Start now</string>
<!-- Dream settings screen, button label for settings for a specific screensaver -->
@@ -3067,7 +3067,7 @@
<string name="tether_settings_title_bluetooth">Bluetooth tethering</string>
<!-- Tethering controls, item title to go into the tethering settings when USB and Bluetooth tethering are available [CHAR LIMIT=25]-->
<string name="tether_settings_title_usb_bluetooth">Tethering</string>
- <!-- Tethering controls, item title to go into the tethering settings when USB, Bluetooth and Wifi tethering are available [CHAR LIMIT=50]-->
+ <!-- Tethering controls, item title to go into the tethering settings when USB, Bluetooth and Wifi tethering are available [CHAR LIMIT=60]-->
<string name="tether_settings_title_all">Hotspot & tethering</string>
<!-- Tethering setting summary when both Wi-Fi hotspot and tether are turned on [CHAR LIMIT=NONE]-->
<string name="tether_settings_summary_hotspot_on_tether_on">Hotspot on, tethering</string>
@@ -3863,7 +3863,7 @@
<string name="language_settings">Languages & input</string>
<!-- Title of Languages & input settings screen -->
<string name="language_keyboard_settings_title">Languages & input</string>
- <!-- Title of preference category that lists all settings about helping user input such as spell checker [CHAR LIMIT=60]-->
+ <!-- Title of preference category that lists all settings about helping user text input such as spell checker [CHAR LIMIT=60]-->
<string name="input_assistance">Input assistance</string>
<!-- On Languages & input settings screen, heading. Inside the "Languages & input settings" screen, this is the header for settings that relate to keyboard (enable/disable each keyboard, settings for each keyboard). -->
<string name="keyboard_settings_category">Keyboard & input methods</string>
@@ -4462,7 +4462,7 @@
<!-- Summary for the background activity when it is disabled [CHAR_LIMIT=120] -->
<string name="background_activity_summary_disabled">App not allowed to run in background</string>
- <!-- Title for the screen usage in power use UI [CHAR_LIMIT=40] -->
+ <!-- Title for the screen usage in power use UI [CHAR_LIMIT=60] -->
<string name="device_screen_usage">Screen usage since full charge</string>
<!-- Title for the screen consumption in power use UI(i.e. Screen consumption: 30% of battery usage) [CHAR_LIMIT=40] -->
<string name="device_screen_consumption">Screen consumption</string>
@@ -6426,10 +6426,10 @@
<!-- Do not disturb: Title for the zen mode automation listing. [CHAR LIMIT=30] -->
<string name="zen_mode_automation_settings_title">Automatic rules</string>
- <!-- Do not disturb: Title for the zen mode automation option Suggestion. [CHAR LIMIT=30] -->
+ <!-- Do not disturb: Title for the zen mode automation option Suggestion. [CHAR LIMIT=50] -->
<string name="zen_mode_automation_suggestion_title">Set Do Not Disturb rules</string>
- <!-- Do not disturb: Summary for the zen mode automation option Suggestion. [CHAR LIMIT=30] -->
+ <!-- Do not disturb: Summary for the zen mode automation option Suggestion. [CHAR LIMIT=NONE] -->
<string name="zen_mode_automation_suggestion_summary">Limit sounds & vibrations at certain times</string>
<!-- Do not disturb: Zen mode option: Important interruptions [CHAR LIMIT=60] -->
@@ -7873,12 +7873,6 @@
<!-- Summary of condition that work mode is off [CHAR LIMIT=NONE] -->
<string name="condition_work_summary">Apps, background sync, and other features related to your work profile are turned off.</string>
- <!-- Night display: Title for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=NONE] -->
- <string name="night_display_suggestion_title">Set Night Light schedule</string>
-
- <!-- Night display: Summary for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
- <string name="night_display_suggestion_summary">Tint screen amber to help you fall asleep</string>
-
<!-- Title of condition that night display is on (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
<string name="condition_night_display_title">Night Light is on</string>
@@ -8392,7 +8386,7 @@
<!-- Summary text for ambient display (device) [CHAR LIMIT=160]-->
<string name="ambient_display_pickup_summary" product="device">To quickly check your notifications, pick up your device.</string>
- <!-- Title text for fingerprint swipe for notifications [CHAR LIMIT=80]-->
+ <!-- Title text for swiping downwards on fingerprint sensor for notifications [CHAR LIMIT=80]-->
<string name="fingerprint_swipe_for_notifications_title">Swipe fingerprint for notifications</string>
<!-- Summary text for fingerprint swipe for notifications (phone) [CHAR LIMIT=160]-->
diff --git a/res/xml/automatic_storage_management_settings.xml b/res/xml/automatic_storage_management_settings.xml
index 73d708d..1428741 100644
--- a/res/xml/automatic_storage_management_settings.xml
+++ b/res/xml/automatic_storage_management_settings.xml
@@ -18,38 +18,18 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/automatic_storage_manager_settings" >
- <PreferenceCategory
- android:key="automatic"
- android:title="@string/deletion_helper_automatic_title">
-
- <SwitchPreference
- android:key="storage_manager_active"
- android:title="@string/automatic_storage_manager_preference_title"
- android:summary="@string/automatic_storage_manager_text"/>
-
- <Preference
- android:key="freed_bytes"
- android:persistent="false"
- android:selectable="false" />
-
<DropDownPreference
android:key="days"
android:summary="%s"
android:title="@string/automatic_storage_manager_days_title"
android:entries="@array/automatic_storage_management_days"
android:entryValues="@array/automatic_storage_management_days_values"
- settings:allowDividerAbove="true" />
-
- </PreferenceCategory>
-
- <PreferenceCategory
- android:key="manual"
- android:title="@string/deletion_helper_manual_title">
+ settings:allowDividerBelow="true" />
<Preference
- android:key="deletion_helper"
- android:title="@string/deletion_helper_preference_title"/>
-
- </PreferenceCategory>
+ android:key="freed_bytes"
+ android:persistent="false"
+ android:selectable="false"
+ settings:allowDividerAbove="true" />
</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index dc6e727..067ebab 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -31,7 +31,6 @@
<Preference android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
- android:summary="@string/lockscreen_settings_summary"
android:fragment="com.android.settings.security.LockscreenDashboardFragment"/>
</PreferenceCategory>
diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml
index c29453f..86e3b16 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -60,11 +60,11 @@
<Preference
android:key="encryption_and_credential"
android:title="@string/encryption_and_credential_settings_title"
+ android:summary="@string/encryption_and_credential_settings_summary"/>
android:fragment="com.android.settings.EncryptionAndCredential"/>
<Preference android:key="manage_trust_agents"
android:title="@string/manage_trust_agents"
- android:summary="@string/manage_trust_agents_summary"
android:persistent="false"
android:fragment="com.android.settings.TrustAgentSettings"/>
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index e3a5dfd..7de65f7 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -30,7 +30,6 @@
<Preference android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
- android:summary="@string/lockscreen_settings_summary"
android:fragment="com.android.settings.security.LockscreenDashboardFragment"/>
</PreferenceCategory>
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index 295e896..1585f01 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -30,7 +30,6 @@
<Preference android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
- android:summary="@string/lockscreen_settings_summary"
android:fragment="com.android.settings.security.LockscreenDashboardFragment"/>
</PreferenceCategory>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 5613177..f7705b7 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -30,7 +30,6 @@
<Preference android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
- android:summary="@string/lockscreen_settings_summary"
android:fragment="com.android.settings.security.LockscreenDashboardFragment"/>
</PreferenceCategory>
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b7d2a73..1e64b7f 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -40,7 +40,6 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.Preference.OnPreferenceClickListener;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
import android.telephony.CarrierConfigManager;
@@ -61,11 +60,11 @@
import com.android.settings.enterprise.ManageDeviceAdminPreferenceController;
import com.android.settings.fingerprint.FingerprintSettings;
import com.android.settings.location.LocationPreferenceController;
+import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
-import com.android.settings.search2.SearchFeatureProvider;
import com.android.settings.security.OwnerInfoPreferenceController;
import com.android.settings.security.SecurityFeatureProvider;
import com.android.settings.trustagent.TrustAgentManager;
@@ -102,8 +101,11 @@
private static final String KEY_UNLOCK_SET_OR_CHANGE_PROFILE = "unlock_set_or_change_profile";
private static final String KEY_VISIBLE_PATTERN_PROFILE = "visiblepattern_profile";
private static final String KEY_SECURITY_CATEGORY = "security_category";
- private static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
+ @VisibleForTesting
+ static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
private static final String KEY_UNIFICATION = "unification";
+ @VisibleForTesting
+ static final String KEY_LOCKSCREEN_PREFERENCES = "lockscreen_preferences";
private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
private static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
@@ -170,6 +172,7 @@
private LocationPreferenceController mLocationcontroller;
private ManageDeviceAdminPreferenceController mManageDeviceAdminPreferenceController;
private EnterprisePrivacyPreferenceController mEnterprisePrivacyPreferenceController;
+ private LockScreenNotificationPreferenceController mLockScreenNotificationPreferenceController;
@Override
public int getMetricsCategory() {
@@ -211,6 +214,8 @@
= new ManageDeviceAdminPreferenceController(activity);
mEnterprisePrivacyPreferenceController
= new EnterprisePrivacyPreferenceController(activity, null /* lifecycle */);
+ mLockScreenNotificationPreferenceController
+ = new LockScreenNotificationPreferenceController(activity);
}
private static int getResIdForLockUnlockScreen(Context context,
@@ -312,11 +317,13 @@
mIsAdmin = mUm.isAdminUser();
// Fingerprint and trust agents
+ int numberOfTrustAgent = 0;
PreferenceGroup securityCategory = (PreferenceGroup)
root.findPreference(KEY_SECURITY_CATEGORY);
if (securityCategory != null) {
maybeAddFingerprintPreference(securityCategory, UserHandle.myUserId());
- addTrustAgentSettings(securityCategory);
+ numberOfTrustAgent = addTrustAgentSettings(securityCategory);
+ setLockscreenPreferencesSummary(securityCategory);
}
mVisiblePatternProfile =
@@ -351,11 +358,7 @@
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
// Advanced Security features
- Preference manageAgents = root.findPreference(KEY_MANAGE_TRUST_AGENTS);
- if (manageAgents != null && !mLockPatternUtils.isSecure(MY_USER_ID)) {
- manageAgents.setEnabled(false);
- manageAgents.setSummary(R.string.disabled_because_no_backup_security);
- }
+ initTrustAgentPreference(root, numberOfTrustAgent);
// The above preferences come and go based on security state, so we need to update
// the index. This call is expected to be fairly cheap, but we may want to do something
@@ -410,6 +413,32 @@
return root;
}
+ @VisibleForTesting
+ void initTrustAgentPreference(PreferenceScreen root, int numberOfTrustAgent) {
+ Preference manageAgents = root.findPreference(KEY_MANAGE_TRUST_AGENTS);
+ if (manageAgents != null) {
+ if (!mLockPatternUtils.isSecure(MY_USER_ID)) {
+ manageAgents.setEnabled(false);
+ manageAgents.setSummary(R.string.disabled_because_no_backup_security);
+ } else if (numberOfTrustAgent > 0) {
+ manageAgents.setSummary(getActivity().getResources().getQuantityString(
+ R.plurals.manage_trust_agents_summary_on,
+ numberOfTrustAgent, numberOfTrustAgent));
+ } else {
+ manageAgents.setSummary(R.string.manage_trust_agents_summary);
+ }
+ }
+ }
+
+ @VisibleForTesting
+ void setLockscreenPreferencesSummary(PreferenceGroup group) {
+ final Preference lockscreenPreferences = group.findPreference(KEY_LOCKSCREEN_PREFERENCES);
+ if (lockscreenPreferences != null) {
+ lockscreenPreferences.setSummary(
+ mLockScreenNotificationPreferenceController.getSummaryResource());
+ }
+ }
+
/*
* Sets the preference as disabled by admin if PASSWORD_QUALITY_MANAGED is set.
* The preference must be a RestrictedPreference.
@@ -434,7 +463,8 @@
}
}
- private void addTrustAgentSettings(PreferenceGroup securityCategory) {
+ // Return the number of trust agents being added
+ private int addTrustAgentSettings(PreferenceGroup securityCategory) {
final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID);
ArrayList<TrustAgentComponentInfo> agents = getActiveTrustAgents(
getActivity(), mTrustAgentManager, mLockPatternUtils, mDPM);
@@ -459,6 +489,7 @@
trustAgentPreference.setSummary(R.string.disabled_because_no_backup_security);
}
}
+ return agents.size();
}
/* Return true if a there is a Slot that has Icc.
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 4c8fb2d..d04ae8d 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -73,7 +73,6 @@
import android.provider.ContactsContract.Profile;
import android.provider.ContactsContract.RawContacts;
import android.provider.Settings;
-import android.service.persistentdata.PersistentDataBlockManager;
import android.support.annotation.StringRes;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
diff --git a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
index 71cafba..9f89bc1 100644
--- a/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
+++ b/src/com/android/settings/accessibility/AccessibilityServiceWarning.java
@@ -53,7 +53,7 @@
final View.OnTouchListener filterTouchListener = (View v, MotionEvent event) -> {
// Filter obscured touches by consuming them.
- if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
+ if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Toast.makeText(v.getContext(), R.string.touch_filtered_warning,
Toast.LENGTH_SHORT).show();
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index e59f94b..caa9da1 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -15,9 +15,11 @@
*/
package com.android.settings.applications;
+import android.app.Activity;
import android.content.Context;
import android.provider.SearchIndexableResource;
+import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
@@ -29,6 +31,7 @@
import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
@@ -78,4 +81,55 @@
return Arrays.asList(sir);
}
};
+
+ static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+ private final Context mContext;
+ private final SummaryLoader mSummaryLoader;
+ private final DefaultSmsPreferenceController mDefaultSmsPreferenceController;
+ private final DefaultBrowserPreferenceController mDefaultBrowserPreferenceController;
+ private final DefaultPhonePreferenceController mDefaultPhonePreferenceController;
+
+ public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+ mContext = context;
+ mSummaryLoader = summaryLoader;
+ mDefaultSmsPreferenceController = new DefaultSmsPreferenceController(mContext);
+ mDefaultBrowserPreferenceController = new DefaultBrowserPreferenceController(mContext);
+ mDefaultPhonePreferenceController = new DefaultPhonePreferenceController(mContext);
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (!listening) {
+ return;
+ }
+ CharSequence summary = concatSummaryText(
+ mDefaultSmsPreferenceController.getDefaultAppLabel(),
+ mDefaultBrowserPreferenceController.getDefaultAppLabel());
+ summary = concatSummaryText(summary,
+ mDefaultPhonePreferenceController.getDefaultAppLabel());
+ if (!TextUtils.isEmpty(summary)) {
+ mSummaryLoader.setSummary(this, summary);
+ }
+ }
+
+ private CharSequence concatSummaryText(CharSequence summary1, CharSequence summary2) {
+ if (TextUtils.isEmpty(summary1)) {
+ return summary2;
+ }
+ if (TextUtils.isEmpty(summary2)) {
+ return summary1;
+ }
+ return mContext.getString(R.string.join_many_items_middle, summary1, summary2);
+ }
+ }
+
+ public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
+ new SummaryLoader.SummaryProviderFactory() {
+ @Override
+ public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+ SummaryLoader summaryLoader) {
+ return new AdvancedAppSettings.SummaryProvider(activity, summaryLoader);
+ }
+ };
}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 9967918..0623562 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -91,7 +91,6 @@
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.BatteryEntry;
-import com.android.settings.fuelgauge.PowerUsageDetail;
import com.android.settings.notification.AppNotificationSettings;
import com.android.settings.notification.NotificationBackend;
import com.android.settings.notification.NotificationBackend.AppRow;
diff --git a/src/com/android/settings/applications/UserManagerWrapper.java b/src/com/android/settings/applications/UserManagerWrapper.java
index daefb84..5b4ed2a 100644
--- a/src/com/android/settings/applications/UserManagerWrapper.java
+++ b/src/com/android/settings/applications/UserManagerWrapper.java
@@ -17,6 +17,7 @@
package com.android.settings.applications;
import android.content.pm.UserInfo;
+
import java.util.List;
/**
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
index 93fc6a6..b53a335 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
@@ -49,10 +49,7 @@
@Override
public void updateState(Preference preference) {
final DefaultAppInfo app = getDefaultAppInfo();
- CharSequence defaultAppLabel = null;
- if (app != null) {
- defaultAppLabel = app.loadLabel();
- }
+ CharSequence defaultAppLabel = getDefaultAppLabel();
if (!TextUtils.isEmpty(defaultAppLabel)) {
preference.setSummary(defaultAppLabel);
} else {
@@ -84,4 +81,15 @@
//By default return null. It's up to subclasses to provide logic.
return null;
}
+
+ public CharSequence getDefaultAppLabel() {
+ if (!isAvailable()) {
+ return null;
+ }
+ final DefaultAppInfo app = getDefaultAppInfo();
+ if (app != null) {
+ return app.loadLabel();
+ }
+ return null;
+ }
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index 661fb5b..5c0f9a3 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -51,13 +51,9 @@
@Override
public void updateState(Preference preference) {
super.updateState(preference);
- final DefaultAppInfo defaultApp = getDefaultAppInfo();
- final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null;
- if (TextUtils.isEmpty(defaultAppLabel)) {
- final String onlyAppLabel = getOnlyAppLabel();
- if (!TextUtils.isEmpty(onlyAppLabel)) {
- preference.setSummary(onlyAppLabel);
- }
+ final CharSequence defaultAppLabel = getDefaultAppLabel();
+ if (!TextUtils.isEmpty(defaultAppLabel)) {
+ preference.setSummary(defaultAppLabel);
}
}
@@ -72,6 +68,19 @@
}
}
+ @Override
+ public CharSequence getDefaultAppLabel() {
+ if (!isAvailable()) {
+ return null;
+ }
+ final DefaultAppInfo defaultApp = getDefaultAppInfo();
+ final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null;
+ if (!TextUtils.isEmpty(defaultAppLabel)) {
+ return defaultAppLabel;
+ }
+ return getOnlyAppLabel();
+ }
+
private List<ResolveInfo> getCandidates() {
return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL,
mUserId);
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingService.java b/src/com/android/settings/bluetooth/BluetoothPairingService.java
index 5dfd283..41a5cce 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingService.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingService.java
@@ -65,6 +65,7 @@
return pairingIntent;
}
+ private boolean mRegistered = false;
private final BroadcastReceiver mCancelReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -130,6 +131,7 @@
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_PAIRING_CANCEL);
registerReceiver(mCancelReceiver, filter);
+ mRegistered = true;
startForeground(NOTIFICATION_ID, builder.getNotification());
return START_REDELIVER_INTENT;
@@ -137,7 +139,10 @@
@Override
public void onDestroy() {
- unregisterReceiver(mCancelReceiver);
+ if (mRegistered) {
+ unregisterReceiver(mCancelReceiver);
+ mRegistered = false;
+ }
stopForeground(true);
}
diff --git a/src/com/android/settings/connecteddevice/UsbModePreferenceController.java b/src/com/android/settings/connecteddevice/UsbModePreferenceController.java
index 6c1a28b..a98f068 100644
--- a/src/com/android/settings/connecteddevice/UsbModePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/UsbModePreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbManager;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -77,34 +78,19 @@
mUsbReceiver.register();
}
- public static int getSummary(int mode) {
+ @VisibleForTesting
+ int getSummary(int mode) {
switch (mode) {
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE:
- return R.string.usb_use_charging_only_desc;
+ return R.string.usb_summary_charging_only;
case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE:
- return R.string.usb_use_power_only_desc;
+ return R.string.usb_summary_power_only;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP:
- return R.string.usb_use_file_transfers_desc;
+ return R.string.usb_summary_file_transfers;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP:
- return R.string.usb_use_photo_transfers_desc;
+ return R.string.usb_summary_photo_transfers;
case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI:
- return R.string.usb_use_MIDI_desc;
- }
- return 0;
- }
-
- public static int getTitle(int mode) {
- switch (mode) {
- case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE:
- return R.string.usb_use_charging_only;
- case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE:
- return R.string.usb_use_power_only;
- case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP:
- return R.string.usb_use_file_transfers;
- case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP:
- return R.string.usb_use_photo_transfers;
- case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI:
- return R.string.usb_use_MIDI;
+ return R.string.usb_summary_MIDI;
}
return 0;
}
@@ -117,7 +103,7 @@
if (preference != null) {
if (mUsbReceiver.isConnected()) {
preference.setEnabled(true);
- preference.setSummary(getTitle(mode));
+ preference.setSummary(getSummary(mode));
} else {
preference.setSummary(R.string.disconnected);
preference.setEnabled(false);
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index d1bb9d6..caac95f 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -76,8 +76,8 @@
import com.android.settings.deviceinfo.StorageSettings;
import com.android.settings.display.NightDisplaySettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.BatterySaverSettings;
-import com.android.settings.fuelgauge.PowerUsageDetail;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.gestures.AssistGestureSettings;
import com.android.settings.gestures.DoubleTapPowerSettings;
@@ -210,7 +210,7 @@
ZenModeEventRuleSettings.class.getName(),
ZenModeVisualInterruptionSettings.class.getName(),
ProcessStatsUi.class.getName(),
- PowerUsageDetail.class.getName(),
+ AdvancedPowerUsageDetail.class.getName(),
ProcessStatsSummary.class.getName(),
DrawOverlayDetails.class.getName(),
WriteSettingsDetails.class.getName(),
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 4d4cfe8..adf2938 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -17,44 +17,39 @@
package com.android.settings.deletionhelper;
import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.FragmentManager;
import android.content.ContentResolver;
-import android.content.Intent;
import android.os.Bundle;
-import android.os.SystemProperties;
-import android.os.storage.StorageManager;
import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.DropDownPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.text.format.DateUtils;
import android.text.format.Formatter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
+import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.widget.SwitchBar;
/**
* AutomaticStorageManagerSettings is the Settings screen for configuration and management of the
* automatic storage manager.
*/
-public class AutomaticStorageManagerSettings extends SettingsPreferenceFragment implements
- OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
- public static final int DEFAULT_DAYS_TO_RETAIN = 90;
-
+public class AutomaticStorageManagerSettings extends SettingsPreferenceFragment
+ implements OnPreferenceChangeListener {
private static final String KEY_DAYS = "days";
- private static final String KEY_DELETION_HELPER = "deletion_helper";
private static final String KEY_FREED = "freed_bytes";
- private static final String KEY_STORAGE_MANAGER_SWITCH = "storage_manager_active";
private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
"ro.storage_manager.enabled";
+ private AutomaticStorageManagerSwitchBarController mSwitchController;
private DropDownPreference mDaysToRetain;
private Preference mFreedBytes;
- private Preference mDeletionHelper;
- private SwitchPreference mStorageManagerSwitch;
+ private SwitchBar mSwitchBar;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -63,19 +58,21 @@
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ public View onCreateView(
+ LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View view = super.onCreateView(inflater, container, savedInstanceState);
+
+ initializeDaysToRetainPreference();
+ initializeFreedBytesPreference();
+ initializeSwitchBar();
+
+ return view;
+ }
+
+ private void initializeDaysToRetainPreference() {
mDaysToRetain = (DropDownPreference) findPreference(KEY_DAYS);
mDaysToRetain.setOnPreferenceChangeListener(this);
- mFreedBytes = findPreference(KEY_FREED);
-
- mDeletionHelper = findPreference(KEY_DELETION_HELPER);
- mDeletionHelper.setOnPreferenceClickListener(this);
-
- mStorageManagerSwitch = (SwitchPreference) findPreference(KEY_STORAGE_MANAGER_SWITCH);
- mStorageManagerSwitch.setOnPreferenceChangeListener(this);
-
ContentResolver cr = getContentResolver();
int photosDaysToRetain = Settings.Secure.getInt(cr,
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
@@ -83,7 +80,24 @@
String[] stringValues =
getResources().getStringArray(R.array.automatic_storage_management_days_values);
mDaysToRetain.setValue(stringValues[daysValueToIndex(photosDaysToRetain, stringValues)]);
+ }
+ private void initializeSwitchBar() {
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+ mSwitchBar = activity.getSwitchBar();
+ mSwitchBar.show();
+ mSwitchController =
+ new AutomaticStorageManagerSwitchBarController(
+ getContext(),
+ mSwitchBar,
+ mMetricsFeatureProvider,
+ mDaysToRetain,
+ getFragmentManager());
+ }
+
+ private void initializeFreedBytesPreference() {
+ ContentResolver cr = getContentResolver();
+ mFreedBytes = findPreference(KEY_FREED);
long freedBytes = Settings.Secure.getLong(cr,
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_BYTES_CLEARED,
0);
@@ -93,11 +107,13 @@
if (freedBytes == 0 || lastRunMillis == 0) {
mFreedBytes.setVisible(false);
} else {
- Activity activity = getActivity();
- mFreedBytes.setSummary(activity.getString(
- R.string.automatic_storage_manager_freed_bytes,
- Formatter.formatFileSize(activity, freedBytes),
- DateUtils.formatDateTime(activity, lastRunMillis, DateUtils.FORMAT_SHOW_DATE)));
+ final Activity activity = getActivity();
+ mFreedBytes.setSummary(
+ activity.getString(
+ R.string.automatic_storage_manager_freed_bytes,
+ Formatter.formatFileSize(activity, freedBytes),
+ DateUtils.formatDateTime(
+ activity, lastRunMillis, DateUtils.FORMAT_SHOW_DATE)));
}
}
@@ -107,31 +123,27 @@
boolean isStorageManagerChecked =
Settings.Secure.getInt(getContentResolver(),
Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED, 0) != 0;
- mStorageManagerSwitch.setChecked(isStorageManagerChecked);
+ // Using the setCheckedInternal means the checked status won't propagate through the
+ // listeners -- this will prevent us from accidentally causing a metrics event on resume.
+ mSwitchBar.setCheckedInternal(isStorageManagerChecked);
mDaysToRetain.setEnabled(isStorageManagerChecked);
}
@Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ mSwitchBar.hide();
+ mSwitchController.tearDown();
+ }
+
+ @Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- switch (preference.getKey()) {
- case KEY_STORAGE_MANAGER_SWITCH:
- boolean storageManagerChecked = (boolean) newValue;
- mMetricsFeatureProvider.action(getContext(),
- MetricsEvent.ACTION_TOGGLE_STORAGE_MANAGER, storageManagerChecked);
- mDaysToRetain.setEnabled(storageManagerChecked);
- Settings.Secure.putInt(getContentResolver(),
- Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED,
- storageManagerChecked ? 1 : 0);
- // Only show a warning if enabling.
- if (storageManagerChecked) {
- maybeShowWarning();
- }
- break;
- case KEY_DAYS:
- Settings.Secure.putInt(getContentResolver(),
- Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
- Integer.parseInt((String) newValue));
- break;
+ if (KEY_DAYS.equals(preference.getKey())) {
+ Settings.Secure.putInt(
+ getContentResolver(),
+ Settings.Secure.AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN,
+ Integer.parseInt((String) newValue));
}
return true;
}
@@ -142,15 +154,6 @@
}
@Override
- public boolean onPreferenceClick(Preference preference) {
- if (KEY_DELETION_HELPER.equals(preference.getKey())) {
- Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE);
- getContext().startActivity(intent);
- }
- return true;
- }
-
- @Override
protected int getHelpResource() {
return R.string.help_uri_storage;
}
@@ -164,15 +167,4 @@
}
return indices.length - 1;
}
-
- private void maybeShowWarning() {
- // If the storage manager is on by default, we can use the normal message.
- boolean warningUnneeded = SystemProperties.getBoolean(
- STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY, false);
- if (warningUnneeded) {
- return;
- }
- ActivationWarningFragment fragment = ActivationWarningFragment.newInstance();
- fragment.show(getFragmentManager(), ActivationWarningFragment.TAG);
- }
}
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java
new file mode 100644
index 0000000..a648102
--- /dev/null
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarController.java
@@ -0,0 +1,85 @@
+/*
+ * 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.deletionhelper;
+
+import android.app.FragmentManager;
+import android.content.Context;
+import android.os.SystemProperties;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.widget.Switch;
+
+import com.android.internal.util.Preconditions;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.widget.SwitchBar;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+/** Handles the logic for flipping the storage management toggle on a {@link SwitchBar}. */
+public class AutomaticStorageManagerSwitchBarController
+ implements SwitchBar.OnSwitchChangeListener {
+ private static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY =
+ "ro.storage_manager.enabled";
+
+ private Context mContext;
+ private SwitchBar mSwitchBar;
+ private MetricsFeatureProvider mMetrics;
+ private Preference mDaysToRetainPreference;
+ private FragmentManager mFragmentManager;
+
+ public AutomaticStorageManagerSwitchBarController(
+ Context context,
+ SwitchBar switchBar,
+ MetricsFeatureProvider metrics,
+ Preference daysToRetainPreference,
+ FragmentManager fragmentManager) {
+ mContext = Preconditions.checkNotNull(context);
+ mSwitchBar = Preconditions.checkNotNull(switchBar);
+ mMetrics = Preconditions.checkNotNull(metrics);
+ mDaysToRetainPreference = Preconditions.checkNotNull(daysToRetainPreference);
+ mFragmentManager = Preconditions.checkNotNull(fragmentManager);
+
+ mSwitchBar.addOnSwitchChangeListener(this);
+ }
+
+ @Override
+ public void onSwitchChanged(Switch switchView, boolean isChecked) {
+ mMetrics.action(mContext, MetricsEvent.ACTION_TOGGLE_STORAGE_MANAGER, isChecked);
+ mDaysToRetainPreference.setEnabled(isChecked);
+ Settings.Secure.putInt(
+ mContext.getContentResolver(),
+ Settings.Secure.AUTOMATIC_STORAGE_MANAGER_ENABLED,
+ isChecked ? 1 : 0);
+ // Only show a warning if enabling.
+ if (isChecked) {
+ maybeShowWarning();
+ }
+ }
+
+ /** Unregisters the controller from listening to further events. */
+ public void tearDown() {
+ mSwitchBar.removeOnSwitchChangeListener(this);
+ }
+
+ private void maybeShowWarning() {
+ // If the storage manager is on by default, we don't need to show the additional dialog.
+ if (SystemProperties.getBoolean(STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY, false)) {
+ return;
+ }
+ ActivationWarningFragment fragment = ActivationWarningFragment.newInstance();
+ fragment.show(mFragmentManager, ActivationWarningFragment.TAG);
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 9ddf7b7..b5d7ddf 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -484,28 +484,13 @@
} break;
case R.string.storage_detail_images: {
- intent = new Intent(Intent.ACTION_VIEW);
- intent.setDataAndType(
- DocumentsContract.buildRootUri(AUTHORITY_MEDIA, "images_root"),
- DocumentsContract.Root.MIME_TYPE_ITEM);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
-
+ intent = getIntentForStorage(AUTHORITY_MEDIA, "images_root");
} break;
case R.string.storage_detail_videos: {
- intent = new Intent(Intent.ACTION_VIEW);
- intent.setDataAndType(
- DocumentsContract.buildRootUri(AUTHORITY_MEDIA, "videos_root"),
- DocumentsContract.Root.MIME_TYPE_ITEM);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
-
+ intent = getIntentForStorage(AUTHORITY_MEDIA, "videos_root");
} break;
case R.string.storage_detail_audio: {
- intent = new Intent(DocumentsContract.Root.MIME_TYPE_ITEM);
- intent.setDataAndType(
- DocumentsContract.buildRootUri(AUTHORITY_MEDIA, "audio_root"),
- DocumentsContract.Root.MIME_TYPE_ITEM);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
-
+ intent = getIntentForStorage(AUTHORITY_MEDIA, "audio_root");
} break;
case R.string.storage_detail_system: {
SystemInfoFragment.show(this);
@@ -546,6 +531,16 @@
return super.onPreferenceTreeClick(pref);
}
+ private Intent getIntentForStorage(String authority, String root) {
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(
+ DocumentsContract.buildRootUri(authority, root),
+ DocumentsContract.Root.MIME_TYPE_ITEM);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+
+ return intent;
+ }
+
private final MeasurementReceiver mReceiver = new MeasurementReceiver() {
@Override
public void onDetailsChanged(MeasurementDetails details) {
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 75c0e75..602e65f 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.Loader;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
@@ -47,6 +48,7 @@
import com.android.settings.deviceinfo.storage.StorageAsyncLoader;
import com.android.settings.deviceinfo.storage.StorageItemPreferenceController;
import com.android.settings.deviceinfo.storage.StorageSummaryDonutPreferenceController;
+import com.android.settings.deviceinfo.storage.UserIconLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.applications.StorageStatsSource;
@@ -61,6 +63,7 @@
implements LoaderManager.LoaderCallbacks<SparseArray<StorageAsyncLoader.AppsStorageResult>> {
private static final String TAG = "StorageDashboardFrag";
private static final int STORAGE_JOB_ID = 0;
+ private static final int ICON_JOB_ID = 1;
private static final int OPTIONS_MENU_MIGRATE_DATA = 100;
private VolumeInfo mVolume;
@@ -71,34 +74,6 @@
private List<PreferenceController> mSecondaryUsers;
@Override
- public void onResume() {
- super.onResume();
- getLoaderManager().initLoader(STORAGE_JOB_ID, Bundle.EMPTY, this);
- }
-
- @Override
- public Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> onCreateLoader(int id,
- Bundle args) {
- Context context = getContext();
- return new StorageAsyncLoader(context,
- new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
- mVolume.fsUuid,
- new StorageStatsSource(context),
- new PackageManagerWrapperImpl(context.getPackageManager()));
- }
-
- @Override
- public void onLoadFinished(Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> loader,
- SparseArray<StorageAsyncLoader.AppsStorageResult> data) {
- mPreferenceController.onLoadFinished(data.get(UserHandle.myUserId()));
- updateSecondaryUserControllers(mSecondaryUsers, data);
- }
-
- @Override
- public void onLoaderReset(Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> loader) {
- }
-
- @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -140,6 +115,13 @@
}
@Override
+ public void onResume() {
+ super.onResume();
+ getLoaderManager().initLoader(STORAGE_JOB_ID, Bundle.EMPTY, this);
+ getLoaderManager().initLoader(ICON_JOB_ID, Bundle.EMPTY, new IconLoaderCallbacks());
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.SETTINGS_STORAGE_CATEGORY;
}
@@ -227,4 +209,55 @@
}
};
+
+ @Override
+ public Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> onCreateLoader(int id,
+ Bundle args) {
+ Context context = getContext();
+ return new StorageAsyncLoader(context,
+ new UserManagerWrapperImpl(context.getSystemService(UserManager.class)),
+ mVolume.fsUuid,
+ new StorageStatsSource(context),
+ new PackageManagerWrapperImpl(context.getPackageManager()));
+ }
+
+ @Override
+ public void onLoadFinished(Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> loader,
+ SparseArray<StorageAsyncLoader.AppsStorageResult> data) {
+ mPreferenceController.onLoadFinished(data.get(UserHandle.myUserId()));
+ updateSecondaryUserControllers(mSecondaryUsers, data);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<SparseArray<StorageAsyncLoader.AppsStorageResult>> loader) {
+ }
+
+ /**
+ * IconLoaderCallbacks exists because StorageDashboardFragment already implements
+ * LoaderCallbacks for a different type.
+ */
+ public final class IconLoaderCallbacks
+ implements LoaderManager.LoaderCallbacks<SparseArray<Drawable>> {
+ @Override
+ public Loader<SparseArray<Drawable>> onCreateLoader(int id, Bundle args) {
+ return new UserIconLoader(
+ getContext(),
+ () -> UserIconLoader.loadUserIconsWithContext(getContext()));
+ }
+
+ @Override
+ public void onLoadFinished(
+ Loader<SparseArray<Drawable>> loader, SparseArray<Drawable> data) {
+ mSecondaryUsers
+ .stream()
+ .filter(controller -> controller instanceof UserIconLoader.UserIconHandler)
+ .forEach(
+ controller ->
+ ((UserIconLoader.UserIconHandler) controller)
+ .handleUserIcons(data));
+ }
+
+ @Override
+ public void onLoaderReset(Loader<SparseArray<Drawable>> loader) {}
+ }
}
diff --git a/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
index 5ac16d4..8ba3781 100644
--- a/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
+++ b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
@@ -31,6 +31,7 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -40,7 +41,6 @@
import com.android.settings.R;
import com.android.settingslib.RestrictedLockUtils;
-import com.android.settings.connecteddevice.UsbModePreferenceController;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -136,9 +136,9 @@
View v = mLayoutInflater.inflate(R.layout.restricted_radio_with_summary, container, false);
TextView titleView = (TextView) v.findViewById(android.R.id.title);
- titleView.setText(UsbModePreferenceController.getTitle(mode));
+ titleView.setText(getTitle(mode));
TextView summaryView = (TextView) v.findViewById(android.R.id.summary);
- summaryView.setText(UsbModePreferenceController.getSummary(mode));
+ updateSummary(summaryView, mode);
if (disallowedByAdmin) {
if (mEnforcedAdmin != null) {
@@ -178,4 +178,27 @@
}
}
+ @VisibleForTesting
+ static void updateSummary(TextView summaryView, int mode) {
+ if (mode == (UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE)) {
+ summaryView.setText(R.string.usb_use_power_only_desc);
+ }
+ }
+
+ @VisibleForTesting
+ static int getTitle(int mode) {
+ switch (mode) {
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE:
+ return R.string.usb_use_charging_only;
+ case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE:
+ return R.string.usb_use_power_only;
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP:
+ return R.string.usb_use_file_transfers;
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP:
+ return R.string.usb_use_photo_transfers;
+ case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI:
+ return R.string.usb_use_MIDI;
+ }
+ return 0;
+ }
}
diff --git a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
index b3e89c6..62e946d 100644
--- a/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
+++ b/src/com/android/settings/deviceinfo/storage/SecondaryUserController.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.pm.UserInfo;
+import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
@@ -37,8 +38,8 @@
* SecondaryUserController controls the preferences on the Storage screen which had to do with
* secondary users.
*/
-public class SecondaryUserController extends PreferenceController implements
- StorageAsyncLoader.ResultHandler {
+public class SecondaryUserController extends PreferenceController
+ implements StorageAsyncLoader.ResultHandler, UserIconLoader.UserIconHandler {
// PreferenceGroupKey to try to add our preference onto.
private static final String TARGET_PREFERENCE_GROUP_KEY = "pref_secondary_users";
private static final String PREFERENCE_KEY_BASE = "pref_user_";
@@ -69,8 +70,9 @@
}
if (info == null || Utils.isProfileOf(primaryUser, info)) {
- controllers.add(new UserProfileController(context, info,
- USER_PROFILE_INSERTION_LOCATION));
+ controllers.add(
+ new UserProfileController(
+ context, info, userManager, USER_PROFILE_INSERTION_LOCATION));
continue;
}
@@ -109,8 +111,6 @@
mStoragePreference.setStorageSize(mSize, mTotalSizeBytes);
}
- // TODO(b/36252572): Set the user icon appropriately here.
-
group.setVisible(true);
group.addPreference(mStoragePreference);
}
@@ -161,6 +161,14 @@
}
}
+ @Override
+ public void handleUserIcons(SparseArray<Drawable> fetchedIcons) {
+ Drawable userIcon = fetchedIcons.get(mUser.id);
+ if (userIcon != null) {
+ mStoragePreference.setIcon(userIcon);
+ }
+ }
+
private static class NoSecondaryUserController extends PreferenceController {
public NoSecondaryUserController(Context context) {
super(context);
diff --git a/src/com/android/settings/deviceinfo/storage/UserIconLoader.java b/src/com/android/settings/deviceinfo/storage/UserIconLoader.java
new file mode 100644
index 0000000..4f00c3c
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/storage/UserIconLoader.java
@@ -0,0 +1,75 @@
+/*
+ * 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.deviceinfo.storage;
+
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.graphics.drawable.Drawable;
+import android.os.UserManager;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.internal.util.Preconditions;
+import com.android.settings.Utils;
+import com.android.settings.utils.AsyncLoader;
+
+/**
+ * Fetches a user icon as a loader using a given icon loading lambda.
+ */
+public class UserIconLoader extends AsyncLoader<SparseArray<Drawable>> {
+ private FetchUserIconTask mTask;
+
+ /**
+ * Task to load all user icons.
+ */
+ public interface FetchUserIconTask {
+ SparseArray<Drawable> getUserIcons();
+ }
+
+ /**
+ * Handle the output of this task.
+ */
+ public interface UserIconHandler {
+ void handleUserIcons(SparseArray<Drawable> fetchedIcons);
+ }
+
+ public UserIconLoader(Context context, FetchUserIconTask task) {
+ super(context);
+ mTask = Preconditions.checkNotNull(task);
+ }
+
+ @Override
+ public SparseArray<Drawable> loadInBackground() {
+ return mTask.getUserIcons();
+ }
+
+ @Override
+ protected void onDiscardResult(SparseArray<Drawable> result) {}
+
+ /**
+ * Loads the user icons using a given context. This returns a {@link SparseArray} which maps
+ * user ids to their user icons.
+ */
+ public static SparseArray<Drawable> loadUserIconsWithContext(Context context) {
+ SparseArray<Drawable> value = new SparseArray<>();
+ UserManager um = context.getSystemService(UserManager.class);
+ for (UserInfo userInfo : um.getUsers()) {
+ value.put(userInfo.id, Utils.getUserIcon(context, um, userInfo));
+ }
+ return value;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/storage/UserProfileController.java b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
index 0e19740..18fa7b7 100644
--- a/src/com/android/settings/deviceinfo/storage/UserProfileController.java
+++ b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.storage.VolumeInfo;
import android.support.v7.preference.Preference;
@@ -28,25 +29,27 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.util.Preconditions;
import com.android.settings.Utils;
+import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.core.PreferenceController;
import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.deviceinfo.StorageProfileFragment;
import com.android.settingslib.drawer.SettingsDrawerActivity;
-/**
- * Defines a {@link PreferenceController} which handles a single profile of the primary user.
- */
-public class UserProfileController extends PreferenceController implements
- StorageAsyncLoader.ResultHandler {
+/** Defines a {@link PreferenceController} which handles a single profile of the primary user. */
+public class UserProfileController extends PreferenceController
+ implements StorageAsyncLoader.ResultHandler, UserIconLoader.UserIconHandler {
private static final String PREFERENCE_KEY_BASE = "pref_profile_";
private StorageItemPreference mStoragePreference;
+ private UserManagerWrapper mUserManager;
private UserInfo mUser;
private long mTotalSizeBytes;
private final int mPreferenceOrder;
- public UserProfileController(Context context, UserInfo info, int preferenceOrder) {
+ public UserProfileController(
+ Context context, UserInfo info, UserManagerWrapper userManager, int preferenceOrder) {
super(context);
mUser = Preconditions.checkNotNull(info);
+ mUserManager = userManager;
mPreferenceOrder = preferenceOrder;
}
@@ -66,7 +69,6 @@
mStoragePreference.setOrder(mPreferenceOrder);
mStoragePreference.setKey(PREFERENCE_KEY_BASE + mUser.id);
mStoragePreference.setTitle(mUser.name);
- // TODO(b/36252572): Set user icon here.
screen.addPreference(mStoragePreference);
}
@@ -110,4 +112,12 @@
public void setTotalSize(long totalSize) {
mTotalSizeBytes = totalSize;
}
+
+ @Override
+ public void handleUserIcons(SparseArray<Drawable> fetchedIcons) {
+ Drawable userIcon = fetchedIcons.get(mUser.id);
+ if (userIcon != null) {
+ mStoragePreference.setIcon(userIcon);
+ }
+ }
}
diff --git a/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java b/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java
new file mode 100644
index 0000000..eda4c82
--- /dev/null
+++ b/src/com/android/settings/fingerprint/FingerprintRemoveSidecar.java
@@ -0,0 +1,149 @@
+/*
+ * 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.fingerprint;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
+import android.os.Bundle;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import android.os.UserHandle;
+import java.util.Queue;
+import java.util.LinkedList;
+import android.util.Log;
+
+/**
+ * Sidecar fragment to handle the state around fingerprint removal.
+ */
+public class FingerprintRemoveSidecar extends InstrumentedPreferenceFragment {
+
+ private static final String TAG = "FingerprintRemoveSidecar";
+ private Listener mListener;
+ private Fingerprint mFingerprintRemoving;
+ private Queue<Object> mFingerprintsRemoved;
+ FingerprintManager mFingerprintManager;
+
+ private class RemovalError {
+ Fingerprint fingerprint;
+ int errMsgId;
+ CharSequence errString;
+ public RemovalError(Fingerprint fingerprint, int errMsgId, CharSequence errString) {
+ this.fingerprint = fingerprint;
+ this.errMsgId = errMsgId;
+ this.errString = errString;
+ }
+ }
+
+ private FingerprintManager.RemovalCallback
+ mRemoveCallback = new FingerprintManager.RemovalCallback() {
+ @Override
+ public void onRemovalSucceeded(Fingerprint fingerprint) {
+ if (mListener != null) {
+ mListener.onRemovalSucceeded(fingerprint);
+ } else {
+ mFingerprintsRemoved.add(fingerprint);
+ };
+ mFingerprintRemoving = null;
+ }
+
+ @Override
+ public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) {
+ if (mListener != null) {
+ mListener.onRemovalError(fp, errMsgId, errString);
+ } else {
+ mFingerprintsRemoved.add(new RemovalError(fp, errMsgId, errString));
+ }
+ mFingerprintRemoving = null;
+ }
+ };
+
+ public void startRemove(Fingerprint fingerprint, int userId) {
+ if (mFingerprintRemoving != null) {
+ Log.e(TAG, "Remove already in progress");
+ return;
+ }
+ if (userId != UserHandle.USER_NULL) {
+ mFingerprintManager.setActiveUser(userId);
+ }
+ mFingerprintRemoving = fingerprint;
+ mFingerprintManager.remove(fingerprint, userId, mRemoveCallback);;
+ }
+
+ public FingerprintRemoveSidecar() {
+ mFingerprintsRemoved = new LinkedList<>();
+ }
+
+ public void setFingerprintManager(FingerprintManager fingerprintManager) {
+ mFingerprintManager = fingerprintManager;
+ }
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setRetainInstance(true);
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ }
+
+ public void setListener(Listener listener) {
+ if (mListener == null && listener != null) {
+ while (!mFingerprintsRemoved.isEmpty()) {
+ Object o = mFingerprintsRemoved.poll();
+ if (o instanceof Fingerprint) {
+ listener.onRemovalSucceeded((Fingerprint)o);
+ } else if (o instanceof RemovalError) {
+ RemovalError e = (RemovalError) o;
+ listener.onRemovalError(e.fingerprint, e.errMsgId, e.errString);
+ }
+ }
+ }
+ mListener = listener;
+ }
+
+ public interface Listener {
+ void onRemovalSucceeded(Fingerprint fingerprint);
+ void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString);
+ }
+
+ final boolean isRemovingFingerprint(int fid) {
+ return inProgress() && mFingerprintRemoving.getFingerId() == fid;
+ }
+
+ final boolean inProgress() {
+ return mFingerprintRemoving != null;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.FINGERPRINT_REMOVE_SIDECAR;
+ }
+
+}
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 0f48f8c..01670fe 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -31,7 +31,6 @@
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.AuthenticationCallback;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;
-import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.Handler;
@@ -64,11 +63,11 @@
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.widget.FooterPreference;
-import com.android.settings.widget.FooterPreferenceMixin;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtils;
import java.util.List;
+import java.util.HashMap;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -160,6 +159,10 @@
private Drawable mHighlightDrawable;
private int mUserId;
+ private static final String TAG_REMOVAL_SIDECAR = "removal_sidecar";
+ private FingerprintRemoveSidecar mRemovalSidecar;
+ private HashMap<Integer, String> mFingerprintsRenaming;
+
private AuthenticationCallback mAuthCallback = new AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(AuthenticationResult result) {
@@ -184,22 +187,30 @@
.sendToTarget();
}
};
- private RemovalCallback mRemoveCallback = new RemovalCallback() {
- @Override
+ FingerprintRemoveSidecar.Listener mRemovalListener =
+ new FingerprintRemoveSidecar.Listener() {
public void onRemovalSucceeded(Fingerprint fingerprint) {
mHandler.obtainMessage(MSG_REFRESH_FINGERPRINT_TEMPLATES,
fingerprint.getFingerId(), 0).sendToTarget();
+ updateDialog();
}
-
- @Override
public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) {
final Activity activity = getActivity();
if (activity != null) {
Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
}
+ updateDialog();
+ }
+ private void updateDialog() {
+ RenameDeleteDialog renameDeleteDialog = (RenameDeleteDialog)getFragmentManager().
+ findFragmentByTag(RenameDeleteDialog.class.getName());
+ if (renameDeleteDialog != null) {
+ renameDeleteDialog.enableDelete();
+ }
}
};
+
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
@@ -263,6 +274,9 @@
}
private void retryFingerprint() {
+ if (mRemovalSidecar.inProgress()) {
+ return;
+ }
if (!mInFingerprintLockout) {
mFingerprintCancel = new CancellationSignal();
mFingerprintManager.authenticate(null, mFingerprintCancel, 0 /* flags */,
@@ -278,7 +292,31 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ Activity activity = getActivity();
+ mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
+
+ mRemovalSidecar = (FingerprintRemoveSidecar)
+ getFragmentManager().findFragmentByTag(TAG_REMOVAL_SIDECAR);
+ if (mRemovalSidecar == null) {
+ mRemovalSidecar = new FingerprintRemoveSidecar();
+ getFragmentManager().beginTransaction()
+ .add(mRemovalSidecar, TAG_REMOVAL_SIDECAR).commit();
+ }
+ mRemovalSidecar.setFingerprintManager(mFingerprintManager);
+ mRemovalSidecar.setListener(mRemovalListener);
+
+ RenameDeleteDialog renameDeleteDialog = (RenameDeleteDialog)getFragmentManager().
+ findFragmentByTag(RenameDeleteDialog.class.getName());
+ if (renameDeleteDialog != null) {
+ renameDeleteDialog.setDeleteInProgress(mRemovalSidecar.inProgress());
+ }
+
+ mFingerprintsRenaming = new HashMap<Integer, String>();
+
if (savedInstanceState != null) {
+ mFingerprintsRenaming = (HashMap<Integer, String>)
+ savedInstanceState.getSerializable("mFingerprintsRenaming");
mToken = savedInstanceState.getByteArray(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN);
mLaunchedConfirm = savedInstanceState.getBoolean(
@@ -287,9 +325,6 @@
mUserId = getActivity().getIntent().getIntExtra(
Intent.EXTRA_USER_ID, UserHandle.myUserId());
- Activity activity = getActivity();
- mFingerprintManager = Utils.getFingerprintManagerOrNull(activity);
-
// Need to authenticate a session token if none
if (mToken == null && mLaunchedConfirm == false) {
mLaunchedConfirm = true;
@@ -347,6 +382,12 @@
pref.setFingerprint(item);
pref.setPersistent(false);
pref.setIcon(R.drawable.ic_fingerprint_24dp);
+ if (mRemovalSidecar.isRemovingFingerprint(item.getFingerId())) {
+ pref.setEnabled(false);
+ }
+ if (mFingerprintsRenaming.containsKey(item.getFingerId())) {
+ pref.setTitle(mFingerprintsRenaming.get(item.getFingerId()));
+ }
root.addPreference(pref);
pref.setOnPreferenceChangeListener(this);
}
@@ -360,15 +401,20 @@
}
private void updateAddPreference() {
+ if (getActivity() == null) return; // Activity went away
+
/* Disable preference if too many fingerprints added */
final int max = getContext().getResources().getInteger(
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
boolean tooMany = mFingerprintManager.getEnrolledFingerprints(mUserId).size() >= max;
+ // retryFingerprint() will be called when remove finishes
+ // need to disable enroll or have a way to determine if enroll is in progress
+ final boolean removalInProgress = mRemovalSidecar.inProgress();
CharSequence maxSummary = tooMany ?
getContext().getString(R.string.fingerprint_add_max, max) : "";
Preference addPreference = findPreference(KEY_FINGERPRINT_ADD);
addPreference.setSummary(maxSummary);
- addPreference.setEnabled(!tooMany);
+ addPreference.setEnabled(!tooMany && !removalInProgress);
}
private static String genKey(int id) {
@@ -381,6 +427,9 @@
// Make sure we reload the preference hierarchy since fingerprints may be added,
// deleted or renamed.
updatePreferences();
+ if (mRemovalSidecar != null) {
+ mRemovalSidecar.setListener(mRemovalListener);
+ }
}
private void updatePreferences() {
@@ -392,6 +441,9 @@
public void onPause() {
super.onPause();
stopFingerprint();
+ if (mRemovalSidecar != null) {
+ mRemovalSidecar.setListener(null);
+ }
}
@Override
@@ -399,6 +451,7 @@
outState.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
mToken);
outState.putBoolean(KEY_LAUNCHED_CONFIRM, mLaunchedConfirm);
+ outState.putSerializable("mFingerprintsRenaming", mFingerprintsRenaming);
}
@Override
@@ -413,7 +466,7 @@
startActivityForResult(intent, ADD_FINGERPRINT_REQUEST);
} else if (pref instanceof FingerprintPreference) {
FingerprintPreference fpref = (FingerprintPreference) pref;
- final Fingerprint fp =fpref.getFingerprint();
+ final Fingerprint fp = fpref.getFingerprint();
showRenameDeleteDialog(fp);
return super.onPreferenceTreeClick(pref);
}
@@ -423,7 +476,14 @@
private void showRenameDeleteDialog(final Fingerprint fp) {
RenameDeleteDialog renameDeleteDialog = new RenameDeleteDialog();
Bundle args = new Bundle();
- args.putParcelable("fingerprint", fp);
+ if (mFingerprintsRenaming.containsKey(fp.getFingerId())) {
+ final Fingerprint f = new Fingerprint(mFingerprintsRenaming.get(fp.getFingerId()),
+ fp.getGroupId(), fp.getFingerId(), fp.getDeviceId());
+ args.putParcelable("fingerprint", f);
+ } else {
+ args.putParcelable("fingerprint", fp);
+ }
+ renameDeleteDialog.setDeleteInProgress(mRemovalSidecar.inProgress());
renameDeleteDialog.setArguments(args);
renameDeleteDialog.setTargetFragment(this, 0);
renameDeleteDialog.show(getFragmentManager(), RenameDeleteDialog.class.getName());
@@ -535,11 +595,16 @@
}
private void deleteFingerPrint(Fingerprint fingerPrint) {
- mFingerprintManager.remove(fingerPrint, mUserId, mRemoveCallback);
+ mRemovalSidecar.startRemove(fingerPrint, mUserId);
+ String name = genKey(fingerPrint.getFingerId());
+ Preference prefToRemove = findPreference(name);
+ prefToRemove.setEnabled(false);
+ updateAddPreference();
}
private void renameFingerPrint(int fingerId, String newName) {
mFingerprintManager.rename(fingerId, mUserId, newName);
+ mFingerprintsRenaming.put(fingerId, newName);
updatePreferences();
}
@@ -559,7 +624,12 @@
private Boolean mTextHadFocus;
private int mTextSelectionStart;
private int mTextSelectionEnd;
+ private AlertDialog mAlertDialog;
+ private boolean mDeleteInProgress;
+ public void setDeleteInProgress(boolean deleteInProgress) {
+ mDeleteInProgress = deleteInProgress;
+ }
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mFp = getArguments().getParcelable("fingerprint");
@@ -569,7 +639,7 @@
mTextSelectionStart = savedInstanceState.getInt("startSelection");
mTextSelectionEnd = savedInstanceState.getInt("endSelection");
}
- final AlertDialog alertDialog = new AlertDialog.Builder(getActivity())
+ mAlertDialog = new AlertDialog.Builder(getActivity())
.setView(R.layout.fingerprint_rename_dialog)
.setPositiveButton(R.string.security_settings_fingerprint_enroll_dialog_ok,
new DialogInterface.OnClickListener() {
@@ -603,10 +673,10 @@
}
})
.create();
- alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
+ mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
- mDialogTextField = (EditText) alertDialog.findViewById(
+ mDialogTextField = (EditText) mAlertDialog.findViewById(
R.id.fingerprint_rename_field);
CharSequence name = mFingerName == null ? mFp.getName() : mFingerName;
mDialogTextField.setText(name);
@@ -615,14 +685,24 @@
} else {
mDialogTextField.setSelection(mTextSelectionStart, mTextSelectionEnd);
}
+ if (mDeleteInProgress) {
+ mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
+ }
}
});
if (mTextHadFocus == null || mTextHadFocus) {
// Request the IME
- alertDialog.getWindow().setSoftInputMode(
+ mAlertDialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
- return alertDialog;
+ return mAlertDialog;
+ }
+
+ public void enableDelete() {
+ mDeleteInProgress = false;
+ if (mAlertDialog != null) {
+ mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(true);
+ }
}
private void onDeleteClick(DialogInterface dialog) {
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 8be3b14..320031e 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -58,7 +58,6 @@
* 1. Detail battery usage information for app(i.e. usage time, usage amount)
* 2. Battery related controls for app(i.e uninstall, force stop)
*
- * This fragment will replace {@link PowerUsageDetail}
*/
public class AdvancedPowerUsageDetail extends PowerUsageBase implements
ButtonActionDialogFragment.AppButtonsDialogListener {
@@ -105,10 +104,11 @@
final Bundle args = new Bundle();
final BatterySipper sipper = entry.sipper;
final BatteryStats.Uid uid = sipper.uidObj;
+ final BatteryUtils batteryUtils = BatteryUtils.getInstance(caller);
- final long backgroundTimeMs = BatteryUtils.getProcessTimeMs(
+ final long backgroundTimeMs = batteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.BACKGROUND, uid, which);
- final long foregroundTimeMs = BatteryUtils.getProcessTimeMs(
+ final long foregroundTimeMs = batteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.FOREGROUND, uid, which);
if (ArrayUtils.isEmpty(sipper.mPackages)) {
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 85bc0fd..a3ea5cd 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -16,9 +16,13 @@
package com.android.settings.fuelgauge;
import android.annotation.IntDef;
+import android.content.Context;
+import android.content.pm.PackageManager;
import android.os.BatteryStats;
import android.os.SystemClock;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -38,7 +42,23 @@
int ALL = 2;
}
- public static long getProcessTimeMs(@StatusType int type, @Nullable BatteryStats.Uid uid,
+ private static final String TAG = "BatteryUtils";
+ private static BatteryUtils sInstance;
+
+ private PackageManager mPackageManager;
+
+ public static BatteryUtils getInstance(Context context) {
+ if (sInstance == null || sInstance.isDataCorrupted()) {
+ sInstance = new BatteryUtils(context);
+ }
+ return sInstance;
+ }
+
+ private BatteryUtils(Context context) {
+ mPackageManager = context.getPackageManager();
+ }
+
+ public long getProcessTimeMs(@StatusType int type, @Nullable BatteryStats.Uid uid,
int which) {
if (uid == null) {
return 0;
@@ -56,34 +76,46 @@
return 0;
}
- private static long getProcessBackgroundTimeMs(BatteryStats.Uid uid, int which) {
+ private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, int which) {
final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
final long timeUs = uid.getProcessStateTime(
BatteryStats.Uid.PROCESS_STATE_BACKGROUND, rawRealTimeUs, which);
- return convertUsToMs(timeUs);
+
+ Log.v(TAG, "package: " + mPackageManager.getNameForUid(uid.getUid()));
+ Log.v(TAG, "background time(us): " + timeUs);
+ return convertUsToMs(timeUs);
}
- private static long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
+ private long getProcessForegroundTimeMs(BatteryStats.Uid uid, int which) {
final long rawRealTimeUs = convertMsToUs(SystemClock.elapsedRealtime());
final int foregroundTypes[] = {BatteryStats.Uid.PROCESS_STATE_TOP,
BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
BatteryStats.Uid.PROCESS_STATE_FOREGROUND};
+ Log.v(TAG, "package: " + mPackageManager.getNameForUid(uid.getUid()));
+
long timeUs = 0;
for (int type : foregroundTypes) {
- timeUs += uid.getProcessStateTime(type, rawRealTimeUs, which);
+ final long localTime = uid.getProcessStateTime(type, rawRealTimeUs, which);
+ Log.v(TAG, "type: " + type + " time(us): " + localTime);
+ timeUs += localTime;
}
+ Log.v(TAG, "foreground time(us): " + timeUs);
return convertUsToMs(timeUs);
}
- private static long convertUsToMs(long timeUs) {
+ private long convertUsToMs(long timeUs) {
return timeUs / 1000;
}
- private static long convertMsToUs(long timeMs) {
+ private long convertMsToUs(long timeMs) {
return timeMs * 1000;
}
+ private boolean isDataCorrupted() {
+ return mPackageManager == null;
+ }
+
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index fe0cf4d..3509834 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -66,13 +66,15 @@
UsageType.USER,
UsageType.IDLE,
UsageType.APP,
- UsageType.UNACCOUNTED};
+ UsageType.UNACCOUNTED,
+ UsageType.OVERCOUNTED};
private BatteryHistoryPreference mHistPref;
private PreferenceGroup mUsageListGroup;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
private PackageManager mPackageManager;
private UserManager mUserManager;
private Map<Integer, PowerUsageData> mBatteryDataMap;
+ private BatteryUtils mBatteryUtils;
Handler mHandler = new Handler() {
@@ -116,6 +118,7 @@
.getPowerUsageFeatureProvider(context);
mPackageManager = context.getPackageManager();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ mBatteryUtils = BatteryUtils.getInstance(context);
}
@Override
@@ -169,6 +172,9 @@
mUsageListGroup.removeAll();
for (int i = 0, size = dataList.size(); i < size; i++) {
final PowerUsageData batteryData = dataList.get(i);
+ if (shouldHide(batteryData)) {
+ continue;
+ }
final PowerGaugePreference pref = new PowerGaugePreference(getPrefContext());
pref.setKey(String.valueOf(batteryData.usageType));
@@ -199,6 +205,8 @@
return UsageType.CELL;
} else if (drainType == DrainType.UNACCOUNTED) {
return UsageType.UNACCOUNTED;
+ } else if (drainType == DrainType.OVERCOUNTED) {
+ return UsageType.OVERCOUNTED;
} else if (mPowerUsageFeatureProvider.isTypeSystem(sipper)) {
return UsageType.SYSTEM;
} else if (mPowerUsageFeatureProvider.isTypeService(sipper)) {
@@ -209,6 +217,16 @@
}
@VisibleForTesting
+ boolean shouldHide(PowerUsageData powerUsageData) {
+ if (powerUsageData.usageType == UsageType.UNACCOUNTED
+ || powerUsageData.usageType == UsageType.OVERCOUNTED) {
+ return true;
+ }
+
+ return false;
+ }
+
+ @VisibleForTesting
List<PowerUsageData> parsePowerUsageData(BatteryStatsHelper statusHelper) {
final List<BatterySipper> batterySippers = statusHelper.getUsageList();
final Map<Integer, PowerUsageData> batteryDataMap = new HashMap<>();
@@ -223,8 +241,8 @@
final PowerUsageData usageData = batteryDataMap.get(extractUsageType(sipper));
usageData.totalPowerMah += sipper.totalPowerMah;
if (sipper.drainType == DrainType.APP && sipper.usageTimeMs != 0) {
- sipper.usageTimeMs = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL,
- sipper.uidObj, STATUS_TYPE);
+ sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
+ BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, STATUS_TYPE);
}
usageData.totalUsageTimeMs += sipper.usageTimeMs;
usageData.usageList.add(sipper);
@@ -297,7 +315,8 @@
UsageType.BLUETOOTH,
UsageType.USER,
UsageType.IDLE,
- UsageType.UNACCOUNTED})
+ UsageType.UNACCOUNTED,
+ UsageType.OVERCOUNTED})
public @interface UsageType {
int APP = 0;
int WIFI = 1;
@@ -308,6 +327,7 @@
int USER = 6;
int IDLE = 7;
int UNACCOUNTED = 8;
+ int OVERCOUNTED = 9;
}
@StringRes
@@ -353,6 +373,8 @@
return R.string.power_idle;
case UsageType.UNACCOUNTED:
return R.string.power_unaccounted;
+ case UsageType.OVERCOUNTED:
+ return R.string.power_overcounted;
case UsageType.APP:
default:
return R.string.power_apps;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
deleted file mode 100644
index f0d0a10..0000000
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ /dev/null
@@ -1,826 +0,0 @@
-/*
- * Copyright (C) 2009 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 android.app.Activity;
-import android.app.ActivityManager;
-import android.app.ApplicationErrorReport;
-import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.BatteryStats;
-import android.os.Bundle;
-import android.os.Process;
-import android.os.UserHandle;
-import android.support.v14.preference.PreferenceFragment;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceClickListener;
-import android.support.v7.preference.PreferenceCategory;
-import android.support.v7.preference.PreferenceScreen;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatterySipper.DrainType;
-import com.android.internal.os.BatteryStatsHelper;
-import com.android.internal.util.FastPrintWriter;
-import com.android.settings.AppHeader;
-import com.android.settings.DisplaySettings;
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.Utils;
-import com.android.settings.applications.AppHeaderController;
-import com.android.settings.applications.InstalledAppDetails;
-import com.android.settings.applications.LayoutPreference;
-import com.android.settings.bluetooth.BluetoothSettings;
-import com.android.settings.core.PreferenceController;
-import com.android.settings.location.LocationSettings;
-import com.android.settings.network.NetworkDashboardFragment;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.wifi.WifiSettings;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-
-// TODO(b/35810915): Delete this page once ag/1971493 is done.
-public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickListener {
-
- // Note: Must match the sequence of the DrainType
- private static int[] sDrainTypeDesciptions = new int[] {
- R.string.battery_desc_standby,
- R.string.battery_desc_radio,
- R.string.battery_desc_voice,
- R.string.battery_desc_wifi,
- R.string.battery_desc_bluetooth,
- R.string.battery_desc_flashlight,
- R.string.battery_desc_display,
- R.string.battery_desc_apps,
- R.string.battery_desc_users,
- R.string.battery_desc_unaccounted,
- R.string.battery_desc_overcounted,
- R.string.battery_desc_camera,
- };
-
- public static void startBatteryDetailPage(SettingsActivity caller,
- PreferenceFragment fragment, BatteryStatsHelper helper, int statsType,
- BatteryEntry entry, boolean showLocationButton, boolean includeAppInfo) {
- // Initialize mStats if necessary.
- helper.getStats();
-
- final int dischargeAmount = helper.getStats().getDischargeAmount(statsType);
- Bundle args = new Bundle();
- args.putString(PowerUsageDetail.EXTRA_TITLE, entry.name);
- args.putInt(PowerUsageDetail.EXTRA_PERCENT, (int)
- ((entry.sipper.totalPowerMah * dischargeAmount / helper.getTotalPower()) + .5));
- args.putInt(PowerUsageDetail.EXTRA_GAUGE, (int)
- Math.ceil(entry.sipper.totalPowerMah * 100 / helper.getMaxPower()));
- args.putLong(PowerUsageDetail.EXTRA_USAGE_DURATION, helper.getStatsPeriod());
- args.putString(PowerUsageDetail.EXTRA_ICON_PACKAGE, entry.defaultPackageName);
- args.putInt(PowerUsageDetail.EXTRA_ICON_ID, entry.iconId);
- args.putDouble(PowerUsageDetail.EXTRA_NO_COVERAGE, entry.sipper.noCoveragePercent);
- if (entry.sipper.uidObj != null) {
- args.putInt(PowerUsageDetail.EXTRA_UID, entry.sipper.uidObj.getUid());
- }
- args.putSerializable(PowerUsageDetail.EXTRA_DRAIN_TYPE, entry.sipper.drainType);
- args.putBoolean(PowerUsageDetail.EXTRA_SHOW_LOCATION_BUTTON, showLocationButton);
- args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, !includeAppInfo);
-
- int userId = UserHandle.myUserId();
- int[] types;
- double[] values;
- switch (entry.sipper.drainType) {
- case APP:
- case USER:
- {
- BatteryStats.Uid uid = entry.sipper.uidObj;
- types = new int[] {
- R.string.usage_type_cpu,
- R.string.usage_type_cpu_foreground,
- R.string.usage_type_wake_lock,
- R.string.usage_type_gps,
- R.string.usage_type_wifi_running,
- R.string.usage_type_data_recv,
- R.string.usage_type_data_send,
- R.string.usage_type_radio_active,
- R.string.usage_type_data_wifi_recv,
- R.string.usage_type_data_wifi_send,
- R.string.usage_type_audio,
- R.string.usage_type_video,
- R.string.usage_type_camera,
- R.string.usage_type_flashlight,
- R.string.usage_type_computed_power,
- };
- values = new double[] {
- entry.sipper.cpuTimeMs,
- entry.sipper.cpuFgTimeMs,
- entry.sipper.wakeLockTimeMs,
- entry.sipper.gpsTimeMs,
- entry.sipper.wifiRunningTimeMs,
- entry.sipper.mobileRxPackets,
- entry.sipper.mobileTxPackets,
- entry.sipper.mobileActive,
- entry.sipper.wifiRxPackets,
- entry.sipper.wifiTxPackets,
- 0,
- 0,
- entry.sipper.cameraTimeMs,
- entry.sipper.flashlightTimeMs,
- entry.sipper.totalPowerMah,
- };
-
- if (entry.sipper.drainType == BatterySipper.DrainType.APP) {
- Writer result = new StringWriter();
- PrintWriter printWriter = new FastPrintWriter(result, false, 1024);
- helper.getStats().dumpLocked(caller, printWriter, "", helper.getStatsType(),
- uid.getUid());
- printWriter.flush();
- args.putString(PowerUsageDetail.EXTRA_REPORT_DETAILS, result.toString());
-
- result = new StringWriter();
- printWriter = new FastPrintWriter(result, false, 1024);
- helper.getStats().dumpCheckinLocked(caller, printWriter, helper.getStatsType(),
- uid.getUid());
- printWriter.flush();
- args.putString(PowerUsageDetail.EXTRA_REPORT_CHECKIN_DETAILS,
- result.toString());
- if (uid.getUid() != 0) {
- userId = UserHandle.getUserId(uid.getUid());
- }
- }
- }
- break;
- case CELL:
- {
- types = new int[] {
- R.string.usage_type_on_time,
- R.string.usage_type_no_coverage,
- R.string.usage_type_radio_active,
- R.string.usage_type_computed_power,
- };
- values = new double[] {
- entry.sipper.usageTimeMs,
- entry.sipper.noCoveragePercent,
- entry.sipper.mobileActive,
- entry.sipper.totalPowerMah,
- };
- }
- break;
- case WIFI:
- {
- types = new int[] {
- R.string.usage_type_wifi_running,
- R.string.usage_type_cpu,
- R.string.usage_type_cpu_foreground,
- R.string.usage_type_wake_lock,
- R.string.usage_type_data_recv,
- R.string.usage_type_data_send,
- R.string.usage_type_data_wifi_recv,
- R.string.usage_type_data_wifi_send,
- R.string.usage_type_computed_power,
- };
- values = new double[] {
- entry.sipper.wifiRunningTimeMs,
- entry.sipper.cpuTimeMs,
- entry.sipper.cpuFgTimeMs,
- entry.sipper.wakeLockTimeMs,
- entry.sipper.mobileRxPackets,
- entry.sipper.mobileTxPackets,
- entry.sipper.wifiRxPackets,
- entry.sipper.wifiTxPackets,
- entry.sipper.totalPowerMah,
- };
- } break;
- case BLUETOOTH:
- {
- types = new int[] {
- R.string.usage_type_on_time,
- R.string.usage_type_cpu,
- R.string.usage_type_cpu_foreground,
- R.string.usage_type_wake_lock,
- R.string.usage_type_data_recv,
- R.string.usage_type_data_send,
- R.string.usage_type_data_wifi_recv,
- R.string.usage_type_data_wifi_send,
- R.string.usage_type_computed_power,
- };
- values = new double[] {
- entry.sipper.usageTimeMs,
- entry.sipper.cpuTimeMs,
- entry.sipper.cpuFgTimeMs,
- entry.sipper.wakeLockTimeMs,
- entry.sipper.mobileRxPackets,
- entry.sipper.mobileTxPackets,
- entry.sipper.wifiRxPackets,
- entry.sipper.wifiTxPackets,
- entry.sipper.totalPowerMah,
- };
- } break;
- case UNACCOUNTED:
- {
- types = new int[] {
- R.string.usage_type_total_battery_capacity,
- R.string.usage_type_computed_power,
- R.string.usage_type_actual_power,
- };
- values = new double[] {
- helper.getPowerProfile().getBatteryCapacity(),
- helper.getComputedPower(),
- helper.getMinDrainedPower(),
- };
- } break;
- case OVERCOUNTED:
- {
- types = new int[] {
- R.string.usage_type_total_battery_capacity,
- R.string.usage_type_computed_power,
- R.string.usage_type_actual_power,
- };
- values = new double[] {
- helper.getPowerProfile().getBatteryCapacity(),
- helper.getComputedPower(),
- helper.getMaxDrainedPower(),
- };
- } break;
- default:
- {
- types = new int[] {
- R.string.usage_type_on_time,
- R.string.usage_type_computed_power,
- };
- values = new double[] {
- entry.sipper.usageTimeMs,
- entry.sipper.totalPowerMah,
- };
- }
- }
- args.putIntArray(PowerUsageDetail.EXTRA_DETAIL_TYPES, types);
- args.putDoubleArray(PowerUsageDetail.EXTRA_DETAIL_VALUES, values);
-
- caller.startPreferencePanelAsUser(fragment, PowerUsageDetail.class.getName(), args,
- R.string.details_title, null, new UserHandle(userId));
- }
-
- public static final int ACTION_DISPLAY_SETTINGS = 1;
- public static final int ACTION_WIFI_SETTINGS = 2;
- public static final int ACTION_BLUETOOTH_SETTINGS = 3;
- public static final int ACTION_WIRELESS_SETTINGS = 4;
- public static final int ACTION_APP_DETAILS = 5;
- public static final int ACTION_LOCATION_SETTINGS = 6;
- public static final int ACTION_FORCE_STOP = 7;
- public static final int ACTION_REPORT = 8;
-
- public static final int USAGE_SINCE_UNPLUGGED = 1;
- public static final int USAGE_SINCE_RESET = 2;
-
- public static final String EXTRA_TITLE = "title";
- public static final String EXTRA_PERCENT = "percent";
- public static final String EXTRA_GAUGE = "gauge";
- public static final String EXTRA_UID = "uid";
- public static final String EXTRA_USAGE_SINCE = "since";
- public static final String EXTRA_USAGE_DURATION = "duration";
- public static final String EXTRA_REPORT_DETAILS = "report_details";
- public static final String EXTRA_REPORT_CHECKIN_DETAILS = "report_checkin_details";
- public static final String EXTRA_DETAIL_TYPES = "types"; // Array of usage types (cpu, gps, etc)
- public static final String EXTRA_DETAIL_VALUES = "values"; // Array of doubles
- public static final String EXTRA_DRAIN_TYPE = "drainType"; // DrainType
- public static final String EXTRA_ICON_PACKAGE = "iconPackage"; // String
- public static final String EXTRA_NO_COVERAGE = "noCoverage";
- public static final String EXTRA_ICON_ID = "iconId"; // Int
- public static final String EXTRA_SHOW_LOCATION_BUTTON = "showLocationButton"; // Boolean
-
- private static final String TAG = "PowerUsageDetail";
-
- private static final String KEY_DETAILS_PARENT = "details_parent";
- private static final String KEY_CONTROLS_PARENT = "controls_parent";
- private static final String KEY_MESSAGES_PARENT = "messages_parent";
- private static final String KEY_PACKAGES_PARENT = "packages_parent";
- private static final String KEY_TWO_BUTTONS = "two_buttons";
- private static final String KEY_HIGH_POWER = "high_power";
-
- private PackageManager mPm;
- private DevicePolicyManager mDpm;
- private int[] mTypes;
- private int mUid;
- private double[] mValues;
- private Button mForceStopButton;
- private Button mReportButton;
- private BatterySipper.DrainType mDrainType;
- private double mNoCoverage; // Percentage of time that there was no coverage
- private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
-
- private PreferenceCategory mDetailsParent;
- private PreferenceCategory mControlsParent;
- private PreferenceCategory mMessagesParent;
- private PreferenceCategory mPackagesParent;
-
- private boolean mUsesGps;
- private boolean mShowLocationButton;
-
- private String[] mPackages;
-
- ApplicationInfo mApp;
- ComponentName mInstaller;
- private Preference mHighPower;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- Activity activity = getActivity();
- mPm = activity.getPackageManager();
- mDpm = (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE);
-
- mDetailsParent = (PreferenceCategory) findPreference(KEY_DETAILS_PARENT);
- mControlsParent = (PreferenceCategory) findPreference(KEY_CONTROLS_PARENT);
- mMessagesParent = (PreferenceCategory) findPreference(KEY_MESSAGES_PARENT);
- mPackagesParent = (PreferenceCategory) findPreference(KEY_PACKAGES_PARENT);
-
- mPowerUsageFeatureProvider =
- FeatureFactory.getFactory(activity).getPowerUsageFeatureProvider(activity);
-
- createDetails();
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- checkForceStop();
- if (mHighPower != null) {
- mHighPower.setSummary(HighPowerDetail.getSummary(getActivity(), mApp.packageName));
- }
-
- setupHeader();
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.power_usage_details;
- }
-
- @Override
- protected List<PreferenceController> getPreferenceControllers(Context context) {
- final List<PreferenceController> controllers = new ArrayList<>();
- final int uid = getArguments().getInt(EXTRA_UID, 0);
- controllers.add(new BackgroundActivityPreferenceController(context, uid));
-
- return controllers;
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (mHighPower != null) {
- mHighPower.setSummary(HighPowerDetail.getSummary(getActivity(), mApp.packageName));
- }
- }
-
- private void createDetails() {
- final Bundle args = getArguments();
- Context context = getActivity();
- mUid = args.getInt(EXTRA_UID, 0);
- mPackages = context.getPackageManager().getPackagesForUid(mUid);
- mDrainType = (BatterySipper.DrainType) args.getSerializable(EXTRA_DRAIN_TYPE);
- mNoCoverage = args.getDouble(EXTRA_NO_COVERAGE, 0);
- mShowLocationButton = args.getBoolean(EXTRA_SHOW_LOCATION_BUTTON);
-
- mTypes = args.getIntArray(EXTRA_DETAIL_TYPES);
- mValues = args.getDoubleArray(EXTRA_DETAIL_VALUES);
-
- LayoutPreference twoButtons = (LayoutPreference) findPreference(KEY_TWO_BUTTONS);
- mForceStopButton = (Button) twoButtons.findViewById(R.id.left_button);
- mReportButton = (Button) twoButtons.findViewById(R.id.right_button);
- mForceStopButton.setEnabled(false);
-
- if (mUid >= Process.FIRST_APPLICATION_UID) {
- mForceStopButton.setText(R.string.force_stop);
- mForceStopButton.setTag(ACTION_FORCE_STOP);
- mForceStopButton.setOnClickListener(this);
- mReportButton.setText(com.android.internal.R.string.report);
- mReportButton.setTag(ACTION_REPORT);
- mReportButton.setOnClickListener(this);
-
- if (mPackages != null && mPackages.length > 0) {
- try {
- mApp = context.getPackageManager().getApplicationInfo(
- mPackages[0], 0);
- } catch (NameNotFoundException e) {
- }
- } else {
- Log.d(TAG, "No packages!!");
- }
- // check if error reporting is enabled in secure settings
- int enabled = android.provider.Settings.Global.getInt(context.getContentResolver(),
- android.provider.Settings.Global.SEND_ACTION_APP_ERROR, 0);
- if (enabled != 0) {
- if (mApp != null) {
- mInstaller = ApplicationErrorReport.getErrorReportReceiver(
- context, mPackages[0], mApp.flags);
- }
- mReportButton.setEnabled(mInstaller != null);
- } else {
- removePreference(KEY_TWO_BUTTONS);
- }
- if (mApp != null
- && PowerWhitelistBackend.getInstance().isWhitelisted(mApp.packageName)) {
- mHighPower = findPreference(KEY_HIGH_POWER);
- mHighPower.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- HighPowerDetail.show(PowerUsageDetail.this, mApp.packageName, 0, false);
- return true;
- }
- });
- } else {
- mControlsParent.removePreference(findPreference(KEY_HIGH_POWER));
- }
- } else {
- removePreference(KEY_TWO_BUTTONS);
- mControlsParent.removePreference(findPreference(KEY_HIGH_POWER));
- }
-
- refreshStats();
-
- fillDetailsSection();
- fillPackagesSection(mUid);
- fillControlsSection(mUid);
- fillMessagesSection(mUid);
- }
-
- private void setupHeader() {
- final Activity activity = getActivity();
- final Bundle args = getArguments();
- final String title = args.getString(EXTRA_TITLE);
- final int iconId = args.getInt(EXTRA_ICON_ID, 0);
- String pkg = args.getString(EXTRA_ICON_PACKAGE);
- Drawable appIcon = null;
- int uid = -1;
- final PackageManager pm = activity.getPackageManager();
-
- if (!TextUtils.isEmpty(pkg)) {
- try {
- ApplicationInfo ai = pm.getPackageInfo(pkg, 0).applicationInfo;
- if (ai != null) {
- appIcon = ai.loadIcon(pm);
- uid = ai.uid;
- }
- } catch (NameNotFoundException nnfe) {
- // Use default icon
- }
- } else if (iconId != 0) {
- appIcon = activity.getDrawable(iconId);
- }
- if (appIcon == null) {
- appIcon = activity.getPackageManager().getDefaultActivityIcon();
- }
-
- if (pkg == null && mPackages != null) {
- pkg = mPackages[0];
- }
- final PreferenceScreen screen = getPreferenceScreen();
- final Preference appHeaderPref =
- findPreference(AppHeaderController.PREF_KEY_APP_HEADER);
- if (appHeaderPref != null) {
- return;
- }
- final Preference pref = FeatureFactory.getFactory(activity)
- .getApplicationFeatureProvider(activity)
- .newAppHeaderController(this, null /* appHeader */)
- .setIcon(appIcon)
- .setLabel(title)
- .setPackageName(pkg)
- .setUid(uid)
- .setButtonActions(AppHeaderController.ActionType.ACTION_APP_INFO,
- AppHeaderController.ActionType.ACTION_NONE)
- .done(getPrefContext());
- screen.addPreference(pref);
- }
-
- @Override
- public void onClick(View v) {
- doAction((Integer) v.getTag());
- }
-
- // utility method used to start sub activity
- private void startApplicationDetailsActivity() {
- // start new fragment to display extended information
- Bundle args = new Bundle();
- args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackages[0]);
-
- SettingsActivity sa = (SettingsActivity) getActivity();
- sa.startPreferencePanel(this, InstalledAppDetails.class.getName(), args,
- R.string.application_info_label, null, null, 0);
- }
-
- private void doAction(int action) {
- SettingsActivity sa = (SettingsActivity)getActivity();
- switch (action) {
- case ACTION_DISPLAY_SETTINGS:
- sa.startPreferencePanel(this, DisplaySettings.class.getName(), null,
- R.string.display_settings_title, null, null, 0);
- break;
- case ACTION_WIFI_SETTINGS:
- sa.startPreferencePanel(this, WifiSettings.class.getName(), null,
- R.string.wifi_settings, null, null, 0);
- break;
- case ACTION_BLUETOOTH_SETTINGS:
- sa.startPreferencePanel(this, BluetoothSettings.class.getName(), null,
- R.string.bluetooth_settings, null, null, 0);
- break;
- case ACTION_WIRELESS_SETTINGS:
- sa.startPreferencePanel(this, NetworkDashboardFragment.class.getName(), null,
- R.string.radio_controls_title, null, null, 0);
- break;
- case ACTION_APP_DETAILS:
- startApplicationDetailsActivity();
- break;
- case ACTION_LOCATION_SETTINGS:
- sa.startPreferencePanel(this, LocationSettings.class.getName(), null,
- R.string.location_settings_title, null, null, 0);
- break;
- case ACTION_FORCE_STOP:
- killProcesses();
- break;
- case ACTION_REPORT:
- reportBatteryUse();
- break;
- }
- }
-
- private void fillDetailsSection() {
- if (mTypes != null && mValues != null) {
- for (int i = 0; i < mTypes.length; i++) {
- // Only add an item if the time is greater than zero
- if (mValues[i] <= 0) continue;
- final String label = getString(mTypes[i]);
- String value = null;
- switch (mTypes[i]) {
- case R.string.usage_type_data_recv:
- case R.string.usage_type_data_send:
- case R.string.usage_type_data_wifi_recv:
- case R.string.usage_type_data_wifi_send:
- final long packets = (long) (mValues[i]);
- value = Long.toString(packets);
- break;
- case R.string.usage_type_no_coverage:
- final int percentage = (int) Math.floor(mValues[i]);
- value = Utils.formatPercentage(percentage);
- break;
- case R.string.usage_type_total_battery_capacity:
- case R.string.usage_type_computed_power:
- case R.string.usage_type_actual_power:
- value = getActivity().getString(R.string.mah, (long)(mValues[i]));
- break;
- case R.string.usage_type_gps:
- mUsesGps = true;
- // Fall through
- default:
- value = Utils.formatElapsedTime(getActivity(), mValues[i], true);
- }
- addHorizontalPreference(mDetailsParent, label, value);
- }
- }
- }
-
- private void addHorizontalPreference(PreferenceCategory parent, CharSequence title,
- CharSequence summary) {
- Preference pref = new Preference(getPrefContext());
- pref.setLayoutResource(R.layout.horizontal_preference);
- pref.setTitle(title);
- pref.setSummary(summary);
- pref.setSelectable(false);
- parent.addPreference(pref);
- }
-
- private void fillControlsSection(int uid) {
- PackageManager pm = getActivity().getPackageManager();
- String[] packages = pm.getPackagesForUid(uid);
- PackageInfo pi = null;
- try {
- pi = packages != null ? pm.getPackageInfo(packages[0], 0) : null;
- } catch (NameNotFoundException nnfe) { /* Nothing */ }
- ApplicationInfo ai = pi != null? pi.applicationInfo : null;
-
- boolean removeHeader = true;
- switch (mDrainType) {
- case APP:
- // If it is a Java application and only one package is associated with the Uid
- if (packages != null && packages.length == 1) {
- addControl(R.string.battery_action_app_details,
- R.string.battery_sugg_apps_info, ACTION_APP_DETAILS);
- removeHeader = false;
- // If the application has a settings screen, jump to that
- // TODO:
- }
-
- // If power usage detail page is launched from location page, suppress "Location"
- // button to prevent circular loops.
- if (mUsesGps && mShowLocationButton
- && mPowerUsageFeatureProvider.isLocationSettingEnabled(packages)) {
- addControl(R.string.location_settings_title,
- R.string.battery_sugg_apps_gps, ACTION_LOCATION_SETTINGS);
- removeHeader = false;
- }
- break;
- case SCREEN:
- addControl(R.string.display_settings,
- R.string.battery_sugg_display,
- ACTION_DISPLAY_SETTINGS);
- removeHeader = false;
- break;
- case WIFI:
- addControl(R.string.wifi_settings,
- R.string.battery_sugg_wifi,
- ACTION_WIFI_SETTINGS);
- removeHeader = false;
- break;
- case BLUETOOTH:
- addControl(R.string.bluetooth_settings,
- R.string.battery_sugg_bluetooth_basic,
- ACTION_BLUETOOTH_SETTINGS);
- removeHeader = false;
- break;
- case CELL:
- if (mNoCoverage > 10) {
- addControl(R.string.radio_controls_title,
- R.string.battery_sugg_radio,
- ACTION_WIRELESS_SETTINGS);
- removeHeader = false;
- }
- break;
- }
- if (removeHeader) {
- mControlsParent.setTitle(null);
- }
- }
-
- private void addControl(int pageSummary, int actionTitle, final int action) {
- Preference pref = new Preference(getPrefContext());
- pref.setTitle(actionTitle);
- pref.setLayoutResource(R.layout.horizontal_preference);
- pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- doAction(action);
- return true;
- }
- });
- mControlsParent.addPreference(pref);
- }
-
- private void fillMessagesSection(int uid) {
- boolean removeHeader = true;
- switch (mDrainType) {
- case UNACCOUNTED:
- addMessage(R.string.battery_msg_unaccounted);
- removeHeader = false;
- break;
- }
- if (removeHeader) {
- mMessagesParent.setTitle(null);
- }
- }
-
- private void addMessage(int message) {
- addHorizontalPreference(mMessagesParent, getString(message), null);
- }
-
- private void removePackagesSection() {
- getPreferenceScreen().removePreference(mPackagesParent);
- }
-
- private void killProcesses() {
- if (mPackages == null) return;
- ActivityManager am = (ActivityManager)getActivity().getSystemService(
- Context.ACTIVITY_SERVICE);
- final int userId = UserHandle.getUserId(mUid);
- for (int i = 0; i < mPackages.length; i++) {
- am.forceStopPackageAsUser(mPackages[i], userId);
- }
- checkForceStop();
- }
-
- private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- mForceStopButton.setEnabled(getResultCode() != Activity.RESULT_CANCELED);
- }
- };
-
- private void checkForceStop() {
- if (mPackages == null || mUid < Process.FIRST_APPLICATION_UID) {
- mForceStopButton.setEnabled(false);
- return;
- }
- for (int i = 0; i < mPackages.length; i++) {
- if (mDpm.packageHasActiveAdmins(mPackages[i])) {
- mForceStopButton.setEnabled(false);
- return;
- }
- }
- for (int i = 0; i < mPackages.length; i++) {
- try {
- ApplicationInfo info = mPm.getApplicationInfo(mPackages[i], 0);
- if ((info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
- mForceStopButton.setEnabled(true);
- break;
- }
- } catch (PackageManager.NameNotFoundException e) {
- }
- }
- Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
- Uri.fromParts("package", mPackages[0], null));
- intent.putExtra(Intent.EXTRA_PACKAGES, mPackages);
- intent.putExtra(Intent.EXTRA_UID, mUid);
- intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mUid));
- getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
- Activity.RESULT_CANCELED, null, null);
- }
-
- private void reportBatteryUse() {
- if (mPackages == null) return;
-
- ApplicationErrorReport report = new ApplicationErrorReport();
- report.type = ApplicationErrorReport.TYPE_BATTERY;
- report.packageName = mPackages[0];
- report.installerPackageName = mInstaller.getPackageName();
- report.processName = mPackages[0];
- report.time = System.currentTimeMillis();
- report.systemApp = (mApp.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
-
- final Bundle args = getArguments();
- ApplicationErrorReport.BatteryInfo batteryInfo = new ApplicationErrorReport.BatteryInfo();
- batteryInfo.usagePercent = args.getInt(EXTRA_PERCENT, 1);
- batteryInfo.durationMicros = args.getLong(EXTRA_USAGE_DURATION, 0);
- batteryInfo.usageDetails = args.getString(EXTRA_REPORT_DETAILS);
- batteryInfo.checkinDetails = args.getString(EXTRA_REPORT_CHECKIN_DETAILS);
- report.batteryInfo = batteryInfo;
-
- Intent result = new Intent(Intent.ACTION_APP_ERROR);
- result.setComponent(mInstaller);
- result.putExtra(Intent.EXTRA_BUG_REPORT, report);
- result.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(result);
- }
-
- private void fillPackagesSection(int uid) {
- if (uid < 1) {
- removePackagesSection();
- return;
- }
- if (mPackages == null || mPackages.length < 2) {
- removePackagesSection();
- return;
- }
-
- PackageManager pm = getPackageManager();
- // Convert package names to user-facing labels where possible
- for (int i = 0; i < mPackages.length; i++) {
- try {
- ApplicationInfo ai = pm.getApplicationInfo(mPackages[i], 0);
- CharSequence label = ai.loadLabel(pm);
- if (label != null) {
- mPackages[i] = label.toString();
- }
- addHorizontalPreference(mPackagesParent, mPackages[i], null);
- } catch (NameNotFoundException e) {
- }
- }
- }
-}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 2c1fd78..b23f9e3 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -110,6 +110,8 @@
PowerGaugePreference mLastFullChargePref;
@VisibleForTesting
PowerUsageFeatureProvider mPowerFeatureProvider;
+ @VisibleForTesting
+ BatteryUtils mBatteryUtils;
private LayoutPreference mBatteryLayoutPref;
private PreferenceGroup mAppListGroup;
@@ -127,6 +129,8 @@
KEY_TIME_SINCE_LAST_FULL_CHARGE);
mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.battery_footer_summary);
+ mBatteryUtils = BatteryUtils.getInstance(getContext());
+
initFeatureProvider();
}
@@ -494,7 +498,7 @@
pref.setOrder(i + 1);
pref.setPercent(percentOfTotal);
if (sipper.usageTimeMs == 0 && sipper.drainType == DrainType.APP) {
- sipper.usageTimeMs = BatteryUtils.getProcessTimeMs(
+ sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, mStatsType);
}
setUsageSummary(pref, usedTime, sipper.usageTimeMs);
@@ -599,6 +603,8 @@
|| drainType == DrainType.WIFI
|| drainType == DrainType.SCREEN
|| drainType == DrainType.BLUETOOTH
+ || drainType == DrainType.UNACCOUNTED
+ || drainType == DrainType.OVERCOUNTED
|| (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP
|| mPowerFeatureProvider.isTypeService(sipper)
|| mPowerFeatureProvider.isTypeSystem(sipper);
@@ -625,7 +631,11 @@
final BatterySipper sipper = sippers.get(i);
if (shouldHideSipper(sipper)) {
sippers.remove(i);
- totalPowerMah += sipper.totalPowerMah;
+ if (sipper.drainType != DrainType.OVERCOUNTED
+ && sipper.drainType != DrainType.UNACCOUNTED) {
+ // Don't add it if it is overcounted or unaccounted
+ totalPowerMah += sipper.totalPowerMah;
+ }
}
}
diff --git a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java
index a7ebbe1..547ff80 100644
--- a/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/LockScreenNotificationPreferenceController.java
@@ -267,16 +267,20 @@
}
}
+ public int getSummaryResource() {
+ final boolean enabled = getLockscreenNotificationsEnabled(UserHandle.myUserId());
+ final boolean allowPrivate = !mSecure
+ || getLockscreenAllowPrivateNotifications(UserHandle.myUserId());
+ return !enabled ? R.string.lock_screen_notifications_summary_disable :
+ allowPrivate ? R.string.lock_screen_notifications_summary_show :
+ R.string.lock_screen_notifications_summary_hide;
+ }
+
private void updateLockscreenNotifications() {
if (mLockscreen == null) {
return;
}
- final boolean enabled = getLockscreenNotificationsEnabled(UserHandle.myUserId());
- final boolean allowPrivate = !mSecure
- || getLockscreenAllowPrivateNotifications(UserHandle.myUserId());
- mLockscreenSelectedValue = !enabled ? R.string.lock_screen_notifications_summary_disable :
- allowPrivate ? R.string.lock_screen_notifications_summary_show :
- R.string.lock_screen_notifications_summary_hide;
+ mLockscreenSelectedValue = getSummaryResource();
mLockscreen.setValue(Integer.toString(mLockscreenSelectedValue));
}
diff --git a/src/com/android/settings/search/IndexDatabaseHelper.java b/src/com/android/settings/search/IndexDatabaseHelper.java
index 60378c2..76346ec 100644
--- a/src/com/android/settings/search/IndexDatabaseHelper.java
+++ b/src/com/android/settings/search/IndexDatabaseHelper.java
@@ -245,7 +245,7 @@
return version;
}
- public static void clearLocalesIndexed(Context context) {
+ public static void clearCachedIndexed(Context context) {
context.getSharedPreferences(INDEX, 0).edit().clear().commit();
}
@@ -257,8 +257,16 @@
return context.getSharedPreferences(INDEX, 0).getBoolean(locale, false);
}
+ public static boolean isBuildIndexed(Context context, String buildNo) {
+ return context.getSharedPreferences(INDEX, 0).getBoolean(buildNo, false);
+ }
+
+ public static void setBuildIndexed(Context context, String buildNo) {
+ context.getSharedPreferences(INDEX, 0).edit().putBoolean(buildNo, true).commit();
+ }
+
private void dropTables(SQLiteDatabase db) {
- clearLocalesIndexed(mContext);
+ clearCachedIndexed(mContext);
db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_META_INDEX);
db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_PREFS_INDEX);
db.execSQL("DROP TABLE IF EXISTS " + Tables.TABLE_SAVED_QUERIES);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index f8cedc1..f7882ae 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -50,7 +50,6 @@
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageAdvanced;
-import com.android.settings.fuelgauge.PowerUsageDetail;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.gestures.AssistGestureSettings;
import com.android.settings.gestures.DoubleTapPowerSettings;
@@ -126,7 +125,6 @@
addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
addIndex(PowerUsageSummary.class,
R.xml.power_usage_summary, R.drawable.ic_settings_battery);
- addIndex(PowerUsageDetail.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery);
addIndex(PowerUsageAdvanced.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery);
addIndex(BatterySaverSettings.class,
R.xml.battery_saver_settings, R.drawable.ic_settings_battery);
diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index 1e664ff..533884d 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -29,6 +29,7 @@
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.AsyncTask;
+import android.os.Build;
import android.provider.SearchIndexableData;
import android.provider.SearchIndexableResource;
import android.provider.SearchIndexablesContract;
@@ -170,7 +171,16 @@
final List<ResolveInfo> list =
mContext.getPackageManager().queryIntentContentProviders(intent, 0);
- final boolean isLocaleIndexed = isLocaleIndexed();
+ final String localeStr = Locale.getDefault().toString();
+ final String fingerprint = Build.FINGERPRINT;
+ final boolean isFullIndex = isFullIndex(localeStr, fingerprint);
+
+ // Drop the database when the locale or build has changed. This eliminates rows which are
+ // dynamically inserted in the old language, or deprecated settings.
+ if (isFullIndex) {
+ final SQLiteDatabase db = getWritableDatabase();
+ IndexDatabaseHelper.getInstance(mContext).reconstruct(db);
+ }
for (final ResolveInfo info : list) {
if (!DatabaseIndexingUtils.isWellKnownProvider(info, mContext)) {
@@ -179,22 +189,32 @@
final String authority = info.providerInfo.authority;
final String packageName = info.providerInfo.packageName;
- if (!isLocaleIndexed) {
+ if (isFullIndex) {
addIndexablesFromRemoteProvider(packageName, authority);
}
addNonIndexablesKeysFromRemoteProvider(packageName, authority);
}
- final String localeStr = Locale.getDefault().toString();
- updateDatabase(isLocaleIndexed, localeStr);
+ updateDatabase(isFullIndex, localeStr);
IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr);
+ IndexDatabaseHelper.setBuildIndexed(mContext, fingerprint);
}
+ /**
+ * Perform a full index on an OTA or when the locale has changed
+ *
+ * @param locale is the default for the device
+ * @param fingerprint id for the current build.
+ * @return true when the locale or build has changed since last index.
+ */
@VisibleForTesting
- boolean isLocaleIndexed() {
- final String locale = Locale.getDefault().toString();
- return IndexDatabaseHelper.getInstance(mContext).isLocaleAlreadyIndexed(mContext, locale);
+ boolean isFullIndex(String locale, String fingerprint) {
+ final boolean isLocaleIndexed = IndexDatabaseHelper.getInstance(mContext)
+ .isLocaleAlreadyIndexed(mContext, locale);
+ final boolean isBuildIndexed = IndexDatabaseHelper.getInstance(mContext)
+ .isBuildIndexed(mContext, fingerprint);
+ return !isLocaleIndexed || !isBuildIndexed;
}
/**
@@ -204,11 +224,11 @@
* Then search results are verified to have the correct value of enabled.
* Finally, we record that the locale has been indexed.
*
- * @param isIncrementalUpdate true when the language has already been indexed.
+ * @param needsReindexing true the database needs to be rebuilt.
* @param localeStr the default locale for the device.
*/
@VisibleForTesting
- void updateDatabase(boolean isIncrementalUpdate, String localeStr) {
+ void updateDatabase(boolean needsReindexing, String localeStr) {
mIsAvailable.set(false);
final UpdateData copy;
@@ -236,7 +256,7 @@
// Only check for non-indexable key updates after initial index.
// Enabled state with non-indexable keys is checked when items are first inserted.
- if (isIncrementalUpdate) {
+ if (!needsReindexing) {
updateDataInDatabase(database, nonIndexableKeys);
}
@@ -284,7 +304,7 @@
* @param database The database to validate.
* @param nonIndexableKeys A map between package name and the set of non-indexable keys for it.
*/
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ @VisibleForTesting
void updateDataInDatabase(SQLiteDatabase database,
Map<String, Set<String>> nonIndexableKeys) {
final String whereEnabled = ENABLED + " = 1";
@@ -348,7 +368,6 @@
@VisibleForTesting
boolean addIndexablesFromRemoteProvider(String packageName, String authority) {
try {
-
final Context context = mBaseAuthority.equals(authority) ?
mContext : mContext.createPackageContext(packageName, 0);
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 4380cbe..fe2bbb3 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -106,6 +106,9 @@
public static final int WIFI_PEAP_PHASE2_NONE = 0;
public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1;
public static final int WIFI_PEAP_PHASE2_GTC = 2;
+ public static final int WIFI_PEAP_PHASE2_SIM = 3;
+ public static final int WIFI_PEAP_PHASE2_AKA = 4;
+ public static final int WIFI_PEAP_PHASE2_AKA_PRIME = 5;
/* Phase2 methods supported by PEAP are limited */
private final ArrayAdapter<String> mPhase2PeapAdapter;
@@ -176,9 +179,16 @@
final Resources res = mContext.getResources();
mLevels = res.getStringArray(R.array.wifi_signal);
- mPhase2PeapAdapter = new ArrayAdapter<String>(
- mContext, android.R.layout.simple_spinner_item,
- res.getStringArray(R.array.wifi_peap_phase2_entries));
+ if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
+ mPhase2PeapAdapter = new ArrayAdapter<String>(
+ mContext, android.R.layout.simple_spinner_item,
+ res.getStringArray(R.array.wifi_peap_phase2_entries));
+ } else {
+ mPhase2PeapAdapter = new ArrayAdapter<String>(
+ mContext, android.R.layout.simple_spinner_item,
+ res.getStringArray(R.array.wifi_peap_phase2_entries_with_sim_auth));
+ }
mPhase2PeapAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mPhase2FullAdapter = new ArrayAdapter<String>(
@@ -532,6 +542,15 @@
case WIFI_PEAP_PHASE2_GTC:
config.enterpriseConfig.setPhase2Method(Phase2.GTC);
break;
+ case WIFI_PEAP_PHASE2_SIM:
+ config.enterpriseConfig.setPhase2Method(Phase2.SIM);
+ break;
+ case WIFI_PEAP_PHASE2_AKA:
+ config.enterpriseConfig.setPhase2Method(Phase2.AKA);
+ break;
+ case WIFI_PEAP_PHASE2_AKA_PRIME:
+ config.enterpriseConfig.setPhase2Method(Phase2.AKA_PRIME);
+ break;
default:
Log.e(TAG, "Unknown phase2 method" + phase2Method);
break;
@@ -795,6 +814,7 @@
mEapMethodSpinner.setAdapter(spinnerAdapter);
}
mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
+ mPhase2Spinner.setOnItemSelectedListener(this);
mEapCaCertSpinner = (Spinner) mView.findViewById(R.id.ca_cert);
mEapCaCertSpinner.setOnItemSelectedListener(this);
mEapDomainView = (TextView) mView.findViewById(R.id.domain);
@@ -836,6 +856,15 @@
case Phase2.GTC:
mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_GTC);
break;
+ case Phase2.SIM:
+ mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_SIM);
+ break;
+ case Phase2.AKA:
+ mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA);
+ break;
+ case Phase2.AKA_PRIME:
+ mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_AKA_PRIME);
+ break;
default:
Log.e(TAG, "Invalid phase 2 method " + phase2Method);
break;
@@ -874,6 +903,7 @@
mEapIdentityView.setText(enterpriseConfig.getIdentity());
mEapAnonymousView.setText(enterpriseConfig.getAnonymousIdentity());
} else {
+ mPhase2Spinner = (Spinner) mView.findViewById(R.id.phase2);
showEapFieldsByMethod(mEapMethodSpinner.getSelectedItemPosition());
}
} else {
@@ -886,11 +916,11 @@
* identity
* password
* EAP-PEAP valid fields include
- * phase2: MSCHAPV2, GTC
+ * phase2: MSCHAPV2, GTC, SIM, AKA, AKA'
* ca_cert
* identity
* anonymous_identity
- * password
+ * password (not required for SIM, AKA, AKA')
* EAP-TLS valid fields include
* user_cert
* ca_cert
@@ -938,6 +968,7 @@
}
mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE);
mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
+ showPeapFields();
setUserCertInvisible();
break;
case WIFI_EAP_METHOD_TTLS:
@@ -974,6 +1005,21 @@
}
}
+ private void showPeapFields() {
+ int phase2Method = mPhase2Spinner.getSelectedItemPosition();
+ if (phase2Method == WIFI_PEAP_PHASE2_SIM || phase2Method == WIFI_PEAP_PHASE2_AKA
+ || phase2Method == WIFI_PEAP_PHASE2_AKA_PRIME) {
+ mEapIdentityView.setText("");
+ mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
+ setPasswordInvisible();
+ } else {
+ mView.findViewById(R.id.l_identity).setVisibility(View.VISIBLE);
+ mView.findViewById(R.id.l_anonymous).setVisibility(View.VISIBLE);
+ mView.findViewById(R.id.password_layout).setVisibility(View.VISIBLE);
+ mView.findViewById(R.id.show_password_layout).setVisibility(View.VISIBLE);
+ }
+ }
+
private void setIdentityInvisible() {
mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
mPhase2Spinner.setSelection(Phase2.NONE);
@@ -1239,6 +1285,9 @@
showSecurityFields();
} else if (parent == mEapMethodSpinner || parent == mEapCaCertSpinner) {
showSecurityFields();
+ } else if (parent == mPhase2Spinner
+ && mEapMethodSpinner.getSelectedItemPosition() == WIFI_EAP_METHOD_PEAP) {
+ showPeapFields();
} else if (parent == mProxySettingsSpinner) {
showProxyFields();
} else {
diff --git a/tests/app/src/com/android/settings/DisplaySettingsTest.java b/tests/app/src/com/android/settings/DisplaySettingsTest.java
new file mode 100644
index 0000000..888b7fd
--- /dev/null
+++ b/tests/app/src/com/android/settings/DisplaySettingsTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.UiDevice;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class DisplaySettingsTest {
+
+ private Instrumentation mInstrumentation;
+ private Context mContext;
+ private UiDevice mDevice;
+
+ @Before
+ public void setUp() {
+ mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mContext = mInstrumentation.getTargetContext();
+ mDevice = UiDevice.getInstance(mInstrumentation);
+ }
+
+ @Test
+ public void launchBrightnessLevel_shouldNotCrash() {
+ mInstrumentation.startActivitySync(
+ new Intent(mContext, DisplaySettings.class));
+ onView(withText(mContext.getString(R.string.brightness))).perform(click());
+ // should not crash
+ mDevice.pressBack(); // dismiss the brightness dialog
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/SecuritySettingsTest.java b/tests/robotests/src/com/android/settings/SecuritySettingsTest.java
index 03a8f94..9bdf502 100644
--- a/tests/robotests/src/com/android/settings/SecuritySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/SecuritySettingsTest.java
@@ -16,14 +16,20 @@
package com.android.settings;
+import android.app.Activity;
import android.content.Context;
import android.content.IContentProvider;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceScreen;
+import com.android.internal.widget.LockPatternUtils;
import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.notification.LockScreenNotificationPreferenceController;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settingslib.drawer.DashboardCategory;
@@ -39,13 +45,18 @@
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
import java.util.Map;
+import org.robolectric.util.ReflectionHelpers;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -121,7 +132,6 @@
verify(mContext).getString(R.string.security_dashboard_summary);
}
-
@Test
public void testGetPackageVerifierSummary_nullInput() {
assertThat(mSummaryProvider.getPackageVerifierSummary(null)).isNull();
@@ -155,4 +165,46 @@
assertThat(mSummaryProvider.getPackageVerifierSummary(mDashboardCategory))
.isEqualTo(MOCK_SUMMARY);
}
+
+ @Test
+ public void testInitTrustAgentPreference_secure_shouldSetSummaryToNumberOfTrustAgent() {
+ final Preference preference = mock(Preference.class);
+ final PreferenceScreen screen = mock(PreferenceScreen.class);
+ when(screen.findPreference(SecuritySettings.KEY_MANAGE_TRUST_AGENTS))
+ .thenReturn(preference);
+ final LockPatternUtils utils = mock(LockPatternUtils.class);
+ when(utils.isSecure(anyInt())).thenReturn(true);
+ final Context context = ShadowApplication.getInstance().getApplicationContext();
+ final Activity activity = mock(Activity.class);
+ when(activity.getResources()).thenReturn(context.getResources());
+ final SecuritySettings securitySettings = spy(new SecuritySettings());
+ when(securitySettings.getActivity()).thenReturn(activity);
+
+ ReflectionHelpers.setField(securitySettings, "mLockPatternUtils", utils);
+
+ securitySettings.initTrustAgentPreference(screen, 0);
+ verify(preference).setSummary(R.string.manage_trust_agents_summary);
+
+ securitySettings.initTrustAgentPreference(screen, 2);
+ verify(preference).setSummary(context.getResources().getQuantityString(
+ R.plurals.manage_trust_agents_summary_on, 2, 2));
+ }
+
+ @Test
+ public void testSetLockscreenPreferencesSummary_shouldSetSummaryFromLockScreenNotification() {
+ final Preference preference = mock(Preference.class);
+ final PreferenceGroup group = mock(PreferenceGroup.class);
+ when(group.findPreference(SecuritySettings.KEY_LOCKSCREEN_PREFERENCES))
+ .thenReturn(preference);
+ final LockScreenNotificationPreferenceController controller =
+ mock(LockScreenNotificationPreferenceController.class);
+
+ final SecuritySettings securitySettings = new SecuritySettings();
+ ReflectionHelpers.setField(securitySettings,
+ "mLockScreenNotificationPreferenceController", controller);
+
+ when(controller.getSummaryResource()).thenReturn(1234);
+ securitySettings.setLockscreenPreferencesSummary(group);
+ verify(preference).setSummary(1234);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
index e8440dd..4cf7e69 100644
--- a/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
@@ -48,7 +48,7 @@
final View view = inflater.inflate(mPreference.getLayoutResource(),
new LinearLayout(mContext), false);
- mHolder = new PreferenceViewHolder(view);
+ mHolder = PreferenceViewHolder.createInstanceForTests(view);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
index b8f3fc4..bedb0a5 100644
--- a/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java
@@ -22,22 +22,30 @@
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
+import com.android.settings.dashboard.SummaryLoader;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AdvancedAppSettingsTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext;
private AdvancedAppSettings mFragment;
@@ -46,8 +54,9 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mFragment = new AdvancedAppSettings();
- mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
+ mFragment.onAttach(mContext);
}
@Test
@@ -56,4 +65,75 @@
R.xml.app_default_settings);
}
+ @Test
+ public void setListening_shouldUpdateSummary() {
+ final SummaryLoader summaryLoader = mock(SummaryLoader.class);
+ final AdvancedAppSettings.SummaryProvider summaryProvider =
+ new AdvancedAppSettings.SummaryProvider(mContext, summaryLoader);
+ final DefaultSmsPreferenceController defaultSms =
+ mock(DefaultSmsPreferenceController.class);
+ final DefaultBrowserPreferenceController defaultBrowser =
+ mock(DefaultBrowserPreferenceController.class);
+ final DefaultPhonePreferenceController defaultPhone =
+ mock(DefaultPhonePreferenceController.class);
+ ReflectionHelpers.setField(summaryProvider, "mDefaultSmsPreferenceController", defaultSms);
+ ReflectionHelpers.setField(
+ summaryProvider, "mDefaultBrowserPreferenceController", defaultBrowser);
+ ReflectionHelpers.setField(
+ summaryProvider, "mDefaultPhonePreferenceController", defaultPhone);
+
+ // all available
+ when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
+ when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1, Phone1");
+
+ // 2 available
+ when(defaultSms.getDefaultAppLabel()).thenReturn(null);
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
+ when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1");
+
+ when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
+ when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Sms1, Phone1");
+
+ when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
+ when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1");
+
+ // 1 available
+ when(defaultSms.getDefaultAppLabel()).thenReturn(null);
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
+ when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1");
+
+ when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
+ when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Sms1");
+
+ when(defaultSms.getDefaultAppLabel()).thenReturn(null);
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
+ when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
+ summaryProvider.setListening(true);
+ verify(summaryLoader).setSummary(summaryProvider, "Phone1");
+
+ // None available
+ when(defaultSms.getDefaultAppLabel()).thenReturn(null);
+ when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
+ when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
+ summaryProvider.setListening(true);
+ verify(summaryLoader, never()).setSummary(summaryProvider, eq(anyString()));
+
+ }
+
}
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
index a33a8c8..5b1019e 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
@@ -74,7 +74,7 @@
ApplicationFeatureProvider mApplicationFeatureProvider;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private UserManager mUserManager;
- @Mock
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private SettingsActivity mActivity;
@Mock
private DevicePolicyManager mDevicePolicyManager;
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
index 8b6e900..4b84b0f 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
@@ -48,62 +48,32 @@
@Test
public void testGetSummary_chargeDevice() {
- assertThat(UsbModePreferenceController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[0]))
- .isEqualTo(R.string.usb_use_charging_only_desc);
+ assertThat(mController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[0]))
+ .isEqualTo(R.string.usb_summary_charging_only);
}
@Test
public void testGetSummary_supplyPower() {
- assertThat(UsbModePreferenceController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[1]))
- .isEqualTo(R.string.usb_use_power_only_desc);
+ assertThat(mController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[1]))
+ .isEqualTo(R.string.usb_summary_power_only);
}
@Test
public void testGetSummary_TransferFiles() {
- assertThat(UsbModePreferenceController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[2]))
- .isEqualTo(R.string.usb_use_file_transfers_desc);
+ assertThat(mController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[2]))
+ .isEqualTo(R.string.usb_summary_file_transfers);
}
@Test
public void testGetSummary_TransferPhoto() {
- assertThat(UsbModePreferenceController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[3]))
- .isEqualTo(R.string.usb_use_photo_transfers_desc);
+ assertThat(mController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[3]))
+ .isEqualTo(R.string.usb_summary_photo_transfers);
}
@Test
public void testGetSummary_MIDI() {
- assertThat(UsbModePreferenceController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[4]))
- .isEqualTo(R.string.usb_use_MIDI_desc);
- }
-
- @Test
- public void testGetTitle_chargeDevice() {
- assertThat(UsbModePreferenceController.getTitle(UsbModeChooserActivity.DEFAULT_MODES[0]))
- .isEqualTo(R.string.usb_use_charging_only);
- }
-
- @Test
- public void testGetTitle_supplyPower() {
- assertThat(UsbModePreferenceController.getTitle(UsbModeChooserActivity.DEFAULT_MODES[1]))
- .isEqualTo(R.string.usb_use_power_only);
- }
-
- @Test
- public void testGetTitle_TransferFiles() {
- assertThat(UsbModePreferenceController.getTitle(UsbModeChooserActivity.DEFAULT_MODES[2]))
- .isEqualTo(R.string.usb_use_file_transfers);
- }
-
- @Test
- public void testGetTitle_TransferPhoto() {
- assertThat(UsbModePreferenceController.getTitle(UsbModeChooserActivity.DEFAULT_MODES[3]))
- .isEqualTo(R.string.usb_use_photo_transfers);
- }
-
- @Test
- public void testGetTitle_MIDI() {
- assertThat(UsbModePreferenceController.getTitle(UsbModeChooserActivity.DEFAULT_MODES[4]))
- .isEqualTo(R.string.usb_use_MIDI);
+ assertThat(mController.getSummary(UsbModeChooserActivity.DEFAULT_MODES[4]))
+ .isEqualTo(R.string.usb_summary_MIDI);
}
@Test
@@ -131,7 +101,7 @@
mContext.sendStickyBroadcast(intent);
assertThat(preference.getSummary()).isEqualTo(
- mContext.getString(R.string.usb_use_charging_only));
+ mContext.getString(R.string.usb_summary_charging_only));
}
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java
new file mode 100644
index 0000000..b4f5f3d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.deletionhelper;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.widget.SwitchBar;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AutomaticStorageManagerSwitchBarControllerTest {
+ private Context mContext;
+ private SwitchBar mSwitchBar;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+ private Preference mPreference;
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private FragmentManager mFragmentManager;
+
+ private AutomaticStorageManagerSwitchBarController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(RuntimeEnvironment.application);
+ mSwitchBar = new SwitchBar(mContext);
+
+ Context fakeContextForFakeProvider = mock(Context.class, RETURNS_DEEP_STUBS);
+ FeatureFactory featureFactory = FakeFeatureFactory.getFactory(fakeContextForFakeProvider);
+ mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
+ mPreference = new Preference(mContext);
+
+ mController =
+ new AutomaticStorageManagerSwitchBarController(
+ mContext,
+ mSwitchBar,
+ mMetricsFeatureProvider,
+ mPreference,
+ mFragmentManager);
+ }
+
+ @Test
+ public void onSwitchChanged_false_recordsAMetric() {
+ mController.onSwitchChanged(null, false);
+
+ verify(mMetricsFeatureProvider)
+ .action(
+ eq(mContext),
+ eq(MetricsProto.MetricsEvent.ACTION_TOGGLE_STORAGE_MANAGER),
+ eq(false));
+ }
+
+ @Test
+ public void onSwitchChanged_true_recordsAMetric() {
+ mController.onSwitchChanged(null, true);
+
+ verify(mMetricsFeatureProvider)
+ .action(
+ eq(mContext),
+ eq(MetricsProto.MetricsEvent.ACTION_TOGGLE_STORAGE_MANAGER),
+ eq(true));
+ }
+
+ @Test
+ public void onSwitchChanged_showWarningFragmentIfNotEnabledByDefault() {
+ mController.onSwitchChanged(null, true);
+
+ verify(mFragmentManager.beginTransaction())
+ .add(any(Fragment.class), eq(ActivationWarningFragment.TAG));
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void onSwitchChange_doNotShowWarningFragmentIfEnabledByDefault() {
+ SettingsShadowSystemProperties.set("ro.storage_manager.enabled", "true");
+
+ mController.onSwitchChanged(null, true);
+
+ verify(mFragmentManager.beginTransaction(), never())
+ .add(any(Fragment.class), eq(ActivationWarningFragment.TAG));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java b/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
index f9d26c7..969719f 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/StorageItemPreferenceTest.java
@@ -60,7 +60,7 @@
@Test
public void testProgressBarPercentageSet() {
- final PreferenceViewHolder holder = new PreferenceViewHolder(
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
LayoutInflater.from(mContext).inflate(R.layout.storage_item, null));
final ProgressBar progressBar =
(ProgressBar) holder.itemView.findViewById(android.R.id.progress);
@@ -71,4 +71,4 @@
assertThat(progressBar.getProgress()).isEqualTo(10);
}
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/UsbModeChooserActivityTest.java b/tests/robotests/src/com/android/settings/deviceinfo/UsbModeChooserActivityTest.java
new file mode 100644
index 0000000..d9c474d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/UsbModeChooserActivityTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.deviceinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.widget.TextView;
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class UsbModeChooserActivityTest {
+
+ @Mock
+ private TextView mTextView;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Test
+ public void updateSummary_chargeDevice_shouldNotSetSummary() {
+ UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[0]);
+ verify(mTextView, never()).setText(anyInt());
+ }
+
+ @Test
+ public void updateSummary_supplyPower_shouldSetSummary() {
+ UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[1]);
+ verify(mTextView).setText(R.string.usb_use_power_only_desc);
+ }
+
+ @Test
+ public void updateSummary_transferFiles_shouldNotSetSummary() {
+ UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[2]);
+ verify(mTextView, never()).setText(anyInt());
+ }
+
+ @Test
+ public void updateSummary_transferPhoto_shouldNotSetSummary() {
+ UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[3]);
+ verify(mTextView, never()).setText(anyInt());
+ }
+
+ @Test
+ public void updateSummary_MIDI_shouldNotSetSummary() {
+ UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[4]);
+ verify(mTextView, never()).setText(anyInt());
+ }
+
+ @Test
+ public void getTitle_shouldReturnCorrectTitle() {
+ assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[0]))
+ .isEqualTo(R.string.usb_use_charging_only);
+
+ assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[1]))
+ .isEqualTo(R.string.usb_use_power_only);
+
+ assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[2]))
+ .isEqualTo(R.string.usb_use_file_transfers);
+
+ assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[3]))
+ .isEqualTo(R.string.usb_use_photo_transfers);
+
+ assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[4]))
+ .isEqualTo(R.string.usb_use_MIDI);
+ }
+
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/SecondaryUserControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/SecondaryUserControllerTest.java
index 16bf1ae..c55ba36 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/SecondaryUserControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/SecondaryUserControllerTest.java
@@ -19,12 +19,14 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString;
-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.UserInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.drawable.Drawable;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
@@ -34,7 +36,9 @@
import com.android.settings.TestConfig;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.core.PreferenceController;
+import com.android.settingslib.R;
import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.drawable.UserIconDrawable;
import org.junit.Before;
import org.junit.Test;
@@ -187,4 +191,24 @@
// We should have the NoSecondaryUserController.
assertThat(controllers.get(0) instanceof SecondaryUserController).isFalse();
}
+
+ @Test
+ public void iconCallbackChangesPreferenceIcon() throws Exception {
+ SparseArray<Drawable> icons = new SparseArray<>();
+ Bitmap userBitmap =
+ BitmapFactory.decodeResource(
+ RuntimeEnvironment.application.getResources(), R.drawable.home);
+ UserIconDrawable drawable = new UserIconDrawable(100 /* size */).setIcon(userBitmap).bake();
+ icons.put(10, drawable);
+ mPrimaryUser.name = TEST_NAME;
+ mPrimaryUser.id = 10;
+ mController.displayPreference(mScreen);
+
+ mController.handleUserIcons(icons);
+
+ final ArgumentCaptor<Preference> argumentCaptor = ArgumentCaptor.forClass(Preference.class);
+ verify(mGroup).addPreference(argumentCaptor.capture());
+ Preference preference = argumentCaptor.getValue();
+ assertThat(preference.getIcon()).isEqualTo(drawable);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceControllerTest.java
index 444a0d1..6492f67 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageSummaryDonutPreferenceControllerTest.java
@@ -79,7 +79,7 @@
final View view =
inflater.inflate(
mPreference.getLayoutResource(), new LinearLayout(mContext), false);
- mHolder = new PreferenceViewHolder(view);
+ mHolder = PreferenceViewHolder.createInstanceForTests(view);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/UserProfileControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/UserProfileControllerTest.java
index ed49da4..0c3fc47 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/UserProfileControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/UserProfileControllerTest.java
@@ -18,7 +18,6 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -26,6 +25,9 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.drawable.Drawable;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.util.SparseArray;
@@ -36,7 +38,9 @@
import com.android.settings.TestConfig;
import com.android.settings.applications.UserManagerWrapper;
import com.android.settings.deviceinfo.StorageProfileFragment;
+import com.android.settingslib.R;
import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.drawable.UserIconDrawable;
import org.junit.Before;
import org.junit.Test;
@@ -66,16 +70,15 @@
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mPrimaryProfile = new UserInfo();
- mController = new UserProfileController(mContext, mPrimaryProfile, 0);
+ mController = new UserProfileController(mContext, mPrimaryProfile, mUserManager, 0);
when(mScreen.getContext()).thenReturn(mContext);
+ mPrimaryProfile.name = TEST_NAME;
+ mPrimaryProfile.id = 10;
+ mController.displayPreference(mScreen);
}
@Test
public void controllerAddsPrimaryProfilePreference() throws Exception {
- mPrimaryProfile.name = TEST_NAME;
- mPrimaryProfile.id = 10;
- mController.displayPreference(mScreen);
-
final ArgumentCaptor<Preference> argumentCaptor = ArgumentCaptor.forClass(Preference.class);
verify(mScreen).addPreference(argumentCaptor.capture());
Preference preference = argumentCaptor.getValue();
@@ -86,9 +89,6 @@
@Test
public void tappingProfilePreferenceSendsToStorageProfileFragment() throws Exception {
- mPrimaryProfile.name = TEST_NAME;
- mPrimaryProfile.id = 10;
- mController.displayPreference(mScreen);
final ArgumentCaptor<Preference> argumentCaptor = ArgumentCaptor.forClass(Preference.class);
verify(mScreen).addPreference(argumentCaptor.capture());
@@ -105,9 +105,6 @@
@Test
public void acceptingResultUpdatesPreferenceSize() throws Exception {
- mPrimaryProfile.name = TEST_NAME;
- mPrimaryProfile.id = 10;
- mController.displayPreference(mScreen);
SparseArray<StorageAsyncLoader.AppsStorageResult> result = new SparseArray<>();
StorageAsyncLoader.AppsStorageResult userResult =
new StorageAsyncLoader.AppsStorageResult();
@@ -121,4 +118,21 @@
assertThat(preference.getSummary()).isEqualTo("99.00B");
}
+
+ @Test
+ public void iconCallbackChangesPreferenceIcon() throws Exception {
+ SparseArray<Drawable> icons = new SparseArray<>();
+ Bitmap userBitmap =
+ BitmapFactory.decodeResource(
+ RuntimeEnvironment.application.getResources(), R.drawable.home);
+ UserIconDrawable drawable = new UserIconDrawable(100 /* size */).setIcon(userBitmap).bake();
+ icons.put(10, drawable);
+
+ mController.handleUserIcons(icons);
+
+ final ArgumentCaptor<Preference> argumentCaptor = ArgumentCaptor.forClass(Preference.class);
+ verify(mScreen).addPreference(argumentCaptor.capture());
+ Preference preference = argumentCaptor.getValue();
+ assertThat(preference.getIcon()).isEqualTo(drawable);
+ }
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 8b5ce19..03892a3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -21,6 +21,7 @@
import android.app.Fragment;
import android.content.Context;
import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.BatteryStats;
import android.os.Bundle;
@@ -96,7 +97,8 @@
private BatteryStatsHelper mBatteryStatsHelper;
@Mock
private BatteryStats.Uid mUid;
- private Bundle mTestBundle;
+ @Mock
+ private PackageManager mPackageManager;
private AdvancedPowerUsageDetail mFragment;
private FakeFeatureFactory mFeatureFactory;
private SettingsActivity mTestActivity;
@@ -141,6 +143,7 @@
mAppEntry.info = mock(ApplicationInfo.class);
mTestActivity = spy(new SettingsActivity());
+ doReturn(mPackageManager).when(mTestActivity).getPackageManager();
final ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
index 471f9ea..221408d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
@@ -73,7 +73,7 @@
mBatteryHistoryPreference = new BatteryHistoryPreference(context, null);
mBatteryHistoryPreference.mBatteryInfo = mBatteryInfo;
- mViewHolder = spy(new PreferenceViewHolder(itemView));
+ mViewHolder = spy(PreferenceViewHolder.createInstanceForTests(itemView));
when(mViewHolder.findViewById(R.id.battery_usage)).thenReturn(mUsageView);
when(mViewHolder.findViewById(R.id.charge)).thenReturn(mTextView);
when(mUsageView.findViewById(anyInt())).thenReturn(mLabelView);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
index 672cc90..3699147 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java
@@ -25,6 +25,7 @@
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import static android.os.BatteryStats.Uid.PROCESS_STATE_BACKGROUND;
@@ -56,7 +57,8 @@
private static final long TIME_EXPECTED_ALL = 15000;
@Mock
- BatteryStats.Uid mUid;
+ private BatteryStats.Uid mUid;
+ private BatteryUtils mBatteryUtils;
@Before
public void setUp() {
@@ -72,11 +74,13 @@
anyLong(), anyInt());
doReturn(TIME_STATE_BACKGROUND).when(mUid).getProcessStateTime(eq(PROCESS_STATE_BACKGROUND),
anyLong(), anyInt());
+
+ mBatteryUtils = BatteryUtils.getInstance(RuntimeEnvironment.application);
}
@Test
public void testGetProcessTimeMs_typeForeground_timeCorrect() {
- final long time = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid,
+ final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid,
BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND);
@@ -84,7 +88,7 @@
@Test
public void testGetProcessTimeMs_typeBackground_timeCorrect() {
- final long time = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.BACKGROUND, mUid,
+ final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.BACKGROUND, mUid,
BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND);
@@ -92,7 +96,7 @@
@Test
public void testGetProcessTimeMs_typeAll_timeCorrect() {
- final long time = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid,
+ final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid,
BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_ALL);
@@ -100,7 +104,7 @@
@Test
public void testGetProcessTimeMs_uidNull_returnZero() {
- final long time = BatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, null,
+ final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, null,
BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(0);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
index 6ac6500..4216d57 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAdvancedTest.java
@@ -207,7 +207,7 @@
assertThat(usageTypeSet).asList().containsExactly(UsageType.APP, UsageType.WIFI,
UsageType.CELL, UsageType.BLUETOOTH, UsageType.IDLE, UsageType.SERVICE,
- UsageType.USER, UsageType.SYSTEM, UsageType.UNACCOUNTED);
+ UsageType.USER, UsageType.SYSTEM, UsageType.UNACCOUNTED, UsageType.OVERCOUNTED);
}
@Test
@@ -223,4 +223,27 @@
assertThat(dataList.get(i - 1).totalPowerMah).isAtLeast(dataList.get(i).totalPowerMah);
}
}
+
+ @Test
+ public void testShouldHide_typeUnAccounted_returnTrue() {
+ mPowerUsageData.usageType = UsageType.UNACCOUNTED;
+
+ assertThat(mPowerUsageAdvanced.shouldHide(mPowerUsageData)).isTrue();
+ }
+
+
+ @Test
+ public void testShouldHide_typeOverCounted_returnTrue() {
+ mPowerUsageData.usageType = UsageType.OVERCOUNTED;
+
+ assertThat(mPowerUsageAdvanced.shouldHide(mPowerUsageData)).isTrue();
+ }
+
+
+ @Test
+ public void testShouldHide_typeNormal_returnFalse() {
+ mPowerUsageData.usageType = UsageType.APP;
+
+ assertThat(mPowerUsageAdvanced.shouldHide(mPowerUsageData)).isFalse();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 5f2d54f..7f59b18 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -90,6 +90,7 @@
private static final double TOTAL_POWER = 200;
private static final double BATTERY_SCREEN_USAGE = 300;
private static final double BATTERY_SYSTEM_USAGE = 600;
+ private static final double BATTERY_OVERCOUNTED_USAGE = 500;
private static final double PRECISION = 0.001;
private static final double POWER_USAGE_PERCENTAGE = 50;
private static final Intent ADDITIONAL_BATTERY_INFO_INTENT =
@@ -112,6 +113,8 @@
@Mock
private BatterySipper mScreenBatterySipper;
@Mock
+ private BatterySipper mOvercountedBatterySipper;
+ @Mock
private BatterySipper mSystemBatterySipper;
@Mock
private BatterySipper mCellBatterySipper;
@@ -188,6 +191,9 @@
mSystemBatterySipper.totalPowerMah = BATTERY_SYSTEM_USAGE;
when(mSystemBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
+ mOvercountedBatterySipper.drainType = BatterySipper.DrainType.OVERCOUNTED;
+ mOvercountedBatterySipper.totalPowerMah = BATTERY_OVERCOUNTED_USAGE;
+
mUsageList = new ArrayList<>();
mUsageList.add(mNormalBatterySipper);
mUsageList.add(mScreenBatterySipper);
@@ -303,6 +309,7 @@
sippers.add(mNormalBatterySipper);
sippers.add(mScreenBatterySipper);
sippers.add(mSystemBatterySipper);
+ sippers.add(mOvercountedBatterySipper);
when(mFeatureFactory.powerUsageFeatureProvider.isTypeSystem(mSystemBatterySipper))
.thenReturn(true);
@@ -318,6 +325,18 @@
}
@Test
+ public void testShouldHideSipper_TypeUnAccounted_ReturnTrue() {
+ mNormalBatterySipper.drainType = BatterySipper.DrainType.UNACCOUNTED;
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ }
+
+ @Test
+ public void testShouldHideSipper_TypeOverCounted_ReturnTrue() {
+ mNormalBatterySipper.drainType = BatterySipper.DrainType.OVERCOUNTED;
+ assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
+ }
+
+ @Test
public void testShouldHideSipper_typeWifi_returnTrue() {
mNormalBatterySipper.drainType = BatterySipper.DrainType.WIFI;
assertThat(mFragment.shouldHideSipper(mNormalBatterySipper)).isTrue();
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index 327b910..aa4e4f9 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -30,6 +30,8 @@
import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
+import android.os.Build;
+import android.provider.SearchIndexableData;
import android.provider.SearchIndexableResource;
import android.provider.SearchIndexablesContract;
import android.util.ArrayMap;
@@ -74,7 +76,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
- shadows={ShadowRunnableAsyncTask.class})
+ shadows = {ShadowRunnableAsyncTask.class})
public class DatabaseIndexingManagerTest {
private final String localeStr = "en_US";
@@ -122,7 +124,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
- mManager = spy(new DatabaseIndexingManager(mContext,"com.android.settings"));
+ mManager = spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
doReturn(mPackageManager).when(mContext).getPackageManager();
@@ -671,42 +673,95 @@
// Test new public indexing flow
@Test
- @Config(shadows= {
- ShadowDatabaseIndexingUtils.class,
- })
+ @Config(shadows = {ShadowDatabaseIndexingUtils.class,})
public void testPerformIndexing_fullIndex_getsDataFromProviders() {
DummyProvider provider = new DummyProvider();
provider.onCreate();
- ShadowContentResolver.registerProvider(
- AUTHORITY_ONE, provider
- );
+ ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider);
// Test that Indexables are added for Full indexing
when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt()))
.thenReturn(getDummyResolveInfo());
DatabaseIndexingManager manager =
- spy(new DatabaseIndexingManager(mContext, "com.android.settings"));
- doReturn(false).when(manager).isLocaleIndexed();
+ spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
+ doReturn(true).when(manager).isFullIndex(anyString(), anyString());
manager.performIndexing();
- verify(manager).updateDatabase(false, Locale.getDefault().toString());
-
- Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
- cursor.moveToPosition(0);
-
- // Data Title
- assertThat(cursor.getString(2)).isEqualTo(TITLE_ONE);
+ verify(manager).addIndexablesFromRemoteProvider(PACKAGE_ONE, AUTHORITY_ONE);
+ verify(manager).updateDatabase(true /* isFullIndex */, Locale.getDefault().toString());
}
@Test
- @Config(shadows= {
- ShadowDatabaseIndexingUtils.class,
- })
+ @Config(shadows = {ShadowDatabaseIndexingUtils.class,})
public void testPerformIndexing_incrementalIndex_noDataAdded() {
DummyProvider provider = new DummyProvider();
provider.onCreate();
+ ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider);
+
+ // Test that Indexables are added for Full indexing
+ when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt()))
+ .thenReturn(getDummyResolveInfo());
+
+ DatabaseIndexingManager manager =
+ spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
+ doReturn(false).when(manager).isFullIndex(anyString(), anyString());
+
+ manager.mDataToProcess.dataToUpdate.clear();
+
+ manager.performIndexing();
+
+ verify(manager, times(0)).addDataToDatabase(any(SQLiteDatabase.class), anyString(),
+ anyList(), anyMap());
+ verify(manager, times(0)).addIndexablesFromRemoteProvider(PACKAGE_ONE, AUTHORITY_ONE);
+ verify(manager).updateDataInDatabase(any(SQLiteDatabase.class), anyMap());
+ }
+
+ @Test
+ @Config(shadows = {ShadowDatabaseIndexingUtils.class,})
+ public void testPerformIndexing_localeChanged_databaseDropped() {
+ DummyProvider provider = new DummyProvider();
+ provider.onCreate();
+ ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider);
+
+ // Test that Indexables are added for Full indexing
+ when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt()))
+ .thenReturn(getDummyResolveInfo());
+
+ // Initialize the Manager
+ DatabaseIndexingManager manager =
+ spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
+ doReturn(true).when(manager).isFullIndex(anyString(), anyString());
+
+ // Insert data point which will be dropped
+ final String oldTitle = "This is French";
+ insertSpecialCase(oldTitle, true, "key");
+
+ // Add a data point to be added by the indexing
+ SearchIndexableRaw raw = new SearchIndexableRaw(mContext);
+ final String newTitle = "This is English";
+ raw.title = newTitle;
+ manager.mDataToProcess.dataToUpdate.add(raw);
+
+ manager.performIndexing();
+
+ // Assert that the New Title is inserted
+ final Cursor newCursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE data_title = '" +
+ newTitle + "'", null);
+ assertThat(newCursor.getCount()).isEqualTo(1);
+
+ // Assert that the Old Title is no longer in the database, since it was dropped
+ final Cursor oldCursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE data_title = '" +
+ oldTitle + "'", null);
+ assertThat(oldCursor.getCount()).isEqualTo(0);
+ }
+
+ @Test
+ @Config(shadows = {ShadowDatabaseIndexingUtils.class,})
+ public void testPerformIndexing_onOta_FullIndex() {
+ DummyProvider provider = new DummyProvider();
+ provider.onCreate();
ShadowContentResolver.registerProvider(
AUTHORITY_ONE, provider
);
@@ -716,19 +771,40 @@
.thenReturn(getDummyResolveInfo());
DatabaseIndexingManager manager =
- spy(new DatabaseIndexingManager(mContext, "com.android.settings"));
- doReturn(true).when(manager).isLocaleIndexed();
+ spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
+ doReturn(true).when(manager).isFullIndex(anyString(), anyString());
manager.performIndexing();
- final Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
+ verify(manager).updateDatabase(true /* isFullIndex */, Locale.getDefault().toString());
+ }
- assertThat(cursor.getCount()).isEqualTo(0);
+ @Test
+ @Config(shadows = {ShadowDatabaseIndexingUtils.class,})
+ public void testPerformIndexing_onOta_buildNumberIsCached() {
+ DummyProvider provider = new DummyProvider();
+ provider.onCreate();
+ ShadowContentResolver.registerProvider(
+ AUTHORITY_ONE, provider
+ );
+
+ // Test that Indexables are added for Full indexing
+ when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt()))
+ .thenReturn(getDummyResolveInfo());
+
+ DatabaseIndexingManager manager =
+ spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE));
+ doReturn(true).when(manager).isFullIndex(anyString(), anyString());
+
+ manager.performIndexing();
+
+ assertThat(IndexDatabaseHelper.getInstance(mContext).isBuildIndexed(mContext,
+ Build.FINGERPRINT)).isTrue();
}
@Test
public void testFullUpdatedDatabase_noData_addDataToDatabaseNotCalled() {
- mManager.updateDatabase(false, localeStr);
+ mManager.updateDatabase(true /* isFullIndex */, localeStr);
mManager.mDataToProcess.dataToUpdate.clear();
verify(mManager, times(0)).addDataToDatabase(any(SQLiteDatabase.class), anyString(),
anyList(), anyMap());
@@ -736,13 +812,13 @@
@Test
public void testFullUpdatedDatabase_updatedDataInDatabaseNotCalled() {
- mManager.updateDatabase(false, localeStr);
+ mManager.updateDatabase(true /* isFullIndex */, localeStr);
verify(mManager, times(0)).updateDataInDatabase(any(SQLiteDatabase.class), anyMap());
}
@Test
public void testLocaleUpdated_afterIndexing_localeNotAdded() {
- mManager.updateDatabase(false, localeStr);
+ mManager.updateDatabase(true /* isFullIndex */, localeStr);
assertThat(IndexDatabaseHelper.getInstance(mContext)
.isLocaleAlreadyIndexed(mContext, localeStr)).isFalse();
}
@@ -758,7 +834,7 @@
public void testUpdateDatabase_newEligibleData_addedToDatabase() {
// Test that addDataToDatabase is called when dataToUpdate is non-empty
mManager.mDataToProcess.dataToUpdate.add(getFakeRaw());
- mManager.updateDatabase(false, localeStr);
+ mManager.updateDatabase(true /* isFullIndex */, localeStr);
Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
cursor.moveToPosition(0);
diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
index 3780d35..ad035bd 100644
--- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
+++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
@@ -54,12 +54,6 @@
}
@Test
- public void nightDisplaySettings_isValid() {
- assertSuggestionEquals("Settings$NightDisplaySettingsActivity",
- R.string.night_display_suggestion_title, R.string.night_display_suggestion_summary);
- }
-
- @Test
public void fingerprintSuggestion_isValid() {
assertSuggestionEquals("com.android.settings.Settings$FingerprintSuggestionActivity",
R.string.suggestion_additional_fingerprints,
diff --git a/tests/robotests/src/com/android/settings/widget/FooterPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/FooterPreferenceTest.java
index 8dbcc20..885ac68 100644
--- a/tests/robotests/src/com/android/settings/widget/FooterPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/FooterPreferenceTest.java
@@ -56,7 +56,7 @@
@Test
public void bindPreference_shouldLinkifyContent() {
final FooterPreference preference = new FooterPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
LayoutInflater.from(mContext).inflate(R.layout.preference_footer, null));
preference.onBindViewHolder(holder);
diff --git a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
index 3936d14..e4d303c 100644
--- a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
@@ -61,8 +61,9 @@
@Test
public void setChecked_shouldUpdateButtonCheckedState() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext)
- .inflate(R.layout.preference_widget_master_switch, null));
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext).inflate(
+ R.layout.preference_widget_master_switch, null));
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
preference.onBindViewHolder(holder);
@@ -76,8 +77,9 @@
@Test
public void setSwitchEnabled_shouldUpdateButtonEnabledState() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext)
- .inflate(R.layout.preference_widget_master_switch, null));
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext).inflate(
+ R.layout.preference_widget_master_switch, null));
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
preference.onBindViewHolder(holder);
@@ -92,7 +94,7 @@
public void clickWidgetView_shouldToggleButton() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
final LayoutInflater inflater = LayoutInflater.from(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
inflater.inflate(R.layout.preference_two_target, null));
final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame);
inflater.inflate(R.layout.preference_widget_master_switch, widgetView, true);
@@ -109,7 +111,7 @@
@Test
public void clickWidgetView_shouldNotifyPreferenceChanged() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
LayoutInflater.from(mContext).inflate(R.layout.preference_two_target, null));
final View widgetView = holder.findViewById(android.R.id.widget_frame);
final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class);
@@ -128,8 +130,9 @@
@Test
public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext)
- .inflate(R.layout.preference_widget_master_switch, null));
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext)
+ .inflate(R.layout.preference_widget_master_switch, null));
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
toggle.setEnabled(true);
preference.onBindViewHolder(holder);
@@ -141,8 +144,9 @@
@Test
public void setDisabledByAdmin_noEnforcedAdmin_shouldEnableButton() {
final MasterSwitchPreference preference = new MasterSwitchPreference(mContext);
- final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext)
- .inflate(R.layout.preference_widget_master_switch, null));
+ final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
+ LayoutInflater.from(mContext)
+ .inflate(R.layout.preference_widget_master_switch, null));
final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget);
toggle.setEnabled(false);
preference.onBindViewHolder(holder);