Merge "Let the framework handle long clicks"
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 953ea45..e1d7969 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -1618,7 +1618,7 @@
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Aquesta funció és experimental i pot afectar el rendiment."</string>
<string name="accessibility_autoclick_preference_title" msgid="7014499339068449623">"Clic quan el punter deixi de moure\'s"</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="3962261178385106006">"Retard abans de fer clic"</string>
- <string name="enable_quick_setting" msgid="2366999897816894536">"Mostra a la configuració ràpida"</string>
+ <string name="enable_quick_setting" msgid="2366999897816894536">"Mostra a Configuració ràpida"</string>
<string name="daltonizer_type" msgid="1124178250809091080">"Mode de correcció"</string>
<string name="daltonizer_type_overridden" msgid="3116947244410245916">"S\'ha substituït per <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desactivat"</string>
@@ -2823,7 +2823,7 @@
<string name="process_format" msgid="77905604092541454">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="3459065925679828230">"Optimització de la bateria"</string>
<string name="high_power_filter_on" msgid="3222265297576680099">"No optimitzen la bateria"</string>
- <string name="high_power_on" msgid="6216293998227583810">"No optimitzada"</string>
+ <string name="high_power_on" msgid="6216293998227583810">"No optimitzen la bateria"</string>
<string name="high_power_off" msgid="3393904131961263278">"Optimitza l\'ús de la bateria"</string>
<string name="high_power_system" msgid="7362862974428225301">"L\'optimització de la bateria no està disponible"</string>
<string name="high_power_desc" msgid="6283926163708585760">"No s\'aplica l\'optimització de la bateria. És possible que es consumeixi més ràpidament."</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index ac2097f..c958ec4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -2537,7 +2537,7 @@
<string name="keywords_all_apps" msgid="5377153522551809915">"App-System für App-Download"</string>
<string name="keywords_app_permissions" msgid="8677901415217188314">"App-Berechtigungen – Sicherheit"</string>
<string name="keywords_default_apps" msgid="3581727483175522599">"Apps-Standardeinstellung"</string>
- <string name="keywords_ignore_optimizations" msgid="946516741848647905">"Ignorieren Optimierungen Stromsparmodus App Standby"</string>
+ <string name="keywords_ignore_optimizations" msgid="946516741848647905">"Ignorieren Optimierungen Stromsparmodus App-Standby"</string>
<string name="keywords_color_mode" msgid="4670570451841540200">"brillant rgb srgb farbe natürlich standard"</string>
<string name="keywords_lockscreen" msgid="4806191868723291541">"ziehen passwort muster pin slide password pattern"</string>
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"WLAN-NFC-Tag einrichten"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index d74abee..2c1bb2b 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -2676,7 +2676,7 @@
<string name="zen_mode_summary_always" msgid="6172985102689237703">"Cambiar a interrumpir siempre"</string>
<string name="notification_settings_apps_title" msgid="1125354590652967250">"Notif. aplicaciones"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Ajustes de notificaciones"</string>
- <string name="device_feedback" msgid="3238056036766293294">"Dar tu opinión sobre el dispositivo"</string>
+ <string name="device_feedback" msgid="3238056036766293294">"Enviar sugerencias sobre el dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="2451187374960131018">"Introduce el PIN del administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Sí"</string>
<string name="switch_off_text" msgid="1139356348100829659">"No"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index d70f134..9989d20 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -28,7 +28,7 @@
<item quantity="other">अहिले तपाईँ विकासकर्ता हुनका लागि <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> चरण टाढा हुनुहुन्छ।</item>
<item quantity="one">अहिले तपाईँ विकासकर्ता हुनका लागि <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> चरण टाढा हुनुहुन्छ।</item>
</plurals>
- <string name="show_dev_on" msgid="1110711554982716293">"तपाईं अब एउटा विकासकर्ता हुनुहुन्छ!"</string>
+ <string name="show_dev_on" msgid="1110711554982716293">"तपाईँ अब एउटा विकासकर्ता हुनुहुन्छ!"</string>
<string name="show_dev_already" msgid="2151632240145446227">"आवश्यक छैन, तपाईँ आफैँ नै एउटा विकासकर्ता हुनुहुन्छ।"</string>
<string name="header_category_wireless_networks" msgid="5110914332313954940">"ताररहित र सञ्जालहरू"</string>
<string name="header_category_connections" msgid="6471513040815680662">"जडानहरू"</string>
@@ -126,7 +126,7 @@
<string name="bluetooth_ask_discovery" product="tablet" msgid="786921566047356213">"एक अनुप्रयोगले तपाईँको ट्याब्लेटलाई अन्य ब्लुटुथ उपकरणहरूले हेर्न मिल्ने बनाउन चाहन्छ<xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डका लागि।"</string>
<string name="bluetooth_ask_discovery" product="default" msgid="5510358858113713272">"एउटा अनुप्रयोगले तपाईंको फोन अन्य ब्लुटुथ उपकरणहरूमा <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डको लागि प्रदर्शन गर्न चाहन्छ।"</string>
<string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="8863617309580598607">"एउटा अनुप्रयोगले तपाईँको ट्याब्लेटलाई अन्य ब्लुटुथ उपकरणहरूमा लागि देखिने बनाउन खोजिरहेको छ। तपाईँले यसलाई पछि ब्लुटुथ सेटिङहरूमा परिवर्तन गर्न सक्नु हुन्छ।"</string>
- <string name="bluetooth_ask_lasting_discovery" product="default" msgid="6487606808683607975">"एउटा अनुप्रयोगले तपाईंको फोनलाई अन्य ब्लुटुथ उपकरणहरूमा प्रदर्शन गर्न चाहन्छ। तपाईं यसलाई पछि ब्लुटुथ सेटिङहरूमा परिवर्तन गर्न सक्नुहुने छ।"</string>
+ <string name="bluetooth_ask_lasting_discovery" product="default" msgid="6487606808683607975">"एउटा अनुप्रयोगले तपाईँको फोनलाई अन्य ब्लुटुथ उपकरणहरूमा प्रदर्शन गर्न चाहन्छ। तपाईँ यसलाई पछि ब्लुटुथ सेटिङहरूमा परिवर्तन गर्न सक्नुहुने छ।"</string>
<string name="bluetooth_ask_start_broadcast" product="default" msgid="3535628155254187911">"नजिकको अरू उपकरणहरू सँग कुराकानी गर्न <xliff:g id="APP_NAME">%1$s</xliff:g> ले ब्लूटूथ प्रसारण खोल्न चाहन्छ। तपाईँले पछि यसलाई ब्लूटूथ सेटिङ्हरूमा बदल्न सक्नुहुन्छ।"</string>
<string name="bluetooth_ask_enablement_and_start_broadcast" product="default" msgid="8810858601242763295">"<xliff:g id="APP_NAME">%1$s</xliff:g> नजिकैको अन्य उपकरणको साथ कुराकानी गर्न ब्लूटूथ वा ब्लूटूथ प्रसारण खोल्न चाहन्छ। तपाईँले पछि यसलाई ब्लूटूथ सेटिङ्हरूमा बदल्न सक्नुहुन्छ।"</string>
<string name="bluetooth_broadcasting_explaination" product="default" msgid="4249322115655011799">"जब यो विशेषता सक्रिय हुन्छ, तपाईँको फोनले नजिकको अरू उपकरणहरू सँग कुराकानी गर्न सक्छ। \n\nप्रसारणलेे कम उर्जा लाग्ने ब्लुटुथ संकेतहरु प्रयोग गर्छ।"</string>
@@ -344,14 +344,14 @@
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="4327640138658832625">"अति उत्तम! अब दोहोर्याउनुहोस्।"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4232813847507193627">"तपाईंको फिंगरप्रिन्टको सबै फरक भागहरु थप्न आफ्नो औंला बिस्तारै सार्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="4798692662828257300">"औँठाछाप थपियो!"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="835496875787664316">"तपाईं यस आइकन जहिले देख्नुहुन्छ, तपाईं पहिचानको लागि वा एक खरीद अधिकारको निम्ति आफ्नो औठाछाप प्रयोग गर्न सक्नुहुन्छ।"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="835496875787664316">"तपाईँ यस आइकन जहिले देख्नुहुन्छ, तपाईँ पहिचानको लागि वा एक खरीद अधिकारको निम्ति आफ्नो औठाछाप प्रयोग गर्न सक्नुहुन्छ।"</string>
<string name="setup_fingerprint_enroll_finish_message" msgid="7234264291957984004">"जगाउन र तपाईँको यन्त्रलाई अनलक गर्न फिंगरप्रिन्ट सेन्सरमा छुनुहोस्।"</string>
<string name="setup_fingerprint_enroll_finish_message_secondary" msgid="7280546429133276374">"तपाईँले यो आइकन देखेको बेला तपाईँ आफ्नो फिंगरप्रिन्ट प्रयोग गर्न सक्नुहुन्छ।"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="6808422329107426923">"फिंगरप्रिन्ट सेटअप छोड्न चाहनुहुन्छ?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="274849306857859783">"तपाईँले आफ्नो फोन अनलक गर्ने एक तरिका रूपमा फिंगरप्रिन्ट छान्नुभएको छ। यदि तपाईँले अहिले छोड्नु भएमा पछि पुन: सेटअप गर्न पर्नेछ। सेटअप गर्न मात्र केहि मिनेट लाग्नेछ।"</string>
<string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="1195743489835505376">"स्क्रिन लक सेटअप गर्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_done" msgid="4014607378328187567">"सम्पन्न भयो"</string>
- <string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="1863561601428695160">"आच्यौं, त्यो सेन्सर होईन नि त"</string>
+ <string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="1863561601428695160">"आच्यौं, त्यो सेन्सर होइन नि त"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="5053971232594165142">"तपाईँको यन्त्रमा फिंगरप्रिन्ट सेन्सर प्रयोग गर्नुहोस्।"</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="3618021988442639280">"दर्ता पूर्ण भएको थिएन"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="2942551158278899627">"फिंगरप्रिन्ट दर्ताको समय सीमा पुग्यो। पुन: प्रयास गर्नुहोस्।"</string>
@@ -883,11 +883,11 @@
<string name="sim_change_data_title" msgid="294357201685244532">"डेटा सिम परिवर्तन गर्नुहुन्छ?"</string>
<string name="sim_change_data_message" msgid="1313940695939674633">"सेलुलर डेटाको लागि <xliff:g id="OLD_SIM">%2$s</xliff:g> को सट्टा <xliff:g id="NEW_SIM">%1$s</xliff:g> प्रयोग गर्नुहुन्छ?"</string>
<string name="sim_preferred_title" msgid="5567909634636045268">"प्रमुख SIM कार्ड अपडेट गर्ने?"</string>
- <string name="sim_preferred_message" msgid="301251431163650167">"तपाईंको उपकरणमा <xliff:g id="NEW_SIM">%1$s</xliff:g> SIM मात्र छ। के तपाईं सेलुलर डाटा, कल, र SMS सन्देशहरूका लागि यो SIM प्रयोग गर्न चाहनुहुन्छ?"</string>
+ <string name="sim_preferred_message" msgid="301251431163650167">"तपाईँको उपकरणमा <xliff:g id="NEW_SIM">%1$s</xliff:g> SIM मात्र छ। के तपाईँ सेलुलर डाटा, कल, र SMS सन्देशहरूका लागि यो SIM प्रयोग गर्न चाहनुहुन्छ?"</string>
<string name="wrong_pin_code_pukked" msgid="4003655226832658066">"SIM PIN कोड गलत छ तपाईंले अाफ्नो उपकरण खोल्नलाई तपाईंको वाहकसँग सम्पर्क गर्नै पर्दर्छ।"</string>
<plurals name="wrong_pin_code" formatted="false" msgid="1582398808893048097">
- <item quantity="other"> गलत SIM PIN कोड, तपाईं सँग <xliff:g id="NUMBER_1">%d</xliff:g> पटक प्रयास बाँकी छ।</item>
- <item quantity="one">SIM PIN कोड गलत छ, तपाईंले अाफ्नो यन्त्र खोल्नलाई तपाईंको वाहकसँग सम्पर्क गर्नै पर्न अघि तपाईंसँग <xliff:g id="NUMBER_0">%d</xliff:g> पटक प्रयास बाँकी छ।</item>
+ <item quantity="other"> गलत SIM PIN कोड, तपाईँ सँग <xliff:g id="NUMBER_1">%d</xliff:g> पटक प्रयास बाँकी छ।</item>
+ <item quantity="one">SIM PIN कोड गलत छ, तपाईँले अाफ्नो यन्त्र खोल्नलाई तपाईँको वाहकसँग सम्पर्क गर्नै पर्न अघि तपाईँसँग <xliff:g id="NUMBER_0">%d</xliff:g> पटक प्रयास बाँकी छ।</item>
</plurals>
<string name="pin_failed" msgid="1848423634948587645">"SIM PIN कार्य बिफल भयो!"</string>
<string name="device_info_settings" product="tablet" msgid="1119755927536987178">"ट्याब्लेट वस्तुस्थिति"</string>
@@ -1055,7 +1055,7 @@
<string name="storage_wizard_move_progress_title" msgid="4443920302548035674">"सार्दै <xliff:g id="APP">^1</xliff:g>..."</string>
<string name="storage_wizard_move_progress_body" msgid="7802577486578105609">"सार्ने क्रममा <xliff:g id="NAME">^1</xliff:g> नहटाउनुहोस्। \n\nसार्ने क्रम पूरा नहुन्जेल सम्म यो यन्त्रको<xliff:g id="APP">^2</xliff:g> अनुप्रयोग उपलब्ध हुने छैन।"</string>
<string name="storage_wizard_move_progress_cancel" msgid="542047237524588792">"सार्ने कार्य रद्द गर्नुहोस्"</string>
- <string name="storage_wizard_slow_body" msgid="8010127667184768025">"यो <xliff:g id="NAME_0">^1</xliff:g> सुस्त जस्तो देखिन्छ। \n\n तपाईं जारी राख्न सक्नुहुन्छ, तर यस स्थानमा सारिएका अनुप्रयोगहरू अड्किन सक्छ र डेटा स्थानान्तरणले लामो समय लिन सक्छ। \n\nराम्रो प्रदर्शनको लागि थप छिटो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्ने विचार गर्नुहोस्।"</string>
+ <string name="storage_wizard_slow_body" msgid="8010127667184768025">"यो <xliff:g id="NAME_0">^1</xliff:g> सुस्त जस्तो देखिन्छ। \n\n तपाईँ जारी राख्न सक्नुहुन्छ, तर यस स्थानमा सारिएका अनुप्रयोगहरू अड्किन सक्छ र डेटा स्थानान्तरणले लामो समय लिन सक्छ। \n\nराम्रो प्रदर्शनको लागि थप छिटो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्ने विचार गर्नुहोस्।"</string>
<string name="battery_status_title" msgid="9159414319574976203">"ब्याट्रि स्थिति"</string>
<string name="battery_level_title" msgid="2965679202786873272">"ब्याट्रि स्तर"</string>
<string name="apn_settings" msgid="3743170484827528406">"APNs"</string>
@@ -1218,7 +1218,7 @@
<string name="regulatory_information" msgid="5695464367088752150">"नियमित जानकारी"</string>
<string name="copyright_title" msgid="865906688917260647">"प्रतिलिपि अधिकार"</string>
<string name="license_title" msgid="1990487604356037871">"इजाजतपत्र"</string>
- <string name="terms_title" msgid="7697580845616764642">"सेवाका सर्तहरू"</string>
+ <string name="terms_title" msgid="7697580845616764642">"सेवा सर्तहरू"</string>
<string name="webview_license_title" msgid="2813507464175738967">"प्रणाली वेबभ्यु लाइसेन्स"</string>
<string name="wallpaper_attributions" msgid="3645880512943433928">"वालपेपरहरु"</string>
<string name="wallpaper_attributions_values" msgid="2996183537914690469">"स्याटलाइट कल्पना प्रदायकहरू:\n©२०१४ CNES / Astrium, DigitalGlobe, Bluesky"</string>
@@ -1394,7 +1394,7 @@
<string name="app_special_disable_dlg_title" msgid="2690148680327142674">"डेटा हटाएर अनुप्रयोग असक्षम पार्ने हो?"</string>
<string name="app_special_disable_dlg_text" msgid="1007112763234313018">"तपाईँले यो अनुप्रयोग असक्षम गर्नुभयो भने अन्य अनुप्रयोगहरू अब चाहेजस्तो कार्य नगर्न सक्छ। तपाईँको डेटा पनि मेटाइने छ।"</string>
<string name="app_disable_notifications_dlg_title" msgid="7669264654851761857">"सूचनाहरू बन्द गर्नुहोस्?"</string>
- <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"यदि तपाईं यस अनुप्रयोगको लागि सूचनाहरू बन्द गर्नुहुन्छ, तपाईंले महत्त्वपूर्ण अलर्ट र अपडेटहरू गुमाउन सक्नुहुने छ।"</string>
+ <string name="app_disable_notifications_dlg_text" msgid="5088484670924769845">"यदि तपाईँ यस अनुप्रयोगको लागि सूचनाहरू बन्द गर्नुहुन्छ, तपाईँले महत्त्वपूर्ण अलर्ट र अपडेटहरू गुमाउन सक्नुहुने छ।"</string>
<string name="app_ops_settings" msgid="5108481883575527511">"अनुप्रयोग संचालन"</string>
<string name="app_ops_running" msgid="7706949900637284122">"चालु भइरहेको"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(कहिल्यै प्रयोग नभएको)"</string>
@@ -1442,7 +1442,7 @@
<string name="process_service_in_use_description" msgid="8993335064403217080">"सेवा <xliff:g id="COMP_NAME">%1$s</xliff:g> प्रयोगमा छ।"</string>
<string name="process_provider_in_use_description" msgid="5586603325677678940">"प्रदायक <xliff:g id="COMP_NAME">%1$s</xliff:g> प्रयोगमा छ।"</string>
<string name="runningservicedetails_stop_dlg_title" msgid="4253292537154337233">"प्रणाली सेवा रोक्नुहोस्?"</string>
- <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="3371302398335665793">"यदि तपाईं यो सेवा रोक्नुहुन्छ भने तपाईंको ट्याब्लेटका केही सुविधाहरूले तपाईंले पावर बन्द गरेर फेरि नखोलेसम्म काम नगर्न सक्दछ।"</string>
+ <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="3371302398335665793">"यदि तपाईँ यो सेवा रोक्नुहुन्छ भने तपाईँको ट्याब्लेटका केही सुविधाहरूले तपाईँले पावर बन्द गरेर फेरि नखोलेसम्म काम नगर्न सक्दछ।"</string>
<string name="runningservicedetails_stop_dlg_text" product="default" msgid="3920243762189484756">"यदि तपाईँले यस सेवालाई बन्द गर्नु भएको खण्डमा तपाईँको फोनका केही सुविधाहरू सही तवरले काम गर्न बन्द गर्न सक्छन् तबसम्म तपाईँले फेरि यसलाई पावर बन्द गरी फेरि सुरु गर्नु हुन्न।"</string>
<string name="language_settings" msgid="5292716747264442359">"भाषा र इनपुट"</string>
<string name="language_keyboard_settings_title" msgid="243220021717425813">"भाषा र इनपुट"</string>
@@ -1686,8 +1686,8 @@
<string name="enable_service_encryption_warning" msgid="3064686622453974606">"यदि तपाईंले <xliff:g id="SERVICE">%1$s</xliff:g> खोल्नुभयो भने, आफ्नो उपकरणले डेटा गुप्तिकरण अभिवृद्धि गर्न स्क्रिन लक प्रयोग गर्ने छैन।"</string>
<string name="secure_lock_encryption_warning" msgid="460911459695077779">"आफ्नो उपकरणले डेटा गुप्तिकरण अभिवृद्धि गर्न स्क्रिन लक प्रयोग गर्ने छैन, किनभने तपाईंले पहुँच सेवा खोल्नुभएको छ।"</string>
<string name="enable_service_pattern_reason" msgid="777577618063306751">"किनभने <xliff:g id="SERVICE">%1$s</xliff:g> सेवा प्रयोग गर्दा डेटा गुप्तिकरणमा असर गर्छ, तपाईंले आफ्नो प्याटर्न पुष्टि गर्न आवश्यक छ।"</string>
- <string name="enable_service_pin_reason" msgid="7882035264853248228">"किनभने <xliff:g id="SERVICE">%1$s</xliff:g> सेवा प्रयोग गर्दा डेटा गुप्तिकरणमा असर गर्छ, तपाईं आफ्नो PIN पुष्टि गर्न आवश्यक छ।"</string>
- <string name="enable_service_password_reason" msgid="1224075277603097951">"किनभने <xliff:g id="SERVICE">%1$s</xliff:g> सेबा प्रयोग गर्दा डेटा गुप्तिकरणमा असर गर्छ, तपाईं आफ्नो पासवर्ड पुष्टि गर्न आवश्यक छ।"</string>
+ <string name="enable_service_pin_reason" msgid="7882035264853248228">"किनभने <xliff:g id="SERVICE">%1$s</xliff:g> सेवा प्रयोग गर्दा डेटा गुप्तिकरणमा असर गर्छ, तपाईँ आफ्नो PIN पुष्टि गर्न आवश्यक छ।"</string>
+ <string name="enable_service_password_reason" msgid="1224075277603097951">"किनभने <xliff:g id="SERVICE">%1$s</xliff:g> सेबा प्रयोग गर्दा डेटा गुप्तिकरणमा असर गर्छ, तपाईँ आफ्नो पासवर्ड पुष्टि गर्न आवश्यक छ।"</string>
<string name="capability_title_receiveAccessibilityEvents" msgid="1869032063969970755">"तपाईँका कार्यहरूको अवलोकन गर्नुहोस्"</string>
<string name="capability_desc_receiveAccessibilityEvents" msgid="6640333613848713883">"कुनै अनुप्रयोगसँग अन्तरक्रिया गर्दा सूचना प्राप्त गर्नुहोस्।"</string>
<string name="disable_service_title" msgid="3624005212728512896">"<xliff:g id="SERVICE">%1$s</xliff:g>बन्द गर्नुहुन्छ?"</string>
@@ -2362,7 +2362,7 @@
<string name="user_confirm_remove_title" msgid="1163721647646152032">"यो प्रयोगकर्ता हटाउने?"</string>
<string name="user_profile_confirm_remove_title" msgid="5573161550669867342">"यो प्रोफाइल हटाउने?"</string>
<string name="work_profile_confirm_remove_title" msgid="2017323555783522213">"कार्य प्रोफाइल हटाउने?"</string>
- <string name="user_confirm_remove_self_message" product="tablet" msgid="2391372805233812410">"तपाईं यस ट्याब्लेटमा आफ्नो ठाउँ र डेटा हराउनु हुने छ। तपाईं यो कार्यलाई अन्डु गर्न सक्नुहुन्न।"</string>
+ <string name="user_confirm_remove_self_message" product="tablet" msgid="2391372805233812410">"तपाईँ यस ट्याब्लेटमा आफ्नो ठाउँ र डेटा हराउनु हुने छ। तपाईँ यो कार्यलाई अन्डु गर्न सक्नुहुन्न।"</string>
<string name="user_confirm_remove_self_message" product="default" msgid="7943645442479360048">"तपाईँ यस फोनमा तपाईँको ठाउँ र डेटा गुमाउनु हुने छ। तपाईँ यो कार्य पूर्ववत बनाउन सक्नु हुन्न।"</string>
<string name="user_confirm_remove_message" msgid="1020629390993095037">"सबै अनुप्रयोगहरू र डेटा मेटाइनेछन्।"</string>
<string name="work_profile_confirm_remove_message" msgid="323856589749078140">"यदि तपाईँले जारी राख्नुभयो भने यो प्रोफाइलका सबै अनुप्रयोगहरू र डेटा मेटाइने छन्।"</string>
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index d571fac..65f0ba6 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -48,6 +48,7 @@
public class ChooseLockGeneric extends SettingsActivity {
public static final String CONFIRM_CREDENTIALS = "confirm_credentials";
+ public static final String KEY_USER_ID = "user_id";
@Override
public Intent getIntent() {
@@ -103,6 +104,7 @@
private String mUserPassword;
private LockPatternUtils mLockPatternUtils;
private FingerprintManager mFingerprintManager;
+ private int mUserId;
private RemovalCallback mRemovalCallback = new RemovalCallback() {
@Override
@@ -161,13 +163,16 @@
ENCRYPT_REQUESTED_DISABLED);
}
+ // Only take this argument into account if it belongs to the current profile.
+ mUserId = Utils.getSameOwnerUserId(getContext(), getArguments());
+
if (mPasswordConfirmed) {
updatePreferencesOrFinish();
} else if (!mWaitingForConfirmation) {
ChooseLockSettingsHelper helper =
new ChooseLockSettingsHelper(this.getActivity(), this);
if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
- getString(R.string.unlock_set_unlock_launch_picker_title), true)) {
+ getString(R.string.unlock_set_unlock_launch_picker_title), true, mUserId)) {
mPasswordConfirmed = true; // no password set, so no need to confirm
updatePreferencesOrFinish();
} else {
@@ -188,7 +193,7 @@
public boolean onPreferenceTreeClick(Preference preference) {
final String key = preference.getKey();
- if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(UserHandle.myUserId())) {
+ if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) {
// Show the disabling FRP warning only when the user is switching from a secure
// unlock method to an insecure one
showFactoryResetProtectionWarningDialog(key);
@@ -210,6 +215,7 @@
private void maybeEnableEncryption(int quality, boolean disabled) {
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
if (UserManager.get(getActivity()).isAdminUser()
+ && mUserId == UserHandle.myUserId()
&& LockPatternUtils.isDeviceEncryptionEnabled()
&& !dpm.getDoNotAskCredentialsOnBoot()) {
mEncryptionRequestQuality = quality;
@@ -293,10 +299,10 @@
}
private String getKeyForCurrent() {
- if (mLockPatternUtils.isLockScreenDisabled(UserHandle.myUserId())) {
+ if (mLockPatternUtils.isLockScreenDisabled(mUserId)) {
return KEY_UNLOCK_SET_OFF;
}
- switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
+ switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
return KEY_UNLOCK_SET_PATTERN;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
@@ -410,38 +416,38 @@
protected Intent getLockPasswordIntent(Context context, int quality,
int minLength, final int maxLength,
- boolean requirePasswordToDecrypt, boolean confirmCredentials) {
+ boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) {
return ChooseLockPassword.createIntent(context, quality, minLength,
- maxLength, requirePasswordToDecrypt, confirmCredentials);
+ maxLength, requirePasswordToDecrypt, confirmCredentials, userId);
}
protected Intent getLockPasswordIntent(Context context, int quality,
int minLength, final int maxLength,
- boolean requirePasswordToDecrypt, long challenge) {
+ boolean requirePasswordToDecrypt, long challenge, int userId) {
return ChooseLockPassword.createIntent(context, quality, minLength,
- maxLength, requirePasswordToDecrypt, challenge);
+ maxLength, requirePasswordToDecrypt, challenge, userId);
}
protected Intent getLockPasswordIntent(Context context, int quality, int minLength,
- final int maxLength, boolean requirePasswordToDecrypt, String password) {
+ int maxLength, boolean requirePasswordToDecrypt, String password, int userId) {
return ChooseLockPassword.createIntent(context, quality, minLength, maxLength,
- requirePasswordToDecrypt, password);
+ requirePasswordToDecrypt, password, userId);
}
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- final boolean confirmCredentials) {
+ final boolean confirmCredentials, int userId) {
return ChooseLockPattern.createIntent(context, requirePassword,
- confirmCredentials);
+ confirmCredentials, userId);
}
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- long challenge) {
- return ChooseLockPattern.createIntent(context, requirePassword, challenge);
+ long challenge, int userId) {
+ return ChooseLockPattern.createIntent(context, requirePassword, challenge, userId);
}
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- final String pattern) {
- return ChooseLockPattern.createIntent(context, requirePassword, pattern);
+ final String pattern, int userId) {
+ return ChooseLockPattern.createIntent(context, requirePassword, pattern, userId);
}
protected Intent getEncryptionInterstitialIntent(Context context, int quality,
@@ -476,26 +482,25 @@
Intent intent;
if (mHasChallenge) {
intent = getLockPasswordIntent(context, quality, minLength,
- maxLength, mRequirePassword, mChallenge);
+ maxLength, mRequirePassword, mChallenge, mUserId);
} else {
intent = getLockPasswordIntent(context, quality, minLength,
- maxLength, mRequirePassword, mUserPassword);
+ maxLength, mRequirePassword, mUserPassword, mUserId);
}
startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) {
Intent intent;
if (mHasChallenge) {
intent = getLockPatternIntent(context, mRequirePassword,
- mChallenge);
+ mChallenge, mUserId);
} else {
intent = getLockPatternIntent(context, mRequirePassword,
- mUserPassword);
+ mUserPassword, mUserId);
}
startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
- mChooseLockSettingsHelper.utils().clearLock(UserHandle.myUserId());
- mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled,
- UserHandle.myUserId());
+ mChooseLockSettingsHelper.utils().clearLock(mUserId);
+ mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
removeAllFingerprintTemplatesAndFinish();
getActivity().setResult(Activity.RESULT_OK);
} else {
@@ -524,7 +529,7 @@
private int getResIdForFactoryResetProtectionWarningMessage() {
boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints();
- switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId())) {
+ switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
return hasFingerprints
? R.string.unlock_disable_frp_warning_content_pattern_fingerprint
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index 3760ef7..cf330ad 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -83,6 +83,15 @@
}
public static Intent createIntent(Context context, int quality,
+ int minLength, final int maxLength, boolean requirePasswordToDecrypt,
+ boolean confirmCredentials, int userId) {
+ Intent intent = createIntent(context, quality, minLength, maxLength,
+ requirePasswordToDecrypt, confirmCredentials);
+ intent.putExtra(ChooseLockGeneric.KEY_USER_ID, userId);
+ return intent;
+ }
+
+ public static Intent createIntent(Context context, int quality,
int minLength, final int maxLength, boolean requirePasswordToDecrypt, String password) {
Intent intent = createIntent(context, quality, minLength, maxLength,
requirePasswordToDecrypt, false);
@@ -90,6 +99,14 @@
return intent;
}
+ public static Intent createIntent(Context context, int quality, int minLength,
+ int maxLength, boolean requirePasswordToDecrypt, String password, int userId) {
+ Intent intent = createIntent(context, quality, minLength, maxLength,
+ requirePasswordToDecrypt, password);
+ intent.putExtra(ChooseLockGeneric.KEY_USER_ID, userId);
+ return intent;
+ }
+
public static Intent createIntent(Context context, int quality,
int minLength, final int maxLength, boolean requirePasswordToDecrypt, long challenge) {
Intent intent = createIntent(context, quality, minLength, maxLength,
@@ -99,6 +116,14 @@
return intent;
}
+ public static Intent createIntent(Context context, int quality, int minLength,
+ int maxLength, boolean requirePasswordToDecrypt, long challenge, int userId) {
+ Intent intent = createIntent(context, quality, minLength, maxLength,
+ requirePasswordToDecrypt, challenge);
+ intent.putExtra(ChooseLockGeneric.KEY_USER_ID, userId);
+ return intent;
+ }
+
@Override
protected boolean isValidFragment(String fragmentName) {
if (ChooseLockPasswordFragment.class.getName().equals(fragmentName)) return true;
@@ -160,6 +185,8 @@
private static final long ERROR_MESSAGE_TIMEOUT = 3000;
private static final int MSG_SHOW_ERROR = 1;
+ private int mUserId;
+
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -210,32 +237,34 @@
if (!(getActivity() instanceof ChooseLockPassword)) {
throw new SecurityException("Fragment contained in wrong activity");
}
+ // Only take this argument into account if it belongs to the current profile.
+ mUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
mRequestedQuality = Math.max(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
mRequestedQuality), mLockPatternUtils.getRequestedPasswordQuality(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinLength = Math.max(Math.max(
LockPatternUtils.MIN_LOCK_PASSWORD_SIZE,
intent.getIntExtra(PASSWORD_MIN_KEY, mPasswordMinLength)),
- mLockPatternUtils.getRequestedMinimumPasswordLength(UserHandle.myUserId()));
+ mLockPatternUtils.getRequestedMinimumPasswordLength(mUserId));
mPasswordMaxLength = intent.getIntExtra(PASSWORD_MAX_KEY, mPasswordMaxLength);
mPasswordMinLetters = Math.max(intent.getIntExtra(PASSWORD_MIN_LETTERS_KEY,
mPasswordMinLetters), mLockPatternUtils.getRequestedPasswordMinimumLetters(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinUpperCase = Math.max(intent.getIntExtra(PASSWORD_MIN_UPPERCASE_KEY,
mPasswordMinUpperCase), mLockPatternUtils.getRequestedPasswordMinimumUpperCase(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinLowerCase = Math.max(intent.getIntExtra(PASSWORD_MIN_LOWERCASE_KEY,
mPasswordMinLowerCase), mLockPatternUtils.getRequestedPasswordMinimumLowerCase(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinNumeric = Math.max(intent.getIntExtra(PASSWORD_MIN_NUMERIC_KEY,
mPasswordMinNumeric), mLockPatternUtils.getRequestedPasswordMinimumNumeric(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinSymbols = Math.max(intent.getIntExtra(PASSWORD_MIN_SYMBOLS_KEY,
mPasswordMinSymbols), mLockPatternUtils.getRequestedPasswordMinimumSymbols(
- UserHandle.myUserId()));
+ mUserId));
mPasswordMinNonLetter = Math.max(intent.getIntExtra(PASSWORD_MIN_NONLETTER_KEY,
mPasswordMinNonLetter), mLockPatternUtils.getRequestedPasswordMinimumNonLetter(
- UserHandle.myUserId()));
+ mUserId));
mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity());
}
@@ -289,7 +318,8 @@
updateStage(Stage.Introduction);
if (confirmCredentials) {
mChooseLockSettingsHelper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST,
- getString(R.string.unlock_set_unlock_launch_picker_title), true);
+ getString(R.string.unlock_set_unlock_launch_picker_title), true,
+ mUserId);
}
} else {
// restore from previous state
@@ -477,7 +507,7 @@
return getString(R.string.lockpassword_password_requires_digit);
}
}
- if(mLockPatternUtils.checkPasswordHistory(password, UserHandle.myUserId())) {
+ if(mLockPatternUtils.checkPasswordHistory(password, mUserId)) {
return getString(mIsAlphaMode ? R.string.lockpassword_password_recently_used
: R.string.lockpassword_pin_recently_used);
}
@@ -618,7 +648,7 @@
final boolean required = getActivity().getIntent().getBooleanExtra(
EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);
mSaveAndFinishWorker.start(mLockPatternUtils, required, mHasChallenge, mChallenge,
- mChosenPassword, mCurrentPassword, mRequestedQuality);
+ mChosenPassword, mCurrentPassword, mRequestedQuality, mUserId);
}
@Override
@@ -640,15 +670,17 @@
private String mChosenPassword;
private String mCurrentPassword;
private int mRequestedQuality;
+ private int mUserId;
public void start(LockPatternUtils utils, boolean required,
boolean hasChallenge, long challenge,
- String chosenPassword, String currentPassword, int requestedQuality) {
+ String chosenPassword, String currentPassword, int requestedQuality, int userId) {
prepare(utils, required, hasChallenge, challenge);
mChosenPassword = chosenPassword;
mCurrentPassword = currentPassword;
mRequestedQuality = requestedQuality;
+ mUserId = userId;
start();
}
@@ -656,14 +688,13 @@
@Override
protected Intent saveAndVerifyInBackground() {
Intent result = null;
- final int userId = UserHandle.myUserId();
mUtils.saveLockPassword(mChosenPassword, mCurrentPassword, mRequestedQuality,
- userId);
+ mUserId);
if (mHasChallenge) {
byte[] token;
try {
- token = mUtils.verifyPassword(mChosenPassword, mChallenge, userId);
+ token = mUtils.verifyPassword(mChosenPassword, mChallenge, mUserId);
} catch (RequestThrottledException e) {
token = null;
}
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index 99cd033..4a6008c 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -73,25 +73,25 @@
}
public static Intent createIntent(Context context,
- boolean requirePassword, boolean confirmCredentials) {
+ boolean requirePassword, boolean confirmCredentials, int userId) {
Intent intent = new Intent(context, ChooseLockPattern.class);
intent.putExtra("key_lock_method", "pattern");
intent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, confirmCredentials);
intent.putExtra(EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, requirePassword);
+ intent.putExtra(ChooseLockGeneric.KEY_USER_ID, userId);
return intent;
}
public static Intent createIntent(Context context,
- boolean requirePassword, String pattern) {
- Intent intent = createIntent(context, requirePassword, false);
+ boolean requirePassword, String pattern, int userId) {
+ Intent intent = createIntent(context, requirePassword, false, userId);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pattern);
return intent;
}
-
public static Intent createIntent(Context context,
- boolean requirePassword, long challenge) {
- Intent intent = createIntent(context, requirePassword, false);
+ boolean requirePassword, long challenge, int userId) {
+ Intent intent = createIntent(context, requirePassword, false, userId);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
return intent;
@@ -355,6 +355,7 @@
private ChooseLockSettingsHelper mChooseLockSettingsHelper;
private SaveAndFinishWorker mSaveAndFinishWorker;
+ private int mUserId;
private static final String KEY_UI_STAGE = "uiStage";
private static final String KEY_PATTERN_CHOICE = "chosenPattern";
@@ -367,6 +368,9 @@
if (!(getActivity() instanceof ChooseLockPattern)) {
throw new SecurityException("Fragment contained in wrong activity");
}
+ Intent intent = getActivity().getIntent();
+ // Only take this argument into account if it belongs to the current profile.
+ mUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
}
@Override
@@ -415,7 +419,8 @@
boolean launchedConfirmationActivity =
mChooseLockSettingsHelper.launchConfirmationActivity(
CONFIRM_EXISTING_REQUEST,
- getString(R.string.unlock_set_unlock_launch_picker_title), true);
+ getString(R.string.unlock_set_unlock_launch_picker_title), true,
+ mUserId);
if (!launchedConfirmationActivity) {
updateStage(Stage.Introduction);
}
@@ -644,7 +649,7 @@
final boolean required = getActivity().getIntent().getBooleanExtra(
EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);
mSaveAndFinishWorker.start(mChooseLockSettingsHelper.utils(), required,
- mHasChallenge, mChallenge, mChosenPattern, mCurrentPattern);
+ mHasChallenge, mChallenge, mChosenPattern, mCurrentPattern, mUserId);
}
@Override
@@ -666,16 +671,18 @@
private List<LockPatternView.Cell> mChosenPattern;
private String mCurrentPattern;
private boolean mLockVirgin;
+ private int mUserId;
public void start(LockPatternUtils utils, boolean credentialRequired,
boolean hasChallenge, long challenge,
- List<LockPatternView.Cell> chosenPattern, String currentPattern) {
+ List<LockPatternView.Cell> chosenPattern, String currentPattern, int userId) {
prepare(utils, credentialRequired, hasChallenge, challenge);
mCurrentPattern = currentPattern;
mChosenPattern = chosenPattern;
+ mUserId = userId;
- mLockVirgin = !mUtils.isPatternEverChosen(UserHandle.myUserId());
+ mLockVirgin = !mUtils.isPatternEverChosen(mUserId);
start();
}
@@ -683,7 +690,7 @@
@Override
protected Intent saveAndVerifyInBackground() {
Intent result = null;
- final int userId = UserHandle.myUserId();
+ final int userId = mUserId;
mUtils.saveLockPattern(mChosenPattern, mCurrentPattern, userId);
if (mHasChallenge) {
@@ -708,7 +715,7 @@
@Override
protected void finish(Intent resultData) {
if (mLockVirgin) {
- mUtils.setVisiblePatternEnabled(true, UserHandle.myUserId());
+ mUtils.setVisiblePatternEnabled(true, mUserId);
}
super.finish(resultData);
diff --git a/src/com/android/settings/ChooseLockSettingsHelper.java b/src/com/android/settings/ChooseLockSettingsHelper.java
index 56a3f67..3304fd7 100644
--- a/src/com/android/settings/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/ChooseLockSettingsHelper.java
@@ -80,6 +80,22 @@
* If a pattern, password or PIN exists, prompt the user before allowing them to change it.
*
* @param title title of the confirmation screen; shown in the action bar
+ * @param returnCredentials if true, put credentials into intent. Note that if this is true,
+ * this can only be called internally.
+ * @param userId The userId for whom the lock should be confirmed.
+ * @return true if one exists and we launched an activity to confirm it
+ * @see Activity#onActivityResult(int, int, android.content.Intent)
+ */
+ boolean launchConfirmationActivity(int request, CharSequence title, boolean returnCredentials,
+ int userId) {
+ return launchConfirmationActivity(request, title, null, null,
+ returnCredentials, false, false, 0, Utils.getSameOwnerUserId(mActivity, userId));
+ }
+
+ /**
+ * If a pattern, password or PIN exists, prompt the user before allowing them to change it.
+ *
+ * @param title title of the confirmation screen; shown in the action bar
* @param header header of the confirmation screen; shown as large text
* @param description description of the confirmation screen
* @param returnCredentials if true, put credentials into intent. Note that if this is true,
@@ -93,7 +109,7 @@
@Nullable CharSequence header, @Nullable CharSequence description,
boolean returnCredentials, boolean external) {
return launchConfirmationActivity(request, title, header, description,
- returnCredentials, external, false, 0);
+ returnCredentials, external, false, 0, Utils.getEffectiveUserId(mActivity));
}
/**
@@ -109,24 +125,22 @@
@Nullable CharSequence header, @Nullable CharSequence description,
long challenge) {
return launchConfirmationActivity(request, title, header, description,
- false, false, true, challenge);
+ false, false, true, challenge, Utils.getEffectiveUserId(mActivity));
}
private boolean launchConfirmationActivity(int request, @Nullable CharSequence title,
@Nullable CharSequence header, @Nullable CharSequence description,
boolean returnCredentials, boolean external, boolean hasChallenge,
- long challenge) {
+ long challenge, int effectiveUserId) {
boolean launched = false;
- int effectiveUserId = Utils.getEffectiveUserId(mActivity);
-
switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(effectiveUserId)) {
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
launched = launchConfirmationActivity(request, title, header, description,
returnCredentials || hasChallenge
? ConfirmLockPattern.InternalActivity.class
: ConfirmLockPattern.class, external,
- hasChallenge, challenge);
+ hasChallenge, challenge, effectiveUserId);
break;
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
@@ -137,7 +151,7 @@
returnCredentials || hasChallenge
? ConfirmLockPassword.InternalActivity.class
: ConfirmLockPassword.class, external,
- hasChallenge, challenge);
+ hasChallenge, challenge, effectiveUserId);
break;
}
return launched;
@@ -145,7 +159,7 @@
private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header,
CharSequence message, Class<?> activityClass, boolean external, boolean hasChallenge,
- long challenge) {
+ long challenge, int userId) {
final Intent intent = new Intent();
intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title);
intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header);
@@ -156,6 +170,7 @@
intent.putExtra(ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, external);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, hasChallenge);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
+ intent.putExtra(ChooseLockGeneric.KEY_USER_ID, userId);
intent.setClassName(ConfirmDeviceCredentialBaseFragment.PACKAGE, activityClass.getName());
if (external) {
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index 25fb671..7ef6a57 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -108,7 +108,9 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity());
- mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
+ Intent intent = getActivity().getIntent();
+ // Only take this argument into account if it belongs to the current profile.
+ mEffectiveUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
}
@Override
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index d375a52..44e74c9 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -113,7 +113,9 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLockPatternUtils = new LockPatternUtils(getActivity());
- mEffectiveUserId = Utils.getEffectiveUserId(getActivity());
+ Intent intent = getActivity().getIntent();
+ // Only take this argument into account if it belongs to the current profile.
+ mEffectiveUserId = Utils.getSameOwnerUserId(getActivity(), intent.getExtras());
}
@Override
diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java
index 206c15e..0b0333b 100644
--- a/src/com/android/settings/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/SetupChooseLockGeneric.java
@@ -115,7 +115,7 @@
@Override
protected Intent getLockPasswordIntent(Context context, int quality,
int minLength, final int maxLength,
- boolean requirePasswordToDecrypt, boolean confirmCredentials) {
+ boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) {
final Intent intent = SetupChooseLockPassword.createIntent(context, quality, minLength,
maxLength, requirePasswordToDecrypt, confirmCredentials);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
@@ -125,7 +125,7 @@
@Override
protected Intent getLockPasswordIntent(Context context, int quality,
int minLength, final int maxLength,
- boolean requirePasswordToDecrypt, long challenge) {
+ boolean requirePasswordToDecrypt, long challenge, int userId) {
final Intent intent = SetupChooseLockPassword.createIntent(context, quality, minLength,
maxLength, requirePasswordToDecrypt, challenge);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
@@ -134,7 +134,7 @@
@Override
protected Intent getLockPasswordIntent(Context context, int quality, int minLength,
- final int maxLength, boolean requirePasswordToDecrypt, String password) {
+ int maxLength, boolean requirePasswordToDecrypt, String password, int userId) {
final Intent intent = SetupChooseLockPassword.createIntent(context, quality, minLength,
maxLength, requirePasswordToDecrypt, password);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
@@ -143,7 +143,7 @@
@Override
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- final boolean confirmCredentials) {
+ final boolean confirmCredentials, int userId) {
final Intent intent = SetupChooseLockPattern.createIntent(context, requirePassword,
confirmCredentials);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
@@ -152,7 +152,7 @@
@Override
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- long challenge) {
+ long challenge, int userId) {
final Intent intent = SetupChooseLockPattern.createIntent(context, requirePassword,
challenge);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
@@ -161,7 +161,7 @@
@Override
protected Intent getLockPatternIntent(Context context, final boolean requirePassword,
- final String pattern) {
+ final String pattern, int userId) {
final Intent intent = SetupChooseLockPattern.createIntent(context, requirePassword,
pattern);
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
diff --git a/src/com/android/settings/SetupChooseLockPattern.java b/src/com/android/settings/SetupChooseLockPattern.java
index e6b1c47..69e60be 100644
--- a/src/com/android/settings/SetupChooseLockPattern.java
+++ b/src/com/android/settings/SetupChooseLockPattern.java
@@ -22,6 +22,7 @@
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
+import android.os.UserHandle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -42,19 +43,21 @@
public static Intent createIntent(Context context, boolean requirePassword,
boolean confirmCredentials) {
Intent intent = ChooseLockPattern.createIntent(context, requirePassword,
- confirmCredentials);
+ confirmCredentials, UserHandle.myUserId());
intent.setClass(context, SetupChooseLockPattern.class);
return intent;
}
public static Intent createIntent(Context context, boolean requirePassword, String pattern) {
- Intent intent = ChooseLockPattern.createIntent(context, requirePassword, pattern);
+ Intent intent = ChooseLockPattern.createIntent(
+ context, requirePassword, pattern, UserHandle.myUserId());
intent.setClass(context, SetupChooseLockPattern.class);
return intent;
}
public static Intent createIntent(Context context, boolean requirePassword, long challenge) {
- Intent intent = ChooseLockPattern.createIntent(context, requirePassword, challenge);
+ Intent intent = ChooseLockPattern.createIntent(
+ context, requirePassword, challenge, UserHandle.myUserId());
intent.setClass(context, SetupChooseLockPattern.class);
return intent;
}
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index ed67ee4..468d568 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1165,6 +1165,38 @@
return str;
}
+ /**
+ * Returns the user id present in the bundle with {@link ChooseLockGeneric#KEY_USER_ID} if it
+ * belongs to the current user.
+ *
+ * @throws SecurityException if the given userId does not belong to the current user group.
+ */
+ public static int getSameOwnerUserId(Context context, Bundle bundle) {
+ if (bundle == null) {
+ return getEffectiveUserId(context);
+ }
+ int userId = bundle.getInt(ChooseLockGeneric.KEY_USER_ID, UserHandle.myUserId());
+ return getSameOwnerUserId(context, userId);
+ }
+
+ /**
+ * Returns the given user id if it belongs to the current user.
+ *
+ * @throws SecurityException if the given userId does not belong to the current user group.
+ */
+ public static int getSameOwnerUserId(Context context, int userId) {
+ UserManager um = UserManager.get(context);
+ if (um != null) {
+ if (um.getUserProfiles().contains(new UserHandle(userId))) {
+ return userId;
+ } else {
+ throw new SecurityException("Given user id " + userId + " does not belong to user "
+ + UserHandle.myUserId());
+ }
+ }
+ return getEffectiveUserId(context);
+ }
+
public static int getEffectiveUserId(Context context) {
UserManager um = UserManager.get(context);
if (um != null) {
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 094d86c..feb47cd 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -705,6 +705,10 @@
* @see android.view.View.OnClickListener#onClick(android.view.View)
*/
public void onClick(View v) {
+ if (mAppEntry == null) {
+ setIntentAndFinish(true, true);
+ return;
+ }
String packageName = mAppEntry.info.packageName;
if(v == mUninstallButton) {
if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 6f9e3d3..9eea98a 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -43,7 +43,10 @@
final Intent intent = getIntent();
final Bundle accessPointState = intent.getBundleExtra(KEY_ACCESS_POINT_STATE);
- final AccessPoint accessPoint = new AccessPoint(this, accessPointState);
+ AccessPoint accessPoint = null;
+ if (accessPointState != null) {
+ accessPoint = new AccessPoint(this, accessPointState);
+ }
WifiDialog dialog = new WifiDialog(this, this, accessPoint, WifiConfigUiBase.MODE_CONNECT);
dialog.show();