Merge "Fix the endless panel loading" into rvc-qpr-dev
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index 895d09b..5f33c32 100644
--- a/res/layout/panel_layout.xml
+++ b/res/layout/panel_layout.xml
@@ -36,6 +36,7 @@
android:visibility="gone">
<LinearLayout
+ android:id="@+id/title_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
diff --git a/res/raw/bubble_notification_animation.mp4 b/res/raw/bubble_notification_animation.mp4
index 2994548..563e18d 100644
--- a/res/raw/bubble_notification_animation.mp4
+++ b/res/raw/bubble_notification_animation.mp4
Binary files differ
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 064d725..ccb17f7 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -506,9 +506,9 @@
<string name="crypt_keeper_data_corrupt_summary" product="default" msgid="3200498792238652367">"كلمة المرور التي أدخلتها صحيحة، ولكن للأسف بياناتك تالفة. \n\nلاستئناف استخدام هاتفك، يلزمك إجراء إعادة الضبط على الإعدادات الأصلية. عند إعداد الهاتف بعد إعادة الضبط، ستكون لديك فرصة لاستعادة أي بيانات تم نسخها احتياطيًا في حسابك على Google."</string>
<string name="crypt_keeper_switch_input_method" msgid="7712732134989470573">"تبديل أسلوب الإدخال"</string>
<string name="suggested_lock_settings_title" msgid="7836065447159730217">"تأمين هاتفك"</string>
- <string name="suggested_lock_settings_summary" product="tablet" msgid="3213718550422761562">"تعيين قفل شاشة لحماية الجهاز اللوحي"</string>
- <string name="suggested_lock_settings_summary" product="device" msgid="8479766049078378225">"تعيين قفل شاشة لحماية الجهاز"</string>
- <string name="suggested_lock_settings_summary" product="default" msgid="2443273582716671033">"تعيين قفل شاشة لحماية الهاتف"</string>
+ <string name="suggested_lock_settings_summary" product="tablet" msgid="3213718550422761562">"ضبط قفل شاشة لحماية الجهاز اللوحي"</string>
+ <string name="suggested_lock_settings_summary" product="device" msgid="8479766049078378225">"ضبط قفل شاشة لحماية الجهاز"</string>
+ <string name="suggested_lock_settings_summary" product="default" msgid="2443273582716671033">"ضبط قفل شاشة لحماية الهاتف"</string>
<string name="suggested_fingerprint_lock_settings_title" msgid="3140266181874137984">"إضافة بصمة الإصبع لإلغاء القفل"</string>
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="1040265358906410746"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="1040265358906410746"></string>
@@ -1231,7 +1231,7 @@
<string name="accessibility_work_account_title" msgid="7622485151217943839">"حساب العمل - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="8535265881509557013">"الحساب الشخصي - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="search_settings" msgid="7573686516434589771">"بحث"</string>
- <string name="display_settings" msgid="7197750639709493852">"العرض"</string>
+ <string name="display_settings" msgid="7197750639709493852">"الشاشة"</string>
<string name="accelerometer_title" msgid="7745991950833748909">"التدوير التلقائي للشاشة"</string>
<string name="color_mode_title" msgid="8666690832113906028">"الألوان"</string>
<string name="color_mode_option_natural" msgid="6192875655101283303">"طبيعية"</string>
@@ -4881,7 +4881,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> تطبيق</item>
</plurals>
<string name="enterprise_privacy_input_method" msgid="3278314982700662246">"لوحة المفاتيح التلقائية"</string>
- <string name="enterprise_privacy_input_method_name" msgid="2974859490559054584">"تعيين على <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
+ <string name="enterprise_privacy_input_method_name" msgid="2974859490559054584">"ضبط على <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
<string name="enterprise_privacy_always_on_vpn_device" msgid="1735829327405126695">"تم تفعيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\""</string>
<string name="enterprise_privacy_always_on_vpn_personal" msgid="8395903360175064841">"تم تفعيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\" في الملف الشخصي"</string>
<string name="enterprise_privacy_always_on_vpn_work" msgid="2496961514592522377">"تم تفعيل \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\" في الملف الشخصي للعمل"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index b4ffdf1..40bb3c2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -2275,7 +2275,7 @@
<string name="accessibility_vibration_summary_low" msgid="6482721005400340317">"За звъненето и известията е зададено „Слабо“"</string>
<string name="accessibility_vibration_summary_medium" msgid="2348889320548746469">"За звъненето и известията е зададено „Средно“"</string>
<string name="accessibility_vibration_summary_high" msgid="1764693979030913712">"За звъненето и известията е зададено „Силно“"</string>
- <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Изключено"</string>
+ <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Изкл."</string>
<string name="accessibility_vibration_intensity_low" msgid="6311161118835287335">"Слабо"</string>
<string name="accessibility_vibration_intensity_medium" msgid="1734058611879392797">"Средно"</string>
<string name="accessibility_vibration_intensity_high" msgid="5982896399775212514">"Силно"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 1300b13..0f2a723 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -3304,7 +3304,7 @@
<string name="media_volume_option_title" msgid="5966569685119475630">"Volum de multimèdia"</string>
<string name="remote_media_volume_option_title" msgid="8760846743943305764">"Volum emès"</string>
<string name="call_volume_option_title" msgid="1461105986437268924">"Volum de trucada"</string>
- <string name="alarm_volume_option_title" msgid="6398641749273697140">"Volum de l\'alarma"</string>
+ <string name="alarm_volume_option_title" msgid="6398641749273697140">"Volum d\'alarma"</string>
<string name="ring_volume_option_title" msgid="1520802026403038560">"Volum de to i de notificacions"</string>
<string name="notification_volume_option_title" msgid="4838818791683615978">"Volum de notificació"</string>
<string name="ringtone_title" msgid="3271453110387368088">"So de trucada del telèfon"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f5d7b82..f11d561 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -2275,7 +2275,7 @@
<string name="accessibility_vibration_summary_low" msgid="6482721005400340317">"Baja para notificaciones y llamadas"</string>
<string name="accessibility_vibration_summary_medium" msgid="2348889320548746469">"Media para notificaciones y llamadas"</string>
<string name="accessibility_vibration_summary_high" msgid="1764693979030913712">"Alta para notificaciones y llamadas"</string>
- <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Desactivado"</string>
+ <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Desactivada"</string>
<string name="accessibility_vibration_intensity_low" msgid="6311161118835287335">"Baja"</string>
<string name="accessibility_vibration_intensity_medium" msgid="1734058611879392797">"Media"</string>
<string name="accessibility_vibration_intensity_high" msgid="5982896399775212514">"Alta"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index cd2fb9d..b3815f6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -3529,7 +3529,7 @@
<string name="lock_screen_notifs_redact_summary" msgid="1395483766035470612">"Afficher les contenus sensibles lorsque l\'écran est verrouillé"</string>
<string name="lock_screen_notifs_redact_work" msgid="3833920196569208430">"Notifications de contenu sensible du profil professionnel"</string>
<string name="lock_screen_notifs_redact_work_summary" msgid="3238238380405430156">"Afficher les contenus sensibles du profil professionnel lorsque l\'écran est verrouillé"</string>
- <string name="lock_screen_notifications_summary_show" msgid="6540443483088311328">"Afficher tout le contenu des notifications"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="6540443483088311328">"Affiche tout le contenu des notifications"</string>
<string name="lock_screen_notifications_summary_hide" msgid="7837303171531166789">"Afficher les contenus sensibles seulement si l\'appareil est déverrouillé"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3388290397947365744">"Ne pas afficher les notifications"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4688399629301178487">"Que souhaitez-vous afficher sur l\'écran de verrouillage ?"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8b3e9a4..c2d0795 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -3301,10 +3301,10 @@
<string name="sound_settings_summary_vibrate" msgid="7192223433295988890">"रिंगर, कंपन (वाइब्रेशन) पर सेट है"</string>
<string name="sound_settings_summary_silent" msgid="746662794579344761">"रिंगर मौन पर सेट है"</string>
<string name="sound_settings_example_summary" msgid="8125110691864707925">"घंटी और सूचना की आवाज़ 80% है"</string>
- <string name="media_volume_option_title" msgid="5966569685119475630">"मीडिया की आवाज़"</string>
+ <string name="media_volume_option_title" msgid="5966569685119475630">"मीडिया वॉल्यूम"</string>
<string name="remote_media_volume_option_title" msgid="8760846743943305764">"आवाज़ कास्ट करें"</string>
- <string name="call_volume_option_title" msgid="1461105986437268924">"कॉल की आवाज़"</string>
- <string name="alarm_volume_option_title" msgid="6398641749273697140">"अलार्म की आवाज़"</string>
+ <string name="call_volume_option_title" msgid="1461105986437268924">"कॉल वॉल्यूम"</string>
+ <string name="alarm_volume_option_title" msgid="6398641749273697140">"अलार्म वॉल्यूम"</string>
<string name="ring_volume_option_title" msgid="1520802026403038560">"घंटी और सूचना की आवाज़"</string>
<string name="notification_volume_option_title" msgid="4838818791683615978">"सूचना की आवाज़"</string>
<string name="ringtone_title" msgid="3271453110387368088">"फ़ोन रिंगटोन"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index cccd497..a261051 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -951,8 +951,8 @@
<string name="wifi_wps_available_second_item" msgid="1717024103303480804">" (WPS-ը հասանելի է)"</string>
<string name="wifi_carrier_connect" msgid="4511538300946413213">"Օպերատորի Wi‑Fi ցանց"</string>
<string name="wifi_carrier_content" msgid="2876499905644083615">"Միանալ <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
- <string name="wifi_scan_always_turnon_message" msgid="2165909441512029921">"Տեղադրության ճշգրտությունը կատարելագործելու կամ այլ նպատակների համար` <xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է միացնել ցանցի սկանավորումը, նույնիսկ եթե Wi-Fi-ը անջատված է:\n\nԹույլատրե՞լ բոլոր սկանավորում ցանկացող ծրագրերին:"</string>
- <string name="wifi_scan_always_turn_on_message_unknown" msgid="4903345360745717385">"Տեղորոշման ճշգրտությունն ու այլ գործառույթները բարելավելու նպատակով` անհայտ հավելվածին անհրաժեշտ է ցանցերի որոնման թույլտվություն, այդ թվում երբ Wi-Fi-ն անջատված է:\n\nԹույլատրե՞լ ցանցերի որոնումը բոլոր հավելվածներին:"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="2165909441512029921">"Տեղադրության ճշգրտությունը կատարելագործելու կամ այլ նպատակների համար՝ <xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է միացնել ցանցի սկանավորումը, նույնիսկ եթե Wi-Fi-ը անջատված է:\n\nԹույլատրե՞լ բոլոր սկանավորում ցանկացող ծրագրերին:"</string>
+ <string name="wifi_scan_always_turn_on_message_unknown" msgid="4903345360745717385">"Տեղորոշման ճշգրտությունն ու այլ գործառույթները բարելավելու նպատակով` անհայտ հավելվածին անհրաժեշտ է ցանցերի որոնման թույլտվություն, այդ թվում երբ Wi-Fi-ն անջատված է:\n\nԹույլատրե՞լ ցանցերի որոնումը բոլոր հավելվածներին։"</string>
<string name="wifi_scan_always_turnoff_message" msgid="93691286302680448">"Սա անջատելու համար գերբեռնված ցանկում անցեք Ընդլայնված:"</string>
<string name="wifi_scan_always_confirm_allow" msgid="4154200627800959777">"Թույլատրել"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6997087934558839256">"Մերժել"</string>
@@ -1304,9 +1304,9 @@
<string name="sim_change_pin" msgid="1104103818545005448">"SIM PIN"</string>
<string name="sim_bad_pin" msgid="5416328363761048221">"Սխալ PIN"</string>
<string name="sim_pins_dont_match" msgid="1540348773896609260">"PIN-երը չեն համընկնում"</string>
- <string name="sim_change_failed" msgid="316723087029061740">"Չհաջողվեց փոխել PIN-ը:\nՀնարավոր է` PIN-ը սխալ է:"</string>
+ <string name="sim_change_failed" msgid="316723087029061740">"Չհաջողվեց փոխել PIN-ը:\nՀնարավոր է՝ PIN-ը սխալ է:"</string>
<string name="sim_change_succeeded" msgid="3516905528149069739">"SIM քարտի PIN կոդը հաջողությամբ փոխվել է"</string>
- <string name="sim_lock_failed" msgid="16360418201678317">"Հնարավոր չէ բացել SIM քարտի կողպված կարգավիճակը:\nՀնարավոր է` սխալ PIN է մուտքագրվել:"</string>
+ <string name="sim_lock_failed" msgid="16360418201678317">"Հնարավոր չէ բացել SIM քարտի կողպված կարգավիճակը:\nՀնարավոր է՝ սխալ PIN է մուտքագրվել:"</string>
<string name="sim_pin_disable_failed" msgid="8719890393181032837">"Չհաջողվեց անջատել PIN կոդը"</string>
<string name="sim_pin_enable_failed" msgid="5156513975085380284">"Չհաջողվեց միացնել PIN կոդը"</string>
<string name="sim_enter_ok" msgid="3401715290135787531">"Հաստատել"</string>
@@ -1614,7 +1614,7 @@
<string name="master_clear_desc_also_erases_esim" msgid="6418163562288667727"><li>"eSIM քարտեր"</li></string>
<string name="master_clear_desc_no_cancel_mobile_plan" msgid="3112614935795369143">\n\n"Բջջային ծառայությունների ձեր փաթեթը չի չեղարկվի:"</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="7088655731755912201">\n\n"Երաժշտությունը, նկարները և այլ տվյալները ջնջելու համար "<b>"USB կրիչը "</b>"պետք է ջնջվի:"</string>
- <string name="master_clear_desc_erase_external_storage" product="default" msgid="4145566517710675883">\n\n"Երաժշտությունը, նկարները և այլ տվյալները "<b>"SD քարտից"</b>" մաքրելու համար` այն պետք է ջնջել:"</string>
+ <string name="master_clear_desc_erase_external_storage" product="default" msgid="4145566517710675883">\n\n"Երաժշտությունը, նկարները և այլ տվյալները "<b>"SD քարտից"</b>" մաքրելու համար՝ այն պետք է ջնջել:"</string>
<string name="erase_external_storage" product="nosdcard" msgid="2182181846128639635">"Ջնջել USB կրիչը"</string>
<string name="erase_external_storage" product="default" msgid="2610056855012660451">"Ջնջել SD քարտը"</string>
<string name="erase_external_storage_description" product="nosdcard" msgid="6358699244894944843">"Ջնջել ներքին USB կրիչի բոլոր տվյալները, ինչպիսիք են երաժշտությունը կամ լուսանկարները"</string>
@@ -1722,8 +1722,8 @@
<string name="location_neighborhood_level" msgid="3668890550358558267">"Թույլատրել ծրագրերին օգտագործել Google-ի տեղակայման ծառայությունները` ձեր տեղադրությունը ավելի արագ որոշելու համար: Անանուն տեղակայման տվյալները կհավաքագրվեն և կուղարկվեն Google-ին:"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Տեղադրությունը որոշված է Wi‑Fi-ի օգնությամբ"</string>
<string name="location_gps" msgid="8783616672454701134">"GPS արբանյակներ"</string>
- <string name="location_street_level" product="tablet" msgid="865953107414742784">"Թույլատրել հավելվածին օգտագործել GPS-ը` ձեր տեղադրությունը պլանշետում ամրագրելու համար"</string>
- <string name="location_street_level" product="default" msgid="3813836654645896185">"Թույլատրել հավելվածին օգտագործել GPS-ը` ձեր տեղադրությունը հեռախոսում ամրագրելու համար"</string>
+ <string name="location_street_level" product="tablet" msgid="865953107414742784">"Թույլատրել հավելվածին օգտագործել GPS-ը՝ ձեր տեղադրությունը պլանշետում ամրագրելու համար"</string>
+ <string name="location_street_level" product="default" msgid="3813836654645896185">"Թույլատրել հավելվածին օգտագործել GPS-ը՝ ձեր տեղադրությունը հեռախոսում ամրագրելու համար"</string>
<string name="assisted_gps" msgid="1714546606018821498">"Օգատգործեք աջակցող GPS-ը"</string>
<string name="assisted_gps_enabled" msgid="6220188450779319248">"Օգտագործեք սերվերը` GPS-ին միանալու համար (ապագնշեք` ցանցի օգտագործումը նվազեցնելու համար)"</string>
<string name="assisted_gps_disabled" msgid="1062496503892849">"Օգտագործել սերվերը GPS աջակցման համար (ապընտրել` GPS-ի արդյունավետությունը բարելավելու համար)"</string>
@@ -1900,7 +1900,7 @@
<string name="always_allow_bind_appwidgets_text" msgid="2069415023986858324">"Դուք ընտրել եք թույտարել այս ծրագրին ստեղծել վիջեթներ և մուտք գործել իրենց տվյալներ:"</string>
<string name="auto_launch_disable_text" msgid="502648841250936209">"Լռելյայները կարգավորված չեն:"</string>
<string name="clear_activities" msgid="341345438786077236">"Մաքրել լռելյայնները"</string>
- <string name="screen_compatibility_text" msgid="5915767835411020274">"Հնարավոր է` այս ծրագիրը մշակված չէ ձեր էկրանի համար: Դուք կարող եք վերահսկել դրա` ձեր էկրանին հարմարեցումը:"</string>
+ <string name="screen_compatibility_text" msgid="5915767835411020274">"Հնարավոր է՝ այս ծրագիրը մշակված չէ ձեր էկրանի համար: Դուք կարող եք վերահսկել դրա` ձեր էկրանին հարմարեցումը:"</string>
<string name="ask_compatibility" msgid="8388397595148476565">"Հարցնել մեկնարկելիս"</string>
<string name="enable_compatibility" msgid="1163387233622859712">"Աստիճանակարգել հավելվածները"</string>
<string name="unknown" msgid="8192160131923461175">"Անհայտ"</string>
@@ -2830,7 +2830,7 @@
<string name="account_settings_menu_auto_sync_personal" msgid="2905595464540145671">"Ինքնահամաժամացնել անձնական տվյալները"</string>
<string name="account_settings_menu_auto_sync_work" msgid="8561102487795657789">"Ինքնահամաժամացնել աշխատանքային տվյալները"</string>
<string name="data_usage_change_cycle" msgid="4501026427365283899">"Ցիկլի փոփոխում…"</string>
- <string name="data_usage_pick_cycle_day" msgid="3548922497494790123">"Ամսվա մի օր` տվյալների օգտագործման աշխատաշրջանը սահմանելու համար`"</string>
+ <string name="data_usage_pick_cycle_day" msgid="3548922497494790123">"Ամսվա մի օր` տվյալների օգտագործման աշխատաշրջանը սահմանելու համար՝"</string>
<string name="data_usage_empty" msgid="5619908658853726866">"Այս ընթացքում հավելվածները տվյալներ չեն օգտագործել:"</string>
<string name="data_usage_label_foreground" msgid="8782117644558473624">"Ակտիվ ռեժիմ"</string>
<string name="data_usage_label_background" msgid="8862781660427421859">"Ֆոնային ռեժիմ"</string>
@@ -2909,8 +2909,8 @@
<string name="vpn_ipsec_server_cert" msgid="1411390470454731396">"IPSec սերվերի վկայական"</string>
<string name="vpn_show_options" msgid="6105437733943318667">"Ցույց տալ լրացուցիչ ընտրանքները"</string>
<string name="vpn_search_domains" msgid="1973799969613962440">"DNS որոնման տիրույթներ"</string>
- <string name="vpn_dns_servers" msgid="6505263074417737107">"DNS սերվերներ (օրինակ` 8.8.8.8)"</string>
- <string name="vpn_routes" msgid="1218707725375594862">"Փոխանցման երթուղիներ (օրինակ` 10.0.0.0/8)"</string>
+ <string name="vpn_dns_servers" msgid="6505263074417737107">"DNS սերվերներ (օրինակ՝ 8.8.8.8)"</string>
+ <string name="vpn_routes" msgid="1218707725375594862">"Փոխանցման երթուղիներ (օրինակ՝ 10.0.0.0/8)"</string>
<string name="vpn_username" msgid="8671768183475960068">"Օգտանուն"</string>
<string name="vpn_password" msgid="1183746907642628127">"Գաղտնաբառ"</string>
<string name="vpn_save_login" msgid="5986762519977472618">"Պահել հաշվի տեղեկությունները"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index ea29644..62e05ca 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -4672,7 +4672,7 @@
<string name="change_wifi_state_app_detail_switch" msgid="1385358508267180745">"Izinkan aplikasi mengontrol Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="8230854855584217111">"Izinkan aplikasi ini mengaktifkan atau menonaktifkan Wi-Fi, memindai, dan menghubungkan ke jaringan Wi-Fi, menambahkan atau menghapus jaringan, atau memulai hotspot khusus lokal"</string>
<string name="media_output_title" msgid="8283629315159510680">"Putar media ke"</string>
- <string name="media_output_label_title" msgid="4139048973886819148">"Putar <xliff:g id="LABEL">%s</xliff:g>"</string>
+ <string name="media_output_label_title" msgid="4139048973886819148">"Putar <xliff:g id="LABEL">%s</xliff:g> di"</string>
<string name="media_output_default_summary" msgid="4200343059396412376">"Perangkat ini"</string>
<string name="media_output_summary" product="default" msgid="4760338801715262899">"Ponsel"</string>
<string name="media_output_summary" product="tablet" msgid="5138101426462250247">"Tablet"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 53954bf..a76b7c9 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -1167,7 +1167,7 @@
<string name="brightness" msgid="6216871641021779698">"កម្រិតពន្លឺ"</string>
<string name="brightness_title" msgid="5457874893085305155">"ពន្លឺ"</string>
<string name="brightness_summary" msgid="6309641759293018049">"កែពន្លឺអេក្រង់"</string>
- <string name="auto_brightness_title" msgid="4239324728760986697">"ពន្លឺដែលចេះសម្របខ្លួន"</string>
+ <string name="auto_brightness_title" msgid="4239324728760986697">"ពន្លឺមានភាពបត់បែន"</string>
<string name="auto_brightness_summary" msgid="1737148869232725883">"ពន្លឺអេក្រង់កែតម្រូវឱ្យស្របតាមបរិយាកាស"</string>
<string name="auto_brightness_summary_on" msgid="2748088951224387004">"បើក"</string>
<string name="auto_brightness_summary_off" msgid="8077066192887677956">"បិទ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index fddbfb1..d6c2a5f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -3094,7 +3094,7 @@
<string name="call_manager_title" msgid="3397433159509629466">"통화 관리자"</string>
<!-- no translation found for call_manager_summary (2558839230880919191) -->
<skip />
- <string name="cell_broadcast_settings" msgid="2416980110093867199">"무선 긴급 경보"</string>
+ <string name="cell_broadcast_settings" msgid="2416980110093867199">"재난문자"</string>
<string name="network_operators_settings" msgid="5105453353329748954">"네트워크 이동통신사"</string>
<string name="access_point_names" msgid="5768430498022188057">"액세스 포인트 이름(APN)"</string>
<string name="enhanced_4g_lte_mode_title" msgid="6624700245232361149">"VoLTE"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index f3af65f..4c6d522 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -4672,7 +4672,7 @@
<string name="change_wifi_state_app_detail_switch" msgid="1385358508267180745">"Дозволете апликацијата да контролира Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="8230854855584217111">"Дозволете апликацијава да вклучува или исклучува Wi-Fi, да скенира и да се поврзува на Wi-Fi мрежи, да додава или отстранува мрежи или да започне локална точка на пристап"</string>
<string name="media_output_title" msgid="8283629315159510680">"Пуштај содржини на"</string>
- <string name="media_output_label_title" msgid="4139048973886819148">"Пушти на <xliff:g id="LABEL">%s</xliff:g>"</string>
+ <string name="media_output_label_title" msgid="4139048973886819148">"Пуштај <xliff:g id="LABEL">%s</xliff:g> на"</string>
<string name="media_output_default_summary" msgid="4200343059396412376">"Овој уред"</string>
<string name="media_output_summary" product="default" msgid="4760338801715262899">"Телефон"</string>
<string name="media_output_summary" product="tablet" msgid="5138101426462250247">"Таблет"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 84a3315..936f755 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -1197,7 +1197,7 @@
<string name="adaptive_sleep_summary_on" msgid="313187971631243800">"Hidup / Skrin tidak akan dimatikan jika anda melihat pada skrin"</string>
<string name="adaptive_sleep_summary_off" msgid="5272156339202897523">"Mati"</string>
<string name="adaptive_sleep_title_no_permission" msgid="1719759921214237016">"Akses kamera diperlukan"</string>
- <string name="adaptive_sleep_summary_no_permission" msgid="5107880175176848307">"Ketik untuk mengurus kebenaran bagi Perkhidmatan Pemperibadian Peranti"</string>
+ <string name="adaptive_sleep_summary_no_permission" msgid="5107880175176848307">"Ketik untuk mengurus kebenaran bagi Perkhidmatan Pemeribadian Peranti"</string>
<string name="adaptive_sleep_description" msgid="1835321775327187860">"Menghalang skrin daripada dimatikan jika anda memandang skrin"</string>
<string name="adaptive_sleep_privacy" msgid="7664570136417980556">"Perhatian skrin menggunakan kamera depan untuk melihat sama ada seseorang sedang memandang skrin. Ciri ini berfungsi pada peranti dan imej tidak sekali-kali disimpan atau dihantar kepada Google."</string>
<string name="adaptive_sleep_contextual_slice_title" msgid="7467588613212629758">"Hidupkan perhatian skrin"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 1aa857d..832ee93 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -3804,10 +3804,10 @@
<string name="zen_mode_system_summary" msgid="7225581762792177522">"ਕੀ-ਬੋਰਡ ਅਤੇ ਹੋਰ ਬਟਨਾਂ ਤੋਂ ਧੁਨੀਆਂ"</string>
<string name="zen_mode_system_list" msgid="2256218792042306434">"ਸਪਰਸ਼ ਧੁਨੀਆਂ"</string>
<string name="zen_mode_system_list_first" msgid="8590078626001067855">"ਸਪਰਸ਼ ਧੁਨੀਆਂ"</string>
- <string name="zen_mode_reminders" msgid="1970224691551417906">"ਯਾਦ-ਸੂਚਨਾਵਾਂ"</string>
+ <string name="zen_mode_reminders" msgid="1970224691551417906">"ਰਿਮਾਈਂਡਰ"</string>
<string name="zen_mode_reminders_summary" msgid="3961627037429412382">"ਕਾਰਜਾਂ ਅਤੇ ਯਾਦ-ਸੂਚਨਾਵਾਂ ਤੋਂ"</string>
- <string name="zen_mode_reminders_list" msgid="3133513621980999858">"ਯਾਦ-ਸੂਚਨਾਵਾਂ"</string>
- <string name="zen_mode_reminders_list_first" msgid="1130470396012190814">"ਯਾਦ-ਸੂਚਨਾਵਾਂ"</string>
+ <string name="zen_mode_reminders_list" msgid="3133513621980999858">"ਰਿਮਾਈਂਡਰ"</string>
+ <string name="zen_mode_reminders_list_first" msgid="1130470396012190814">"ਰਿਮਾਈਂਡਰ"</string>
<string name="zen_mode_events" msgid="7425795679353531794">"ਕੈਲੰਡਰ ਇਵੈਂਟ"</string>
<string name="zen_mode_events_summary" msgid="3241903481309766428">"ਆਗਾਮੀ ਕੈਲੰਡਰ ਇਵੈਂਟਾਂ ਤੋਂ"</string>
<string name="zen_mode_events_list" msgid="7191316245742097229">"ਇਵੈਂਟ"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index a6619a1..2e514b6 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -2664,7 +2664,7 @@
<string name="tts_reset" msgid="9047681050813970031">"Rivendos"</string>
<string name="tts_play" msgid="2945513377250757221">"Luaj"</string>
<string name="vpn_settings_title" msgid="9131315656202257272">"VPN"</string>
- <string name="adaptive_connectivity_title" msgid="7464959640138428192">"Përshtatja e lidhshmërisë"</string>
+ <string name="adaptive_connectivity_title" msgid="7464959640138428192">"Lidhshmëria me përshtatje"</string>
<string name="adaptive_connectivity_summary" msgid="3648731530666326885">"Rrit kohëzgjatjen e baterisë dhe përmirëson cilësinë e funksionimit të pajisjes duke menaxhuar automatikisht lidhjet e rrjetit"</string>
<string name="credentials_title" msgid="7535942196886123656">"Ruajtja e kredencialeve"</string>
<string name="credentials_install" msgid="3933218407598415827">"Instalo një certifikatë"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 68a9060..56cc6ce 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -2740,7 +2740,7 @@
<string name="tts_reset" msgid="9047681050813970031">"Скинути"</string>
<string name="tts_play" msgid="2945513377250757221">"Відтворити"</string>
<string name="vpn_settings_title" msgid="9131315656202257272">"VPN"</string>
- <string name="adaptive_connectivity_title" msgid="7464959640138428192">"Адаптивне з\'єднання"</string>
+ <string name="adaptive_connectivity_title" msgid="7464959640138428192">"Адаптивне підключення"</string>
<string name="adaptive_connectivity_summary" msgid="3648731530666326885">"Подовжує час роботи акумулятора й покращує продуктивність пристрою завдяки автоматичному керуванню з\'єднанням із мережею"</string>
<string name="credentials_title" msgid="7535942196886123656">"Сховище облікових даних"</string>
<string name="credentials_install" msgid="3933218407598415827">"Установити сертифікат"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 3235dee..d97056f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -314,7 +314,7 @@
<string name="lockscreen_settings_what_to_show_category" msgid="9205490627927741254">"Nội dung hiển thị"</string>
<string name="security_settings_summary" msgid="1627059516127354233">"Đặt Vị trí của tôi, mở khóa màn hình, khóa thẻ SIM, khóa bộ nhớ thông tin xác thực"</string>
<string name="cdma_security_settings_summary" msgid="2455517905101186330">"Đặt Vị trí của tôi, mở khóa màn hình, khóa bộ nhớ thông tin xác thực"</string>
- <string name="security_passwords_title" msgid="4154420930973818581">"Bảo mật"</string>
+ <string name="security_passwords_title" msgid="4154420930973818581">"Quyền riêng tư"</string>
<string name="disabled_by_administrator_summary" msgid="5424846182313851124">"Chưa có"</string>
<string name="security_status_title" msgid="6958004275337618656">"Trạng thái bảo mật"</string>
<string name="security_dashboard_summary_face" msgid="4198949293847206382">"Phương thức khóa màn hình, mở khóa bằng khuôn mặt"</string>
@@ -2112,7 +2112,7 @@
<string name="vision_settings_suggestion_title" msgid="4689275412658803919">"Thay đổi cỡ chữ"</string>
<string name="screen_reader_category_title" msgid="6195867428854871553">"Trình đọc màn hình"</string>
<string name="audio_and_captions_category_title" msgid="5049122378290004050">"Âm thanh và văn bản trên màn hình"</string>
- <string name="display_category_title" msgid="6638191682294461408">"Màn hình"</string>
+ <string name="display_category_title" msgid="6638191682294461408">"Hiển thị"</string>
<string name="interaction_control_category_title" msgid="2696474616743882372">"Điều khiển tương tác"</string>
<string name="user_installed_services_category_title" msgid="2639470729311439731">"Ứng dụng đã tải xuống"</string>
<string name="experimental_category_title" msgid="898904396646344152">"Thử nghiệm"</string>
@@ -2275,7 +2275,7 @@
<string name="accessibility_vibration_summary_low" msgid="6482721005400340317">"Đổ chuông và thông báo được đặt thành thấp"</string>
<string name="accessibility_vibration_summary_medium" msgid="2348889320548746469">"Đổ chuông và thông báo được đặt thành trung bình"</string>
<string name="accessibility_vibration_summary_high" msgid="1764693979030913712">"Độ rung khi đổ chuông và có thông báo được đặt thành cao"</string>
- <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Tắt"</string>
+ <string name="accessibility_vibration_intensity_off" msgid="972159695404061944">"Đang tắt"</string>
<string name="accessibility_vibration_intensity_low" msgid="6311161118835287335">"Thấp"</string>
<string name="accessibility_vibration_intensity_medium" msgid="1734058611879392797">"Trung bình"</string>
<string name="accessibility_vibration_intensity_high" msgid="5982896399775212514">"Cao"</string>
@@ -3492,7 +3492,7 @@
<string name="bubbles_feature_disabled_dialog_text" msgid="5275666953364031055">"Thao tác bật bong bóng cho ứng dụng này cũng sẽ bật bong bóng cho thiết bị của bạn.\n\nViệc này sẽ ảnh hưởng đến các ứng dụng hoặc cuộc trò chuyện khác được phép bật bong bóng."</string>
<string name="bubbles_feature_disabled_button_approve" msgid="2042628067101419871">"Bật"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="8963409459448350600">"Hủy"</string>
- <string name="notifications_bubble_setting_on_summary" msgid="4641572377430901196">"Bật / Các cuộc trò chuyện có thể hiển thị ở dạng biểu tượng nổi"</string>
+ <string name="notifications_bubble_setting_on_summary" msgid="4641572377430901196">"Đang bật / Các cuộc trò chuyện có thể hiển thị ở dạng biểu tượng nổi"</string>
<string name="notifications_bubble_setting_title" msgid="8287649393774855268">"Cho phép các ứng dụng hiển thị bong bóng"</string>
<string name="notifications_bubble_setting_description" msgid="7336770088735025981">"Một số cuộc trò chuyện sẽ hiển thị dưới dạng biểu tượng nổi ở phía trên cùng của các ứng dụng khác"</string>
<string name="bubble_app_setting_all" msgid="312524752846978277">"Mọi cuộc trò chuyện đều có thể tạo bong bóng"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 15494e4..a9b832d 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -4672,7 +4672,7 @@
<string name="change_wifi_state_app_detail_switch" msgid="1385358508267180745">"允許應用程式控制 Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="8230854855584217111">"允許這個應用程式開啟或關閉 Wi-Fi、掃描及連上 Wi-Fi 網路、新增或移除網路,或啟動僅限本機的無線基地台"</string>
<string name="media_output_title" msgid="8283629315159510680">"播放媒體"</string>
- <string name="media_output_label_title" msgid="4139048973886819148">"透過以下裝置播放「<xliff:g id="LABEL">%s</xliff:g>」中的媒體"</string>
+ <string name="media_output_label_title" msgid="4139048973886819148">"透過以下裝置播放「<xliff:g id="LABEL">%s</xliff:g>」"</string>
<string name="media_output_default_summary" msgid="4200343059396412376">"這個裝置"</string>
<string name="media_output_summary" product="default" msgid="4760338801715262899">"手機"</string>
<string name="media_output_summary" product="tablet" msgid="5138101426462250247">"平板電腦"</string>
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 0325842..26c699b 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -80,6 +80,10 @@
@VisibleForTesting
static final String KEY_TETHER_PREFS_FOOTER = "tether_prefs_footer";
+ @VisibleForTesting
+ static final String BLUETOOTH_TETHERING_STATE_CHANGED =
+ "android.bluetooth.pan.profile.action.TETHERING_STATE_CHANGED";
+
private static final String TAG = "TetheringSettings";
private SwitchPreference mUsbTether;
@@ -154,9 +158,7 @@
BluetoothProfile.PAN);
}
- mUsbTether = (SwitchPreference) findPreference(KEY_USB_TETHER_SETTINGS);
- mBluetoothTether = (SwitchPreference) findPreference(KEY_ENABLE_BLUETOOTH_TETHERING);
- mEthernetTether = (SwitchPreference) findPreference(KEY_ENABLE_ETHERNET_TETHERING);
+ setupTetherPreference();
setFooterPreferenceTitle();
mDataSaverBackend.addListener(this);
@@ -208,6 +210,13 @@
super.onDestroy();
}
+ @VisibleForTesting
+ void setupTetherPreference() {
+ mUsbTether = (SwitchPreference) findPreference(KEY_USB_TETHER_SETTINGS);
+ mBluetoothTether = (SwitchPreference) findPreference(KEY_ENABLE_BLUETOOTH_TETHERING);
+ mEthernetTether = (SwitchPreference) findPreference(KEY_ENABLE_ETHERNET_TETHERING);
+ }
+
@Override
public void onDataSaverChanged(boolean isDataSaving) {
mDataSaverEnabled = isDataSaving;
@@ -281,6 +290,8 @@
}
}
updateState();
+ } else if (action.equals(BLUETOOTH_TETHERING_STATE_CHANGED)) {
+ updateState();
}
}
}
@@ -297,32 +308,13 @@
return;
}
- final Activity activity = getActivity();
mStartTetheringCallback = new OnStartTetheringCallback(this);
mTetheringEventCallback = new TetheringEventCallback();
mTm.registerTetheringEventCallback(new HandlerExecutor(mHandler), mTetheringEventCallback);
mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
- mTetherChangeReceiver = new TetherChangeReceiver();
- IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
- Intent intent = activity.registerReceiver(mTetherChangeReceiver, filter);
-
- filter = new IntentFilter();
- filter.addAction(UsbManager.ACTION_USB_STATE);
- activity.registerReceiver(mTetherChangeReceiver, filter);
-
- filter = new IntentFilter();
- filter.addAction(Intent.ACTION_MEDIA_SHARED);
- filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
- filter.addDataScheme("file");
- activity.registerReceiver(mTetherChangeReceiver, filter);
-
- filter = new IntentFilter();
- filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
- activity.registerReceiver(mTetherChangeReceiver, filter);
-
- if (intent != null) mTetherChangeReceiver.onReceive(activity, intent);
+ registerReceiver();
mEthernetListener = new EthernetListener();
if (mEm != null)
@@ -348,10 +340,38 @@
mEthernetListener = null;
}
+ @VisibleForTesting
+ void registerReceiver() {
+ final Activity activity = getActivity();
+
+ mTetherChangeReceiver = new TetherChangeReceiver();
+ IntentFilter filter = new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
+ final Intent intent = activity.registerReceiver(mTetherChangeReceiver, filter);
+
+ filter = new IntentFilter();
+ filter.addAction(UsbManager.ACTION_USB_STATE);
+ activity.registerReceiver(mTetherChangeReceiver, filter);
+
+ filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_MEDIA_SHARED);
+ filter.addAction(Intent.ACTION_MEDIA_UNSHARED);
+ filter.addDataScheme("file");
+ activity.registerReceiver(mTetherChangeReceiver, filter);
+
+ filter = new IntentFilter();
+ filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
+ filter.addAction(BLUETOOTH_TETHERING_STATE_CHANGED);
+ activity.registerReceiver(mTetherChangeReceiver, filter);
+
+ if (intent != null) mTetherChangeReceiver.onReceive(activity, intent);
+ }
+
private void updateState() {
- String[] available = mCm.getTetherableIfaces();
- String[] tethered = mCm.getTetheredIfaces();
- String[] errored = mCm.getTetheringErroredIfaces();
+ final ConnectivityManager cm =
+ (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+ final String[] available = cm.getTetherableIfaces();
+ final String[] tethered = cm.getTetheredIfaces();
+ final String[] errored = cm.getTetheringErroredIfaces();
updateState(available, tethered, errored);
}
@@ -362,7 +382,8 @@
updateEthernetState(available, tethered);
}
- private void updateUsbState(String[] available, String[] tethered,
+ @VisibleForTesting
+ void updateUsbState(String[] available, String[] tethered,
String[] errored) {
boolean usbAvailable = mUsbConnected && !mMassStorageActive;
int usbError = ConnectivityManager.TETHER_ERROR_NO_ERROR;
@@ -400,20 +421,33 @@
}
}
- private void updateBluetoothState() {
+ @VisibleForTesting
+ int getBluetoothState() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null) {
+ return BluetoothAdapter.ERROR;
+ }
+ return adapter.getState();
+ }
+
+ @VisibleForTesting
+ boolean isBluetoothTetheringOn() {
+ final BluetoothPan bluetoothPan = mBluetoothPan.get();
+ return bluetoothPan != null && bluetoothPan.isTetheringOn();
+ }
+
+ private void updateBluetoothState() {
+ final int btState = getBluetoothState();
+ if (btState == BluetoothAdapter.ERROR) {
return;
}
- int btState = adapter.getState();
+
if (btState == BluetoothAdapter.STATE_TURNING_OFF) {
mBluetoothTether.setEnabled(false);
} else if (btState == BluetoothAdapter.STATE_TURNING_ON) {
mBluetoothTether.setEnabled(false);
} else {
- BluetoothPan bluetoothPan = mBluetoothPan.get();
- if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null
- && bluetoothPan.isTetheringOn()) {
+ if (btState == BluetoothAdapter.STATE_ON && isBluetoothTetheringOn()) {
mBluetoothTether.setChecked(true);
mBluetoothTether.setEnabled(!mDataSaverEnabled);
} else {
@@ -423,7 +457,8 @@
}
}
- private void updateEthernetState(String[] available, String[] tethered) {
+ @VisibleForTesting
+ void updateEthernetState(String[] available, String[] tethered) {
boolean isAvailable = false;
boolean isTethered = false;
diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java
index 02625bb..ab8eea5 100644
--- a/src/com/android/settings/bluetooth/DevicePickerFragment.java
+++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java
@@ -18,6 +18,7 @@
import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
+import android.Manifest;
import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
@@ -192,6 +193,6 @@
if (mLaunchPackage != null && mLaunchClass != null) {
intent.setClassName(mLaunchPackage, mLaunchClass);
}
- getActivity().sendBroadcast(intent);
+ getActivity().sendBroadcast(intent, Manifest.permission.BLUETOOTH_ADMIN);
}
}
diff --git a/src/com/android/settings/notification/BubbleNotificationPreferenceController.java b/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
index 0fa480c..1c7b4df 100644
--- a/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
@@ -18,6 +18,7 @@
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
@@ -81,7 +82,8 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ ActivityManager am = mContext.getSystemService(ActivityManager.class);
+ return am.isLowRamDevice() ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java b/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
index f123c51..a99155f 100644
--- a/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceController.java
@@ -18,6 +18,7 @@
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import android.app.ActivityManager;
import android.content.Context;
import android.provider.Settings;
@@ -48,7 +49,8 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ ActivityManager am = mContext.getSystemService(ActivityManager.class);
+ return am.isLowRamDevice() ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
}
private boolean areBubblesEnabled() {
diff --git a/src/com/android/settings/notification/app/BubblePreferenceController.java b/src/com/android/settings/notification/app/BubblePreferenceController.java
index 722b279..8f452f7 100644
--- a/src/com/android/settings/notification/app/BubblePreferenceController.java
+++ b/src/com/android/settings/notification/app/BubblePreferenceController.java
@@ -19,6 +19,7 @@
import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import android.app.ActivityManager;
import android.annotation.Nullable;
import android.content.Context;
import android.provider.Settings;
@@ -139,7 +140,8 @@
}
private boolean isGloballyEnabled() {
- return Settings.Global.getInt(mContext.getContentResolver(),
+ ActivityManager am = mContext.getSystemService(ActivityManager.class);
+ return !am.isLowRamDevice() && Settings.Global.getInt(mContext.getContentResolver(),
NOTIFICATION_BUBBLES, SYSTEM_WIDE_OFF) == SYSTEM_WIDE_ON;
}
diff --git a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
index 7519c23..236e628 100644
--- a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
+++ b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
@@ -20,6 +20,7 @@
import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -99,7 +100,8 @@
}
private boolean isGloballyEnabled() {
- return Settings.Global.getInt(mContext.getContentResolver(),
+ ActivityManager am = mContext.getSystemService(ActivityManager.class);
+ return !am.isLowRamDevice() && Settings.Global.getInt(mContext.getContentResolver(),
NOTIFICATION_BUBBLES, ON) == ON;
}
}
diff --git a/src/com/android/settings/panel/MediaOutputPanel.java b/src/com/android/settings/panel/MediaOutputPanel.java
index 6a296b7..7caf7dd 100644
--- a/src/com/android/settings/panel/MediaOutputPanel.java
+++ b/src/com/android/settings/panel/MediaOutputPanel.java
@@ -25,11 +25,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
import android.media.MediaMetadata;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
@@ -109,8 +105,7 @@
@Override
public IconCompat getIcon() {
if (mMediaController == null) {
- return IconCompat.createWithResource(mContext, R.drawable.ic_media_stream).setTint(
- Utils.getColorAccentDefaultColor(mContext));
+ return null;
}
final MediaMetadata metadata = mMediaController.getMetadata();
if (metadata != null) {
@@ -124,25 +119,6 @@
}
}
Log.d(TAG, "Media meta data does not contain icon information");
- return getPackageIcon();
- }
-
- private IconCompat getPackageIcon() {
- try {
- final Drawable drawable = mContext.getPackageManager().getApplicationIcon(mPackageName);
- if (drawable instanceof BitmapDrawable) {
- return IconCompat.createWithBitmap(((BitmapDrawable) drawable).getBitmap());
- }
- final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
- drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
- final Canvas canvas = new Canvas(bitmap);
- drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
- drawable.draw(canvas);
-
- return IconCompat.createWithBitmap(bitmap);
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Package is not found. Unable to get package icon.");
- }
return null;
}
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index d34a09f..6f2d59b 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -93,6 +93,7 @@
private String mPanelClosedKey;
private LinearLayout mPanelHeader;
private ImageView mTitleIcon;
+ private LinearLayout mTitleGroup;
private TextView mHeaderTitle;
private TextView mHeaderSubtitle;
private int mMaxHeight;
@@ -195,6 +196,7 @@
mTitleView = mLayoutView.findViewById(R.id.panel_title);
mPanelHeader = mLayoutView.findViewById(R.id.panel_header);
mTitleIcon = mLayoutView.findViewById(R.id.title_icon);
+ mTitleGroup = mLayoutView.findViewById(R.id.title_group);
mHeaderTitle = mLayoutView.findViewById(R.id.header_title);
mHeaderSubtitle = mLayoutView.findViewById(R.id.header_subtitle);
mFooterDivider = mLayoutView.findViewById(R.id.footer_divider);
@@ -231,26 +233,13 @@
final IconCompat icon = mPanel.getIcon();
final CharSequence title = mPanel.getTitle();
- if (icon == null) {
+
+ if (icon != null || mPanel.getViewType() == PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON) {
+ enablePanelHeader(icon, title);
+ } else {
mTitleView.setVisibility(View.VISIBLE);
mPanelHeader.setVisibility(View.GONE);
mTitleView.setText(title);
- } else {
- mTitleView.setVisibility(View.GONE);
- mPanelHeader.setVisibility(View.VISIBLE);
- mPanelHeader.setAccessibilityPaneTitle(title);
- mTitleIcon.setImageIcon(icon.toIcon(getContext()));
- mHeaderTitle.setText(title);
- mHeaderSubtitle.setText(mPanel.getSubTitle());
- if (mPanel.getHeaderIconIntent() != null) {
- mTitleIcon.setOnClickListener(getHeaderIconListener());
- mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
- } else {
- final int size = getResources().getDimensionPixelSize(
- R.dimen.output_switcher_panel_icon_size);
- mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(size, size));
- }
}
if (mPanel.getViewType() == PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON) {
@@ -284,6 +273,29 @@
0 /* value */);
}
+ private void enablePanelHeader(IconCompat icon, CharSequence title) {
+ mTitleView.setVisibility(View.GONE);
+ mPanelHeader.setVisibility(View.VISIBLE);
+ mPanelHeader.setAccessibilityPaneTitle(title);
+ mHeaderTitle.setText(title);
+ mHeaderSubtitle.setText(mPanel.getSubTitle());
+ if (icon != null) {
+ mTitleGroup.setVisibility(View.VISIBLE);
+ mTitleIcon.setImageIcon(icon.toIcon(getContext()));
+ if (mPanel.getHeaderIconIntent() != null) {
+ mTitleIcon.setOnClickListener(getHeaderIconListener());
+ mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+ } else {
+ final int size = getResources().getDimensionPixelSize(
+ R.dimen.output_switcher_panel_icon_size);
+ mTitleIcon.setLayoutParams(new LinearLayout.LayoutParams(size, size));
+ }
+ } else {
+ mTitleGroup.setVisibility(View.GONE);
+ }
+ }
+
private void loadAllSlices() {
mSliceLiveData.clear();
final List<Uri> sliceUris = mPanel.getSlices();
@@ -480,7 +492,13 @@
@Override
public void onHeaderChanged() {
ThreadUtils.postOnMainThread(() -> {
- mTitleIcon.setImageIcon(mPanel.getIcon().toIcon(getContext()));
+ final IconCompat icon = mPanel.getIcon();
+ if (icon != null) {
+ mTitleIcon.setImageIcon(icon.toIcon(getContext()));
+ mTitleGroup.setVisibility(View.VISIBLE);
+ } else {
+ mTitleGroup.setVisibility(View.GONE);
+ }
mHeaderTitle.setText(mPanel.getTitle());
mHeaderSubtitle.setText(mPanel.getSubTitle());
});
diff --git a/tests/robotests/src/com/android/settings/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
index 3c38c51d..99c112c 100644
--- a/tests/robotests/src/com/android/settings/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/TetherSettingsTest.java
@@ -18,6 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -25,20 +27,27 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.bluetooth.BluetoothAdapter;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.FeatureFlagUtils;
+import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
+import androidx.preference.SwitchPreference;
import com.android.settings.core.FeatureFlags;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
@@ -160,6 +169,80 @@
verify(mockPreference).setTitle(R.string.tethering_footer_info_sta_ap_concurrency);
}
+ @Test
+ public void testBluetoothState_updateBluetoothState_bluetoothTetheringStateOn() {
+ final TetherSettings spyTetherSettings = spy(new TetherSettings());
+ when(spyTetherSettings.getContext()).thenReturn(mContext);
+ final SwitchPreference mockSwitchPreference = mock(SwitchPreference.class);
+ when(spyTetherSettings.findPreference(TetherSettings.KEY_ENABLE_BLUETOOTH_TETHERING))
+ .thenReturn(mockSwitchPreference);
+ final FragmentActivity mockActivity = mock(FragmentActivity.class);
+ when(spyTetherSettings.getActivity()).thenReturn(mockActivity);
+ final ArgumentCaptor<BroadcastReceiver> captor =
+ ArgumentCaptor.forClass(BroadcastReceiver.class);
+ when(mockActivity.registerReceiver(captor.capture(), any(IntentFilter.class)))
+ .thenReturn(null);
+ // Bluetooth tethering state is on
+ when(spyTetherSettings.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON);
+ when(spyTetherSettings.isBluetoothTetheringOn()).thenReturn(true);
+
+ spyTetherSettings.setupTetherPreference();
+ spyTetherSettings.registerReceiver();
+ updateOnlyBluetoothState(spyTetherSettings);
+
+ // Simulate Bluetooth tethering state changed
+ final BroadcastReceiver receiver = captor.getValue();
+ final Intent bluetoothTetheringChanged =
+ new Intent(TetherSettings.BLUETOOTH_TETHERING_STATE_CHANGED);
+ receiver.onReceive(mockActivity, bluetoothTetheringChanged);
+
+ verify(mockSwitchPreference).setEnabled(true);
+ verify(mockSwitchPreference).setChecked(true);
+ }
+
+ @Test
+ public void testBluetoothState_updateBluetoothState_bluetoothTetheringStateOff() {
+ final TetherSettings spyTetherSettings = spy(new TetherSettings());
+ when(spyTetherSettings.getContext()).thenReturn(mContext);
+ final SwitchPreference mockSwitchPreference = mock(SwitchPreference.class);
+ when(spyTetherSettings.findPreference(TetherSettings.KEY_ENABLE_BLUETOOTH_TETHERING))
+ .thenReturn(mockSwitchPreference);
+ final FragmentActivity mockActivity = mock(FragmentActivity.class);
+ when(spyTetherSettings.getActivity()).thenReturn(mockActivity);
+ final ArgumentCaptor<BroadcastReceiver> captor =
+ ArgumentCaptor.forClass(BroadcastReceiver.class);
+ when(mockActivity.registerReceiver(captor.capture(), any(IntentFilter.class)))
+ .thenReturn(null);
+ // Bluetooth tethering state is off
+ when(spyTetherSettings.getBluetoothState()).thenReturn(BluetoothAdapter.STATE_ON);
+ when(spyTetherSettings.isBluetoothTetheringOn()).thenReturn(false);
+
+ spyTetherSettings.setupTetherPreference();
+ spyTetherSettings.registerReceiver();
+ updateOnlyBluetoothState(spyTetherSettings);
+
+ // Simulate Bluetooth tethering state changed
+ final BroadcastReceiver receiver = captor.getValue();
+ final Intent bluetoothTetheringChanged =
+ new Intent(TetherSettings.BLUETOOTH_TETHERING_STATE_CHANGED);
+ receiver.onReceive(mockActivity, bluetoothTetheringChanged);
+
+ verify(mockSwitchPreference).setEnabled(true);
+ verify(mockSwitchPreference).setChecked(false);
+ }
+
+ private void updateOnlyBluetoothState(TetherSettings tetherSettings) {
+ doReturn(mConnectivityManager).when(tetherSettings)
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ when(mConnectivityManager.getTetherableIfaces()).thenReturn(new String[0]);
+ when(mConnectivityManager.getTetheredIfaces()).thenReturn(new String[0]);
+ when(mConnectivityManager.getTetheringErroredIfaces()).thenReturn(new String[0]);
+ doNothing().when(tetherSettings).updateUsbState(any(String[].class), any(String[].class),
+ any(String[].class));
+ doNothing().when(tetherSettings).updateEthernetState(any(String[].class),
+ any(String[].class));
+ }
+
private void setupIsTetherAvailable(boolean returnValue) {
when(mConnectivityManager.isTetheringSupported()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java
index b2cf55b..871de0f 100644
--- a/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BubbleNotificationPreferenceControllerTest.java
@@ -19,6 +19,7 @@
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
@@ -29,6 +30,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.ActivityManager;
import android.content.Context;
import android.provider.Settings;
@@ -44,6 +46,8 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivityManager;
@RunWith(RobolectricTestRunner.class)
public class BubbleNotificationPreferenceControllerTest {
@@ -69,7 +73,18 @@
}
@Test
- public void getAvilabilityStatus_returnsAvailable() {
+ public void isAvailable_lowRam_returnsUnsupported() {
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(true);
+ assertEquals(UNSUPPORTED_ON_DEVICE, mController.getAvailabilityStatus());
+ }
+
+ @Test
+ public void isAvailable_notLowRam_returnsAvailable() {
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(false);
assertEquals(AVAILABLE, mController.getAvailabilityStatus());
}
diff --git a/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java
index b5f505b..88de7ac 100644
--- a/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BubbleSummaryNotificationPreferenceControllerTest.java
@@ -18,11 +18,14 @@
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.BadgingNotificationPreferenceController.OFF;
import static com.android.settings.notification.BadgingNotificationPreferenceController.ON;
import static com.google.common.truth.Truth.assertThat;
+import android.app.ActivityManager;
import android.content.Context;
import android.provider.Settings;
@@ -35,6 +38,8 @@
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivityManager;
@RunWith(RobolectricTestRunner.class)
public class BubbleSummaryNotificationPreferenceControllerTest {
@@ -68,4 +73,20 @@
String onString = mContext.getString(R.string.notifications_bubble_setting_on_summary);
assertThat(mController.getSummary()).isEqualTo(onString);
}
+
+ @Test
+ public void isAvailable_lowRam_returnsUnsupported() {
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(true);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void isAvailable_notLowRam_returnsAvailable() {
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(false);
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/notification/app/BubblePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/BubblePreferenceControllerTest.java
index afb3d1b..ea963e3 100644
--- a/tests/robotests/src/com/android/settings/notification/app/BubblePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/BubblePreferenceControllerTest.java
@@ -42,6 +42,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.ActivityManager;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
@@ -67,7 +68,9 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.shadows.ShadowActivityManager;
import java.util.ArrayList;
import java.util.List;
@@ -159,6 +162,18 @@
}
@Test
+ public void isNotAvailable_ifLowRam() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ mController.onResume(appRow, null, null, null, null, null);
+
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(true);
+ assertFalse(mController.isAvailable());
+ }
+
+
+ @Test
public void isAvailable_notIfOffGlobally_channel() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
NotificationChannel channel = mock(NotificationChannel.class);
@@ -171,6 +186,18 @@
}
@Test
+ public void isAvailable_ifNotLowRam() {
+ NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
+ mController.onResume(appRow, null, null, null, null, null);
+ Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
+
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(false);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
public void isAvailable_app_evenIfOffGlobally() {
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
mAppPageController.onResume(appRow, null, null, null, null, null);
diff --git a/tests/robotests/src/com/android/settings/notification/app/BubbleSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/BubbleSummaryPreferenceControllerTest.java
index af7b108..f851c96 100644
--- a/tests/robotests/src/com/android/settings/notification/app/BubbleSummaryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/BubbleSummaryPreferenceControllerTest.java
@@ -23,6 +23,8 @@
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.provider.Settings.Global.NOTIFICATION_BUBBLES;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_OFF;
import static com.android.settings.notification.app.BubblePreferenceController.SYSTEM_WIDE_ON;
@@ -37,6 +39,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.app.ActivityManager;
import android.app.NotificationChannel;
import android.content.Context;
import android.provider.Settings;
@@ -53,6 +56,8 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivityManager;
import org.robolectric.shadows.ShadowApplication;
@RunWith(RobolectricTestRunner.class)
@@ -140,6 +145,28 @@
}
@Test
+ public void isAvailable_lowRam_shouldReturnFalse() {
+ Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
+ mController.onResume(mAppRow, null, null, null, null, null);
+
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(true);
+ assertFalse(mController.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_notLowRam_shouldReturnTrue() {
+ Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, SYSTEM_WIDE_ON);
+ mController.onResume(mAppRow, null, null, null, null, null);
+
+ final ShadowActivityManager activityManager =
+ Shadow.extract(mContext.getSystemService(ActivityManager.class));
+ activityManager.setIsLowRamDevice(false);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
public void updateState_setsIntent() {
mAppRow.bubblePreference = BUBBLE_PREFERENCE_ALL;
mController.onResume(mAppRow, null, null, null, null, null);
diff --git a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
index 2ab428d..207a644 100644
--- a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
+++ b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java
@@ -317,4 +317,20 @@
public void getViewType_checkType() {
assertThat(mPanel.getViewType()).isEqualTo(PanelContent.VIEW_TYPE_SLIDER_LARGE_ICON);
}
+
+ @Test
+ public void getIcon_mediaControllerIsNull_returnNull() {
+ mMediaControllers.clear();
+ mPanel.onStart();
+
+ assertThat(mPanel.getIcon()).isNull();
+ }
+
+ @Test
+ public void getIcon_mediaMetadataIsNull_returnNull() {
+ mPanel.onStart();
+ when(mMediaController.getMetadata()).thenReturn(null);
+
+ assertThat(mPanel.getIcon()).isNull();
+ }
}