Merge "Display vibrate icon in volume menu" into jb-mr2-dev
diff --git a/res/layout/app_percentage_item.xml b/res/layout/app_percentage_item.xml
index f966d20..03226ca 100644
--- a/res/layout/app_percentage_item.xml
+++ b/res/layout/app_percentage_item.xml
@@ -46,6 +46,7 @@
<TextView
android:id="@android:id/text1"
android:layout_marginStart="8dip"
+ android:layout_marginTop="2dip"
android:textAppearance="?android:attr/textAppearanceSmall" />
<ProgressBar
diff --git a/res/layout/preference_powergauge.xml b/res/layout/preference_powergauge.xml
deleted file mode 100644
index 5efc028..0000000
--- a/res/layout/preference_powergauge.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:gravity="center_vertical"
- android:paddingStart="16dip"
- android:paddingEnd="?android:attr/scrollbarSize">
-
- <ImageView
- android:id="@+id/appIcon"
- android:layout_width="48dip"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:layout_gravity="center"
- android:contentDescription="@null" />
-
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="8dip"
- android:layout_marginTop="2dip"
- android:layout_marginBottom="6dip"
- android:layout_weight="1">
-
- <TextView android:id="@+android:id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:layout_marginTop="2dip"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:layout_toStartOf="@+id/percent"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- <TextView android:id="@+id/percent"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:layout_alignParentEnd="true"
- android:layout_alignBottom="@android:id/title"
- android:layout_gravity="bottom"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textStyle="bold"/>
-
- <ImageView
- android:id="@+id/appGauge"
- android:background="#80404040"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginTop="5dip"
- android:layout_below="@id/percent"
- android:layout_gravity="center_vertical"
- android:contentDescription="@null" />
-
- <TextView android:id="@+android:id/summary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignStart="@id/appGauge"
- android:layout_below="@id/appGauge"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:maxLines="2" />
-
- </RelativeLayout>
-
-</LinearLayout>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index edc4e59..fb427a6 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Protegida amb <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", protegida amb <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Cap"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Per millorar la precisió de la ubicació i per a altres finalitats, <xliff:g id="APP_NAME">%1$s</xliff:g> vol activar l\'anàlisi de la xarxa encara que no hi hagi cap connexió Wi-Fi."\n\n"Vols permetre-ho a totes les aplicacions que vulguin analitzar el contingut?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Per millorar la precisió de la ubicació i per a altres finalitats, <xliff:g id="APP_NAME">%1$s</xliff:g> vol activar la cerca de xarxes encara que no hi hagi cap connexió Wi-Fi."\n\n"Vols permetre-ho a totes les aplicacions que vulguin cercar xarxes?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Permet"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Denega"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Connecta"</string>
@@ -1335,7 +1335,7 @@
<string name="accessibility_long_press_timeout_preference_title" msgid="6708467774619266508">"Retard toca i mantén premut"</string>
<string name="accessibility_menu_item_settings" msgid="3344942964710773365">"Configuració"</string>
<string name="accessibility_feature_state_on" msgid="2864292320042673806">"Activada"</string>
- <string name="accessibility_feature_state_off" msgid="4172584906487070211">"Desactivada"</string>
+ <string name="accessibility_feature_state_off" msgid="4172584906487070211">"Desactivat"</string>
<string name="accessibility_service_security_warning_title" msgid="5421628151509995404">"Vols fer servir <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
<string name="accessibility_service_security_warning_summary" product="tablet" msgid="8558441850832543571">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> pot recopilar tot el text que escrius, excepte les contrasenyes. Això inclou les dades personals com ara els números de targetes de crèdit. També pot recopilar dades sobre les teves interaccions amb la tauleta."</string>
<string name="accessibility_service_security_warning_summary" product="default" msgid="2869015914319424723">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> pot recopilar tot el text que escrius, excepte les contrasenyes. Això inclou les dades personals com ara els números de targetes de crèdit. També pot recopilar dades sobre les teves interaccions amb el telèfon."</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2a26614..b1b7c82 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Sikret med <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", sikret med <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Ingen"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Med henblik på at forbedre nøjagtigheden og til andre formål, ønsker <xliff:g id="APP_NAME">%1$s</xliff:g> at aktivere netværksscanning, selv når Wi-Fi er deaktiveret."\n\n"Vil du tillade dette for alle apps, der ønsker at scanne?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"For at kunne angive mere nøjagtig placering og af andre grunde, ønsker <xliff:g id="APP_NAME">%1$s</xliff:g> at aktivere netværksscanning, selv når Wi-Fi er deaktiveret."\n\n"Vil du tillade dette for alle apps, der ønsker at scanne?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Tillad"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Afvis"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Forbind"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e513b29..b1427ca 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -542,12 +542,9 @@
<string name="wifi_poor_network_detection_summary" msgid="7843672905900544785">"Don\'t use a Wi‑Fi network unless it has a good Internet connection"</string>
<string name="wifi_scan_always_available" msgid="3470564139944368030">"Scanning always available"</string>
<string name="wifi_scan_always_available_summary" msgid="7768204638882691453">"Let Google\'s location service and other apps scan for networks, even when Wi-Fi is off"</string>
- <!-- no translation found for wifi_scan_notify_text_location_on (8135076005488914200) -->
- <skip />
- <!-- no translation found for wifi_scan_notify_text_location_off (6323983741393280935) -->
- <skip />
- <!-- no translation found for wifi_scan_notify_remember_choice (5340097010842405981) -->
- <skip />
+ <string name="wifi_scan_notify_text_location_on" msgid="8135076005488914200">"To improve location accuracy and for other purposes, Google and other apps may scan for nearby networks, even when Wi-Fi is off. If you don\'t want this to happen, go to Advanced > Scanning always available."</string>
+ <string name="wifi_scan_notify_text_location_off" msgid="6323983741393280935">"Apps may scan for nearby networks, even when Wi-Fi is off. If you don\'t want this to happen, go to Advanced > Scanning always available."</string>
+ <string name="wifi_scan_notify_remember_choice" msgid="5340097010842405981">"Don\'t show again"</string>
<string name="wifi_setting_sleep_policy_title" msgid="5149574280392680092">"Keep Wi‑Fi on during sleep"</string>
<string name="wifi_setting_sleep_policy_error" msgid="8174902072673071961">"There was a problem while changing the setting"</string>
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Wi‑Fi optimisation"</string>
@@ -1805,21 +1802,15 @@
<string name="user_you_section" msgid="6247838798859425408">"You"</string>
<string name="user_list_title" msgid="8866161687358773982">"Other users"</string>
<string name="user_add_user_menu" msgid="1675956975014862382">"Add user"</string>
- <!-- no translation found for user_add_restricted (2355584640156396901) -->
- <skip />
- <!-- no translation found for user_add_restricted_summary (6627956758186349471) -->
- <skip />
- <!-- no translation found for user_add_trusted (557634297572871869) -->
- <skip />
- <!-- no translation found for user_add_trusted_summary (1118604533072902851) -->
- <skip />
+ <string name="user_add_restricted" msgid="2355584640156396901">"Add limited user"</string>
+ <string name="user_add_restricted_summary" msgid="6627956758186349471">"Limited users can only access the apps and content that you select"</string>
+ <string name="user_add_trusted" msgid="557634297572871869">"Add trusted user"</string>
+ <string name="user_add_trusted_summary" msgid="1118604533072902851">"Trusted users have no restrictions"</string>
<string name="user_summary_active" msgid="4740649452346004418">"Active"</string>
<string name="user_summary_inactive" msgid="3758296246095054572">"Not active"</string>
<string name="user_summary_not_set_up" msgid="8778205026866794909">"Not set up"</string>
- <!-- no translation found for user_trusted (6742122083463724471) -->
- <skip />
- <!-- no translation found for user_limited (5344145255529624480) -->
- <skip />
+ <string name="user_trusted" msgid="6742122083463724471">"Trusted"</string>
+ <string name="user_limited" msgid="5344145255529624480">"Limited"</string>
<string name="user_owner" msgid="3879126011135546571">"Owner"</string>
<string name="user_nickname" msgid="5148818000228994488">"Nickname"</string>
<string name="user_add_user_title" msgid="3961861593718285403">"Add new user"</string>
@@ -1842,12 +1833,9 @@
<string name="user_adding_new_user" msgid="1521674650874241407">"Adding new user…"</string>
<string name="user_delete_user_description" msgid="3158592592118767056">"Delete user"</string>
<string name="user_delete_button" msgid="5131259553799403201">"Delete"</string>
- <!-- no translation found for application_restrictions (8207332020898004394) -->
- <skip />
- <!-- no translation found for apps_with_restrictions_header (3660449891478534440) -->
- <skip />
- <!-- no translation found for apps_with_restrictions_settings_button (3841347287916635821) -->
- <skip />
+ <string name="application_restrictions" msgid="8207332020898004394">"Allow apps and content"</string>
+ <string name="apps_with_restrictions_header" msgid="3660449891478534440">"Applications with restrictions"</string>
+ <string name="apps_with_restrictions_settings_button" msgid="3841347287916635821">"Expand settings for application"</string>
<string name="global_change_warning" product="tablet" msgid="8045013389464294039">"This setting affects all users on this tablet."</string>
<string name="global_change_warning" product="default" msgid="2461264421590324675">"This setting affects all users on this phone."</string>
<string name="global_locale_change_title" msgid="5956281361384221451">"Change language"</string>
@@ -1858,14 +1846,9 @@
<string name="user_picture_title" msgid="7297782792000291692">"Photo ID"</string>
<string name="cell_broadcast_settings" msgid="8415582011920085222">"Mobile broadcasts"</string>
<string name="cell_broadcast_settings_summary" msgid="3301339398950905913">"Select the types of emergency alerts to display."</string>
- <!-- no translation found for user_restrictions_title (371835484894400390) -->
- <skip />
- <!-- no translation found for user_rename (8523499513614655279) -->
- <skip />
- <!-- no translation found for wizard_back (5567007959434765743) -->
- <skip />
- <!-- no translation found for wizard_next (3606212602795100640) -->
- <skip />
- <!-- no translation found for wizard_finish (3286109692700083252) -->
- <skip />
+ <string name="user_restrictions_title" msgid="371835484894400390">"Allow apps and content"</string>
+ <string name="user_rename" msgid="8523499513614655279">"RENAME"</string>
+ <string name="wizard_back" msgid="5567007959434765743">"Back"</string>
+ <string name="wizard_next" msgid="3606212602795100640">"Next"</string>
+ <string name="wizard_finish" msgid="3286109692700083252">"Finish"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index b390f88..628819c 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Protegida con <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", protegida con <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Ninguna"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Para mejorar la precisión de la ubicación y para otros fines, <xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la búsqueda de redes, incluso cuando la red Wi-Fi esté desactivada."\n\n"¿Quieres permitir esta acción para todas las aplicaciones que desees buscar?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Para mejorar la precisión de la ubicación y para otros fines, <xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la búsqueda en redes, incluso cuando la red Wi-Fi esté desactivada."\n\n"¿Quieres permitir esta acción para todas las aplicaciones que desees buscar?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Permitir"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Denegar"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Conectar"</string>
@@ -1597,7 +1597,7 @@
<string name="sync_one_time_sync" msgid="6766593624598183090">"Tocar para sincronizar ahora<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="714886122098006477">"Gmail"</string>
- <string name="sync_calendar" msgid="9056527206714733735">"Calendar"</string>
+ <string name="sync_calendar" msgid="9056527206714733735">"Calendario"</string>
<string name="sync_contacts" msgid="9174914394377828043">"Contactos"</string>
<string name="sync_plug" msgid="3905078969081888738"><font fgcolor="#ffffffff">"Te damos la bienvenida a Google Sync"</font>" "\n"Con este software de Google, puedes sincronizar tus datos y acceder a tus contactos, citas y más desde cualquier lugar."</string>
<string name="header_application_sync_settings" msgid="6205903695598000286">"Conf. de sincronización de aplicación"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b216968..597a120 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -26,8 +26,8 @@
<item quantity="one" msgid="5295687242294085452">"Solo te queda <xliff:g id="STEP_COUNT">%1$d</xliff:g> paso para ser un desarrollador."</item>
<item quantity="other" msgid="6722953419953594148">"Solo te quedan <xliff:g id="STEP_COUNT">%1$d</xliff:g> pasos para ser un desarrollador."</item>
</plurals>
- <string name="show_dev_on" msgid="1110711554982716293">"¡Ahora eres un desarrollador!"</string>
- <string name="show_dev_already" msgid="2151632240145446227">"No es necesario, ya eres un desarrollador."</string>
+ <string name="show_dev_on" msgid="1110711554982716293">"¡Ahora están activadas las opciones de desarrollo!"</string>
+ <string name="show_dev_already" msgid="2151632240145446227">"No es necesario, están activadas las opciones de desarrollo."</string>
<string name="header_category_wireless_networks" msgid="4944823405420438623">"CONEXIONES INALÁMBRICAS Y REDES"</string>
<string name="header_category_device" msgid="5781174212691167553">"DISPOSITIVO"</string>
<string name="header_category_personal" msgid="6225932173498802187">"PERSONAL"</string>
@@ -54,7 +54,7 @@
<string name="radioInfo_phone_ringing" msgid="4883724645684297895">"Sonando"</string>
<string name="radioInfo_phone_offhook" msgid="4174402846862780998">"Llamada en curso"</string>
<string name="radioInfo_data_disconnected" msgid="1959735267890719418">"Desconectada"</string>
- <string name="radioInfo_data_connecting" msgid="8404571440697917823">"Estableciendo conexión..."</string>
+ <string name="radioInfo_data_connecting" msgid="8404571440697917823">"Estableciendo conexión"</string>
<string name="radioInfo_data_connected" msgid="7074301157399238697">"Conectado"</string>
<string name="radioInfo_data_suspended" msgid="5315325487890334196">"Suspendido"</string>
<string name="radioInfo_unknown" msgid="737385314432468266">"desconocido"</string>
@@ -89,7 +89,7 @@
<string name="battery_info_awake_plugged" msgid="176716874713478188">"Tiempo de actividad durante la carga:"</string>
<string name="battery_info_screen_on" msgid="376277447175613889">"Pantalla de duración de encendido"</string>
<string name="battery_info_status_unknown" msgid="196130600938058547">"Desconocido"</string>
- <string name="battery_info_status_charging" msgid="1705179948350365604">"Cargando..."</string>
+ <string name="battery_info_status_charging" msgid="1705179948350365604">"Cargando"</string>
<string name="battery_info_status_charging_ac" msgid="5874340256342956252">"(CA)"</string>
<string name="battery_info_status_charging_usb" msgid="4059070156126770959">"(USB)"</string>
<string name="battery_info_status_charging_wireless" msgid="1822125795446772771">"(conexiones inalámbricas)"</string>
@@ -135,10 +135,10 @@
<string name="bluetooth_connected_no_a2dp" msgid="4576188601581440337">"Conectado (sin audio multimedia)"</string>
<string name="bluetooth_connected_no_headset_no_a2dp" msgid="9195757766755553810">"Conectado (sin teléfono ni multimedia)"</string>
<string name="bluetooth_disconnected" msgid="6557104142667339895">"Desconectada"</string>
- <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando..."</string>
- <string name="bluetooth_connecting" msgid="8555009514614320497">"Estableciendo conexión..."</string>
+ <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Desconectando…"</string>
+ <string name="bluetooth_connecting" msgid="8555009514614320497">"Estableciendo conexión…"</string>
<string name="bluetooth_unknown" msgid="644716244548801421"></string>
- <string name="bluetooth_pairing" msgid="1426882272690346242">"Sincronizando..."</string>
+ <string name="bluetooth_pairing" msgid="1426882272690346242">"Sincronizando…"</string>
<string name="bluetooth_device" msgid="5291950341750186887">"Dispositivo Bluetooth sin nombre"</string>
<string name="progress_scanning" msgid="192587958424295789">"Buscando"</string>
<string name="bluetooth_no_devices_found" msgid="1085232930277181436">"No hay dispositivos Bluetooth cercanos."</string>
@@ -158,7 +158,7 @@
<string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="989613204829097159">"Una aplicación quiere activar el Bluetooth y hacer visible tu tablet para otros dispositivos. Puedes cambiar esta configuración más tarde en los ajustes de Bluetooth."</string>
<string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="6671615712909139801">"Una aplicación quiere activar el Bluetooth y hacer visible tu teléfono para otros dispositivos. Puedes cambiar esta configuración más tarde en los ajustes de Bluetooth."</string>
<string name="bluetooth_turning_on" msgid="4850574877288036646">"Activando Bluetooth…"</string>
- <string name="bluetooth_turning_off" msgid="2337747302892025192">"Desactivando Bluetooth..."</string>
+ <string name="bluetooth_turning_off" msgid="2337747302892025192">"Desactivando Bluetooth…"</string>
<string name="bluetooth_auto_connect" msgid="40711424456733571">"Conexión automática"</string>
<string name="bluetooth_connection_permission_request" msgid="4747918249032890077">"Solicitud para establecer conexión de Bluetooth"</string>
<string name="bluetooth_connection_notif_message" msgid="3687933246423942977">"Toca para conectarte a \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
@@ -228,7 +228,7 @@
<string name="radio_info_toggle_dns_check_label" msgid="8292252930563286858">"alternar comprobación de DNS"</string>
<string name="oem_radio_info_label" msgid="6163141792477958941">"Ajustes/información específica de OEM"</string>
<string name="band_mode_title" msgid="954174198903776205">"Establecer banda GSM/UMTS"</string>
- <string name="band_mode_loading" msgid="548764766363847336">"Cargando lista de bandas..."</string>
+ <string name="band_mode_loading" msgid="548764766363847336">"Cargando lista de bandas…"</string>
<string name="band_mode_set" msgid="5730560180249458484">"Establecer"</string>
<string name="band_mode_failed" msgid="1495968863884716379">"Con error"</string>
<string name="band_mode_succeeded" msgid="2701016190055887575">"Correcto"</string>
@@ -246,7 +246,7 @@
<string name="sdcard_settings_bad_removal_status" product="default" msgid="5145797653495907970">"La tarjeta SD se ha extraído mientras estaba en uso."</string>
<string name="sdcard_settings_used_bytes_label" msgid="8820289486001170836">"Bytes usados:"</string>
<string name="sdcard_settings_scanning_status" product="nosdcard" msgid="7503429447676219564">"Buscando archivos almac USB…"</string>
- <string name="sdcard_settings_scanning_status" product="default" msgid="2763464949274455656">"Buscando medios en tarjeta SD..."</string>
+ <string name="sdcard_settings_scanning_status" product="default" msgid="2763464949274455656">"Buscando medios en tarjeta SD…"</string>
<string name="sdcard_settings_read_only_status" product="nosdcard" msgid="3624143937437417788">"Almacenamiento USB activado como solo lectura"</string>
<string name="sdcard_settings_read_only_status" product="default" msgid="4518291824764698112">"La tarjeta SD está activada en modo de solo lectura."</string>
<string name="skip_label" msgid="47510779345218297">"Saltar"</string>
@@ -443,7 +443,7 @@
<string name="bluetooth_connecting_error_message" msgid="229861986106185022">"No se ha podido establecer conexión con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_preference_scan_title" msgid="2277464653118896016">"Buscar dispositivos"</string>
<string name="bluetooth_search_for_devices" msgid="5957007154213560390">"Buscar dispositivos"</string>
- <string name="bluetooth_searching_for_devices" msgid="9203739709307871727">"Buscando..."</string>
+ <string name="bluetooth_searching_for_devices" msgid="9203739709307871727">"Buscando…"</string>
<string name="bluetooth_preference_device_settings" msgid="907776049862799122">"Ajustes del dispositivo"</string>
<string name="bluetooth_preference_paired_devices" msgid="1970524193086791964">"Dispositivos sincronizados"</string>
<string name="bluetooth_preference_found_devices" msgid="1647983835063249680">"Dispositivos disponibles"</string>
@@ -487,8 +487,8 @@
<string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Uso de la transferencia de archivos"</string>
<string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Usar para entrada"</string>
<string name="bluetooth_pan_profile_summary_use_for" msgid="5664884523822068653">"Usar para acceder a Internet"</string>
- <string name="bluetooth_dock_settings" msgid="3218335822716052885">"Ajustes del conector"</string>
- <string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Uso del conector para audio"</string>
+ <string name="bluetooth_dock_settings" msgid="3218335822716052885">"Ajustes de la base"</string>
+ <string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Uso de la base para audio"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"Como altavoz del teléfono"</string>
<string name="bluetooth_dock_settings_a2dp" msgid="8791004998846630574">"Para música y contenido multimedia"</string>
<string name="bluetooth_dock_settings_remember" msgid="5551459057010609115">"Ajustes de recordatorio"</string>
@@ -500,7 +500,7 @@
<string name="wifi_display_no_devices_found" msgid="8180582698282377626">"Sin pantallas inalámbricas cercanas"</string>
<string name="wifi_display_paired_devices" msgid="7395326840730024303">"Pantallas sincronizadas"</string>
<string name="wifi_display_available_devices" msgid="4558314642853513487">"Dispositivos disponibles"</string>
- <string name="wifi_display_status_connecting" msgid="5688608834000748607">"Conectando..."</string>
+ <string name="wifi_display_status_connecting" msgid="5688608834000748607">"Conectando"</string>
<string name="wifi_display_status_connected" msgid="8364125226376985558">"Conectada"</string>
<string name="wifi_display_status_available" msgid="1924167525172207067">"Disponible"</string>
<string name="wifi_display_details" msgid="7791118209992162698">"Ajustes de pantalla"</string>
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Protegida con <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", protegida con <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Ninguna"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Para mejorar la precisión de la ubicación y con otros fines, <xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la búsqueda de redes, aunque la conexión Wi-Fi esté desactivada."\n\n"¿Permitir para todas las aplicaciones que quieran buscar redes?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Para mejorar la precisión de la ubicación y para otros fines, <xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la búsqueda de redes aunque la conexión Wi-Fi esté desactivada."\n\n"¿Permitir para todas las aplicaciones que quieran buscar redes?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Permitir"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Rechazar"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Establecer conexión"</string>
@@ -685,7 +685,7 @@
<string name="media_volume_title" msgid="3576565767317118106">"Multimedia"</string>
<string name="media_volume_summary" msgid="5363248930648849974">"Establecer volumen para música y vídeos"</string>
<string name="alarm_volume_title" msgid="2285597478377758706">"Alarma"</string>
- <string name="dock_settings_summary" msgid="455802113668982481">"Ajustes de audio del conector adjunto"</string>
+ <string name="dock_settings_summary" msgid="455802113668982481">"Ajustes de audio de la base"</string>
<string name="dtmf_tone_enable_title" msgid="8533399267725365088">"Sonar al marcar número"</string>
<string name="sound_effects_enable_title" msgid="1171590821131077296">"Sonido al tocar"</string>
<string name="lock_sounds_enable_title" msgid="450098505659399520">"Sonido de pantalla de bloqueo"</string>
@@ -700,22 +700,22 @@
<string name="volume_notification_mute" msgid="7955193480006444159">"Silenciar notificaciones"</string>
<string name="volume_alarm_mute" msgid="4452239420351035936">"Silenciar alarmas"</string>
<string name="vibrate_when_ringing_title" msgid="3885857358303178029">"Vibrar al sonar"</string>
- <string name="dock_settings" msgid="1820107306693002541">"Conector"</string>
- <string name="dock_settings_title" msgid="9161438664257429372">"Ajustes del conector"</string>
+ <string name="dock_settings" msgid="1820107306693002541">"Base"</string>
+ <string name="dock_settings_title" msgid="9161438664257429372">"Ajustes de la base"</string>
<string name="dock_audio_settings_title" msgid="3324750259959570305">"Audio"</string>
<string name="dock_audio_summary_desk" msgid="6487784412371139335">"Ajustes de la base"</string>
- <string name="dock_audio_summary_car" msgid="6740897586006248450">"Ajustes del conector del coche adjunto"</string>
+ <string name="dock_audio_summary_car" msgid="6740897586006248450">"Ajustes de la base del vehículo"</string>
<string name="dock_audio_summary_none" product="tablet" msgid="8215337394914283607">"Tablet no conectado"</string>
<string name="dock_audio_summary_none" product="default" msgid="289909253741048784">"Teléfono no conectado"</string>
- <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Ajustes del conector adjunto"</string>
- <string name="dock_not_found_title" msgid="3290961741828952424">"No se ha encontrado el conector"</string>
- <string name="dock_not_found_text" product="tablet" msgid="8405432495282299143">"Para configurar el audio del conector, debes insertar el tablet en el conector."</string>
- <string name="dock_not_found_text" product="default" msgid="1460497923342627801">"Para configurar el audio del conector, debes insertar el teléfono en el conector."</string>
+ <string name="dock_audio_summary_unknown" msgid="4465059868974255693">"Ajustes de la base"</string>
+ <string name="dock_not_found_title" msgid="3290961741828952424">"No se ha encontrado la base"</string>
+ <string name="dock_not_found_text" product="tablet" msgid="8405432495282299143">"Para configurar el audio de la base, debes insertar el tablet en la base."</string>
+ <string name="dock_not_found_text" product="default" msgid="1460497923342627801">"Para configurar el audio de la base, debes insertar el teléfono en la base."</string>
<string name="dock_sounds_enable_title" msgid="885839627097024110">"Sonido al insertar dispositivo"</string>
- <string name="dock_sounds_enable_summary_on" product="tablet" msgid="838102386448981339">"Reproducir sonido al insertar o extraer el tablet del conector"</string>
- <string name="dock_sounds_enable_summary_on" product="default" msgid="8491180514199743771">"Reproducir sonido al insertar o extraer el teléfono del conector"</string>
- <string name="dock_sounds_enable_summary_off" product="tablet" msgid="5077843049805652363">"No reproducir sonido al insertar o extraer el tablet del conector"</string>
- <string name="dock_sounds_enable_summary_off" product="default" msgid="3151046599205265919">"No reproducir sonido al insertar o extraer el teléfono del conector"</string>
+ <string name="dock_sounds_enable_summary_on" product="tablet" msgid="838102386448981339">"Reproducir sonido al insertar o extraer el tablet de la base"</string>
+ <string name="dock_sounds_enable_summary_on" product="default" msgid="8491180514199743771">"Reproducir sonido al insertar o extraer el teléfono de la base"</string>
+ <string name="dock_sounds_enable_summary_off" product="tablet" msgid="5077843049805652363">"No reproducir sonido al insertar o extraer el tablet de la base"</string>
+ <string name="dock_sounds_enable_summary_off" product="default" msgid="3151046599205265919">"No reproducir sonido al insertar o extraer el teléfono de la base"</string>
<string name="account_settings" msgid="6403589284618783461">"Cuentas"</string>
<string name="search_settings" msgid="1910951467596035063">"Búsqueda"</string>
<string name="search_settings_summary" msgid="9205656546570654169">"Administrar historial y configuración de búsqueda"</string>
@@ -732,10 +732,10 @@
<string name="wallpaper_settings_title" msgid="5449180116365824625">"Fondo de pantalla"</string>
<string name="wallpaper_settings_fragment_title" msgid="519078346877860129">"Selecciona una categoría"</string>
<string name="screensaver_settings_title" msgid="3349790120327233241">"Salvapantallas"</string>
- <string name="screensaver_settings_summary_either_long" msgid="2458481525925378465">"Cuando el dispositivo esté en un conector o inactivo y cargando"</string>
+ <string name="screensaver_settings_summary_either_long" msgid="2458481525925378465">"Cuando el dispositivo esté en una base o inactivo y cargando"</string>
<string name="screensaver_settings_summary_either_short" msgid="6140527286137331478">"Ambos casos"</string>
<string name="screensaver_settings_summary_sleep" msgid="9086186698140423493">"Durante la carga"</string>
- <string name="screensaver_settings_summary_dock" msgid="2072657401664633283">"Cuando el dispositivo esté en un conector"</string>
+ <string name="screensaver_settings_summary_dock" msgid="2072657401664633283">"Cuando el dispositivo esté en una base"</string>
<string name="screensaver_settings_summary_off" msgid="2481581696365146473">"Desactivado"</string>
<string name="screensaver_settings_disabled_prompt" msgid="3857507943322777651">"Para controlar lo que ocurre cuando el teléfono está conectado o inactivo, debes activar el salvapantallas."</string>
<string name="screensaver_settings_when_to_dream" msgid="8352267826043957746">"Cuándo activarlo"</string>
@@ -813,7 +813,7 @@
<string name="memory_available" msgid="5052397223077021181">"Disponible"</string>
<string name="memory_available_read_only" msgid="6497534390167920206">"Disponible (solo lectura)"</string>
<string name="memory_size" msgid="6629067715017232195">"Espacio total"</string>
- <string name="memory_calculating_size" msgid="2188358544203768588">"Calculando..."</string>
+ <string name="memory_calculating_size" msgid="2188358544203768588">"Calculando…"</string>
<string name="memory_apps_usage" msgid="2348501997988663688">"Aplicaciones (datos aplicaciones y contenido multimedia)"</string>
<string name="memory_media_usage" msgid="3738830697707880405">"Multimedia"</string>
<string name="memory_downloads_usage" msgid="3755173051677533027">"Descargas"</string>
@@ -993,11 +993,11 @@
<string name="terms_title" msgid="7697580845616764642">"Términos y condiciones"</string>
<string name="settings_license_activity_title" msgid="7553683406244228650">"Licencias de código abierto"</string>
<string name="settings_license_activity_unavailable" msgid="4210539215951487627">"Se ha producido un problema al intentar cargar las licencias."</string>
- <string name="settings_license_activity_loading" msgid="3337535809093591740">"Cargando..."</string>
+ <string name="settings_license_activity_loading" msgid="3337535809093591740">"Cargando…"</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"Información de seguridad"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Información de seguridad"</string>
<string name="settings_safetylegal_activity_unreachable" msgid="232523852222964470">"No tienes conexión de datos. Para ver esta información, accede a %s desde cualquier ordenador conectado a Internet."</string>
- <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Cargando..."</string>
+ <string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Cargando…"</string>
<string name="lockpassword_choose_your_password_header" msgid="8624900666929394990">"Selecciona tu contraseña"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="6949761069941694050">"Elige un patrón"</string>
<string name="lockpassword_choose_your_pin_header" msgid="7598849519816138302">"Selecciona tu PIN"</string>
@@ -1106,7 +1106,7 @@
<string name="internal_storage" msgid="1584700623164275282">"Almacenamiento interno"</string>
<string name="sd_card_storage" product="nosdcard" msgid="2673203150465132465">"Almacenamiento USB"</string>
<string name="sd_card_storage" product="default" msgid="7623513618171928235">"Tarjeta SD"</string>
- <string name="recompute_size" msgid="7722567982831691718">"Recalculando tamaño..."</string>
+ <string name="recompute_size" msgid="7722567982831691718">"Recalculando tamaño…"</string>
<string name="clear_data_dlg_title" msgid="5605258400134511197">"¿Eliminar datos de la aplicación?"</string>
<string name="clear_data_dlg_text" msgid="8847257251846779938">"Todos los datos de esta aplicación se eliminarán de forma permanente. Esto incluye todos los archivos, configuración, cuentas, bases de datos, etc."</string>
<string name="dlg_ok" msgid="2402639055725653590">"Aceptar"</string>
@@ -1242,7 +1242,7 @@
<string name="user_dict_settings_context_menu_delete_title" msgid="9140703913776549054">"Eliminar"</string>
<string name="user_dict_settings_empty_text" msgid="8165273379942105271">"No tienes ninguna palabra en el diccionario del usuario. Toca el botón Añadir (+) para añadir una palabra."</string>
<string name="user_dict_settings_all_languages" msgid="6742000040975959247">"Para todos los idiomas"</string>
- <string name="user_dict_settings_more_languages" msgid="7316375944684977910">"Más idiomas..."</string>
+ <string name="user_dict_settings_more_languages" msgid="7316375944684977910">"Más idiomas…"</string>
<string name="testing" msgid="6584352735303604146">"Prueba"</string>
<string name="testing_phone_info" product="tablet" msgid="193561832258534798">"Información del tablet"</string>
<string name="testing_phone_info" product="default" msgid="8656693364332840056">"Información sobre el teléfono"</string>
@@ -1354,7 +1354,7 @@
<string name="battery_since_reset" msgid="7464546661121187045">"Uso de la batería desde que se restableció"</string>
<string name="battery_stats_on_battery" msgid="4970762168505236033">"<xliff:g id="TIME">%1$s</xliff:g> de batería"</string>
<string name="battery_stats_duration" msgid="7464501326709469282">"<xliff:g id="TIME">%1$s</xliff:g> desde que se cargó"</string>
- <string name="battery_stats_charging_label" msgid="4223311142875178785">"Cargando..."</string>
+ <string name="battery_stats_charging_label" msgid="4223311142875178785">"Cargando"</string>
<string name="battery_stats_screen_on_label" msgid="7150221809877509708">"Pantalla encendida"</string>
<string name="battery_stats_gps_on_label" msgid="1193657533641951256">"GPS activado"</string>
<string name="battery_stats_wifi_running_label" msgid="1845839195549226252">"Wi-Fi"</string>
@@ -1474,8 +1474,8 @@
<string name="gadget_state_template" msgid="5156935629902649932">"<xliff:g id="ID_1">%1$s</xliff:g> <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="gadget_state_on" msgid="6909119593004937688">"activado"</string>
<string name="gadget_state_off" msgid="5220212352953066317">"desactivado"</string>
- <string name="gadget_state_turning_on" msgid="3395992057029439039">"activando..."</string>
- <string name="gadget_state_turning_off" msgid="2395546048102176157">"desactivando..."</string>
+ <string name="gadget_state_turning_on" msgid="3395992057029439039">"activando"</string>
+ <string name="gadget_state_turning_off" msgid="2395546048102176157">"desactivando"</string>
<string name="gadget_wifi" msgid="4712584536500629417">"Wi-Fi"</string>
<string name="gadget_bluetooth" msgid="8998572807378694410">"Bluetooth"</string>
<string name="gadget_gps" msgid="1558173602059236567">"GPS"</string>
@@ -1560,17 +1560,17 @@
<string name="wifi_setup_forget" msgid="2562847595567347526">"Borrar"</string>
<string name="wifi_setup_save" msgid="3659235094218508211">"Guardar"</string>
<string name="wifi_setup_cancel" msgid="3185216020264410239">"Cancelar"</string>
- <string name="wifi_setup_status_scanning" msgid="5317003416385428036">"Buscando redes..."</string>
+ <string name="wifi_setup_status_scanning" msgid="5317003416385428036">"Buscando redes…"</string>
<string name="wifi_setup_status_select_network" msgid="7519563569903137003">"Toca en una red para conectarte a ella"</string>
<string name="wifi_setup_status_existing_network" msgid="6394925174802598186">"Establecer conexión con red existente"</string>
<string name="wifi_setup_status_unsecured_network" msgid="8143046977328718252">"Conectar con red no segura"</string>
<string name="wifi_setup_status_edit_network" msgid="4765340816724760717">"Introducir configuración de red"</string>
<string name="wifi_setup_status_new_network" msgid="7468952850452301083">"Establecer conexión con red nueva"</string>
- <string name="wifi_setup_status_connecting" msgid="4971421484401530740">"Conectando..."</string>
+ <string name="wifi_setup_status_connecting" msgid="4971421484401530740">"Conectando…"</string>
<string name="wifi_setup_status_proceed_to_next" msgid="6708250000342940031">"Ir al siguiente paso"</string>
<string name="wifi_setup_status_eap_not_supported" msgid="5335338851032315905">"EAP no compatible"</string>
<string name="wifi_setup_eap_not_supported" msgid="1955087534276570962">"No puedes definir una conexión Wi-Fi EAP durante la configuración, pero puedes hacerlo cuando haya finalizado a través de Ajustes > Conexiones inalámbricas y redes."</string>
- <string name="wifi_setup_description_connecting" msgid="2793554932006756795">"Conectando (puede tardar unos minutos)..."</string>
+ <string name="wifi_setup_description_connecting" msgid="2793554932006756795">"Conectando (puede tardar unos minutos)…"</string>
<string name="wifi_setup_description_connected" msgid="736032046548460779">"Toca "<b>"Siguiente"</b>" para continuar con el proceso de configuración."\n\n"Toca "<b>"Atrás"</b>" para conectarte a otra red Wi-Fi."</string>
<string name="accessibility_sync_enabled" msgid="558480439730263116">"Sincronización habilitada"</string>
<string name="accessibility_sync_disabled" msgid="1741194106479011384">"Sincronización inhabilitada"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 76f205c..1325833 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Osigurano značajkom <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", osigurano značajkom <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Nema"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Radi poboljšanja preciznosti lokacije kao i u druge svrhe aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> želi uključiti skeniranje mreže, čak i kada je Wi-Fi isključen."\n\n"Treba li dozvoliti to za sve aplikacije koje žele skenirati?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Radi poboljšanja preciznosti lokacije kao i u druge svrhe aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> želi uključiti pregledavanje mreže, čak i kada je Wi-Fi isključen."\n\n"Želite li to dozvoliti za sve aplikacije koje žele izvoditi pregledavanje?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Dopusti"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Odbij"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Poveži"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index beea79f..c04fff2 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -1520,7 +1520,7 @@
<string name="backup_configure_account_title" msgid="3790872965773196615">"Sikkerhetskopikonto"</string>
<string name="backup_configure_account_default_summary" msgid="2436933224764745553">"Ingen konto lagrer for øyeblikket sikkerhetskopierte data"</string>
<string name="auto_restore_title" msgid="5397528966329126506">"Auto-gjenoppretting"</string>
- <string name="auto_restore_summary" msgid="4235615056371993807">"Når du installerer en app, bør du gjenopprette sikkerhetskopierte innstillinger og data"</string>
+ <string name="auto_restore_summary" msgid="4235615056371993807">"Gjenopprett sikkerhetskopierte innstillinger og data når apper installeres"</string>
<string name="local_backup_password_title" msgid="3860471654439418822">"Passord for sikkerhetskopiering på datamaskin"</string>
<string name="local_backup_password_summary_none" msgid="393503434408227110">"Fullstendig sikkerhetskopiering på datamaskin beskyttes ikke for øyeblikket."</string>
<string name="local_backup_password_summary_change" msgid="2731163425081172638">"Trykk for å endre eller fjerne passordet for fullstendige sikkerhetskopier på datamaskinen"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 419b970..09acc83 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Zabezpieczona za pomocą protokołu <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", zabezpieczona za pomocą protokołu <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Brak"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Aby poprawić rozpoznawanie lokalizacji i korzystać z innych funkcji, <xliff:g id="APP_NAME">%1$s</xliff:g> chce włączyć skanowanie sieci – nawet kiedy obsługa Wi-Fi jest wyłączona."\n\n"Zezwolić na to wszystkim aplikacjom, które chcą przeprowadzić skanowanie?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Aby poprawić rozpoznawanie lokalizacji i korzystać z innych funkcji, <xliff:g id="APP_NAME">%1$s</xliff:g> chce włączyć skanowanie sieci – nawet kiedy obsługa Wi-Fi jest wyłączona."\n\n"Zezwolić na to wszystkim aplikacjom, które chcą przeprowadzać skanowanie?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Zezwól"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Odrzuć"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Połącz"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 1245178..3b8f8a4 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -603,7 +603,7 @@
<string name="wifi_disabled_generic" msgid="4259794910584943386">"Desativado"</string>
<string name="wifi_disabled_network_failure" msgid="3111321240793227690">"Conexão com a Internet de baixa qualidade evitada"</string>
<string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Problema de autenticação"</string>
- <string name="wifi_not_in_range" msgid="1136191511238508967">"Não está dentro do alcance"</string>
+ <string name="wifi_not_in_range" msgid="1136191511238508967">"Fora do alcance"</string>
<string name="wifi_wps_available_first_item" msgid="4422547079984583502">"WPS disponível"</string>
<string name="wifi_wps_available_second_item" msgid="8427520131718215301">" (WPS disponível)"</string>
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Protegido por <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index f1451ec..fe450e3 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -1005,7 +1005,7 @@
<string name="lock_settings_title" msgid="335025124489630932">"Usalama wa skrini"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="5679630792003440352">"Badilisha umbo la kufungua"</string>
<string name="lockpattern_change_lock_pin_label" msgid="266707138486731661">"Badilisha PIN ya kufungua"</string>
- <string name="lockpattern_need_to_unlock" msgid="757935356911054465">"Thibitisha ruwaza iliyohifadhiwa"</string>
+ <string name="lockpattern_need_to_unlock" msgid="757935356911054465">"Thibitisha mchoro uliohifadhiwa"</string>
<string name="lockpattern_need_to_unlock_wrong" msgid="4694973540770105678">"Jaribu tena:"</string>
<string name="lockpattern_recording_intro_header" msgid="2063630508212535241">"Chora ruwaza ya kufungua:"</string>
<string name="lockpattern_recording_intro_footer" msgid="1118579101409152113">"Bonyeza menyu upate usaidizi"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 70f5f12..18e5477 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -609,7 +609,7 @@
<string name="wifi_secured_first_item" msgid="4072076186051083451">"Được bảo mật bằng <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_secured_second_item" msgid="1326000076939056265">", được bảo mật bằng <xliff:g id="WIFI_SECURITY_SHORT">%1$s</xliff:g>"</string>
<string name="wifi_security_none" msgid="7985461072596594400">"Không"</string>
- <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Để nâng cao độ chính xác vị trí và phục vụ các mục đích khác, <xliff:g id="APP_NAME">%1$s</xliff:g> muốn bật tính năng quét mạng ngay cả khi Wi-Fi đang tắt."\n\n"Cho phép điều này đối với tất cả ứng dụng muốn quét?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="203123538572122989">"Để nâng cao độ chính xác vị trí và phục vụ các mục đích khác, <xliff:g id="APP_NAME">%1$s</xliff:g> muốn bật tính năng quét mạng ngay cả khi Wi-Fi đang tắt."\n\n"Cho phép cài đặt này đối với tất cả ứng dụng muốn quét?"</string>
<string name="wifi_scan_always_confirm_allow" msgid="5355973075896817232">"Cho phép"</string>
<string name="wifi_scan_always_confirm_deny" msgid="4463982053823520710">"Từ chối"</string>
<string name="wifi_connect" msgid="1076622875777072845">"Kết nối"</string>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index e7a00c3..bd385f6 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -37,4 +37,7 @@
<color name="title_color">@android:color/holo_blue_light</color>
<color name="setup_divider_color">#333333</color>
+ <color name="circle_avatar_frame_color">#ffffffff</color>
+ <color name="circle_avatar_frame_shadow_color">#80000000</color>
+ <color name="circle_avatar_frame_pressed_color">#ffffffff</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 91f293c..759b407 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -61,4 +61,8 @@
<dimen name="keyguard_appwidget_picker_margin_left">6dip</dimen>
<dimen name="keyguard_appwidget_picker_margin_right">6dip</dimen>
<integer name="keyguard_appwidget_picker_cols">1</integer>
+
+ <dimen name="circle_avatar_size">48dp</dimen>
+ <dimen name="circle_avatar_frame_stroke_width">1dp</dimen>
+ <dimen name="circle_avatar_frame_shadow_radius">3dp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4a8f796..7b028db 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4276,8 +4276,10 @@
<string name="user_settings_title">Users</string>
<!-- User settings section title for details about you [CHAR LIMIT=25] -->
<string name="user_you_section">You</string>
- <!-- User settings user list section header [CHAR LIMIT=30] -->
- <string name="user_list_title">Other users</string>
+ <!-- User settings trusted user list section header [CHAR LIMIT=30] -->
+ <string name="user_trusted_list_title">Trusted users</string>
+ <!-- User settings limited user list section header [CHAR LIMIT=30] -->
+ <string name="user_limited_list_title">Limited users</string>
<!-- User settings add user menu [CHAR LIMIT=20] -->
<string name="user_add_user_menu">Add user</string>
<!-- User settings add restricted user label [CHAR LIMIT=20] -->
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 3e61bd7..2e73e9e 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -35,8 +35,8 @@
android:fragment="com.android.settings.OwnerInfoSettings" />
<PreferenceCategory
- android:key="user_list"
- android:title="@string/user_list_title">
+ android:key="limited_user_list"
+ android:title="@string/user_limited_list_title">
</PreferenceCategory>
<Preference
@@ -45,6 +45,11 @@
android:summary="@string/user_add_restricted_summary"
android:icon="@drawable/ic_menu_add" />
+ <PreferenceCategory
+ android:key="trusted_user_list"
+ android:title="@string/user_trusted_list_title">
+ </PreferenceCategory>
+
<Preference
android:key="user_add_trusted"
android:title="@string/user_add_trusted"
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index c737c7d..1444a73 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -197,12 +197,14 @@
Bundle bundle = mInstallBundle;
mInstallBundle = null;
+ final int uid = bundle.getInt(Credentials.EXTRA_INSTALL_AS_UID, -1);
+
if (bundle.containsKey(Credentials.EXTRA_USER_PRIVATE_KEY_NAME)) {
String key = bundle.getString(Credentials.EXTRA_USER_PRIVATE_KEY_NAME);
byte[] value = bundle.getByteArray(Credentials.EXTRA_USER_PRIVATE_KEY_DATA);
- if (!mKeyStore.importKey(key, value)) {
- Log.e(TAG, "Failed to install " + key);
+ if (!mKeyStore.importKey(key, value, uid)) {
+ Log.e(TAG, "Failed to install " + key + " as user " + uid);
return;
}
}
@@ -211,8 +213,8 @@
String certName = bundle.getString(Credentials.EXTRA_USER_CERTIFICATE_NAME);
byte[] certData = bundle.getByteArray(Credentials.EXTRA_USER_CERTIFICATE_DATA);
- if (!mKeyStore.put(certName, certData)) {
- Log.e(TAG, "Failed to install " + certName);
+ if (!mKeyStore.put(certName, certData, uid)) {
+ Log.e(TAG, "Failed to install " + certName + " as user " + uid);
return;
}
}
@@ -221,11 +223,10 @@
String caListName = bundle.getString(Credentials.EXTRA_CA_CERTIFICATES_NAME);
byte[] caListData = bundle.getByteArray(Credentials.EXTRA_CA_CERTIFICATES_DATA);
- if (!mKeyStore.put(caListName, caListData)) {
- Log.e(TAG, "Failed to install " + caListName);
+ if (!mKeyStore.put(caListName, caListData, uid)) {
+ Log.e(TAG, "Failed to install " + caListName + " as user " + uid);
return;
}
-
}
setResult(RESULT_OK);
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 0c00c68..2b2cc98 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -77,7 +77,6 @@
import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate;
import android.net.TrafficStats;
-import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.INetworkManagementService;
@@ -329,6 +328,7 @@
mHeader = (ViewGroup) inflater.inflate(R.layout.data_usage_header, mListView, false);
mHeader.setClickable(true);
+ mListView.addHeaderView(new View(context), null, true);
mListView.addHeaderView(mHeader, null, true);
mListView.setItemsCanFocus(true);
@@ -454,9 +454,9 @@
mMenuDataRoaming.setChecked(getDataRoaming());
mMenuRestrictBackground = menu.findItem(R.id.data_usage_menu_restrict_background);
- mMenuRestrictBackground.setVisible(hasReadyMobileRadio(context) && !appDetailMode);
+ mMenuRestrictBackground.setVisible(
+ hasReadyMobileRadio(context) && isOwner && !appDetailMode);
mMenuRestrictBackground.setChecked(mPolicyManager.getRestrictBackground());
- mMenuRestrictBackground.setVisible(isOwner);
mMenuAutoSync = menu.findItem(R.id.data_usage_menu_auto_sync);
mMenuAutoSync.setChecked(ContentResolver.getMasterSyncAutomatically());
@@ -1745,6 +1745,9 @@
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
+ // clear focus to finish pending text edits
+ cycleDayPicker.clearFocus();
+
final int cycleDay = cycleDayPicker.getValue();
final String cycleTimezone = new Time().timezone;
editor.setPolicyCycleDay(template, cycleDay, cycleTimezone);
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
index 310aae7..9cfb44d 100644
--- a/src/com/android/settings/DeviceAdminSettings.java
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -54,6 +54,7 @@
DevicePolicyManager mDPM;
final HashSet<ComponentName> mActiveAdmins = new HashSet<ComponentName>();
final ArrayList<DeviceAdminInfo> mAvailableAdmins = new ArrayList<DeviceAdminInfo>();
+ String mDeviceOwnerPkg;
@Override
public void onCreate(Bundle icicle) {
@@ -70,6 +71,10 @@
@Override
public void onResume() {
super.onResume();
+ mDeviceOwnerPkg = mDPM.getDeviceOwner();
+ if (mDeviceOwnerPkg != null && !mDPM.isDeviceOwner(mDeviceOwnerPkg)) {
+ mDeviceOwnerPkg = null;
+ }
updateList();
}
@@ -85,7 +90,7 @@
mAvailableAdmins.clear();
List<ResolveInfo> avail = getActivity().getPackageManager().queryBroadcastReceivers(
new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
- PackageManager.GET_META_DATA);
+ PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
int count = avail == null ? 0 : avail.size();
for (int i=0; i<count; i++) {
ResolveInfo ri = avail.get(i);
@@ -149,7 +154,13 @@
}
public boolean isEnabled(int position) {
- return true;
+ DeviceAdminInfo info = mAvailableAdmins.get(position);
+ if (mActiveAdmins.contains(info.getComponent())
+ && info.getPackageName().equals(mDeviceOwnerPkg)) {
+ return false;
+ } else {
+ return true;
+ }
}
public View getView(int position, View convertView, ViewGroup parent) {
@@ -181,10 +192,16 @@
vh.icon.setImageDrawable(item.loadIcon(activity.getPackageManager()));
vh.name.setText(item.loadLabel(activity.getPackageManager()));
vh.checkbox.setChecked(mActiveAdmins.contains(item.getComponent()));
+ final boolean activeOwner = vh.checkbox.isChecked()
+ && item.getPackageName().equals(mDeviceOwnerPkg);
try {
vh.description.setText(item.loadDescription(activity.getPackageManager()));
} catch (Resources.NotFoundException e) {
}
+ vh.checkbox.setEnabled(!activeOwner);
+ vh.name.setEnabled(!activeOwner);
+ vh.description.setEnabled(!activeOwner);
+ vh.icon.setEnabled(!activeOwner);
}
}
}
diff --git a/src/com/android/settings/LocationSettings.java b/src/com/android/settings/LocationSettings.java
index b73dccd..2edefdf 100644
--- a/src/com/android/settings/LocationSettings.java
+++ b/src/com/android/settings/LocationSettings.java
@@ -96,7 +96,7 @@
// Only enable these controls if this user is allowed to change location
// sharing settings.
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
- boolean isToggleAllowed = um.isLocationSharingToggleAllowed();
+ boolean isToggleAllowed = !um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
if (mLocationAccess != null) mLocationAccess.setEnabled(isToggleAllowed);
if (mNetwork != null) mNetwork.setEnabled(isToggleAllowed);
if (mGps != null) mGps.setEnabled(isToggleAllowed);
@@ -117,6 +117,7 @@
if (mSettingsObserver == null) {
mSettingsObserver = new Observer() {
+ @Override
public void update(Observable o, Object arg) {
updateLocationToggles();
}
@@ -131,13 +132,13 @@
final ContentResolver cr = getContentResolver();
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
if (preference == mNetwork) {
- if (um.isLocationSharingToggleAllowed()) {
+ if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
Settings.Secure.setLocationProviderEnabled(cr,
LocationManager.NETWORK_PROVIDER, mNetwork.isChecked());
}
} else if (preference == mGps) {
boolean enabled = mGps.isChecked();
- if (um.isLocationSharingToggleAllowed()) {
+ if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
Settings.Secure.setLocationProviderEnabled(cr,
LocationManager.GPS_PROVIDER, enabled);
if (mAssistedGps != null) {
@@ -186,7 +187,7 @@
/** Enable or disable all providers when the master toggle is changed. */
private void onToggleLocationAccess(boolean checked) {
final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
- if (! um.isLocationSharingToggleAllowed()) {
+ if (um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
return;
}
final ContentResolver cr = getContentResolver();
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index 9bb6dca..21e717a 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -67,7 +67,7 @@
"^$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
private static final Pattern HOSTNAME_PATTERN;
private static final String EXCLUSION_REGEXP =
- "$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
+ "$|^(\\*)?\\.?[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
private static final Pattern EXCLUSION_PATTERN;
static {
HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b51f2f3..00a0e09 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -236,10 +236,26 @@
removePreference(KEY_CREDENTIALS_MANAGER);
}
+ PreferenceGroup deviceAdminCategory= (PreferenceGroup)
+ root.findPreference(KEY_DEVICE_ADMIN_CATEGORY);
mToggleAppInstallation = (CheckBoxPreference) findPreference(
KEY_TOGGLE_INSTALL_APPLICATIONS);
mToggleAppInstallation.setChecked(isNonMarketAppsAllowed());
+ final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
+ boolean isSideloadingAllowed =
+ !um.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);
+ // Side loading of apps.
+ if (isSideloadingAllowed) {
+ mToggleAppInstallation.setEnabled(isSideloadingAllowed);
+ } else {
+ if (deviceAdminCategory != null) {
+ deviceAdminCategory.removePreference(mToggleAppInstallation);
+ } else {
+ mToggleAppInstallation.setEnabled(false);
+ }
+ }
+
// Package verification, only visible to primary user and if enabled
mToggleVerifyApps = (CheckBoxPreference) findPreference(KEY_TOGGLE_VERIFY_APPLICATIONS);
if (mIsPrimary && showVerifierSetting()) {
@@ -250,8 +266,6 @@
mToggleVerifyApps.setEnabled(false);
}
} else {
- PreferenceGroup deviceAdminCategory= (PreferenceGroup)
- root.findPreference(KEY_DEVICE_ADMIN_CATEGORY);
if (deviceAdminCategory != null) {
deviceAdminCategory.removePreference(mToggleVerifyApps);
} else {
@@ -268,6 +282,10 @@
}
private void setNonMarketAppsAllowed(boolean enabled) {
+ final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
+ if (um.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES)) {
+ return;
+ }
// Change the system setting
Settings.Global.putInt(getContentResolver(), Settings.Global.INSTALL_NON_MARKET_APPS,
enabled ? 1 : 0);
@@ -303,6 +321,7 @@
.show();
}
+ @Override
public void onClick(DialogInterface dialog, int which) {
if (dialog == mWarnInstallApps && which == DialogInterface.BUTTON_POSITIVE) {
setNonMarketAppsAllowed(true);
@@ -505,6 +524,7 @@
createPreferenceHierarchy();
}
+ @Override
public boolean onPreferenceChange(Preference preference, Object value) {
if (preference == mLockAfter) {
int timeout = Integer.parseInt((String) value);
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index be8e1cc..64a7d7f 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -178,6 +178,7 @@
if (mParentHeader != null) {
setParentTitle(mParentHeader.title, null, new OnClickListener() {
+ @Override
public void onClick(View v) {
switchToParent(mParentHeader.fragment);
}
@@ -405,7 +406,6 @@
@Override
public void onBuildHeaders(List<Header> headers) {
loadHeadersFromResource(R.xml.settings_headers, headers);
-
updateHeaderList(headers);
}
@@ -414,6 +414,8 @@
DevelopmentSettings.PREF_SHOW,
android.os.Build.TYPE.equals("eng"));
int i = 0;
+
+ final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
mHeaderIndexMap.clear();
while (i < target.size()) {
Header header = target.get(i);
@@ -464,6 +466,10 @@
}
}
}
+ } else if (id == R.id.account_add) {
+ if (um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) {
+ target.remove(i);
+ }
}
if (i < target.size() && target.get(i) == header
@@ -778,6 +784,7 @@
return true;
}
+ @Override
public boolean shouldUpRecreateTask(Intent targetIntent) {
return super.shouldUpRecreateTask(new Intent(this, Settings.class));
}
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index c346017..64c4d4a 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -28,17 +28,16 @@
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
import android.content.SyncAdapterType;
import android.content.SyncInfo;
import android.content.SyncStatusInfo;
import android.content.pm.ProviderInfo;
import android.net.ConnectivityManager;
import android.os.Bundle;
+import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
-import android.text.format.DateFormat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -93,10 +92,12 @@
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(R.string.remove_account_label,
new DialogInterface.OnClickListener() {
+ @Override
public void onClick(DialogInterface dialog, int which) {
AccountManager.get(AccountSyncSettings.this.getActivity())
.removeAccount(mAccount,
new AccountManagerCallback<Boolean>() {
+ @Override
public void run(AccountManagerFuture<Boolean> future) {
// If already out of this screen, don't proceed.
if (!AccountSyncSettings.this.isResumed()) {
@@ -233,12 +234,15 @@
MenuItem syncCancel = menu.add(0, MENU_SYNC_CANCEL_ID, 0,
getString(R.string.sync_menu_sync_cancel))
.setIcon(com.android.internal.R.drawable.ic_menu_close_clear_cancel);
- MenuItem removeAccount = menu.add(0, MENU_REMOVE_ACCOUNT_ID, 0,
- getString(R.string.remove_account_label))
- .setIcon(R.drawable.ic_menu_delete_holo_dark);
- removeAccount.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
- MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
+ if (!um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) {
+ MenuItem removeAccount = menu.add(0, MENU_REMOVE_ACCOUNT_ID, 0,
+ getString(R.string.remove_account_label))
+ .setIcon(R.drawable.ic_menu_delete_holo_dark);
+ removeAccount.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
+ MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ }
syncNow.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
MenuItem.SHOW_AS_ACTION_WITH_TEXT);
syncCancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER |
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java
index 6f7e29a..f1b7752 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -23,8 +23,10 @@
import android.accounts.OperationCanceledException;
import android.app.Activity;
import android.app.PendingIntent;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.UserManager;
import android.util.Log;
import com.android.settings.Utils;
@@ -71,7 +73,8 @@
private PendingIntent mPendingIntent;
- private AccountManagerCallback<Bundle> mCallback = new AccountManagerCallback<Bundle>() {
+ private final AccountManagerCallback<Bundle> mCallback = new AccountManagerCallback<Bundle>() {
+ @Override
public void run(AccountManagerFuture<Bundle> future) {
boolean done = true;
try {
@@ -120,8 +123,10 @@
if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "restored");
}
- if (mAddAccountCalled) {
+ final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
+ if (mAddAccountCalled || um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) {
// We already called add account - maybe the callback was lost.
+ // Or we aren't allowed to add an account.
finish();
return;
}
@@ -162,6 +167,7 @@
}
}
+ @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_ADD_CALLED, mAddAccountCalled);
diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java
index 9757f30..b610025 100644
--- a/src/com/android/settings/users/AppRestrictionsFragment.java
+++ b/src/com/android/settings/users/AppRestrictionsFragment.java
@@ -25,7 +25,10 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
@@ -197,8 +200,10 @@
}
UserInfo info = mUserManager.getUserInfo(mUser.getIdentifier());
mUserPreference.setTitle(info.name);
- mUserPreference.setIcon(
- new BitmapDrawable(mUserManager.getUserIcon(mUser.getIdentifier())));
+ Bitmap userIcon = mUserManager.getUserIcon(mUser.getIdentifier());
+ CircleFramedDrawable circularIcon =
+ CircleFramedDrawable.getInstance(this.getActivity(), userIcon);
+ mUserPreference.setIcon(circularIcon);
mUserPreference.setText(info.name);
}
diff --git a/src/com/android/settings/users/CircleFramedDrawable.java b/src/com/android/settings/users/CircleFramedDrawable.java
new file mode 100644
index 0000000..7770b47
--- /dev/null
+++ b/src/com/android/settings/users/CircleFramedDrawable.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.users;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.drawable.Drawable;
+
+import com.android.settings.R;
+
+/**
+ * Converts the user avatar icon to a circularly clipped one.
+ * TODO: Move this to an internal framework class and share with the one in Keyguard.
+ */
+class CircleFramedDrawable extends Drawable {
+
+ private final Bitmap mBitmap;
+ private final int mSize;
+ private final Paint mPaint;
+ private final float mShadowRadius;
+ private final float mStrokeWidth;
+ private final int mFrameColor;
+ private final int mHighlightColor;
+ private final int mFrameShadowColor;
+
+ private float mScale;
+ private Path mFramePath;
+ private Rect mSrcRect;
+ private RectF mDstRect;
+ private RectF mFrameRect;
+ private boolean mPressed;
+
+ public static CircleFramedDrawable getInstance(Context context, Bitmap icon) {
+ Resources res = context.getResources();
+ float iconSize = res.getDimension(R.dimen.circle_avatar_size);
+ float strokeWidth = res.getDimension(R.dimen.circle_avatar_frame_stroke_width);
+ float shadowRadius = res.getDimension(R.dimen.circle_avatar_frame_shadow_radius);
+ int frameColor = res.getColor(R.color.circle_avatar_frame_color);
+ int frameShadowColor = res.getColor(R.color.circle_avatar_frame_shadow_color);
+ int highlightColor = res.getColor(R.color.circle_avatar_frame_pressed_color);
+
+ CircleFramedDrawable instance = new CircleFramedDrawable(icon,
+ (int) iconSize, frameColor, strokeWidth, frameShadowColor, shadowRadius,
+ highlightColor);
+ return instance;
+ }
+
+ public CircleFramedDrawable(Bitmap icon, int size,
+ int frameColor, float strokeWidth,
+ int frameShadowColor, float shadowRadius,
+ int highlightColor) {
+ super();
+ mSize = size;
+ mShadowRadius = shadowRadius;
+ mFrameColor = frameColor;
+ mFrameShadowColor = frameShadowColor;
+ mStrokeWidth = strokeWidth;
+ mHighlightColor = highlightColor;
+
+ mBitmap = Bitmap.createBitmap(mSize, mSize, Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(mBitmap);
+
+ final int width = icon.getWidth();
+ final int height = icon.getHeight();
+ final int square = Math.min(width, height);
+
+ final Rect cropRect = new Rect((width - square) / 2, (height - square) / 2, square, square);
+ final RectF circleRect = new RectF(0f, 0f, mSize, mSize);
+ circleRect.inset(mStrokeWidth / 2f, mStrokeWidth / 2f);
+ circleRect.inset(mShadowRadius, mShadowRadius);
+
+ final Path fillPath = new Path();
+ fillPath.addArc(circleRect, 0f, 360f);
+
+ canvas.drawColor(0, PorterDuff.Mode.CLEAR);
+
+ // opaque circle matte
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setColor(Color.BLACK);
+ mPaint.setStyle(Paint.Style.FILL);
+ canvas.drawPath(fillPath, mPaint);
+
+ // mask in the icon where the bitmap is opaque
+ mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
+ canvas.drawBitmap(icon, cropRect, circleRect, mPaint);
+
+ // prepare paint for frame drawing
+ mPaint.setXfermode(null);
+
+ mScale = 1f;
+
+ mSrcRect = new Rect(0, 0, mSize, mSize);
+ mDstRect = new RectF(0, 0, mSize, mSize);
+ mFrameRect = new RectF(mDstRect);
+ mFramePath = new Path();
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ // clear background
+ final float outside = Math.min(canvas.getWidth(), canvas.getHeight());
+ final float inside = mScale * outside;
+ final float pad = (outside - inside) / 2f;
+
+ mDstRect.set(pad, pad, outside - pad, outside - pad);
+ canvas.drawBitmap(mBitmap, mSrcRect, mDstRect, null);
+
+ mFrameRect.set(mDstRect);
+ mFrameRect.inset(mStrokeWidth / 2f, mStrokeWidth / 2f);
+ mFrameRect.inset(mShadowRadius, mShadowRadius);
+
+ mFramePath.reset();
+ mFramePath.addArc(mFrameRect, 0f, 360f);
+
+ // white frame
+ if (mPressed) {
+ mPaint.setStyle(Paint.Style.FILL);
+ mPaint.setColor(Color.argb((int) (0.33f * 255),
+ Color.red(mHighlightColor),
+ Color.green(mHighlightColor),
+ Color.blue(mHighlightColor)));
+ canvas.drawPath(mFramePath, mPaint);
+ }
+ mPaint.setStrokeWidth(mStrokeWidth);
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setColor(mPressed ? mHighlightColor : mFrameColor);
+ mPaint.setShadowLayer(mShadowRadius, 0f, 0f, mFrameShadowColor);
+ canvas.drawPath(mFramePath, mPaint);
+ }
+
+ public void setScale(float scale) {
+ mScale = scale;
+ }
+
+ public float getScale() {
+ return mScale;
+ }
+
+ public void setPressed(boolean pressed) {
+ mPressed = pressed;
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.TRANSLUCENT;
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter cf) {
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/users/UserPreference.java b/src/com/android/settings/users/UserPreference.java
index 6889747..2894bf9 100644
--- a/src/com/android/settings/users/UserPreference.java
+++ b/src/com/android/settings/users/UserPreference.java
@@ -57,7 +57,7 @@
mRestricted = ((UserManager) getContext().getSystemService(Context.USER_SERVICE))
.getUserInfo(mUserId).isRestricted();
}
- setSummary(mRestricted ? R.string.user_limited : R.string.user_trusted);
+ //setSummary(mRestricted ? R.string.user_limited : R.string.user_trusted);
}
@Override
diff --git a/src/com/android/settings/users/UserRestrictionsActivity.java b/src/com/android/settings/users/UserRestrictionsActivity.java
index 5f377f3..1a90a81 100644
--- a/src/com/android/settings/users/UserRestrictionsActivity.java
+++ b/src/com/android/settings/users/UserRestrictionsActivity.java
@@ -76,7 +76,7 @@
if (userId == -1) {
mNewUser = true;
mUserInfo = um.createUser(name, UserInfo.FLAG_RESTRICTED);
- um.setUserRestriction(UserManager.ALLOW_MODIFY_ACCOUNTS, false,
+ um.setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true,
new UserHandle(mUserInfo.id));
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index b6385c8..872d144 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -31,6 +31,7 @@
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
@@ -76,7 +77,8 @@
private static final String SAVE_ADDING_USER = "adding_user";
private static final String KEY_USER_NICKNAME = "user_nickname";
- private static final String KEY_USER_LIST = "user_list";
+ private static final String KEY_TRUSTED_USER_LIST = "trusted_user_list";
+ private static final String KEY_LIMITED_USER_LIST = "limited_user_list";
private static final String KEY_USER_ME = "user_me";
private static final String KEY_ADD_RESTRICTED_USER = "user_add_restricted";
private static final String KEY_ADD_TRUSTED_USER = "user_add_trusted";
@@ -106,7 +108,8 @@
R.drawable.avatar_default_8
};
- private PreferenceGroup mUserListCategory;
+ private PreferenceGroup mTrustedUserListCategory;
+ private PreferenceGroup mLimitedUserListCategory;
private Preference mMePreference;
private SelectableEditTextPreference mNicknamePreference;
private Preference mAddRestrictedUser;
@@ -118,7 +121,7 @@
private final Object mUserLock = new Object();
private UserManager mUserManager;
- private SparseArray<Drawable> mUserIcons = new SparseArray<Drawable>();
+ private SparseArray<Bitmap> mUserIcons = new SparseArray<Bitmap>();
private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
@@ -166,7 +169,8 @@
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
addPreferencesFromResource(R.xml.user_settings);
- mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
+ mTrustedUserListCategory = (PreferenceGroup) findPreference(KEY_TRUSTED_USER_LIST);
+ mLimitedUserListCategory = (PreferenceGroup) findPreference(KEY_LIMITED_USER_LIST);
mMePreference = (Preference) findPreference(KEY_USER_ME);
mMePreference.setOnPreferenceClickListener(this);
if (!mIsOwner) {
@@ -269,9 +273,8 @@
int myUserId = UserHandle.myUserId();
Bitmap b = mUserManager.getUserIcon(myUserId);
if (b != null) {
- Drawable d = new BitmapDrawable(b);
- mMePreference.setIcon(d);
- mUserIcons.put(myUserId, d);
+ mMePreference.setIcon(encircle(b));
+ mUserIcons.put(myUserId, b);
}
}
@@ -441,8 +444,10 @@
if (getActivity() == null) return;
List<UserInfo> users = mUserManager.getUsers(true);
- mUserListCategory.removeAll();
- mUserListCategory.setOrderingAsAdded(false);
+ mTrustedUserListCategory.removeAll();
+ mTrustedUserListCategory.setOrderingAsAdded(false);
+ mLimitedUserListCategory.removeAll();
+ mLimitedUserListCategory.setOrderingAsAdded(false);
final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
for (UserInfo user : users) {
@@ -456,19 +461,23 @@
UserHandle.myUserId() == UserHandle.USER_OWNER, this, this);
pref.setOnPreferenceClickListener(this);
pref.setKey("id=" + user.id);
- mUserListCategory.addPreference(pref);
+ if (user.isRestricted()) {
+ mLimitedUserListCategory.addPreference(pref);
+ } else {
+ mTrustedUserListCategory.addPreference(pref);
+ }
if (user.id == UserHandle.USER_OWNER) {
pref.setSummary(R.string.user_owner);
}
pref.setTitle(user.name);
-// if (!isInitialized(user)) {
-// pref.setSummary(R.string.user_summary_not_set_up);
-// }
+ if (!isInitialized(user)) {
+ pref.setSummary(R.string.user_summary_not_set_up);
+ }
}
if (user.iconPath != null) {
if (mUserIcons.get(user.id) == null) {
missingIcons.add(user.id);
- pref.setIcon(R.drawable.avatar_default_1);
+ pref.setIcon(encircle(R.drawable.avatar_default_1));
} else {
setPhotoId(pref, user);
}
@@ -480,9 +489,8 @@
false, null, null);
pref.setEnabled(false);
pref.setTitle(R.string.user_new_user_name);
- //pref.setSummary(R.string.user_adding_new_user);
- pref.setIcon(R.drawable.avatar_default_1);
- mUserListCategory.addPreference(pref);
+ pref.setIcon(encircle(R.drawable.avatar_default_1));
+ mTrustedUserListCategory.addPreference(pref);
}
getActivity().invalidateOptionsMenu();
@@ -490,6 +498,9 @@
if (missingIcons.size() > 0) {
loadIconsAsync(missingIcons);
}
+ boolean moreUsers = mUserManager.getMaxSupportedUsers() > users.size();
+ mAddRestrictedUser.setEnabled(moreUsers);
+ mAddTrustedUser.setEnabled(moreUsers);
}
private void loadIconsAsync(List<Integer> missingIcons) {
@@ -504,8 +515,7 @@
protected Void doInBackground(List<Integer>... values) {
for (int userId : values[0]) {
Bitmap bitmap = mUserManager.getUserIcon(userId);
- Drawable d = new BitmapDrawable(resources, bitmap);
- mUserIcons.append(userId, d);
+ mUserIcons.append(userId, bitmap);
}
return null;
}
@@ -533,9 +543,9 @@
}
private void setPhotoId(Preference pref, UserInfo user) {
- Drawable d = mUserIcons.get(user.id); // UserUtils.getUserIcon(mUserManager, user);
- if (d != null) {
- pref.setIcon(d);
+ Bitmap bitmap = mUserIcons.get(user.id); // UserUtils.getUserIcon(mUserManager, user);
+ if (bitmap != null) {
+ pref.setIcon(encircle(bitmap));
}
}
@@ -591,6 +601,16 @@
return (user.flags & UserInfo.FLAG_INITIALIZED) != 0;
}
+ private Drawable encircle(int iconResId) {
+ Bitmap icon = BitmapFactory.decodeResource(getResources(), iconResId);
+ return encircle(icon);
+ }
+
+ private Drawable encircle(Bitmap icon) {
+ Drawable circled = CircleFramedDrawable.getInstance(getActivity(), icon);
+ return circled;
+ }
+
@Override
public void onClick(View v) {
if (v.getTag() instanceof UserPreference) {
diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
index ac9df9f..5d581d8 100644
--- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java
+++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
@@ -541,7 +541,7 @@
protected Boolean doInBackground(Void... args) {
final UserManager um =
(UserManager) context.getSystemService(Context.USER_SERVICE);
- if (um.isLocationSharingToggleAllowed()) {
+ if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
Settings.Secure.setLocationProviderEnabled(
resolver,
LocationManager.GPS_PROVIDER,
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 4b2a0c9..cf27dd5 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -953,7 +953,9 @@
if (button == WifiDialog.BUTTON_FORGET && mSelectedAccessPoint != null) {
forget();
} else if (button == WifiDialog.BUTTON_SUBMIT) {
- submit(mDialog.getController());
+ if (mDialog != null) {
+ submit(mDialog.getController());
+ }
}
}