diff options
Diffstat (limited to 'packages')
553 files changed, 17565 insertions, 7336 deletions
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rAU/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..badad60 --- /dev/null +++ b/packages/BackupRestoreConfirmation/res/values-en-rAU/strings.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="backup_confirm_title" msgid="827563724209303345">"Full backup"</string> + <string name="restore_confirm_title" msgid="5469365809567486602">"Full restoration"</string> + <string name="backup_confirm_text" msgid="1878021282758896593">"A full backup of all data to a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the backup yourself, do not allow the operation to proceed."</string> + <string name="allow_backup_button_label" msgid="4217228747769644068">"Back up my data"</string> + <string name="deny_backup_button_label" msgid="6009119115581097708">"Do not back up"</string> + <string name="restore_confirm_text" msgid="7499866728030461776">"A full restore of all data from a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the restore yourself, do not allow the operation to proceed. This will replace any data currently on the device!"</string> + <string name="allow_restore_button_label" msgid="3081286752277127827">"Restore my data"</string> + <string name="deny_restore_button_label" msgid="1724367334453104378">"Do not restore"</string> + <string name="current_password_text" msgid="8268189555578298067">"Please enter your current backup password below:"</string> + <string name="device_encryption_restore_text" msgid="1570864916855208992">"Please enter your device encryption password below."</string> + <string name="device_encryption_backup_text" msgid="5866590762672844664">"Please enter your device encryption password below. This will also be used to encrypt the backup archive."</string> + <string name="backup_enc_password_text" msgid="4981585714795233099">"Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:"</string> + <string name="backup_enc_password_optional" msgid="1350137345907579306">"If you wish to encrypt the full backup data, enter a password below:"</string> + <string name="backup_enc_password_required" msgid="7889652203371654149">"Since your device is encrypted, you are required to encrypt your backup. Please enter a password below:"</string> + <string name="restore_enc_password_text" msgid="6140898525580710823">"If the restore data is encrypted, please enter the password below:"</string> + <string name="toast_backup_started" msgid="550354281452756121">"Backup starting..."</string> + <string name="toast_backup_ended" msgid="3818080769548726424">"Backup finished"</string> + <string name="toast_restore_started" msgid="7881679218971277385">"Restoration starting..."</string> + <string name="toast_restore_ended" msgid="1764041639199696132">"Restoration ended"</string> + <string name="toast_timeout" msgid="5276598587087626877">"Operation timed out"</string> +</resources> diff --git a/packages/CaptivePortalLogin/res/values-af/strings.xml b/packages/CaptivePortalLogin/res/values-af/strings.xml index a543266..f36746a 100644 --- a/packages/CaptivePortalLogin/res/values-af/strings.xml +++ b/packages/CaptivePortalLogin/res/values-af/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortal-aanmelding"</string> <string name="action_use_network" msgid="6076184727448466030">"Gebruik hierdie netwerk nes dit is"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Moenie hierdie netwerk gebruik nie"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Meld aan by netwerk"</string> + <string name="action_bar_label" msgid="917235635415966620">"Meld by netwerk aan"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-am/strings.xml b/packages/CaptivePortalLogin/res/values-am/strings.xml index bfad2d1..d49e146 100644 --- a/packages/CaptivePortalLogin/res/values-am/strings.xml +++ b/packages/CaptivePortalLogin/res/values-am/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ይህን አውታረ መረብ እንዳለ ተጠቀምበት"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ይህን አውታረ መረብ አትጠቀምበት"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ወደ አውታረ መረብ በመለያ ይግቡ"</string> + <string name="action_bar_label" msgid="917235635415966620">"ወደ አውታረ መረብ በመለያ ይግቡ"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ar/strings.xml b/packages/CaptivePortalLogin/res/values-ar/strings.xml index cb2e484..a5150fd 100644 --- a/packages/CaptivePortalLogin/res/values-ar/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ar/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"استخدام هذه الشبكة كما هي"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"عدم استخدام هذه الشبكة"</string> - <string name="action_bar_label" msgid="2573986763322074279">"تسجيل الدخول إلى الشبكة"</string> + <string name="action_bar_label" msgid="917235635415966620">"تسجيل الدخول إلى الشبكة"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-bg/strings.xml b/packages/CaptivePortalLogin/res/values-bg/strings.xml index c56af54..372ce76 100644 --- a/packages/CaptivePortalLogin/res/values-bg/strings.xml +++ b/packages/CaptivePortalLogin/res/values-bg/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Директно използване на тази мрежа"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Без използване на тази мрежа"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Вход в мрежата"</string> + <string name="action_bar_label" msgid="917235635415966620">"Вход в мрежата"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml b/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml index 51a2b78..9d13c2d 100644 --- a/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml +++ b/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"যেভাবে আছে সেভাবেই এই নেটওয়ার্ক ব্যবহার করুন"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"এই নেটওয়ার্ক ব্যবহার করবেন না"</string> - <string name="action_bar_label" msgid="2573986763322074279">"নেটওয়ার্কে সাইন ইন করুন"</string> + <string name="action_bar_label" msgid="917235635415966620">"নেটওয়ার্কে সাইন ইন করুন"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ca/strings.xml b/packages/CaptivePortalLogin/res/values-ca/strings.xml index a26a11d..5b35fcb 100644 --- a/packages/CaptivePortalLogin/res/values-ca/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ca/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Fes servir aquesta xarxa tal com està."</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"No facis servir aquesta xarxa."</string> - <string name="action_bar_label" msgid="2573986763322074279">"Inicia la sessió a la xarxa."</string> + <string name="action_bar_label" msgid="917235635415966620">"Inicia la sessió a la xarxa"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-cs/strings.xml b/packages/CaptivePortalLogin/res/values-cs/strings.xml index a1639b8..f9309d0 100644 --- a/packages/CaptivePortalLogin/res/values-cs/strings.xml +++ b/packages/CaptivePortalLogin/res/values-cs/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Použít tuto síť tak, jak je"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Tuto síť nepoužívat"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Přihlásit se k síti"</string> + <string name="action_bar_label" msgid="917235635415966620">"Přihlásit se k síti"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-da/strings.xml b/packages/CaptivePortalLogin/res/values-da/strings.xml index a48eeac..0b24ea8 100644 --- a/packages/CaptivePortalLogin/res/values-da/strings.xml +++ b/packages/CaptivePortalLogin/res/values-da/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"Login til captive portal"</string> <string name="action_use_network" msgid="6076184727448466030">"Brug dette netværk, som det er"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Brug ikke dette netværk"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Login til netværk"</string> + <string name="action_bar_label" msgid="917235635415966620">"Log ind på netværk"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-de/strings.xml b/packages/CaptivePortalLogin/res/values-de/strings.xml index 86c8d1f..ac796da 100644 --- a/packages/CaptivePortalLogin/res/values-de/strings.xml +++ b/packages/CaptivePortalLogin/res/values-de/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Dieses Netzwerk im Istzustand verwenden"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Dieses Netzwerk nicht verwenden"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Im Netzwerk anmelden"</string> + <string name="action_bar_label" msgid="917235635415966620">"Im Netzwerk anmelden"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-el/strings.xml b/packages/CaptivePortalLogin/res/values-el/strings.xml index f9a5b0f..2a67af5 100644 --- a/packages/CaptivePortalLogin/res/values-el/strings.xml +++ b/packages/CaptivePortalLogin/res/values-el/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Χρήση αυτού του δικτύου ως έχει"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Να μη χρησιμοποιείται αυτό το δίκτυο"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Σύνδεση στο δίκτυο"</string> + <string name="action_bar_label" msgid="917235635415966620">"Σύνδεση στο δίκτυο"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml b/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..c1c03f8 --- /dev/null +++ b/packages/CaptivePortalLogin/res/values-en-rAU/strings.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> + <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string> + <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string> + <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string> +</resources> diff --git a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml index 687a14e..c1c03f8 100644 --- a/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml +++ b/packages/CaptivePortalLogin/res/values-en-rGB/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Sign-in to network"</string> + <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml index 687a14e..c1c03f8 100644 --- a/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-en-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Use this network as is"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Do not use this network"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Sign-in to network"</string> + <string name="action_bar_label" msgid="917235635415966620">"Sign in to network"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml index 2c2e882..6c116f9 100644 --- a/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml +++ b/packages/CaptivePortalLogin/res/values-es-rUS/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Usar esta red como está"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"No usar esta red"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Acceder a la red"</string> + <string name="action_bar_label" msgid="917235635415966620">"Acceder a la red"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-es/strings.xml b/packages/CaptivePortalLogin/res/values-es/strings.xml index 6ea2ab7..63ce6e3 100644 --- a/packages/CaptivePortalLogin/res/values-es/strings.xml +++ b/packages/CaptivePortalLogin/res/values-es/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta red tal cual"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"No utilizar esta red"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Iniciar sesión en red"</string> + <string name="action_bar_label" msgid="917235635415966620">"Iniciar sesión en la red"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml b/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml index 95c7eba..306e332 100644 --- a/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml +++ b/packages/CaptivePortalLogin/res/values-et-rEE/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Kasuta seda võrku olemasoleval kujul"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ära kasuta seda võrku"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Võrku sisselogimine"</string> + <string name="action_bar_label" msgid="917235635415966620">"Logi võrku sisse"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-eu-rES/strings.xml b/packages/CaptivePortalLogin/res/values-eu-rES/strings.xml index 98ccb53..ed657aa 100644 --- a/packages/CaptivePortalLogin/res/values-eu-rES/strings.xml +++ b/packages/CaptivePortalLogin/res/values-eu-rES/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Erabili sare hau bere horretan"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ez erabili sare hau"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Hasi saioa sarean"</string> + <string name="action_bar_label" msgid="917235635415966620">"Hasi saioa sarean"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-fa/strings.xml b/packages/CaptivePortalLogin/res/values-fa/strings.xml index 36e53c1..b57e692 100644 --- a/packages/CaptivePortalLogin/res/values-fa/strings.xml +++ b/packages/CaptivePortalLogin/res/values-fa/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"از این شبکه همانطور که هست استفاده شود"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"از این شبکه استفاده نشود"</string> - <string name="action_bar_label" msgid="2573986763322074279">"وارد شدن به سیستم شبکه"</string> + <string name="action_bar_label" msgid="917235635415966620">"ورود به سیستم شبکه"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-fi/strings.xml b/packages/CaptivePortalLogin/res/values-fi/strings.xml index fb44d99..1d48d60 100644 --- a/packages/CaptivePortalLogin/res/values-fi/strings.xml +++ b/packages/CaptivePortalLogin/res/values-fi/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Käytä tätä verkkoa sellaisenaan"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Älä käytä tätä verkkoa"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Kirjaudu verkkoon"</string> + <string name="action_bar_label" msgid="917235635415966620">"Kirjaudu verkkoon"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml index 7ef7449..535a9cf 100644 --- a/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml +++ b/packages/CaptivePortalLogin/res/values-fr-rCA/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utiliser ce réseau tel quel"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne pas utiliser ce réseau"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Connectez-vous au réseau"</string> + <string name="action_bar_label" msgid="917235635415966620">"Connectez-vous au réseau"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-fr/strings.xml b/packages/CaptivePortalLogin/res/values-fr/strings.xml index b8cb9d2..d323b28 100644 --- a/packages/CaptivePortalLogin/res/values-fr/strings.xml +++ b/packages/CaptivePortalLogin/res/values-fr/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utiliser ce réseau tel quel"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne pas utiliser ce réseau"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Se connecter au réseau"</string> + <string name="action_bar_label" msgid="917235635415966620">"Se connecter au réseau"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-gl-rES/strings.xml b/packages/CaptivePortalLogin/res/values-gl-rES/strings.xml index 0c967d5..a5a603f 100644 --- a/packages/CaptivePortalLogin/res/values-gl-rES/strings.xml +++ b/packages/CaptivePortalLogin/res/values-gl-rES/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta rede tal como está"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Non utilizar esta rede"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Inicia sesión na rede"</string> + <string name="action_bar_label" msgid="917235635415966620">"Inicia sesión na rede"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-hi/strings.xml b/packages/CaptivePortalLogin/res/values-hi/strings.xml index 2bf4a07..013f511 100644 --- a/packages/CaptivePortalLogin/res/values-hi/strings.xml +++ b/packages/CaptivePortalLogin/res/values-hi/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"इस नेटवर्क का उपयोग जैसा है वैसा ही करें"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"इस नेटवर्क का उपयोग न करें"</string> - <string name="action_bar_label" msgid="2573986763322074279">"नेटवर्क में प्रवेश करें"</string> + <string name="action_bar_label" msgid="917235635415966620">"नेटवर्क में प्रवेश करें"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-hr/strings.xml b/packages/CaptivePortalLogin/res/values-hr/strings.xml index 1a51195..f2b2e75 100644 --- a/packages/CaptivePortalLogin/res/values-hr/strings.xml +++ b/packages/CaptivePortalLogin/res/values-hr/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Upotrebljavaj ovu mrežu u zatečenom stanju"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne upotrebljavaj ovu mrežu"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Prijavi se na mrežu"</string> + <string name="action_bar_label" msgid="917235635415966620">"Prijava na mrežu"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-hu/strings.xml b/packages/CaptivePortalLogin/res/values-hu/strings.xml index ea3a66b..26d3c87 100644 --- a/packages/CaptivePortalLogin/res/values-hu/strings.xml +++ b/packages/CaptivePortalLogin/res/values-hu/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Hálózat használata jelen állapotában"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne használja ezt a hálózatot"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Bejelentkezés a hálózatba"</string> + <string name="action_bar_label" msgid="917235635415966620">"Bejelentkezés a hálózatba"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml b/packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml index 381b53d..570b927 100644 --- a/packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml +++ b/packages/CaptivePortalLogin/res/values-hy-rAM/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Օգտագործել այս ցանցն ինչպես կա"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Չօգտագործել այս ցանցը"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Մուտք գործել ցանց"</string> + <string name="action_bar_label" msgid="917235635415966620">"Մուտք գործել ցանց"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-in/strings.xml b/packages/CaptivePortalLogin/res/values-in/strings.xml index 20a15ca..196d327 100644 --- a/packages/CaptivePortalLogin/res/values-in/strings.xml +++ b/packages/CaptivePortalLogin/res/values-in/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Gunakan jaringan ini sebagaimana adanya"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan jaringan ini"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Masuk ke jaringan"</string> + <string name="action_bar_label" msgid="917235635415966620">"Masuk ke jaringan"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml b/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml index 127bb83..27dc12b 100644 --- a/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml +++ b/packages/CaptivePortalLogin/res/values-is-rIS/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Nota þetta net óbreytt"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ekki nota þetta net"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Skrá þig inn á netið"</string> + <string name="action_bar_label" msgid="917235635415966620">"Skrá inn á net"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-it/strings.xml b/packages/CaptivePortalLogin/res/values-it/strings.xml index 0c62b98..fc4fcd9 100644 --- a/packages/CaptivePortalLogin/res/values-it/strings.xml +++ b/packages/CaptivePortalLogin/res/values-it/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utilizza questa rete così com\'è"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Non utilizzare questa rete"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Accedi alla rete"</string> + <string name="action_bar_label" msgid="917235635415966620">"Accedi alla rete"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-iw/strings.xml b/packages/CaptivePortalLogin/res/values-iw/strings.xml index 9abfb61..c88dd0d 100644 --- a/packages/CaptivePortalLogin/res/values-iw/strings.xml +++ b/packages/CaptivePortalLogin/res/values-iw/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"השתמש ברשת זו כפי שהיא"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"אל תשתמש ברשת זו"</string> - <string name="action_bar_label" msgid="2573986763322074279">"היכנס לרשת"</string> + <string name="action_bar_label" msgid="917235635415966620">"היכנס לרשת"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ja/strings.xml b/packages/CaptivePortalLogin/res/values-ja/strings.xml index 1328011..15bbd4c 100644 --- a/packages/CaptivePortalLogin/res/values-ja/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ja/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"このネットワークをそのまま使用する"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"このネットワークを使用しない"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ネットワークにログインする"</string> + <string name="action_bar_label" msgid="917235635415966620">"ネットワークにログイン"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml b/packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml index a429669..5918628 100644 --- a/packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ka-rGE/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ამ ქსელის გამოყენება, როგორც არის"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ეს ქსელი არ გამოიყენო"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ქსელთან დაკავშირება"</string> + <string name="action_bar_label" msgid="917235635415966620">"ქსელში შესვლა"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml b/packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml index fcb6584..5e876a4 100644 --- a/packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml +++ b/packages/CaptivePortalLogin/res/values-kk-rKZ/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Осы желіні бар күйінде пайдалану"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Осы желіні пайдаланбау"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Желіге кіру"</string> + <string name="action_bar_label" msgid="917235635415966620">"Желіге кіру"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-km-rKH/strings.xml b/packages/CaptivePortalLogin/res/values-km-rKH/strings.xml index 8cdedd4..ae32c76 100644 --- a/packages/CaptivePortalLogin/res/values-km-rKH/strings.xml +++ b/packages/CaptivePortalLogin/res/values-km-rKH/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ប្រើបណ្ដាញនេះជា"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"កុំប្រើបណ្ដាញនេះ"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ចូលបណ្ដាញ"</string> + <string name="action_bar_label" msgid="917235635415966620">"ចូលទៅបណ្ដាញ"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml index 070ba52..af7eeaf 100644 --- a/packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-kn-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ಈ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಹೀಗೆ ಬಳಸಿ"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ಈ ನೆಟ್ವರ್ಕ್ ಬಳಸಬೇಡಿ"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> + <string name="action_bar_label" msgid="917235635415966620">"ನೆಟ್ವರ್ಕ್ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ko/strings.xml b/packages/CaptivePortalLogin/res/values-ko/strings.xml index c72511b..c6c5239 100644 --- a/packages/CaptivePortalLogin/res/values-ko/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ko/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"현재 상태로 이 네트워크 사용"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"이 네트워크 사용 안함"</string> - <string name="action_bar_label" msgid="2573986763322074279">"네트워크에 로그인"</string> + <string name="action_bar_label" msgid="917235635415966620">"네트워크에 로그인"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml b/packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml index eb16c6c..c77e47c 100644 --- a/packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ky-rKG/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Бул тармак кандай болсо, ошондой колдонулсун"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Бул тармак колдонулбасын"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Тармакка кирүү"</string> + <string name="action_bar_label" msgid="917235635415966620">"Тармакка кирүү"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml b/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml index f2b637c..0cd0f4e 100644 --- a/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml +++ b/packages/CaptivePortalLogin/res/values-lo-rLA/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ໃຊ້ເຄືອຂ່າຍນີ້ຕາມທີ່ມັນເປັນ"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ບໍ່ໃຊ້ເຄືອຂ່າຍນີ້"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ເຂົ້າສູ່ລະບົບຫາເຄືອຂ່າຍ"</string> + <string name="action_bar_label" msgid="917235635415966620">"ລົງຊື່ເຂົ້າເຄືອຂ່າຍ"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-lt/strings.xml b/packages/CaptivePortalLogin/res/values-lt/strings.xml index 00ca28d..7ed7c5f 100644 --- a/packages/CaptivePortalLogin/res/values-lt/strings.xml +++ b/packages/CaptivePortalLogin/res/values-lt/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Naudoti šį tinklą tokį, koks yra"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Nenaudoti šio tinklo"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Prisijungti prie tinklo"</string> + <string name="action_bar_label" msgid="917235635415966620">"Prisijungti prie tinklo"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-lv/strings.xml b/packages/CaptivePortalLogin/res/values-lv/strings.xml index 0912497..bb8b00b 100644 --- a/packages/CaptivePortalLogin/res/values-lv/strings.xml +++ b/packages/CaptivePortalLogin/res/values-lv/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Izmantot tīklu ar pašreizējiem iestatījumiem"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Neizmantot šo tīklu"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Pierakstīties tīklā"</string> + <string name="action_bar_label" msgid="917235635415966620">"Pierakstīties tīklā"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml b/packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml index 5fd27a2..db0dd17 100644 --- a/packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml +++ b/packages/CaptivePortalLogin/res/values-mk-rMK/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Користи ја мрежата во оваа состојба"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Не ја користи мрежата"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Пријави се на мрежа"</string> + <string name="action_bar_label" msgid="917235635415966620">"Најавете се на мрежа"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml index ff7c6cc..bd1ac2d 100644 --- a/packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ml-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ഈ നെറ്റ്വർക്ക് മാറ്റമൊന്നും വരുത്താതെ ഉപയോഗിക്കുക"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ഈ നെറ്റ്വർക്ക് ഉപയോഗിക്കരുത്"</string> - <string name="action_bar_label" msgid="2573986763322074279">"നെറ്റ്വർക്കിൽ സൈൻ ഇൻ ചെയ്യുക"</string> + <string name="action_bar_label" msgid="917235635415966620">"നെറ്റ്വർക്കിൽ സൈൻ ഇൻ ചെയ്യുക"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml b/packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml index 5ce9e7e..ad9f68b 100644 --- a/packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-mn-rMN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Энэ сүлжээг ашиглана уу"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Энэ сүлжээг бүү ашиглана уу"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Сүлжээнд нэвтрэх"</string> + <string name="action_bar_label" msgid="917235635415966620">"Сүлжээнд нэвтэрнэ үү"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml index 082e7ad..6ed7679 100644 --- a/packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-mr-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"हे नेटवर्क जसेच्या तसे वापरा"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"हे नेटवर्क वापरू नका"</string> - <string name="action_bar_label" msgid="2573986763322074279">"नेटवर्कवर साइन इन करा"</string> + <string name="action_bar_label" msgid="917235635415966620">"नेटवर्क मध्ये साइन इन करा"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml b/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml index f3d2918..91b2070 100644 --- a/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ms-rMY/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Gunakan rangkaian ini"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Jangan gunakan rangkaian ini"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Log masuk ke rangkaian"</string> + <string name="action_bar_label" msgid="917235635415966620">"Log masuk ke rangkaian"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml b/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml index cd90b38..b82ced3 100644 --- a/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml +++ b/packages/CaptivePortalLogin/res/values-my-rMM/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ဒီကွန်ရက်ကို လက်ရှိအတိုင်း သုံးရန်"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ဒီကွန်ရက်ကို မသုံးပါနှင့်"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ကွန်ရက်သို့ လက်မှတ်ထိုး ဝင်ရန်"</string> + <string name="action_bar_label" msgid="917235635415966620">"ကွန်ယက်သို့ လက်မှတ်ထိုးဝင်ရန်"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-nb/strings.xml b/packages/CaptivePortalLogin/res/values-nb/strings.xml index 8bdf95b..9e2664f 100644 --- a/packages/CaptivePortalLogin/res/values-nb/strings.xml +++ b/packages/CaptivePortalLogin/res/values-nb/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Bruk dette nettverket som det er"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ikke bruk dette nettverket"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Logg på nettverk"</string> + <string name="action_bar_label" msgid="917235635415966620">"Logg på nettverk"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml b/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml index 7fcaf07..ccae893 100644 --- a/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ne-rNP/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"यो सञ्जाल जस्तो छ प्रयोग गर्नुहोस्"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"यो सञ्जाल प्रयोग नगर्नुहोस्"</string> - <string name="action_bar_label" msgid="2573986763322074279">"सञ्जालमा साइन इन गर्नुहोस्"</string> + <string name="action_bar_label" msgid="917235635415966620">"सञ्जालमा साइन इन गर्नुहोस्"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-nl/strings.xml b/packages/CaptivePortalLogin/res/values-nl/strings.xml index 063c91e..e4ecb00 100644 --- a/packages/CaptivePortalLogin/res/values-nl/strings.xml +++ b/packages/CaptivePortalLogin/res/values-nl/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Dit netwerk in de huidige staat gebruiken"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Dit netwerk niet gebruiken"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Inloggen bij netwerk"</string> + <string name="action_bar_label" msgid="917235635415966620">"Inloggen bij netwerk"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-pl/strings.xml b/packages/CaptivePortalLogin/res/values-pl/strings.xml index e1f6eb4..479301c 100644 --- a/packages/CaptivePortalLogin/res/values-pl/strings.xml +++ b/packages/CaptivePortalLogin/res/values-pl/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Używaj tej sieci tak jak jest"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Nie używaj tej sieci"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Zaloguj się w sieci"</string> + <string name="action_bar_label" msgid="917235635415966620">"Zaloguj się do sieci"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml index 1b07222..241d977 100644 --- a/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml +++ b/packages/CaptivePortalLogin/res/values-pt-rPT/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utilizar esta rede como está"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Não utilizar esta rede"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Início de sessão na rede"</string> + <string name="action_bar_label" msgid="917235635415966620">"Início de sessão na rede"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-pt/strings.xml b/packages/CaptivePortalLogin/res/values-pt/strings.xml index 4208912..b1e6ac9 100644 --- a/packages/CaptivePortalLogin/res/values-pt/strings.xml +++ b/packages/CaptivePortalLogin/res/values-pt/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Usar esta rede como está"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Não usar esta rede"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Fazer login na rede"</string> + <string name="action_bar_label" msgid="917235635415966620">"Fazer login na rede"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ro/strings.xml b/packages/CaptivePortalLogin/res/values-ro/strings.xml index 272967f..36a1516 100644 --- a/packages/CaptivePortalLogin/res/values-ro/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ro/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Utilizați această rețea în starea actuală"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Nu utilizați această rețea"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Conectați-vă la rețea"</string> + <string name="action_bar_label" msgid="917235635415966620">"Conectați-vă la rețea"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ru/strings.xml b/packages/CaptivePortalLogin/res/values-ru/strings.xml index 50e392c..5cb1d76 100644 --- a/packages/CaptivePortalLogin/res/values-ru/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ru/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Использовать эту сеть"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Не использовать эту сеть"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Регистрация в сети"</string> + <string name="action_bar_label" msgid="917235635415966620">"Регистрация в сети"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-si-rLK/strings.xml b/packages/CaptivePortalLogin/res/values-si-rLK/strings.xml index 7fb17b9..66efc2e 100644 --- a/packages/CaptivePortalLogin/res/values-si-rLK/strings.xml +++ b/packages/CaptivePortalLogin/res/values-si-rLK/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"මෙම ජාලය ලෙසම භාවිතා කරන්න"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"මෙම ජාලය භාවිතා කරන්න එපා"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ජාලයට පුරනය වන්න"</string> + <string name="action_bar_label" msgid="917235635415966620">"ජාලයට පුරනය වන්න"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-sk/strings.xml b/packages/CaptivePortalLogin/res/values-sk/strings.xml index 514b4c8..560bdc4 100644 --- a/packages/CaptivePortalLogin/res/values-sk/strings.xml +++ b/packages/CaptivePortalLogin/res/values-sk/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Použiť túto sieť tak, ako je"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Túto sieť nepoužívať"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Prihlásiť sa do siete"</string> + <string name="action_bar_label" msgid="917235635415966620">"Prihlásiť sa do siete"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-sl/strings.xml b/packages/CaptivePortalLogin/res/values-sl/strings.xml index 6748126..e633970 100644 --- a/packages/CaptivePortalLogin/res/values-sl/strings.xml +++ b/packages/CaptivePortalLogin/res/values-sl/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Uporabljajte to omrežje, »kakršno je«"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ne uporabljajte tega omrežja"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Prijavite se v omrežje"</string> + <string name="action_bar_label" msgid="917235635415966620">"Prijavite se v omrežje"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-sr/strings.xml b/packages/CaptivePortalLogin/res/values-sr/strings.xml index 1b86247..67f3b05 100644 --- a/packages/CaptivePortalLogin/res/values-sr/strings.xml +++ b/packages/CaptivePortalLogin/res/values-sr/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Користи ову мрежу такву каква је"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Не користи ову мрежу"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Пријави ме на мрежу"</string> + <string name="action_bar_label" msgid="917235635415966620">"Пријави ме на мрежу"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-sv/strings.xml b/packages/CaptivePortalLogin/res/values-sv/strings.xml index 5436c51..1de6630 100644 --- a/packages/CaptivePortalLogin/res/values-sv/strings.xml +++ b/packages/CaptivePortalLogin/res/values-sv/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Använd det här nätverket som det är"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Använd inte det här nätverket"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Logga in på nätverket"</string> + <string name="action_bar_label" msgid="917235635415966620">"Logga in på nätverket"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-sw/strings.xml b/packages/CaptivePortalLogin/res/values-sw/strings.xml index 460e66f..d4d22a6 100644 --- a/packages/CaptivePortalLogin/res/values-sw/strings.xml +++ b/packages/CaptivePortalLogin/res/values-sw/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Tumia mtandao huu jinsi ulivyo"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Usitumie mtandao huu"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Ingia katika mtandao"</string> + <string name="action_bar_label" msgid="917235635415966620">"Ingia katika mtandao"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml index d8626a4..b695c6c 100644 --- a/packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ta-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"இந்த நெட்வொர்க்கைப் பயன்படுத்து"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"இந்த நெட்வொர்க்கைப் பயன்படுத்த வேண்டாம்"</string> - <string name="action_bar_label" msgid="2573986763322074279">"நெட்வொர்க்கில் உள்நுழையவும்"</string> + <string name="action_bar_label" msgid="917235635415966620">"நெட்வொர்க்கில் உள்நுழையவும்"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-te-rIN/strings.xml b/packages/CaptivePortalLogin/res/values-te-rIN/strings.xml index 7cbd81b..798b16d 100644 --- a/packages/CaptivePortalLogin/res/values-te-rIN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-te-rIN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ఈ నెట్వర్క్ని యథావిధిగా ఉపయోగించు"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ఈ నెట్వర్క్ని ఉపయోగించవద్దు"</string> - <string name="action_bar_label" msgid="2573986763322074279">"నెట్వర్క్కి సైన్-ఇన్ చేయండి"</string> + <string name="action_bar_label" msgid="917235635415966620">"నెట్వర్క్కి సైన్ ఇన్ చేయండి"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-th/strings.xml b/packages/CaptivePortalLogin/res/values-th/strings.xml index be50b9a..1bfe45d 100644 --- a/packages/CaptivePortalLogin/res/values-th/strings.xml +++ b/packages/CaptivePortalLogin/res/values-th/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"ใช้เครือข่ายนี้ตามที่เป็นอยู่"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"ไม่ใช้เครือข่ายนี้"</string> - <string name="action_bar_label" msgid="2573986763322074279">"ลงชื่อเข้าใช้เครือข่าย"</string> + <string name="action_bar_label" msgid="917235635415966620">"ลงชื่อเข้าใช้เครือข่าย"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-tl/strings.xml b/packages/CaptivePortalLogin/res/values-tl/strings.xml index 76d0ff8..b16e2c1 100644 --- a/packages/CaptivePortalLogin/res/values-tl/strings.xml +++ b/packages/CaptivePortalLogin/res/values-tl/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Gamitin ang network na ito nang walang pagbabago"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Huwag gamitin ang network na ito"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Mag-sign in sa network"</string> + <string name="action_bar_label" msgid="917235635415966620">"Mag-sign in sa network"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-tr/strings.xml b/packages/CaptivePortalLogin/res/values-tr/strings.xml index 752e4af..bd4d0ec 100644 --- a/packages/CaptivePortalLogin/res/values-tr/strings.xml +++ b/packages/CaptivePortalLogin/res/values-tr/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Bu ağı olduğu gibi kullan"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Bu ağı kullanma"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Ağda oturum aç"</string> + <string name="action_bar_label" msgid="917235635415966620">"Ağda oturum açın"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-uk/strings.xml b/packages/CaptivePortalLogin/res/values-uk/strings.xml index 028a724..a39607c 100644 --- a/packages/CaptivePortalLogin/res/values-uk/strings.xml +++ b/packages/CaptivePortalLogin/res/values-uk/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Використовувати цю мережу як є"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Не використовувати цю мережу"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Увійти в мережу"</string> + <string name="action_bar_label" msgid="917235635415966620">"Увійти в мережу"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml b/packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml index af91d95..a5ba5cb 100644 --- a/packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml +++ b/packages/CaptivePortalLogin/res/values-ur-rPK/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"جوں کا توں اس نیٹ ورک کا استعمال کریں"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"اس نیٹ ورک کا استعمال نہ کریں"</string> - <string name="action_bar_label" msgid="2573986763322074279">"نیٹ ورک میں سائن ان کریں"</string> + <string name="action_bar_label" msgid="917235635415966620">"نیٹ ورک میں سائن ان کریں"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml b/packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml index 8fca0f0..11e9648 100644 --- a/packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml +++ b/packages/CaptivePortalLogin/res/values-uz-rUZ/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Ushbu tarmoqdan o‘z holicha foydalanilsin"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ushbu tarmoqdan foydalanilmasin"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Tarmoqqa kirish"</string> + <string name="action_bar_label" msgid="917235635415966620">"Tarmoqqa kirish"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-vi/strings.xml b/packages/CaptivePortalLogin/res/values-vi/strings.xml index 64d2ddf..1a76ceb 100644 --- a/packages/CaptivePortalLogin/res/values-vi/strings.xml +++ b/packages/CaptivePortalLogin/res/values-vi/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Sử dụng mạng này"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Không sử dụng mạng này"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Đăng nhập vào mạng"</string> + <string name="action_bar_label" msgid="917235635415966620">"Đăng nhập vào mạng"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml index 628d597..4de18b7 100644 --- a/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml +++ b/packages/CaptivePortalLogin/res/values-zh-rCN/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"直接使用此网络"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"不要使用此网络"</string> - <string name="action_bar_label" msgid="2573986763322074279">"登录到网络"</string> + <string name="action_bar_label" msgid="917235635415966620">"登录到网络"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml index 4ca9e0b..3d68c84 100644 --- a/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml +++ b/packages/CaptivePortalLogin/res/values-zh-rHK/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"依照現況使用這個網絡"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"不要使用這個網絡"</string> - <string name="action_bar_label" msgid="2573986763322074279">"登入網絡"</string> + <string name="action_bar_label" msgid="917235635415966620">"登入網絡"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml b/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml index cf498e4..95a5639 100644 --- a/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml +++ b/packages/CaptivePortalLogin/res/values-zh-rTW/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"依現況使用這個網路"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"不使用這個網路"</string> - <string name="action_bar_label" msgid="2573986763322074279">"登入網路"</string> + <string name="action_bar_label" msgid="917235635415966620">"登入網路"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values-zu/strings.xml b/packages/CaptivePortalLogin/res/values-zu/strings.xml index 180367c..aef043c 100644 --- a/packages/CaptivePortalLogin/res/values-zu/strings.xml +++ b/packages/CaptivePortalLogin/res/values-zu/strings.xml @@ -4,5 +4,5 @@ <string name="app_name" msgid="5934709770924185752">"I-CaptivePortalLogin"</string> <string name="action_use_network" msgid="6076184727448466030">"Sebenzisa le nethiwekhi njengoba injalo"</string> <string name="action_do_not_use_network" msgid="4577366536956516683">"Ungasebenzisi le nethiwekhi"</string> - <string name="action_bar_label" msgid="2573986763322074279">"Ngena ngemvume kunethiwekhi"</string> + <string name="action_bar_label" msgid="917235635415966620">"Ngena ngemvume kunethiwekhi"</string> </resources> diff --git a/packages/CaptivePortalLogin/res/values/strings.xml b/packages/CaptivePortalLogin/res/values/strings.xml index 1b0f0a4..8348be9 100644 --- a/packages/CaptivePortalLogin/res/values/strings.xml +++ b/packages/CaptivePortalLogin/res/values/strings.xml @@ -4,6 +4,6 @@ <string name="app_name">CaptivePortalLogin</string> <string name="action_use_network">Use this network as is</string> <string name="action_do_not_use_network">Do not use this network</string> - <string name="action_bar_label">Sign-in to network</string> + <string name="action_bar_label">Sign in to network</string> </resources> diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java index d898555..2a9f59f 100644 --- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java +++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java @@ -31,13 +31,11 @@ import android.net.Uri; import android.net.http.SslError; import android.os.Bundle; import android.provider.Settings; -import android.provider.Settings.Global; import android.util.ArrayMap; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.Window; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; diff --git a/packages/DefaultContainerService/res/values-en-rAU/strings.xml b/packages/DefaultContainerService/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..216d715 --- /dev/null +++ b/packages/DefaultContainerService/res/values-en-rAU/strings.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** +** Copyright 2008, 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. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="service_name" msgid="4841491635055379553">"Package Access Helper"</string> +</resources> diff --git a/packages/DocumentsUI/res/values-en-rAU/strings.xml b/packages/DocumentsUI/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..2bd5615 --- /dev/null +++ b/packages/DocumentsUI/res/values-en-rAU/strings.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="2783841764617238354">"Documents"</string> + <string name="title_open" msgid="4353228937663917801">"Open from"</string> + <string name="title_save" msgid="2433679664882857999">"Save to"</string> + <string name="menu_create_dir" msgid="5947289605844398389">"Create folder"</string> + <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string> + <string name="menu_list" msgid="7279285939892417279">"List view"</string> + <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string> + <string name="menu_search" msgid="3816712084502856974">"Search"</string> + <string name="menu_settings" msgid="6008033148948428823">"Settings"</string> + <string name="menu_open" msgid="432922957274920903">"Open"</string> + <string name="menu_save" msgid="2394743337684426338">"Save"</string> + <string name="menu_share" msgid="3075149983979628146">"Share"</string> + <string name="menu_delete" msgid="8138799623850614177">"Delete"</string> + <string name="menu_select" msgid="8711270657353563424">"Select \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string> + <string name="menu_advanced_show" product="nosdcard" msgid="4693652895715631401">"Show internal storage"</string> + <string name="menu_advanced_show" product="default" msgid="5792182900084144261">"Show SD card"</string> + <string name="menu_advanced_hide" product="nosdcard" msgid="4218809952721972589">"Hide internal storage"</string> + <string name="menu_advanced_hide" product="default" msgid="4845869969015718848">"Hide SD card"</string> + <string name="menu_file_size_show" msgid="3240323619260823076">"Show file size"</string> + <string name="menu_file_size_hide" msgid="8881975928502581042">"Hide file size"</string> + <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string> + <string name="sort_name" msgid="9183560467917256779">"By name"</string> + <string name="sort_date" msgid="586080032956151448">"By date modified"</string> + <string name="sort_size" msgid="3350681319735474741">"By size"</string> + <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string> + <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string> + <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string> + <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string> + <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string> + <string name="root_recent" msgid="4470053704320518133">"Recent"</string> + <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string> + <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string> + <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string> + <string name="root_type_device" msgid="7121342474653483538">"Devices"</string> + <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string> + <string name="empty" msgid="7858882803708117596">"No items"</string> + <string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string> + <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string> + <string name="share_via" msgid="8966594246261344259">"Share via"</string> +</resources> diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml index cabc956..487f5bd 100644 --- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml +++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml @@ -19,8 +19,8 @@ <string name="app_label" msgid="2783841764617238354">"Փաստաթղթեր"</string> <string name="title_open" msgid="4353228937663917801">"Բացել այստեղից"</string> <string name="title_save" msgid="2433679664882857999">"Պահել այստեղ"</string> - <string name="menu_create_dir" msgid="5947289605844398389">"Ստեղծել թղթապանակ"</string> - <string name="menu_grid" msgid="6878021334497835259">"Ցանցային տեսք"</string> + <string name="menu_create_dir" msgid="5947289605844398389">"Ստեղծել պանակ"</string> + <string name="menu_grid" msgid="6878021334497835259">"Ցանցի տեսք"</string> <string name="menu_list" msgid="7279285939892417279">"Ցուցակի տեսք"</string> <string name="menu_sort" msgid="7677740407158414452">"Դասավորել ըստ"</string> <string name="menu_search" msgid="3816712084502856974">"Որոնել"</string> @@ -43,7 +43,7 @@ <string name="drawer_open" msgid="4545466532430226949">"Ցույց տալ արմատները"</string> <string name="drawer_close" msgid="7602734368552123318">"Թաքցնել արմատները"</string> <string name="save_error" msgid="6167009778003223664">"Չհաջողվեց պահել փաստաթուղթը"</string> - <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել թղթապանակը"</string> + <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել պանակը"</string> <string name="query_error" msgid="1222448261663503501">"Փաստաթղթերին հարցում կատարելիս սխալ տեղի ունեցավ"</string> <string name="root_recent" msgid="4470053704320518133">"Վերջին"</string> <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ազատ է"</string> diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java index 4f52a03..4893652 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryView.java @@ -17,9 +17,6 @@ package com.android.documentsui; import android.content.Context; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; import android.util.AttributeSet; import android.widget.FrameLayout; diff --git a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java index 416aeb0..b43fedf 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java +++ b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java @@ -19,7 +19,6 @@ package com.android.documentsui; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; -import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.provider.DocumentsContract.Document; import android.util.TypedValue; @@ -269,7 +268,7 @@ public class IconUtils { public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) { final Drawable icon = context.getDrawable(drawableId); icon.mutate(); - icon.setTintList(context.getResources().getColorStateList(tintColorId)); + icon.setTintList(context.getColorStateList(tintColorId)); return icon; } diff --git a/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..f88eb9e --- /dev/null +++ b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="7123375275748530234">"External Storage"</string> + <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> +</resources> diff --git a/packages/FusedLocation/res/values-en-rAU/strings.xml b/packages/FusedLocation/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..0d2cccc --- /dev/null +++ b/packages/FusedLocation/res/values-en-rAU/strings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="5379477904423203699">"Fused Location"</string> +</resources> diff --git a/packages/InputDevices/res/values-en-rAU/strings.xml b/packages/InputDevices/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..d5797a0 --- /dev/null +++ b/packages/InputDevices/res/values-en-rAU/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="8016145283189546017">"Input Devices"</string> + <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string> + <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"English (UK)"</string> + <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"English (US)"</string> + <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"English (US), International style"</string> + <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"English (US), Colemak style"</string> + <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"English (US), Dvorak style"</string> + <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string> + <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string> + <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string> + <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string> + <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, Mac style"</string> + <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string> + <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string> + <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string> + <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string> + <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string> + <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string> + <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string> + <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string> + <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string> + <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string> + <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string> + <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string> + <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string> + <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string> + <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string> + <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string> + <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string> + <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string> + <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string> + <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string> + <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string> + <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string> + <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string> + <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string> + <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string> + <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string> + <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Latvian"</string> +</resources> diff --git a/packages/Keyguard/AndroidManifest.xml b/packages/Keyguard/AndroidManifest.xml index 352317d..e19246c 100644 --- a/packages/Keyguard/AndroidManifest.xml +++ b/packages/Keyguard/AndroidManifest.xml @@ -40,6 +40,7 @@ <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" /> <uses-permission android:name="android.permission.TRUST_LISTENER" /> + <uses-permission android:name="android.permission.USE_FINGERPRINT" /> <application android:label="@string/app_name" android:process="com.android.systemui" diff --git a/packages/Keyguard/res/layout/keyguard_password_view.xml b/packages/Keyguard/res/layout/keyguard_password_view.xml index cff2fc7..7dcaf6d 100644 --- a/packages/Keyguard/res/layout/keyguard_password_view.xml +++ b/packages/Keyguard/res/layout/keyguard_password_view.xml @@ -64,6 +64,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:src="@drawable/ic_lockscreen_ime" + android:contentDescription="@string/accessibility_ime_switch_button" android:clickable="true" android:padding="8dip" android:layout_gravity="end|center_vertical" diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml index 287d1e4..e4b543b 100644 --- a/packages/Keyguard/res/values-af/strings.xml +++ b/packages/Keyguard/res/values-af/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou tablet te ontsluit deur middel van \'n e-posrekening.\n\n Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur middel van \'n e-posrekening.\n\n Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Verkeerde SIM PIN-kode, jy sal nou jou diensverskaffer moet kontak om jou toestel te ontsluit."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Verkeerde SIM PIN-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende poging voordat jy jou diensverskaffer sal moet kontak om jou toestel te ontsluit."</item> - <item quantity="other" msgid="2215723361575359486">"Verkeerde SIM PIN-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende pogings."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Verkeerde SIM-PIN-kode. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor.</item> + <item quantity="one">Verkeerde SIM-PIN-kode. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> poging oor voordat jy jou diensverskaffer moet kontak om jou toestel te ontsluit.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is onbruikbaar. Kontak jou diensverskaffer."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Verkeerde SIM PUK-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende poging voordat SIM permanent onbruikbaar word."</item> - <item quantity="other" msgid="5477305226026342036">"Verkeerde SIM PUK-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende pogings voordat SIM permanent onbruikbaar word."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Verkeerde SIM-PUK-kode. Jy het <xliff:g id="NUMBER_1">%d</xliff:g> pogings oor voordat SIM permanent onbruikbaar word.</item> + <item quantity="one">Verkeerde SIM-PUK-kode. Jy het <xliff:g id="NUMBER_0">%d</xliff:g> poging oor voordat SIM permanent onbruikbaar word.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN-bewerking het misluk!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK-bewerking het misluk!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kode is aanvaar!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Geen diens nie."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knoppie vir wissel van invoermetode."</string> </resources> diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml index 3e7e997..c54656e 100644 --- a/packages/Keyguard/res/values-am/strings.xml +++ b/packages/Keyguard/res/values-am/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ጡባዊ ቱኮዎን እንዲከፍቱ ይጠየቃሉ።\n\n ከ<xliff:g id="NUMBER_2">%d</xliff:g> ከሰከንዶች በኋላ እንደገና ይሞክሩ።"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።\n\nእባክዎ ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ልክ ያልሆነ የሲም ኮድ። አሁን መሳሪያዎን ለማስከፈት ድምጸ ተያያዥ ሞደምዎን ማግኘት አለብዎ።"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ልክ ያልሆነ የሲም ፒን ኮድ፣ መሳሪያዎን ለማስከፈት ድምጸ ተያያዥ ሞደምዎን ማግኘት ግዴታዎ ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራ ይቀርዎታል።"</item> - <item quantity="other" msgid="2215723361575359486">"ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER">%d</xliff:g> ሙከራዎች ይቀሩዎታል።"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀርዎታል።</item> + <item quantity="other">ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀርዎታል።</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ሲሙ ጥቅም ላይ መዋል እይችልም። የእርስዎን ድምጸ ተያያዥ ሞደም ያግኙ።"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራ ይቀርዎታል።"</item> - <item quantity="other" msgid="5477305226026342036">"ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራዎች ይቀሩዎታል።"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀሩዎታል።</item> + <item quantity="other">ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER_1">%d</xliff:g> ሙከራዎች ይቀሩዎታል።</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"የሲም ፒን ክወና አልተሳካም!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"የሲም PUK ክወና አልተሳካም!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"ኮዱ ተቀባይነት አግኝቷል!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"ከአገልግሎት መስጫ ክልል ውጪ።"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"የግቤት ስልት አዝራር ቀይር"</string> </resources> diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml index 408096f..153f08e 100644 --- a/packages/Keyguard/res/values-ar/strings.xml +++ b/packages/Keyguard/res/values-ar/strings.xml @@ -34,16 +34,16 @@ <string name="keyguard_low_battery" msgid="8143808018719173859">"توصيل جهاز الشحن."</string> <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"اضغط على \"القائمة\" لإلغاء القفل."</string> <string name="keyguard_network_locked_message" msgid="9169717779058037168">"الشبكة مؤمّنة"</string> - <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ليست هناك بطاقة SIM"</string> - <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ليست هناك بطاقة SIM في الجهاز اللوحي."</string> - <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ليست هناك بطاقة SIM في الهاتف."</string> - <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"أدخل بطاقة SIM."</string> - <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string> - <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"بطاقة SIM غير قابلة للاستخدام."</string> - <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"تم تعطيل بطاقة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string> - <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"بطاقة SIM مؤمّنة."</string> - <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"بطاقة SIM مؤمّنة بكود PUK."</string> - <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"جارٍ إلغاء تأمين بطاقة SIM…"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ليست هناك شريحة SIM"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ليست هناك شريحة SIM في الجهاز اللوحي."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ليست هناك شريحة SIM في الهاتف."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"أدخل شريحة SIM."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"شريحة SIM مفقودة أو غير قابلة للقراءة. أدخل شريحة SIM."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"شريحة SIM غير قابلة للاستخدام."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"تم تعطيل شريحة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على شريحة SIM أخرى."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"شريحة SIM مؤمّنة."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"شريحة SIM مؤمّنة بكود PUK."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"جارٍ إلغاء تأمين شريحة SIM…"</string> <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string> <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string> <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"إلغاء القفل باستخدام رمز PIN."</string> @@ -67,14 +67,14 @@ <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"إدخال رقم التعريف الشخصي لبطاقة SIM التابعة للمشغل \"<xliff:g id="CARRIER">%1$s</xliff:g>\"."</string> <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخل رمز PIN"</string> <string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string> - <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"شريحة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string> <string name="kg_puk_enter_puk_hint_multi" msgid="363822494559783025">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" معطلة الآن. أدخل رمز PUK للمتابعة. واتصل بمشغل شبكة الجوال لمعرفة التفاصيل."</string> <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخال رمز رمز PIN المراد"</string> <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأكيد رمز رمز PIN المراد"</string> - <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين شريحة SIM…"</string> <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اكتب رمز PIN المكون من 4 إلى 8 أرقام."</string> <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK 8 أرقام أو أكثر."</string> - <string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل شريحة SIM نهائيًا."</string> <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"لا يتطابق رمزا رمز PIN"</string> <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string> <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رمز PIN بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string> @@ -95,17 +95,26 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستطالَب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، ويلزمك الاتصال الآن بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER">%d</xliff:g>) يتعين عليك بعدها الاتصال بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</item> - <item quantity="other" msgid="2215723361575359486">"رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، يتبقى لديك <xliff:g id="NUMBER">%d</xliff:g> من المحاولات."</item> - </plurals> - <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"بطاقة SIM غير صالحة للاستخدام. يُرجى الاتصال بمشغّل شبكة الجوّال."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"رمز PUK لبطاقة SIM غير صالح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER">%d</xliff:g>)، تصبح بعدها بطاقة SIM غير صالحة للاستخدام بشكل دائم."</item> - <item quantity="other" msgid="5477305226026342036">"رمز PUK لبطاقة SIM غير صالح، ويتبقى لديك <xliff:g id="NUMBER">%d</xliff:g> من المحاولات، تصبح بعدها بطاقة SIM غير صالحة للاستخدام بشكل دائم."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="zero">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ولم تتبق لديك أية محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>).</item> + <item quantity="two">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>).</item> + <item quantity="few">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات.</item> + <item quantity="many">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة.</item> + <item quantity="other">رمز رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات.</item> + <item quantity="one">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>) يتعين عليك بعدها الاتصال بمشغّل شبكة الجوّال لإلغاء قفل الجهاز.</item> + </plurals> + <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"شريحة SIM غير صالحة للاستخدام. يُرجى الاتصال بمشغّل شبكة الجوّال."</string> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="zero">رمز PUK لشريحة SIM غير صحيح، ولم تتبق لديك أية محاولات (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + <item quantity="two">رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك محاولتان (<xliff:g id="NUMBER_1">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + <item quantity="few">رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + <item quantity="many">رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> محاولة تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + <item quantity="other">رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + <item quantity="one">رمز PUK لشريحة SIM غير صحيح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>) تصبح بعدها شريحة SIM غير صالحة للاستخدام بشكل دائم.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"أخفقت عملية \"رقم التعريف الشخصي\" لبطاقة SIM!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"أخفقت عملية PUK لبطاقة SIM!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"تم قبول الرمز!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"لا تتوفر خدمة"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string> </resources> diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml index 6eb8a73..5dcb82c 100644 --- a/packages/Keyguard/res/values-bg/strings.xml +++ b/packages/Keyguard/res/values-bg/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите таблета посредством имейл адрес.\n\n Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите телефона посредством имейл адрес.\n\n Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неправилен ПИН код за SIM картата – сега трябва да се свържете с оператора си, за да отключите устройството."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Неправилен ПИН код за SIM картата – остава ви <xliff:g id="NUMBER">%d</xliff:g> опит, преди да трябва да се свържете с оператора си, за да отключите устройството."</item> - <item quantity="other" msgid="2215723361575359486">"Неправилен ПИН код за SIM картата – остават ви <xliff:g id="NUMBER">%d</xliff:g> опита."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Неправилен ПИН код за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита.</item> + <item quantity="one">Неправилен ПИН код за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди да трябва да се свържете с оператора си, за да отключите устройството.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM картата е неизползваема. Свържете се с оператора си."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Неправилен PUK код за SIM картата – остава ви <xliff:g id="NUMBER">%d</xliff:g> опит, преди SIM картата да стане неизползваема завинаги."</item> - <item quantity="other" msgid="5477305226026342036">"Неправилен PUK код за SIM картата – остават ви <xliff:g id="NUMBER">%d</xliff:g> опита, преди SIM картата да стане неизползваема завинаги."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Неправилен PUK код за SIM картата – остават ви <xliff:g id="NUMBER_1">%d</xliff:g> опита, преди тя да стане неизползваема завинаги.</item> + <item quantity="one">Неправилен PUK код за SIM картата – остава ви <xliff:g id="NUMBER_0">%d</xliff:g> опит, преди тя да стане неизползваема завинаги.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Операцията с ПИН кода за SIM картата не бе успешна!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Операцията с PUK кода за SIM картата не бе успешна!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Кодът е приет!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Няма покритие."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Бутон за превключване на метода на въвеждане."</string> </resources> diff --git a/packages/Keyguard/res/values-bn-rBD/strings.xml b/packages/Keyguard/res/values-bn-rBD/strings.xml index 35a5531..2b13a07 100644 --- a/packages/Keyguard/res/values-bn-rBD/strings.xml +++ b/packages/Keyguard/res/values-bn-rBD/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"আপনি আপনার আনলকের প্যাটার্ন আঁকার ক্ষেত্রে <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল করেছেন৷ আর <xliff:g id="NUMBER_1">%d</xliff:g> বার অসফল প্রচেষ্টা করা হলে আপনাকে একটি ইমেল অ্যাকাউন্ট মারফত আপনার ট্যাবলেট আনলক করতে বলা হবে৷\n\n <xliff:g id="NUMBER_2">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"আপনি আপনার আনলকের প্যাটার্ন আঁকার ক্ষেত্রে <xliff:g id="NUMBER_0">%d</xliff:g> বার ভুল করেছেন৷ আর <xliff:g id="NUMBER_1">%d</xliff:g> বার অসফল প্রচেষ্টা করা হলে আপনাকে একটি ইমেল অ্যাকাউন্ট মারফত আপনার ফোন আনলক করতে বলা হবে৷\n\n <xliff:g id="NUMBER_2">%d</xliff:g> সেকেন্ডের মধ্যে আবার চেষ্টা করুন৷"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ভুল সিম PIN কোড, আপনার ডিভাইসটি আনলক করতে এখন আপনাকে অবশ্যই আপনার ক্যারিয়ারের সাথে যোগাযোগ করতে হবে৷"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ভুল সিম PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে, তার পরে আপনার ডিভাইসটি আনলক করতে আপনাকে অবশ্যই আপনার ক্যারিয়ারের সাথে যোগাযোগ করতে হবে৷"</item> - <item quantity="other" msgid="2215723361575359486">"ভুল সিম PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">ভুল SIM PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item> + <item quantity="other">ভুল SIM PIN কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে৷</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIMটি ব্যবহারের অযোগ্য৷ আপনার ক্যারিয়ারের সাথে যোগাযোগ করুন৷"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ভুল সিম PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার সিম স্থায়ীভাবে অব্যবহারযোগ্য হবে৷"</item> - <item quantity="other" msgid="5477305226026342036">"ভুল সিম PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার সিম স্থায়ীভাবে অব্যবহারযোগ্য হবে৷"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">ভুল SIM PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার SIM স্থায়ীভাবে অব্যবহারযোগ্য হবে৷</item> + <item quantity="other">ভুল SIM PUK কোড, আপনার কাছে আর <xliff:g id="NUMBER_1">%d</xliff:g>টি প্রচেষ্টা বাকি রয়েছে এটির পরেই আপনার SIM স্থায়ীভাবে অব্যবহারযোগ্য হবে৷</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"সিম PIN ক্রিয়াকলাপটি ব্যর্থ হয়েছে!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"সিম PUK ক্রিয়াকলাপটি ব্যর্থ হয়েছে!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"কোড স্বীকৃত হয়েছে!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"কোনো পরিষেবা নেই৷"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ইনপুট পদ্ধতির বোতাম পরিবর্তন করুন৷"</string> </resources> diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml index 1e13d40..e675c7a 100644 --- a/packages/Keyguard/res/values-ca/strings.xml +++ b/packages/Keyguard/res/values-ca/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis la tauleta amb un compte de correu electrònic.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis el telèfon amb un compte de correu electrònic.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"El codi PIN de la SIM no és correcte. Has de contactar amb l\'operador de telefonia mòbil per desbloquejar el dispositiu."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"El codi PIN de la SIM no és correcte. Et queda <xliff:g id="NUMBER">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu."</item> - <item quantity="other" msgid="2215723361575359486">"El codi PIN de la SIM no és correcte. Et queden <xliff:g id="NUMBER">%d</xliff:g> intents."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">El codi PIN de la SIM no és correcte. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents.</item> + <item quantity="one">El codi PIN de la SIM no és correcte. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La SIM no es pot utilitzar. Contacta amb l\'operador de telefonia mòbil."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"El codi PUK de la SIM no és correcte. Et queda <xliff:g id="NUMBER">%d</xliff:g> intent; si no l\'encertes, la SIM no es podrà tornar a fer servir."</item> - <item quantity="other" msgid="5477305226026342036">"El codi PUK de la SIM no és correcte. Et queden <xliff:g id="NUMBER">%d</xliff:g> intents; si no l\'encertes, la SIM no es podrà tornar a fer servir."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">El codi PUK de la SIM no és correcte. Et queden <xliff:g id="NUMBER_1">%d</xliff:g> intents; si no l\'encertes, la SIM no es podrà tornar a fer servir.</item> + <item quantity="one">El codi PUK de la SIM no és correcte. Et queda <xliff:g id="NUMBER_0">%d</xliff:g> intent; si no l\'encertes, la SIM no es podrà tornar a fer servir.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Hi ha hagut un problema en l\'operació del PIN de la SIM."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Hi ha hagut un problema en l\'operació del PUK de la SIM."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"S\'ha acceptat el codi."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sense servei."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'entrada."</string> </resources> diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml index 138cec2..e1fa6f9 100644 --- a/packages/Keyguard/res/values-cs/strings.xml +++ b/packages/Keyguard/res/values-cs/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g>dalších neúspěšných pokusech budete požádáni o odemčení tabletu pomocí e-mailového účtu.\n\n Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech budete požádáni o odemčení telefonu pomocí e-mailového účtu.\n\n Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Zadali jste nesprávný kód PIN SIM karty. Nyní musíte za účelem odemknutí zařízení kontaktovat svého operátora."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER">%d</xliff:g> pokus, poté budete muset o odemknutí zařízení požádat svého operátora."</item> - <item quantity="other" msgid="2215723361575359486">"Zadali jste nesprávný kód PIN SIM karty. Počet zbývajících pokusů: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="few">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item> + <item quantity="many">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item> + <item quantity="other">Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusů.</item> + <item quantity="one">Zadali jste nesprávný PIN SIM karty. Zbývá <xliff:g id="NUMBER_0">%d</xliff:g> pokus, poté bude muset zařízení odemknout operátor.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartu nelze použít. Kontaktujte operátora."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER">%d</xliff:g> pokus, poté bude SIM karta natrvalo zablokována."</item> - <item quantity="other" msgid="5477305226026342036">"Zadali jste nesprávný kód PUK SIM karty. Počet zbývajících pokusů, po kterých bude SIM karta natrvalo zablokována: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="few">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusy, poté bude SIM karta natrvalo zablokována.</item> + <item quantity="many">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusu, poté bude SIM karta natrvalo zablokována.</item> + <item quantity="other">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_1">%d</xliff:g> pokusů, poté bude SIM karta natrvalo zablokována.</item> + <item quantity="one">Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER_0">%d</xliff:g> pokus, poté bude SIM karta natrvalo zablokována.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operace pomocí kódu PIN SIM karty se nezdařila!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operace pomocí kódu PUK SIM karty se nezdařila!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód byl přijat."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Žádný signál."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačítko přepnutí metody zadávání"</string> </resources> diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml index a640dc4..77e8ce3 100644 --- a/packages/Keyguard/res/values-da/strings.xml +++ b/packages/Keyguard/res/values-da/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg vil du blive bedt om at låse din tablet op ved hjælp af en e-mailkonto\n\n Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg til vil du blive bedt om at låse din telefon op ved hjælp af en e-mailkonto.\n\n Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Forkert pinkode til SIM-kort. Du skal nu kontakte dit mobilselskab for at låse din enhed op."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før du skal kontakte dit mobilselskab for at låse din enhed op."</item> - <item quantity="other" msgid="2215723361575359486">"Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item> + <item quantity="other">Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet er ubrugeligt. Kontakt dit mobilselskab."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt."</item> - <item quantity="other" msgid="5477305226026342036">"Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før dit SIM-kort bliver permanent ubrugeligt."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.</item> + <item quantity="other">Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Pinkoden til SIM-kortet blev afvist."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK-koden til SIM-kortet blev afvist."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden blev accepteret."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen dækning."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string> </resources> diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml index 466dbad..e21961d 100644 --- a/packages/Keyguard/res/values-de/strings.xml +++ b/packages/Keyguard/res/values-de/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Tablet mithilfe eines E-Mail-Kontos zu entsperren.\n\n Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Telefon mithilfe eines E-Mail-Kontos zu entsperren.\n\n Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Falscher PIN-Code der SIM-Karte. Bitte wenden Sie sich an Ihren Mobilfunkanbieter, damit er Ihr Gerät entsperrt."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuch, bevor Sie das Gerät von Ihrem Mobilfunkanbieter entsperren lassen müssen."</item> - <item quantity="other" msgid="2215723361575359486">"Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuche."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche.</item> + <item quantity="one">Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor Sie das Gerät von Ihrem Mobilfunkanbieter entsperren lassen müssen.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Die SIM-Karte kann nicht verwendet werden. Bitte wenden Sie sich an Ihren Mobilfunkanbieter."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuch, bevor Ihre SIM-Karte endgültig gesperrt wird."</item> - <item quantity="other" msgid="5477305226026342036">"Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuche, bevor Ihre SIM-Karte endgültig gesperrt wird."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER_1">%d</xliff:g> Versuche, bevor Ihre SIM-Karte endgültig gesperrt wird.</item> + <item quantity="one">Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER_0">%d</xliff:g> Versuch, bevor Ihre SIM-Karte endgültig gesperrt wird.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Fehler beim Entsperren mit der PIN der SIM-Karte"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Fehler beim Entsperren mithilfe des PUK-Codes der SIM-Karte"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code akzeptiert"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Kein Dienst"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string> </resources> diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml index 3cae49c..7084c84 100644 --- a/packages/Keyguard/res/values-el/strings.xml +++ b/packages/Keyguard/res/values-el/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε να συνδεθείτε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Εσφαλμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</item> - <item quantity="other" msgid="2215723361575359486">"Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν <xliff:g id="NUMBER">%d</xliff:g> προσπάθειες."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες. </item> + <item quantity="one">Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί. Επικοινωνήστε με τον πάροχο κινητής τηλεφωνίας σας."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER">%d</xliff:g> προσπάθεια προτού δεν είναι πλέον δυνατή η χρήση της κάρτας SIM."</item> - <item quantity="other" msgid="5477305226026342036">"Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν <xliff:g id="NUMBER">%d</xliff:g> προσπάθειες προτού δεν είναι πλέον δυνατή η χρήση της κάρτας SIM."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν άλλες <xliff:g id="NUMBER_1">%d</xliff:g> προσπάθειες προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> + <item quantity="one">Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER_0">%d</xliff:g> προσπάθεια προτού να μην είναι πλέον δυνατή η χρήση της κάρτας SIM.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Αποτυχία λειτουργίας κωδικού PIN κάρτας SIM!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Αποτυχία λειτουργίας κωδικού PUK κάρτας SIM!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Αποδεκτός κωδικός!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Καμία υπηρεσία."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string> </resources> diff --git a/packages/Keyguard/res/values-en-rAU/strings.xml b/packages/Keyguard/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..ee5da13 --- /dev/null +++ b/packages/Keyguard/res/values-en-rAU/strings.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* //device/apps/common/assets/res/any/strings.xml +** +** Copyright 2006, 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. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="719438068451601849">"Keyguard"</string> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string> + <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Type SIM PUK and new PIN code"</string> + <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK code"</string> + <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"New SIM PIN code"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Touch to type password"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Type password to unlock"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Type PIN to unlock"</string> + <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Incorrect PIN code."</string> + <string name="keyguard_charged" msgid="3272223906073492454">"Charged"</string> + <string name="keyguard_plugged_in" msgid="9087497435553252863">"Charging"</string> + <string name="keyguard_low_battery" msgid="8143808018719173859">"Connect your charger."</string> + <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Press Menu to unlock."</string> + <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Network locked"</string> + <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"No SIM card"</string> + <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No SIM card in tablet."</string> + <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No SIM card in phone."</string> + <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insert a SIM card."</string> + <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"The SIM card is missing or not readable. Insert a SIM card."</string> + <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Unusable SIM card."</string> + <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Your SIM card has been permanently disabled.\n Contact your wireless service provider for another SIM card."</string> + <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string> + <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string> + <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string> + <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string> + <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string> + <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string> + <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string> + <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string> + <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string> + <string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN area"</string> + <string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN area"</string> + <string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK area"</string> + <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"Next alarm set for <xliff:g id="ALARM">%1$s</xliff:g>"</string> + <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string> + <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string> + <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string> + <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Wrong Pattern"</string> + <string name="kg_wrong_password" msgid="2333281762128113157">"Wrong Password"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Wrong PIN"</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Draw your pattern"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Enter SIM PIN"</string> + <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"Enter SIM PIN for \"<xliff:g id="CARRIER">%1$s</xliff:g>\""</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Enter PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Enter Password"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string> + <string name="kg_puk_enter_puk_hint_multi" msgid="363822494559783025">"SIM \"<xliff:g id="CARRIER">%1$s</xliff:g>\" is now disabled. Enter PUK code to continue. Contact operator for details."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string> + <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string> + <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string> + <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string> + <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string> + <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string> + <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="8774056606869646621">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, this tablet will be reset, which will delete all its data."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="1843331751334128428">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, this phone will be reset, which will delete all its data."</string> + <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="258925501999698032">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. This tablet will be reset, which will delete all its data."</string> + <string name="kg_failed_attempts_now_wiping" product="default" msgid="7154028908459817066">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. This phone will be reset, which will delete all its data."</string> + <string name="kg_failed_attempts_almost_at_erase_user" product="tablet" msgid="6159955099372112688">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, this user will be removed, which will delete all user data."</string> + <string name="kg_failed_attempts_almost_at_erase_user" product="default" msgid="6945823186629369880">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, this user will be removed, which will delete all user data."</string> + <string name="kg_failed_attempts_now_erasing_user" product="tablet" msgid="3963486905355778734">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. This user will be removed, which will delete all user data."</string> + <string name="kg_failed_attempts_now_erasing_user" product="default" msgid="7729009752252111673">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. This user will be removed, which will delete all user data."</string> + <string name="kg_failed_attempts_almost_at_erase_profile" product="tablet" msgid="4621778507387853694">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the work profile will be removed, which will delete all profile data."</string> + <string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="6853071165802933545">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the work profile will be removed, which will delete all profile data."</string> + <string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4686386497449912146">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string> + <string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The work profile will be removed, which will delete all profile data."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> + <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> + <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> + </plurals> + <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is unusable. Contact your operator."</string> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item> + <item quantity="one">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item> + </plurals> + <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN operation failed!"</string> + <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK operation failed!"</string> + <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepted"</string> + <string name="keyguard_carrier_default" msgid="8700650403054042153">"No service."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string> +</resources> diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml index ab4f7e8..ee5da13 100644 --- a/packages/Keyguard/res/values-en-rGB/strings.xml +++ b/packages/Keyguard/res/values-en-rGB/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before you must contact your carrier to unlock your device."</item> - <item quantity="other" msgid="2215723361575359486">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> + <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is unusable. Contact your operator."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item> - <item quantity="other" msgid="5477305226026342036">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item> + <item quantity="one">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN operation failed!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK operation failed!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepted"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"No service."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string> </resources> diff --git a/packages/Keyguard/res/values-en-rIN/strings.xml b/packages/Keyguard/res/values-en-rIN/strings.xml index ab4f7e8..ee5da13 100644 --- a/packages/Keyguard/res/values-en-rIN/strings.xml +++ b/packages/Keyguard/res/values-en-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before you must contact your carrier to unlock your device."</item> - <item quantity="other" msgid="2215723361575359486">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts.</item> + <item quantity="one">Incorrect SIM PIN code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before you must contact your operator to unlock your device.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is unusable. Contact your operator."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item> - <item quantity="other" msgid="5477305226026342036">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_1">%d</xliff:g> remaining attempts before SIM becomes permanently unusable.</item> + <item quantity="one">Incorrect SIM PUK code, you have <xliff:g id="NUMBER_0">%d</xliff:g> remaining attempt before SIM becomes permanently unusable.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN operation failed!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK operation failed!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepted"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"No service."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string> </resources> diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml index 8afbd13..b34dd05 100644 --- a/packages/Keyguard/res/values-es-rUS/strings.xml +++ b/packages/Keyguard/res/values-es-rUS/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu tablet mediante el uso de una cuenta de correo.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"El código PIN de la tarjeta SIM es incorrecto. Debes comunicarte con el proveedor para desbloquear el dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"El código PIN de la tarjeta SIM es incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento antes de que debas comunicarte con el proveedor para desbloquear el dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"El código PIN de la tarjeta SIM es incorrecto. Te quedan <xliff:g id="NUMBER">%d</xliff:g> intentos."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">El código PIN de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_1">%d</xliff:g> intentos más.</item> + <item quantity="one">El código PIN de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_0">%d</xliff:g> intento más antes de que debas comunicarte con el proveedor para desbloquear el dispositivo.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La tarjeta SIM no se puede utilizar. Comunícate con el proveedor."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"El código PUK de la tarjeta SIM es incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento antes de que la tarjeta SIM quede inutilizable permanentemente."</item> - <item quantity="other" msgid="5477305226026342036">"El código PUK de la tarjeta SIM es incorrecto. Te quedan <xliff:g id="NUMBER">%d</xliff:g> intentos antes de que la tarjeta SIM quede inutilizable permanentemente."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">El código PUK de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_1">%d</xliff:g> intentos más antes de que la tarjeta SIM quede inutilizable de forma permanente.</item> + <item quantity="one">El código PUK de la tarjeta SIM es incorrecto. Tienes <xliff:g id="NUMBER_0">%d</xliff:g> intento más antes de que la tarjeta SIM quede inutilizable de forma permanente.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Error al desbloquear la tarjeta SIM con el PIN"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Error al desbloquear la tarjeta SIM con el PUK"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceptado"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sin servicio"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string> </resources> diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml index d8c548b..be3c113 100644 --- a/packages/Keyguard/res/values-es/strings.xml +++ b/packages/Keyguard/res/values-es/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el tablet.\n\n Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el teléfono.\n\n Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN de la tarjeta SIM incorrecto. Debes ponerte en contacto con tu operador para desbloquear el dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Código PIN de la tarjeta SIM incorrecto. Queda <xliff:g id="NUMBER">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"Código PIN de la tarjeta SIM incorrecto. Quedan <xliff:g id="NUMBER">%d</xliff:g> intentos."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Código PIN de la tarjeta SIM incorrecto. Te quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item> + <item quantity="one">Código PIN de la tarjeta SIM incorrecto. Te queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La tarjeta SIM no se puede utilizar. Ponte en contacto con tu operador."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Código PUK de la tarjeta SIM incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento para que la tarjeta SIM no se pueda utilizar de forma permanente."</item> - <item quantity="other" msgid="5477305226026342036">"Código PUK de la tarjeta SIM incorrecto. Quedan <xliff:g id="NUMBER">%d</xliff:g> intentos para que la tarjeta SIM no se pueda utilizar de forma permanente."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Código PUK de la tarjeta SIM incorrecto. Te quedan <xliff:g id="NUMBER_1">%d</xliff:g> intentos para que la tarjeta SIM no se pueda utilizar de forma permanente.</item> + <item quantity="one">Código PUK de la tarjeta SIM incorrecto. Te queda <xliff:g id="NUMBER_0">%d</xliff:g> intento para que la tarjeta SIM no se pueda utilizar de forma permanente.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Error al intentar desbloquear la tarjeta SIM con el código PIN"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Error al intentar desbloquear la tarjeta SIM con el código PUK"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceptado"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sin servicio"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string> </resources> diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et-rEE/strings.xml index 55e6a97..402fc14 100644 --- a/packages/Keyguard/res/values-et-rEE/strings.xml +++ b/packages/Keyguard/res/values-et-rEE/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Vale SIM-i PIN-kood, seadme avamiseks peate nüüd ühendust võtma oma operaatoriga."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Vale SIM-i PIN-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katse, enne kui peate seadme avamiseks operaatoriga ühendust võtma."</item> - <item quantity="other" msgid="2215723361575359486">"Vale SIM-i PIN-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katset."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Vale SIM-kaardi PIN-kood, teil on jäänud veel <xliff:g id="NUMBER_1">%d</xliff:g> katset.</item> + <item quantity="one">Vale SIM-kaardi PIN-kood, teil on jäänud veel <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui peate seadme avamiseks operaatoriga ühendust võtma.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM ei ole kasutatav. Võtke ühendust operaatoriga."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Vale SIM-i PUK-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katse, enne kui SIM püsivalt lukustatakse."</item> - <item quantity="other" msgid="5477305226026342036">"Vale SIM-i PUK-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katset, enne kui SIM püsivalt lukustatakse."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Vale SIM-kaardi PUK-kood, teil on jäänud veel <xliff:g id="NUMBER_1">%d</xliff:g> katset enne, kui SIM-kaart püsivalt lukustatakse.</item> + <item quantity="one">Vale SIM-kaardi PUK-kood, teil on jäänud veel <xliff:g id="NUMBER_0">%d</xliff:g> katse enne, kui SIM-kaart püsivalt lukustatakse.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-i PIN-koodi toiming ebaõnnestus."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-i PUK-koodi toiming ebaõnnestus."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kood on õige."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Teenus puudub."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Sisestusmeetodi vahetamise nupp."</string> </resources> diff --git a/packages/Keyguard/res/values-eu-rES/strings.xml b/packages/Keyguard/res/values-eu-rES/strings.xml index ba07523..86850bb 100644 --- a/packages/Keyguard/res/values-eu-rES/strings.xml +++ b/packages/Keyguard/res/values-eu-rES/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desblokeatzeko eredua oker marraztu duzu <xliff:g id="NUMBER_0">%d</xliff:g> aldiz. Beste <xliff:g id="NUMBER_1">%d</xliff:g> aldiz oker marrazten baduzu, tableta posta-kontu baten bidez desblokeatzeko eskatuko dizugu.\n\n Saiatu berriro <xliff:g id="NUMBER_2">%d</xliff:g> segundo barru."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desblokeatzeko eredua oker marraztu duzu <xliff:g id="NUMBER_0">%d</xliff:g> aldiz. Beste <xliff:g id="NUMBER_1">%d</xliff:g> aldiz oker marrazten baduzu, telefonoa posta-kontu baten bidez desblokeatzeko eskatuko dizugu.\n\n Saiatu berriro <xliff:g id="NUMBER_2">%d</xliff:g> segundo barru."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM txartelaren PIN kodea okerra da. Gailua desblokeatzeko, jarri operadorearekin harremanetan."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM txartelaren PIN kodea ez da zuzena; <xliff:g id="NUMBER">%d</xliff:g> saiakera geratzen zaizu. Saiakerak agortuz gero, operadoreari eskatu beharko diozu gailua desblokeatzeko."</item> - <item quantity="other" msgid="2215723361575359486">"SIM txartelaren PIN kodea ez da zuzena; <xliff:g id="NUMBER">%d</xliff:g> saiakera geratzen zaizkizu."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">SIM txartelaren PIN kodea okerra da. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu gailua desblokeatzeko.</item> + <item quantity="one">SIM txartelaren PIN kodea okerra da. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu gailua desblokeatzeko.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM txartela erabilgaitza da. Jarri operadorearekin harremanetan."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM txartelaren PUK kodea ez da zuzena; <xliff:g id="NUMBER">%d</xliff:g> saiakera geratzen zaizu SIM txartela betiko erabilgaitz geratu aurretik."</item> - <item quantity="other" msgid="5477305226026342036">"SIM txartelaren PUK kodea ez da zuzena; <xliff:g id="NUMBER">%d</xliff:g> saiakera geratzen zaizkizu SIM txartela betiko erabilgaitz geratu aurretik."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM txartelaren PUK kodea okerra da. <xliff:g id="NUMBER_1">%d</xliff:g> saiakera geratzen zaizkizu SIM txartela betiko erabilgaitz geratu aurretik.</item> + <item quantity="one">SIM txartelaren PUK kodea okerra da. <xliff:g id="NUMBER_0">%d</xliff:g> saiakera geratzen zaizu SIM txartela betiko erabilgaitz geratu aurretik.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM txartelaren PIN eragiketak huts egin du!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM txartelaren PUK eragiketak huts egin du!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kodea onartu da!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Zerbitzurik gabe."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Idazketa-metodoa aldatzeko botoia."</string> </resources> diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml index c41a3d6..367c411 100644 --- a/packages/Keyguard/res/values-fa/strings.xml +++ b/packages/Keyguard/res/values-fa/strings.xml @@ -30,7 +30,7 @@ <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"برای بازکردن قفل، پین را تایپ کنید"</string> <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"پین کد اشتباه است."</string> <string name="keyguard_charged" msgid="3272223906073492454">"شارژ شد"</string> - <string name="keyguard_plugged_in" msgid="9087497435553252863">"شارژ کردن"</string> + <string name="keyguard_plugged_in" msgid="9087497435553252863">"در حال شارژ شدن"</string> <string name="keyguard_low_battery" msgid="8143808018719173859">"شارژر خود را وصل کنید."</string> <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"برای بازگشایی قفل روی منو فشار دهید."</string> <string name="keyguard_network_locked_message" msgid="9169717779058037168">"شبکه قفل شد"</string> @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"کد پین سیم کارت اشتباه است، اکنون برای گشودن قفل دستگاهتان باید با شرکت مخابراتی تماس بگیرید."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"کد پین سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر میتوانید تلاش کنید و پس از آن برای گشودن قفل دستگاهتان باید با شرکت مخابراتی تماس بگیرید."</item> - <item quantity="other" msgid="2215723361575359486">"کد پین سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر میتوانید تلاش کنید."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">کد پین سیمکارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر میتوانید تلاش کنید.</item> + <item quantity="other">کد پین سیمکارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر میتوانید تلاش کنید.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"سیم کارت غیر قابل استفاده است. با شرکت مخابراتیتان تماس بگیرید."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"کد PUK سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر میتوانید تلاش کنید و پس از آن سیم کارت به صورت دائم غیر قابل استفاده میشود."</item> - <item quantity="other" msgid="5477305226026342036">"کد PUK سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر میتوانید تلاش کنید و پس از آن سیم کارت به طور دائم غیر قابل استفاده میشود."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">کد PUK سیمکارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر میتوانید تلاش کنید و پس از آن سیمکارت به صورت دائم غیر قابل استفاده میشود.</item> + <item quantity="other">کد PUK سیمکارت اشتباه است، <xliff:g id="NUMBER_1">%d</xliff:g> بار دیگر میتوانید تلاش کنید و پس از آن سیمکارت به صورت دائم غیر قابل استفاده میشود.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"عملیات پین سیم کارت ناموفق بود!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"عملیات PUK سیم کارت ناموفق بود!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"کد پذیرفته شد!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"خدماتی وجود ندارد."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"کلید تغییر روش ورود متن."</string> </resources> diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml index 8485cbe..68f7016 100644 --- a/packages/Keyguard/res/values-fi/strings.xml +++ b/packages/Keyguard/res/values-fi/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan tablet-laitteesi lukitus sähköpostitilin avulla.\n\n Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan puhelimesi lukitus sähköpostitilin avulla.\n\n Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Virheellinen SIM-kortin PIN-koodi. Sinun on nyt otettava yhteys operaattoriin laitteen lukituksen avaamiseksi."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritys jäljellä, ennen kuin sinun on otettava yhteys operaattoriin laitteen lukituksen avaamiseksi."</item> - <item quantity="other" msgid="2215723361575359486">"Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritystä jäljellä."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä.</item> + <item quantity="one">Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER_0">%d</xliff:g> yritys jäljellä, ennen kuin sinun on otettava yhteyttä operaattoriin laitteen lukituksen avaamiseksi.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortti on käyttökelvoton. Ota yhteys operaattoriin."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton."</item> - <item quantity="other" msgid="5477305226026342036">"Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER_1">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton.</item> + <item quantity="one">Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER_0">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-kortin PIN-toiminto epäonnistui!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-kortin PUK-toiminto epäonnistui!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Koodi hyväksytty!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ei yhteyttä."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Syöttötavan vaihtopainike."</string> </resources> diff --git a/packages/Keyguard/res/values-fr-rCA/strings.xml b/packages/Keyguard/res/values-fr-rCA/strings.xml index e45f7f4..2c24f7a 100644 --- a/packages/Keyguard/res/values-fr-rCA/strings.xml +++ b/packages/Keyguard/res/values-fr-rCA/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"NIP de carte SIM incorrect. Vous devez maintenant communiquer avec votre fournisseur de services pour déverrouiller votre appareil."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"NIP de carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative. Après cela, vous devrez communiquer avec votre fournisseur de services pour déverrouiller votre appareil."</item> - <item quantity="other" msgid="2215723361575359486">"NIP de carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative(s)."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Le NIP de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item> + <item quantity="other">Le NIP de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La carte SIM est inutilisable. Communiquez avec votre fournisseur de services."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Code PUK de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM devienne définitivement inutilisable."</item> - <item quantity="other" msgid="5477305226026342036">"Code PUK de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative(s) avant que votre carte SIM devienne définitivement inutilisable."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Le code PUK de la carte SIM est incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM devienne définitivement inutilisable.</item> + <item quantity="other">Le code PUK de la carte SIM est incorrect. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM devienne définitivement inutilisable.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Le déverrouillage par NIP de la carte SIM a échoué."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Le déverrouillage de la carte SIM par code PUK a échoué."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepté"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aucun service"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string> </resources> diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml index a87da9a..77a2d06 100644 --- a/packages/Keyguard/res/values-fr/strings.xml +++ b/packages/Keyguard/res/values-fr/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Code PIN de la carte SIM incorrect. Vous devez désormais contacter votre opérateur pour déverrouiller votre appareil."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative. Après cela, vous devrez contacter votre opérateur pour déverrouiller votre appareil."</item> - <item quantity="other" msgid="2215723361575359486">"Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentatives."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Code PIN de la carte SIM erroné. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative.</item> + <item quantity="other">Code PIN de la carte SIM erroné. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La carte SIM est inutilisable. Veuillez contacter votre opérateur."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM ne devienne définitivement inutilisable."</item> - <item quantity="other" msgid="5477305226026342036">"Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentatives avant que votre carte SIM ne devienne définitivement inutilisable."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Clé PUK de la carte SIM erronée. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentative avant que votre carte SIM ne devienne définitivement inutilisable.</item> + <item quantity="other">Clé PUK de la carte SIM erronée. Il vous reste <xliff:g id="NUMBER_1">%d</xliff:g> tentatives avant que votre carte SIM ne devienne définitivement inutilisable.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Échec du déverrouillage à l\'aide du code PIN de la carte SIM."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Échec du déverrouillage à l\'aide de la clé PUK de la carte SIM."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepté."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aucun service"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string> </resources> diff --git a/packages/Keyguard/res/values-gl-rES/strings.xml b/packages/Keyguard/res/values-gl-rES/strings.xml index 1a5595a..8e8f5c5 100644 --- a/packages/Keyguard/res/values-gl-rES/strings.xml +++ b/packages/Keyguard/res/values-gl-rES/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Debuxaches o padrón de desbloqueo incorrectamente <xliff:g id="NUMBER_0">%d</xliff:g> veces. Se realizas <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos máis, terás que desbloquear o tablet a través dunha unha conta de correo electrónico.\n\n Téntao de novo dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Debuxaches o padrón de desbloqueo incorrectamente <xliff:g id="NUMBER_0">%d</xliff:g> veces. Se realizas <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos máis, terás que desbloquear o teléfono a través dunha conta de correo electrónico.\n\n Téntao de novo dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"O código PIN da SIM non é correcto. Agora debes contactar co teu operador para desbloquear o dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"O código PIN da SIM non é correcto. Quédache <xliff:g id="NUMBER">%d</xliff:g> intento antes de que teñas que contactar co operador para desbloquear o dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"O código PIN da SIM non é correcto. Quédanche <xliff:g id="NUMBER">%d</xliff:g> intentos."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">O código PIN da SIM é incorrecto. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos.</item> + <item quantity="one">O código PIN da SIM é incorrecto. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que teñas que contactar co operador para desbloquear o dispositivo.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"A SIM está inutilizable. Contacta co teu operador."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"O código PUK da SIM non é correcto. Quédache <xliff:g id="NUMBER">%d</xliff:g> intento antes de que a SIM quede inutilizable para sempre."</item> - <item quantity="other" msgid="5477305226026342036">"O código PUK da SIM non é correcto. Quédanche <xliff:g id="NUMBER">%d</xliff:g> intentos antes de que a SIM quede inutilizable para sempre."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">O código PUK da SIM é incorrecto. Quédanche <xliff:g id="NUMBER_1">%d</xliff:g> intentos antes de que a SIM quede inutilizable para sempre.</item> + <item quantity="one">O código PUK da SIM é incorrecto. Quédache <xliff:g id="NUMBER_0">%d</xliff:g> intento antes de que a SIM quede inutilizable para sempre.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Erro ao tentar desbloquear a tarxeta SIM co código PIN."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Erro ao tentar desbloquar a tarxeta SIM co código PUK."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceptado"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Non hai servizo."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Cambiar o botón do método de entrada."</string> </resources> diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml index 788891e..0cd65b8 100644 --- a/packages/Keyguard/res/values-hi/strings.xml +++ b/packages/Keyguard/res/values-hi/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"गलत सिम PIN कोड अपने डिवाइस को अनलॉक करने के लिए अब आपको अपने वाहक से संपर्क करना होगा."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"गलत सिम PIN कोड, अपने डिवाइस को अनलॉक करने के लिए अपने वाहक से संपर्क करने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष है."</item> - <item quantity="other" msgid="2215723361575359486">"गलत सिम PIN कोड, आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष हैं."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">गलत सिम PIN कोड, आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> प्रयास शेष हैं.</item> + <item quantity="other">गलत सिम PIN कोड, आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> प्रयास शेष हैं.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"सिम अनुपयोगी है. अपने वाहक से संपर्क करें."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष है."</item> - <item quantity="other" msgid="5477305226026342036">"गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष हैं."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> प्रयास शेष हैं.</item> + <item quantity="other">गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER_1">%d</xliff:g> प्रयास शेष हैं.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"सिम PIN की कार्यवाही विफल रही!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"सिम PUK की कार्यवाही विफल रही!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"कोड स्वीकार किया गया!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"कोई सेवा नहीं."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धति बटन स्विच करें."</string> </resources> diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml index c659e5d..71410c5 100644 --- a/packages/Keyguard/res/values-hr/strings.xml +++ b/packages/Keyguard/res/values-hr/strings.xml @@ -95,17 +95,20 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati tabletno računalo pomoću računa e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati telefon pomoću računa e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Netočan PIN kôd SIM kartice; sada morate kontaktirati svog mobilnog operatera da bi otključao vaš uređaj."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Netočan PIN kôd SIM kartice; imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaj prije nego što budete morali kontaktirati svog mobilnog operatera da bi otključao vaš uređaj."</item> - <item quantity="other" msgid="2215723361575359486">"Netočan PIN kôd SIM kartice; imate još ovoliko preostalih pokušaja: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Netočan PIN kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item> + <item quantity="few">Netočan PIN kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item> + <item quantity="other">Netočan PIN kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartica nije upotrebljiva. Kontaktirajte svog mobilnog operatera."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Netočan PUK kôd SIM kartice; imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva."</item> - <item quantity="other" msgid="5477305226026342036">"Netočan PUK kôd SIM kartice; imate još nekoliko preostalih pokušaja (<xliff:g id="NUMBER">%d</xliff:g>) prije nego što SIM kartica postane trajno neupotrebljiva."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Netočan PUK kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva.</item> + <item quantity="few">Netočan PUK kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item> + <item quantity="other">Netočan PUK kôd SIM kartice; imate još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja prije nego što SIM kartica postane trajno neupotrebljiva.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operacija PIN-a SIM kartice nije uspjela!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operacija PUK-a SIM kartice nije uspjela!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kôd je prihvaćen!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nema usluge."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za promjenu načina unosa."</string> </resources> diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml index 144e76d..dd43dba 100644 --- a/packages/Keyguard/res/values-hu/strings.xml +++ b/packages/Keyguard/res/values-hu/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a táblagépét.\n\n Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a telefonját.\n\n Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Helytelen PIN kód a SIM kártyához; vegye fel a kapcsolatot szolgáltatójával az eszköz feloldásához."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Helytelen PIN kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt fel kellene vennie a kapcsolatot szolgáltatójával az eszköz feloldásához."</item> - <item quantity="other" msgid="2215723361575359486">"Helytelen PIN kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">A SIM kártya PIN kódja helytelen. <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozás maradt.</item> + <item quantity="one">A SIM kártya PIN kódja helytelen. <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozás maradt. Utána a szolgáltatótól kell feloldást kérnie.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"A SIM kártya használhatatlan. Vegye fel a kapcsolatot szolgáltatójával."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Helytelen PUK kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlan lesz."</item> - <item quantity="other" msgid="5477305226026342036">"Helytelen PUK kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlan lesz."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Helytelen PUK kód a SIM kártyához. Még <xliff:g id="NUMBER_1">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlanná válik.</item> + <item quantity="one">Helytelen PUK kód a SIM kártyához. Még <xliff:g id="NUMBER_0">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlanná válik.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"A SIM kártya PIN-művelete sikertelen!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"A SIM kártya PUK-művelete sikertelen!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód elfogadva."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nincs szolgáltatás."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string> </resources> diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy-rAM/strings.xml index 1c9c8a0..e56642a 100644 --- a/packages/Keyguard/res/values-hy-rAM/strings.xml +++ b/packages/Keyguard/res/values-hy-rAM/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Դուք սխալ եք հավաքել ձեր ապակողպման սխեման <xliff:g id="NUMBER_0">%d</xliff:g> անգամ: Եվս <xliff:g id="NUMBER_1">%d</xliff:g> անհաջող փորձից հետո ձեզանից կպահանջվի ապակողպել ձեր գրասալիկը` օգտագործելով էլփոստի հաշիվ:\n\n Փորձեք կրկին <xliff:g id="NUMBER_2">%d</xliff:g> վայրկյանից:"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ եք հավաքել ձեր ապակողպման նմուշը: <xliff:g id="NUMBER_1">%d</xliff:g> անգամից ավել անհաջող փորձերից հետո ձեզ կառաջարկվի ապակողպել ձեր հեռախոսը` օգտագործելով էլփոստի հաշիվ:\n\n Փորձեք կրկին <xliff:g id="NUMBER_2">%d</xliff:g> վայրկյանից:"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Սխալ SIM PIN կոդի պատճառով պետք է դիմեք ձեր օպերատորին՝ սարքն արգելաբացելու համար:"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն արգելաբացելու համար:"</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ:"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item> + <item quantity="other">SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ:</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-ը հնարավոր չէ օգտագործել: Դիմեք ձեր օպերատորին:"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի ընդմիշտ արգելափակումը:"</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի ընդմիշտ արգելափակումը:"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել:</item> + <item quantity="other">SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER_1">%d</xliff:g> փորձ, որից հետո SIM քարտն այլևս հնարավոր չի լինի օգտագործել:</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN գործողությունը ձախողվեց:"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK գործողությունը ձախողվեց:"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Կոդն ընդունվեց:"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ծառայություն չկա:"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Միացնել մուտքագրման եղանակի կոճակը:"</string> </resources> diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml index 6539cc1..29a56ef 100644 --- a/packages/Keyguard/res/values-in/strings.xml +++ b/packages/Keyguard/res/values-in/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci tablet menggunakan akun email.\n\nCoba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci ponsel menggunakan akun email.\n\nCoba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Kode PIN SIM salah. Hubungi operator untuk membuka kunci perangkat."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Kode PIN SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat."</item> - <item quantity="other" msgid="2215723361575359486">"Kode PIN SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Kode PIN SIM salah, sisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan.</item> + <item quantity="one">Kode PIN SIM salah, sisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM tidak dapat digunakan. Hubungi operator Anda."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Kode PUK SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya."</item> - <item quantity="other" msgid="5477305226026342036">"Kode PUK SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Kode PUK SIM salah, sisa <xliff:g id="NUMBER_1">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya.</item> + <item quantity="one">Kode PUK SIM salah, sisa <xliff:g id="NUMBER_0">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operasi PIN SIM gagal!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operasi PUK SIM gagal!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kode Diterima!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tidak ada layanan."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string> </resources> diff --git a/packages/Keyguard/res/values-is-rIS/strings.xml b/packages/Keyguard/res/values-is-rIS/strings.xml index 4037533..5741cd0 100644 --- a/packages/Keyguard/res/values-is-rIS/strings.xml +++ b/packages/Keyguard/res/values-is-rIS/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Þú hefur teiknað rangt opnunarmynstur <xliff:g id="NUMBER_0">%d</xliff:g> sinnum. Eftir <xliff:g id="NUMBER_1">%d</xliff:g> árangurslausar tilraunir í viðbót verður þú beðin(n) um að opna spjaldtölvuna með tölvupóstreikningi.\n\n Reyndu aftur eftir <xliff:g id="NUMBER_2">%d</xliff:g> sekúndur."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Þú hefur teiknað rangt opnunarmynstur <xliff:g id="NUMBER_0">%d</xliff:g> sinnum. Eftir <xliff:g id="NUMBER_1">%d</xliff:g> árangurslausar tilraunir í viðbót verður þú beðin(n) um að opna símann með tölvupóstreikningi.\n\n Reyndu aftur eftir <xliff:g id="NUMBER_2">%d</xliff:g> sekúndur."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Rangt PIN-númer SIM-korts. Þú þarft núna að hafa samband við símafyrirtækið þitt til að taka tækið úr lás."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER">%d</xliff:g> tilraun eftir áður en þú þarft að hafa samband við símafyrirtækið þitt til að taka tækið úr lás."</item> - <item quantity="other" msgid="2215723361575359486">"Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER">%d</xliff:g> tilraunir eftir."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir.</item> + <item quantity="other">Rangt PIN-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortið er ónothæft. Hafðu samband við símafyrirtækið þitt."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER">%d</xliff:g> tilraun eftir áður en SIM-kortið verður ónothæft til frambúðar."</item> - <item quantity="other" msgid="5477305226026342036">"Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER">%d</xliff:g> tilraunir eftir áður en SIM-kortið verður ónothæft til frambúðar."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraun eftir áður en SIM-kortið verður ónothæft til frambúðar.</item> + <item quantity="other">Rangt PUK-númer SIM-korts. Þú átt <xliff:g id="NUMBER_1">%d</xliff:g> tilraunir eftir áður en SIM-kortið verður ónothæft til frambúðar.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"PIN-aðgerð SIM-korts mistókst!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK-aðgerð SIM-korts mistókst!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Númer samþykkt!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ekkert símasamband."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Hnappur til að skipta um innsláttaraðferð."</string> </resources> diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml index 3b8fdd7..c5c476c 100644 --- a/packages/Keyguard/res/values-it/strings.xml +++ b/packages/Keyguard/res/values-it/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il tablet con un account email.\n\n Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono con un account email.\n\n Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Codice PIN della SIM errato. Devi contattare l\'operatore per sbloccare il dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativi a disposizione."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione.</item> + <item quantity="one">Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM inutilizzabile. Contatta il tuo operatore."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile."</item> - <item quantity="other" msgid="5477305226026342036">"Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER_1">%d</xliff:g> tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile.</item> + <item quantity="one">Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER_0">%d</xliff:g> tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operazione con PIN della SIM non riuscita."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operazione con PUK della SIM non riuscita."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Codice accettato."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nessun servizio."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Pulsante per cambiare metodo di immissione."</string> </resources> diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml index 3f66c83..a856ccb 100644 --- a/packages/Keyguard/res/values-iw/strings.xml +++ b/packages/Keyguard/res/values-iw/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות חשבון אימייל.\n\nנסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון אימייל.\n\nנסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"מספר PIN שגוי של כרטיס ה-SIM. עליך ליצור כעת קשר עם הספק על מנת לבטל את נעילת המכשיר."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"מספר PIN שגוי של כרטיס ה-SIM. נותר לך ניסיון <xliff:g id="NUMBER">%d</xliff:g> נוסף לפני שיהיה עליך ליצור קשר עם הספק על מנת לבטל את נעילת המכשיר."</item> - <item quantity="other" msgid="2215723361575359486">"מספר PIN שגוי של כרטיס ה-SIM. נותרו לך <xliff:g id="NUMBER">%d</xliff:g> ניסיונות נוספים."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="two">קוד PIN שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="many">קוד PIN שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="other">קוד PIN שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות.</item> + <item quantity="one">קוד PIN שגוי של כרטיס SIM. נותר לך ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> לפני שיהיה עליך ליצור קשר עם הספק כדי לבטל את נעילת המכשיר.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"לא ניתן להשתמש בכרטיס ה-SIM. צור קשר עם הספק."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"קוד PUK שגוי של כרטיס ה-SIM. נותר לך ניסיון <xliff:g id="NUMBER">%d</xliff:g> נוסף לפני שכרטיס ה-SIM ינעל לצמיתות."</item> - <item quantity="other" msgid="5477305226026342036">"קוד PUK שגוי של כרטיס ה-SIM. נותרו לך <xliff:g id="NUMBER">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="two">קוד PUK שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item> + <item quantity="many">קוד PUK שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item> + <item quantity="other">קוד PUK שגוי של כרטיס SIM. נותרו לך <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות לפני שכרטיס ה-SIM יינעל לצמיתות.</item> + <item quantity="one">קוד PUK שגוי של כרטיס SIM. נותר לך ניסיון <xliff:g id="NUMBER_0">%d</xliff:g> לפני שכרטיס ה-SIM יינעל לצמיתות.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"פעולת מספר ה-PIN של כרטיס ה-SIM נכשלה!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"פעולת קוד ה-PUK של כרטיס ה-SIM נכשלה!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"הקוד התקבל!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"אין קליטה."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"לחצן החלפת שיטת קלט."</string> </resources> diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml index 1628099..5c76034 100644 --- a/packages/Keyguard/res/values-ja/strings.xml +++ b/packages/Keyguard/res/values-ja/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。\n\n<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。\n\n<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PINコードが無効です。お使いの端末をロック解除するには携帯通信会社にお問い合わせいただく必要があります。"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PINコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えると、お使いの端末をロック解除するのに携帯通信会社にお問い合わせいただく必要があります。"</item> - <item quantity="other" msgid="2215723361575359486">"SIM PINコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIMは使用できません。携帯通信会社にお問い合わせください。"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。"</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER_1">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。</item> + <item quantity="one">SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER_0">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN操作に失敗しました。"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK操作に失敗しました。"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"コードが承認されました。"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"通信サービスはありません。"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string> </resources> diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka-rGE/strings.xml index 6060ba7..e9c77fd 100644 --- a/packages/Keyguard/res/values-ka-rGE/strings.xml +++ b/packages/Keyguard/res/values-ka-rGE/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%d</xliff:g> ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ მოგთხოვთ ტაბლეტის განბლოკვას ელფოსტის ანგარიშის გამოყენებით.\n\n ხელახლა სცადეთ <xliff:g id="NUMBER_2">%d</xliff:g> წამში."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ, დაგჭირდებათ თქვენი ტელეფონის განბლოკვა ელფოსტის ანგარიშის გამოყენებით.\n\n ხელახლა სცადეთ <xliff:g id="NUMBER_2">%d</xliff:g> წამში."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM-ის არასწორი PIN კოდი. თქვენ ახლა მოგიწევთ მოწყობილობის განსაბლოკად მიმართოთ ოპერატორს."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM-ის არასწორი PIN კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ მოგიწევთ თქვენი მოწყობილობის განსაბლოკად ოპერატორთან დაკავშირება."</item> - <item quantity="other" msgid="2215723361575359486">"SIM-ის არასწორი PIN კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM გამოუსადეგარია. დაუკავშირდით ოპერატორს."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"არასწორი SIM PUK კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდებოდეს."</item> - <item quantity="other" msgid="5477305226026342036">"არასწორი SIM PUK კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდებოდეს."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM-ის PUK კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_1">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება.</item> + <item quantity="one">SIM-ის PUK კოდი არასწორია. თქვენ დაგრჩათ <xliff:g id="NUMBER_0">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდება.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN ოპერაცია ჩაიშალა!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK ოპერაცია ჩაიშალა!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"კოდი მიღებულია!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"არ არის სერვისი."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"შეყვანის მეთოდის გადართვის ღილაკი."</string> </resources> diff --git a/packages/Keyguard/res/values-kk-rKZ/strings.xml b/packages/Keyguard/res/values-kk-rKZ/strings.xml index 460b923..85443f6 100644 --- a/packages/Keyguard/res/values-kk-rKZ/strings.xml +++ b/packages/Keyguard/res/values-kk-rKZ/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Бекітпені ашу кескінін <xliff:g id="NUMBER_0">%d</xliff:g> рет қате сыздыңыз. After <xliff:g id="NUMBER_1">%d</xliff:g> сәтсіз әрекеттен кейін планшетіңізді есептік жазба арқылы ашу өтінішін аласыз.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундтан кейін қайта әрекеттеніңіз."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Бекітпені ашу кескінін <xliff:g id="NUMBER_0">%d</xliff:g> рет қате сыздыңыз. <xliff:g id="NUMBER_1">%d</xliff:g> сәтсіз әрекеттен кейін телефоныңызды есептік жазба арқылы ашу өтінішін аласыз. \n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундтан кейін қайта әрекеттеніңіз."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN коды дұрыс емес, құрылғыны ашу үшін қызмет жабдықтаушыға хабарласаңыз."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN коды дұрыс емес, құрылғыны жабу өтінішімен жабдықтаушыға хабарласуға дейін <xliff:g id="NUMBER">%d</xliff:g> рет әрекеттену мүмкіндігіңіз бар."</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN коды дұрыс емес, <xliff:g id="NUMBER">%d</xliff:g> рет әрекеттену мүмкіндігіңіз қалды."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM қолданыстан шыққан. Қызмет жабдықтаушыға хабарласыңыз."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PIN коды дұрыс емес, <xliff:g id="NUMBER">%d</xliff:g> әрекеттен кейін SIM қолданыстан мүлдем шығады."</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK коды дұрыс емес, <xliff:g id="NUMBER">%d</xliff:g> әрекеттен кейін SIM қолданыстан мүлдем шығады."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK коды дұрыс емес, SIM біржола пайдалануға жарамсыз болуына <xliff:g id="NUMBER_1">%d</xliff:g> әрекет қалды.</item> + <item quantity="one">SIM PUK коды дұрыс емес, SIM біржола пайдалануға жарамсыз болуына <xliff:g id="NUMBER_0">%d</xliff:g> әрекет қалды.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN жұмысы орындалмады!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK жұмысы орындалмады!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Код қабылданды!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Қызмет көрсетілмейді."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Енгізу әдісі түймесін ауыстыру."</string> </resources> diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km-rKH/strings.xml index e8e24fb..be72fd6 100644 --- a/packages/Keyguard/res/values-km-rKH/strings.xml +++ b/packages/Keyguard/res/values-km-rKH/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"អ្នកបានគូរលំនាំដោះសោមិនត្រឹមត្រូវ <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់ពីការព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដងមិនជោគជ័យ អ្នកនឹងត្រូវបានស្នើឲ្យដោះសោកុំព្យូទ័របន្ទះរបស់អ្នក ដោយប្រើគណនីអ៊ីមែល។\n\n ព្យាយាមម្ដងទៀតក្នុងរយៈពេល <xliff:g id="NUMBER_2">%d</xliff:g> វិនាទី។"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"អ្នកបានគូរលំនាំដោះសោរបស់អ្នកមិនត្រឹមត្រូវចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់ពីការព្យាយាមមិនជោគជ័យច្រើនជាង <xliff:g id="NUMBER_1">%d</xliff:g> ដង អ្នកនឹងត្រូវបានស្នើឲ្យដោះសោទូរស័ព្ទរបស់អ្នកដោយប្រើគណនីអ៊ីមែល។\n\n ព្យាយាមម្ដងទៀតក្នុងរយៈពេល <xliff:g id="NUMBER_2">%d</xliff:g> វិនាទី។"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"លេខកូដ PIN ស៊ីមមិនត្រឹមត្រូវ អ្នកត្រូវទាក់ទងក្រុមហ៊ុនបញ្ជូនរបស់អ្នកឥឡូវនេះ ដើម្បីដោះសោឧបករណ៍របស់អ្នក។"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"លេខកូដ PIN ស៊ីមមិនត្រឹមត្រូវ, អ្នកមាន <xliff:g id="NUMBER">%d</xliff:g> ការព្យាយាមដែលនៅសល់មុនពេលអ្នកត្រូវទាក់ទងក្រុមហ៊ុនបញ្ជូនរបស់អ្នក ដើម្បីដោះសោឧបករណ៍របស់អ្នក។"</item> - <item quantity="other" msgid="2215723361575359486">"លេខកូដ PIN ស៊ីមមិនត្រឹមត្រូវ, អ្នកមាន <xliff:g id="NUMBER">%d</xliff:g> ការព្យាយាមដែលនៅសល់។"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">លេខកូដសម្ងាត់ស៊ីមមិនត្រឹមត្រូវ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត</item> + <item quantity="one">លេខកូដសម្ងាត់ស៊ីមមិនត្រឹមត្រូវ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_0">%d</xliff:g> ដងទៀត មុនពេលពេលដែលអ្នកត្រូវទាក់ទងទៅអ្នកផ្តល់សេវាកម្មរបស់អ្នកដើម្បីដោះសោឧបករណ៍របស់អ្នក។</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ស៊ីមមិនអាចប្រើបាន។ ទាក់ទងក្រុមហ៊ុនបញ្ជូនរបស់អ្នក។"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"លេខកូដ PUK ស៊ីមមិនត្រឹមត្រូវ, អ្នកមាន <xliff:g id="NUMBER">%d</xliff:g> ការព្យាយាមដែលនៅសល់ មុនពេលស៊ីមក្លាយជាមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។"</item> - <item quantity="other" msgid="5477305226026342036">"លេខកូដ PUK ស៊ីមមិនត្រឹមត្រូវ, អ្នកមាន <xliff:g id="NUMBER">%d</xliff:g> ការព្យាយាមដែលនៅសល់ មុនពេលស៊ីមក្លាយជាមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">លេខកូដ PUK ស៊ីមមិនត្រឹមត្រូវ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដងទៀត មុនពេលស៊ីមរបស់អ្នកមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។</item> + <item quantity="one">លេខកូដ PUK ស៊ីមមិនត្រឹមត្រូវ អ្នកនៅសល់ការព្យាយាម <xliff:g id="NUMBER_0">%d</xliff:g> ដងទៀត មុនពេលស៊ីមរបស់អ្នកមិនអាចប្រើបានជាអចិន្ត្រៃយ៍។</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"បានបរាជ័យក្នុងការប្រតិបត្តិលេខកូដ PIN ស៊ីម!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"បានបរាជ័យក្នុងការប្រតិបត្តិលេខកូដ PUK ស៊ីម!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"បានទទួលយកលេខកូដ!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"គ្មានសេវា"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ប្ដូរប៊ូតុងវិធីសាស្ត្របញ្ចូល។"</string> </resources> diff --git a/packages/Keyguard/res/values-kn-rIN/strings.xml b/packages/Keyguard/res/values-kn-rIN/strings.xml index 02075f5..cfa1ac0 100644 --- a/packages/Keyguard/res/values-kn-rIN/strings.xml +++ b/packages/Keyguard/res/values-kn-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ನಿಮ್ಮ ಅನ್ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಡ್ರಾ ಮಾಡಿರುವಿರಿ. <xliff:g id="NUMBER_1">%d</xliff:g> ಹೆಚ್ಚಿನ ವಿಫಲ ಪ್ರಯತ್ನಗಳ ಬಳಿಕ, ನಿಮ್ಮ ಇಮೇಲ್ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ಲಾಕ್ ಮಾಡುವಂತೆ ನಿಮ್ಮಲ್ಲಿ ಕೇಳಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ನಿಮ್ಮ ಅನ್ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ನೀವು <xliff:g id="NUMBER_0">%d</xliff:g> ಬಾರಿ ತಪ್ಪಾಗಿ ಡ್ರಾ ಮಾಡಿರುವಿರಿ. <xliff:g id="NUMBER_1">%d</xliff:g> ಹೆಚ್ಚಿನ ವಿಫಲ ಪ್ರಯತ್ನಗಳ ಬಳಿಕ, ನಿಮ್ಮ ಇಮೇಲ್ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಫೋನ್ ಅನ್ಲಾಕ್ ಮಾಡುವಂತೆ ನಿಮ್ಮಲ್ಲಿ ಕೇಳಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ಸಿಮ್ ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ನೀವು ಈ ಕೂಡಲೇ ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಬೇಕು."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ತಪ್ಪಾಗಿರುವ ಸಿಮ್ ಪಿನ್ ಕೋಡ್, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡುವ ಸಲುವಾಗಿ ನಿಮ್ಮ ವಾಹಕವನ್ನು ನೀವು ಸಂಪರ್ಕಿಸುವುದಕ್ಕೂ ಮೊದಲು ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ."</item> - <item quantity="other" msgid="2215723361575359486">"ತಪ್ಪಾಗಿರುವ ಸಿಮ್ ಪಿನ್ ಕೋಡ್, ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">ಸಿಮ್ ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> + <item quantity="other">ಸಿಮ್ ಪಿನ್ ಕೋಡ್ ತಪ್ಪಾಗಿದೆ, ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ಸಿಮ್ ನಿಷ್ಪ್ರಯೋಜಕವಾಗಿದೆ. ನಿಮ್ಮ ವಾಹಕವನ್ನು ಸಂಪರ್ಕಿಸಿ."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ತಪ್ಪಾಗಿರುವ ಸಿಮ್ PUK ಕೋಡ್, ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವುದಕ್ಕೂ ಮೊದಲು ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER">%d</xliff:g> ಪ್ರಯತ್ನ ಬಾಕಿ ಉಳಿದಿದೆ."</item> - <item quantity="other" msgid="5477305226026342036">"ತಪ್ಪಾಗಿರುವ ಸಿಮ್ PUK ಕೋಡ್, ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವುದಕ್ಕೂ ಮೊದಲು ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">ತಪ್ಪಾಗಿರುವ ಸಿಮ್ PUK ಕೋಡ್, ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವುದಕ್ಕೂ ಮೊದಲು ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> + <item quantity="other">ತಪ್ಪಾಗಿರುವ ಸಿಮ್ PUK ಕೋಡ್, ಸಿಮ್ ಶಾಶ್ವತವಾಗಿ ನಿಷ್ಪ್ರಯೋಜಕವಾಗುವುದಕ್ಕೂ ಮೊದಲು ನಿಮ್ಮಲ್ಲಿ <xliff:g id="NUMBER_1">%d</xliff:g> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"ಸಿಮ್ ಪಿನ್ ಕಾರ್ಯಾಚರಣೆ ವಿಫಲಗೊಂಡಿದೆ!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"ಸಿಮ್ PUK ಕಾರ್ಯಾಚರಣೆ ವಿಫಲಗೊಂಡಿದೆ!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"ಕೋಡ್ ಅಂಗೀಕೃತವಾಗಿದೆ!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"ಯಾವುದೇ ಸೇವೆಯಿಲ್ಲ."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ಇನ್ಪುಟ್ ವಿಧಾನ ಬದಲಿಸು ಬಟನ್."</string> </resources> diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml index 5cac9b8..1ef0c19 100644 --- a/packages/Keyguard/res/values-ko/strings.xml +++ b/packages/Keyguard/res/values-ko/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 태블릿을 잠금해제해야 합니다.\n\n <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 휴대전화를 잠금해제해야 합니다.\n\n <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN 코드가 잘못되었습니다. 이동통신사에 문의하여 기기를 잠금 해제해야 합니다."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 이동통신사에 문의하여 기기를 잠금 해제해야 합니다."</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>번의 기회가 남았습니다."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM을 사용할 수 없습니다. 이동통신사에 문의하세요."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM을 완전히 사용할 수 없습니다."</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM을 완전히 사용할 수 없습니다."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER_1">%d</xliff:g>번 더 실패하면 SIM을 완전히 사용할 수 없게 됩니다.</item> + <item quantity="one">SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER_0">%d</xliff:g>번 더 실패하면 SIM을 완전히 사용할 수 없게 됩니다.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN 작업이 실패했습니다."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK 작업이 실패했습니다."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"코드 승인 완료"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"서비스 불가"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"입력 방법 버튼을 전환합니다."</string> </resources> diff --git a/packages/Keyguard/res/values-ky-rKG/strings.xml b/packages/Keyguard/res/values-ky-rKG/strings.xml index d04547c..430c19a 100644 --- a/packages/Keyguard/res/values-ky-rKG/strings.xml +++ b/packages/Keyguard/res/values-ky-rKG/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Сиз бөгөттөн чыгаруу үлгүсүн <xliff:g id="NUMBER_0">%d</xliff:g> жолу туура эмес көрсөттүңүз. Дагы <xliff:g id="NUMBER_1">%d</xliff:g> ийгиликсиз аракеттен кийин, планшетиңизди эмейл эсебиңиз аркылуу бөгөттөн чыгаруу талап кылынат.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундадан кийин кайра аракеттениңиз."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Сиз бөгөттөн чыгаруу үлгүсүн <xliff:g id="NUMBER_0">%d</xliff:g> жолу туура эмес көрсөттүңүз. Дагы <xliff:g id="NUMBER_1">%d</xliff:g> ийгиликсиз аракеттен кийин, телефонуңузду эмейл эсебиңиз аркылуу бөгөттөн чыгаруу талап кылынат.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундадан кийин кайра аракеттениңиз."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM-карта PIN-коду туура эмес. Эми түзмөктү бөгөттөн чыгарыш үчүн операторуңузга кайрылышыңыз керек."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN-коду туура эмес, сиз түзмөктү бөгөттөн чыгарыш үчүн операторуңузга кайрылганга <xliff:g id="NUMBER">%d</xliff:g> аракет калды."</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN-коду туура эмес, сизде <xliff:g id="NUMBER">%d</xliff:g> аракет калды."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-карта жараксыз. Операторуңузга кайрылыңыз."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUK-коду туура эмес, SIM биротоло жарактан чыгаарына <xliff:g id="NUMBER">%d</xliff:g> аракет калды."</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK-коду туура эмес, SIM биротоло жарактан чыгаарына <xliff:g id="NUMBER">%d</xliff:g> аракет калды."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK-коду туура эмес, SIM биротоло жарактан чыгаарынан мурун сизде <xliff:g id="NUMBER_1">%d</xliff:g> аракет калды.</item> + <item quantity="one">SIM PUK-коду туура эмес, SIM биротоло жарактан чыгаарынан мурун сизде <xliff:g id="NUMBER_0">%d</xliff:g> аракет калды.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-картанын PIN-кодун ачуу кыйрады!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-картанын PUK-кодун ачуу кыйрады!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Код кабыл алынды!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Байланыш жок."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Киргизүү ыкмасын которуу баскычы."</string> </resources> diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo-rLA/strings.xml index af566d2..17c1c5b 100644 --- a/packages/Keyguard/res/values-lo-rLA/strings.xml +++ b/packages/Keyguard/res/values-lo-rLA/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກແຕ້ມຜິດອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ, ທ່ານຈະຖືກຖາມໃຫ້ປົດລັອກແທັບເລັດຂອງທ່ານ ດ້ວຍການເຂົ້າສູ່ລະບົບໂດຍໃຊ້ອີເມວຂອງທ່ານ.\n\n ກະລຸນາລອງໃໝ່ອີກຄັ້ງໃນອີກ <xliff:g id="NUMBER_2">%d</xliff:g> ວິນາທີ."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຂອງທ່ານຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກຄວາມພະຍາຍາມອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ ທ່ານຈະຖືກຖາມໃຫ້ປົດລັອກໂທລະສັບຂອງທ່ານດ້ວຍບັນຊີອີເມວ.\n\n ລອງໃໝ່ອີກຄັ້ງໃນ <xliff:g id="NUMBER_2">%d</xliff:g> ວິນາທີ."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງທ່ານຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ທ່ານຈະຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ."</item> - <item quantity="other" msgid="2215723361575359486">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອ."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">ລະຫັດ SIM PIN ບໍ່ຖືກຕ້ອງ, ທ່ານຍັງພະຍາຍາມໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ຄັ້ງ.</item> + <item quantity="one">ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ທ່ານຈະຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM ໃຊ້ບໍ່ໄດ້ແລ້ວ. ກະລຸນາຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ."</item> - <item quantity="other" msgid="5477305226026342036">"ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ.</item> + <item quantity="one">ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"PIN ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"ລະຫັດຖືກຕອບຮັບແລ້ວ!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"ບໍ່ມີບໍລິການ"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ປຸ່ມສະລັບຮູບແບບການປ້ອນຂໍ້ມູນ."</string> </resources> diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml index 31c38cc..6d7dcc7 100644 --- a/packages/Keyguard/res/values-lt/strings.xml +++ b/packages/Keyguard/res/values-lt/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti planšetinį kompiuterį naudodami „Google“ prisijungimo duomenis.\n\n Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti telefoną naudodami „Google“ prisijungimo duomenis.\n\n Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Netinkamas SIM kortelės PIN kodas. Reikės susisiekti su operatoriumi, kad atrakintų įrenginį."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Netinkamas SIM kortelės PIN kodas. Jums liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui reikės susisiekti su operatoriumi, kad jis atrakintų įrenginį."</item> - <item quantity="other" msgid="2215723361575359486">"Netinkamas SIM kortelės PIN kodas, liko <xliff:g id="NUMBER">%d</xliff:g> band."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas.</item> + <item quantity="few">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai.</item> + <item quantity="many">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymo.</item> + <item quantity="other">Netinkamas SIM kortelės PIN kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymų.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Nebegalima naudoti SIM kortelės. Susisiekite su operatoriumi."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui visiškai nebegalėsite naudoti SIM kortelės."</item> - <item quantity="other" msgid="5477305226026342036">"Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui visiškai nebegalėsite naudoti SIM kortelės."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymas. Tada nebegalėsite naudotis SIM kortele.</item> + <item quantity="few">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymai. Tada nebegalėsite naudotis SIM kortele.</item> + <item quantity="many">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymo. Tada nebegalėsite naudotis SIM kortele.</item> + <item quantity="other">Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER_1">%d</xliff:g> bandymų. Tada nebegalėsite naudotis SIM kortele.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Nepavyko atlikti SIM kortelės PIN kodo operacijos."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Nepavyko atlikti SIM kortelės PUK kodo operacijos."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kodas priimtas."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nėra paslaugos."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Perjungti įvesties metodo mygtuką."</string> </resources> diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml index c13aef1..e1da889 100644 --- a/packages/Keyguard/res/values-lv/strings.xml +++ b/packages/Keyguard/res/values-lv/strings.xml @@ -95,17 +95,20 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem planšetdators būs jāatbloķē, izmantojot e-pasta kontu.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunis būs jāatbloķē, izmantojot e-pasta kontu.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nepareizs SIM kartes PIN kods. Lai atbloķētu ierīci, sazinieties ar mobilo sakaru operatoru."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi. Kļūdas gadījumā būs jāsazinās ar mobilo sakaru operatoru, lai tas atbloķētu jūsu ierīci."</item> - <item quantity="other" msgid="2215723361575359486">"Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi(-es)."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="zero">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item> + <item quantity="one">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi.</item> + <item quantity="other">Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM karte nav izmantojama. Sazinieties ar mobilo sakaru operatoru."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi. Kļūdas gadījumā SIM karte kļūs neizmantojama."</item> - <item quantity="other" msgid="5477305226026342036">"Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi(-es). Kļūdas gadījumā SIM karte kļūs neizmantojama."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="zero">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes. Pēdējā mēģinājuma kļūdas gadījumā SIM karte kļūs neizmantojama.</item> + <item quantity="one">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizi. Pēdējā mēģinājuma kļūdas gadījumā SIM karte kļūs neizmantojama.</item> + <item quantity="other">Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER_1">%d</xliff:g> reizes. Pēdējā mēģinājuma kļūdas gadījumā SIM karte kļūs neizmantojama.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM kartes PIN koda ievadīšana neizdevās."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM kartes PUK koda ievadīšana neizdevās."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kods ir pieņemts!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Nav pakalpojuma."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga."</string> </resources> diff --git a/packages/Keyguard/res/values-mk-rMK/strings.xml b/packages/Keyguard/res/values-mk-rMK/strings.xml index 525cc29..717671b 100644 --- a/packages/Keyguard/res/values-mk-rMK/strings.xml +++ b/packages/Keyguard/res/values-mk-rMK/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Погрешно сте ја употребиле вашата шема на отклучување <xliff:g id="NUMBER_0">%d</xliff:g> пати. По <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни обиди, ќе побараат од вас да го отклучите таблетот со користење сметка на е-пошта.\n\n Обидете се повторно за <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Погрешно сте ја употребиле вашата шема на отклучување <xliff:g id="NUMBER_0">%d</xliff:g> пати. По <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни обиди, ќе побараат од вас да го отклучите телефонот со користење сметка на е-пошта.\n\n Обидете се повторно за <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ПИН кодот за СИМ картичката е неточен. Контактирате со вашиот оператор да го отклучи уредот."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ПИН кодот за СИМ картичката е неточен. Ви преостанува уште <xliff:g id="NUMBER">%d</xliff:g> обид, а потоа ќе треба да контактирате со вашиот оператор да го отклучи уредот."</item> - <item quantity="other" msgid="2215723361575359486">"ПИН кодот за СИМ картичката е неточен. Ви преостануваат уште <xliff:g id="NUMBER">%d</xliff:g> обиди."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Погрешен ПИН-код за СИМ, ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид.</item> + <item quantity="other">Погрешен ПИН-код за СИМ, ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"СМС картичката е неупотреблива. Контактирајте со вашиот оператор."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ПУК кодот за СИМ картичката е неточен. Ви преостанува уште <xliff:g id="NUMBER">%d</xliff:g> обид, а потоа СИМ картичката ќе стане трајно неупотреблива."</item> - <item quantity="other" msgid="5477305226026342036">"ПУК кодот за СИМ картичката е неточен. Ви преостануваат уште <xliff:g id="NUMBER">%d</xliff:g> обиди, а потоа СИМ картичката ќе стане трајно неупотреблива."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Погрешен ПУК-код за СИМ, ви преостанува уште <xliff:g id="NUMBER_1">%d</xliff:g> обид пред СИМ-картичката да стане трајно неупотреблива.</item> + <item quantity="other">Погрешен ПУК-код за СИМ, ви преостануваат уште <xliff:g id="NUMBER_1">%d</xliff:g> обиди пред СИМ-картичката да стане трајно неупотреблива.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"СИМ картичката не се отклучи со ПИН кодот!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"СИМ картичката не се отклучи со ПУК кодот!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Кодот е прифатен!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Нема услуга."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Копче за префрање метод на внес."</string> </resources> diff --git a/packages/Keyguard/res/values-ml-rIN/strings.xml b/packages/Keyguard/res/values-ml-rIN/strings.xml index a91fe78..f39a6b7 100644 --- a/packages/Keyguard/res/values-ml-rIN/strings.xml +++ b/packages/Keyguard/res/values-ml-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"നിങ്ങളുടെ അൺലോക്ക് പാറ്റേൺ <xliff:g id="NUMBER_0">%d</xliff:g> തവണ തെറ്റായി വരച്ചു. <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി വിജയിച്ചില്ലെങ്കിൽ, ഒരു ഇമെയിൽ അക്കൗണ്ട് ഉപയോഗിച്ച് ടാബ്ലെറ്റ് അൺലോക്ക് ചെയ്യാൻ നിങ്ങളോട് ആവശ്യപ്പെടും.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> സെക്കൻഡിനുള്ള വീണ്ടും ശ്രമിക്കുക."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"നിങ്ങളുടെ അൺലോക്ക് പാറ്റേൺ <xliff:g id="NUMBER_0">%d</xliff:g> തവണ തെറ്റായി വരച്ചു. <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി വിജയിച്ചില്ലെങ്കിൽ, ഒരു ഇമെയിൽ അക്കൗണ്ട് ഉപയോഗിച്ച് ഫോൺ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളോട് ആവശ്യപ്പെടും.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> സെക്കൻഡിനുള്ള വീണ്ടും ശ്രമിക്കുക."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"സിം പിൻ കോഡ് തെറ്റാണ്, നിങ്ങളുടെ ഉപകരണം അൺലോക്കുചെയ്യാൻ ഇപ്പോൾ നിങ്ങളുടെ കാരിയറുമായി ബന്ധപ്പെടണം."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"തെറ്റായ സിം പിൻ കോഡ്, നിങ്ങളുടെ ഉപകരണം അൺലോക്കുചെയ്യാൻ സേവനദാതാവുമായി ബന്ധപ്പെടുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER">%d</xliff:g> ശ്രമം കൂടി ബാക്കിയുണ്ട്."</item> - <item quantity="other" msgid="2215723361575359486">"തെറ്റായ സിം പിൻ കോഡ്, നിങ്ങൾക്ക് <xliff:g id="NUMBER">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ബാക്കിയുണ്ട്."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"സിം ഉപയോഗശൂന്യമാണ്. നിങ്ങളുടെ കാരിയറെ ബന്ധപ്പെടുക."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"തെറ്റായ സിം PUK കോഡ്, സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER">%d</xliff:g> ശ്രമം കൂടി ബാക്കിയുണ്ട്."</item> - <item quantity="other" msgid="5477305226026342036">"തെറ്റായ സിം PUK കോഡ്, സിം ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ബാക്കിയുണ്ട്."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK കോഡ് തെറ്റാണ്, SIM ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER_1">%d</xliff:g> ശ്രമങ്ങൾ കൂടി ശേഷിക്കുന്നു.</item> + <item quantity="one">SIM PUK കോഡ് തെറ്റാണ്, SIM ശാശ്വതമായി ഉപയോഗശൂന്യമാകുന്നതിന് മുമ്പായി നിങ്ങൾക്ക് <xliff:g id="NUMBER_0">%d</xliff:g> ശ്രമം കൂടി ശേഷിക്കുന്നു.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"സിം പിൻ പ്രവർത്തനം പരാജയപ്പെട്ടു!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"സിം PUK പ്രവർത്തനം പരാജയപ്പെട്ടു!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"കോഡ് അംഗികരിച്ചു!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"സേവനമൊന്നുമില്ല."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ടൈപ്പുചെയ്യൽ രീതി ബട്ടൺ മാറുക."</string> </resources> diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn-rMN/strings.xml index 0182a6c..2f24901 100644 --- a/packages/Keyguard/res/values-mn-rMN/strings.xml +++ b/packages/Keyguard/res/values-mn-rMN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Та тайлах хээг <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу зурлаа. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оруулбал, та таблетаа тайлахын тулд имэйл акаунт шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундын дараа дахин оролдоно уу."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Та тайлах хээг <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу зурлаа. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оруулбал, та утсаа тайлахын тулд имэйл акаунтаа ашиглах шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундын дараа дахин оролдоно уу."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"СИМ ПИН код буруу, та төхөөрөмжийн түгжээг тайлахын тулд оператор компанитай холбоо барих шаардлагатай."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"СИМ ПИН код буруу байна, танд мобайл оператор компанитай холбогдохгүйгээр төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдсэн байна."</item> - <item quantity="other" msgid="2215723361575359486">"СИМ ПИН код буруу байна, танд <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">СИМ-ны ПИН код буруу байна. Та <xliff:g id="NUMBER_1">%d</xliff:g> удаа оролдлого хийх боломжтой байна.</item> + <item quantity="one">СИМ-ны ПИН код буруу байна. Танд мобайл оператортойгоо холбогдохгүйгээр төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого хийх боломж үлдсэн байна.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"СИМ ашиглах боломжгүй. Өөрийн оператор компанитай холбоо барина уу."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"СИМ ПҮК код буруу, таны СИМ бүрмөсөн ашиглалтгүй болохоос өмнө <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item> - <item quantity="other" msgid="5477305226026342036">"СИМ ПҮК код буруу, таны СИМ бүрмөсөн ашиглалтгүй болохоос өмнө <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">]СИМ-ны PUK код буруу байна. Таны СИМ хаагдах хүртэл төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER_1">%d</xliff:g> .оролдлого хийх боломж үлдсэн байна.</item> + <item quantity="one">СИМ-ны PUK код буруу байна. Таны СИМ хаагдах хүртэл төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER_0">%d</xliff:g> оролдлого хийх боломж үлдсэн байна.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"СИМ ПИН ажиллуулах амжилтгүй боллоо!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"СИМ ПҮК ажиллуулах амжилтгүй боллоо!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Код зөвшөөрөгдлөө!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Үйлчилгээ байхгүй."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Оруулах аргыг сэлгэх товч."</string> </resources> diff --git a/packages/Keyguard/res/values-mr-rIN/strings.xml b/packages/Keyguard/res/values-mr-rIN/strings.xml index fc30fc8..a86bf60 100644 --- a/packages/Keyguard/res/values-mr-rIN/strings.xml +++ b/packages/Keyguard/res/values-mr-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपण आपला अनलॉक नमुना <xliff:g id="NUMBER_0">%d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%d</xliff:g> अयशस्वी प्रयत्नांनंतर, आपल्याला ईमेल खाते वापरून आपला टॅब्लेट अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपण आपला अनलॉक नमुना <xliff:g id="NUMBER_0">%d</xliff:g> वेळा अयोग्यपणे काढला आहे. आणखी <xliff:g id="NUMBER_1">%d</xliff:g> अयशस्वी प्रयत्नांनंतर, आपल्याला ईमेल खाते वापरून आपला फोन अनलॉक करण्यास सांगितले जाईल.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंदांमध्ये पुन्हा प्रयत्न करा."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"सिम पिन कोड चुकीचा आहे आपण आता आपले डिव्हाइस अनलॉक करण्यासाठी आपल्या वाहकाशी संपर्क साधावा."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"सिम पिन कोड चुकीचा आहे, आपण आपले डिव्हाइस अनलॉक करण्यासाठी आपल्या वाहकाशी संपर्क साधण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER">%d</xliff:g> प्रयत्न उर्वरित आहेत."</item> - <item quantity="other" msgid="2215723361575359486">"सिम पिन कोड चुकीचा आहे, आपल्याकडे <xliff:g id="NUMBER">%d</xliff:g> प्रयत्न उर्वरित आहेत."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">सिम पिन चुकीचा आहे, आपल्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न उर्वरित आहे.</item> + <item quantity="other">सिम पिन चुकीचा आहे, आपल्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न उर्वरित आहेत.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"सिम निरुपयोगी आहे. आपल्या वाहकाशी संपर्क साधा."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"सिम PUK कोड चुकीचा आहे, सिम कायमचे निरूपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER">%d</xliff:g> प्रयत्न उर्वरित आहे."</item> - <item quantity="other" msgid="5477305226026342036">"सिम PUK कोड चुकीचा आहे, सिम कायमचे निरूपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER">%d</xliff:g> प्रयत्न उर्वरित आहेत."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">सिम PUK कोड चुकीचा आहे, सिम कायमचे निरूपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न उर्वरित आहे.</item> + <item quantity="other">सिम PUK कोड चुकीचा आहे, सिम कायमचे निरूपयोगी होण्यापूर्वी आपल्याकडे <xliff:g id="NUMBER_1">%d</xliff:g> प्रयत्न उर्वरित आहेत.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"सिम पिन कार्य अयशस्वी झाले!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"सिम PUK कार्य अयशस्वी झाले!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"कोड स्वीकारला!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"सेवा नाही."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धत स्विच करा बटण."</string> </resources> diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms-rMY/strings.xml index e1907da..3d4dee4 100644 --- a/packages/Keyguard/res/values-ms-rMY/strings.xml +++ b/packages/Keyguard/res/values-ms-rMY/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Kod PIN SIM tidak betul, jadi anda harus menghubungi pembawa anda untuk membuka kunci peranti."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Kod PIN SIM tidak betul. Anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum anda harus menghubungi pembawa anda untuk membuka kunci peranti."</item> - <item quantity="other" msgid="2215723361575359486">"Kod PIN SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Kod PIN SIM salah, anda ada <xliff:g id="NUMBER_1">%d</xliff:g> cubaan lagi.</item> + <item quantity="one">Kod PIN SIM tidak betul. Anda ada <xliff:g id="NUMBER_0">%d</xliff:g> cubaan lagi sebelum anda harus menghubungi pembawa anda untuk membuka kunci peranti.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM tidak boleh digunakan. Hubungi pembawa anda."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Kod PUK SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM tidak boleh digunakan secara kekal."</item> - <item quantity="other" msgid="5477305226026342036">"Kod PUK SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM tidak boleh digunakan secara kekal."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Kod PUK SIM tidak betul, anda ada <xliff:g id="NUMBER_1">%d</xliff:g> cubaan lagi sebelum SIM tidak boleh digunakan secara kekal.</item> + <item quantity="one">Kod PUK SIM tidak betul, anda ada <xliff:g id="NUMBER_0">%d</xliff:g> cubaan lagi sebelum SIM tidak boleh digunakan secara kekal.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operasi PIN SIM gagal!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operasi PUK SIM gagal!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod Diterima!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tiada perkhidmatan."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string> </resources> diff --git a/packages/Keyguard/res/values-my-rMM/strings.xml b/packages/Keyguard/res/values-my-rMM/strings.xml index 53dcdb0..4432ceb 100644 --- a/packages/Keyguard/res/values-my-rMM/strings.xml +++ b/packages/Keyguard/res/values-my-rMM/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"သင် ပုံဖော်၍သော့ဖွင့်ခြင်းကို <xliff:g id="NUMBER_0">%d</xliff:g> အကြိမ် မှန်ကန်စွာ မပြုလုပ်နိုင်ပါ။ နောက်ထပ် <xliff:g id="NUMBER_1">%d</xliff:g> အကြိမ် မမှန်ကန်ပါက သင့်တက်ဘလက်အား အီးမေးလ်အသုံးပြု၍ သော့ဖွင့်ရန် တောင်းဆိုပါလိမ့်မည်။ \n\n <xliff:g id="NUMBER_2">%d</xliff:g> စက္ကန့်အကြာတွင် ပြန်လည် ကြိုးစားပါ"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"သင် ပုံဖော်၍သော့ဖွင့်ခြင်းကို <xliff:g id="NUMBER_0">%d</xliff:g> အကြိမ် မှန်ကန်စွာ မပြုလုပ်နိုင်ပါ။ နောက်ထပ် <xliff:g id="NUMBER_1">%d</xliff:g> အကြိမ် မမှန်ကန်ပါက သင့်ဖုန်းအား အီးမေးလ်အသုံးပြု၍ သော့ဖွင့်ရန် တောင်းဆိုပါလိမ့်မည်။ \n\n <xliff:g id="NUMBER_2">%d</xliff:g> စက္ကန့်အကြာတွင် ပြန်လည် ကြိုးစားပါ"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ဆင်းကဒ် လျှို့ဝှက် အမှတ် မှားယွင်းပါသည်, ဖုန်းလိုင်းဌာနကို ဆက်သွယ်ရမည် ဖြစ်ပါတယ်"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"ဆင်းမ်ကဒ်၏ လျှို့ဝှက်နံပါတ် မှားနေပါသည်၊ သင်၏ စက်ပစ္စည်းကို သော့ဖွင့်ရန် ဖုန်းလိုင်းဌာနသို့ မဆက်သွယ်မီ သင့်တွင် <xliff:g id="NUMBER">%d</xliff:g> ခါ ကြိုးစားခွင့် ကျန်ပါသေးသည်။"</item> - <item quantity="other" msgid="2215723361575359486">"ဆင်းမ်ကဒ်၏ လျှို့ဝှက်နံပါတ် မှားနေပါသည်၊ သင့်တွင် <xliff:g id="NUMBER">%d</xliff:g> ခါ ကြိုးစားခွင့် ကျန်ပါသေးသည်။"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">ဆင်းမ်ကဒ်၏ ပင်နံပါတ် မှားနေပါသည်၊ သင့်တွင်<xliff:g id="NUMBER_1">%d</xliff:g> ခါ ကြိုးစားခွင့် ကျန်ပါသေးသည်။</item> + <item quantity="one">ဆင်းမ်ကဒ်၏ ပင်နံပါတ် မှားနေပါသည်၊ သင့်ကိရိယာကို ဖွင့်ရန် မိုဘိုင်းဖုန်းဆက်သွယ်ရေးဝန်ဆောင်မှုဌာနသို့ မဆက်သွယ်မီ သင့်တွင် <xliff:g id="NUMBER_0">%d</xliff:g> ခါ ကြိုးစားခွင့် ကျန်ပါသေးသည်။</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ဆင်းမ်ကဒ်သုံးလို့မရတော့ပါ. ဖုန်းလိုင်းဌာနကို ဆက်သွယ်ပါ"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"ဆင်းမ်ကဒ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့်ကုဒ်နံပါတ် မှားနေပါသည်။ နောက်ထပ် <xliff:g id="NUMBER">%d</xliff:g> ခါ ကြိုးစား၍ မအောင်မြင်ံပါက ဆင်းမ်ကဒ် ဆက်မသုံးနိုင်အောင် ပျက်စီးသွားမည် ဖြစ်ပါသည်"</item> - <item quantity="other" msgid="5477305226026342036">"ဆင်းမ်ကဒ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ်နံပါတ် မှားနေပါသည်။ နောက်ထပ် <xliff:g id="NUMBER">%d</xliff:g> ခါ ကြိုးစား၍ မအောင်မြင်ံပါက ဆင်းမ်ကဒ် ဆက်မသုံးနိုင်အောင် ပျက်စီးသွားမည် ဖြစ်ပါသည်"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">ဆင်းမ်ကဒ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ် (PUK) မမှန်ပါ၊ ဆင်းမ်ကဒ်သည် ဆက်လက်အသုံးမပြုနိုင်အောင် မဖြစ်လာခင် သင့်တွင် <xliff:g id="NUMBER_1">%d</xliff:g>ခါ ကြိုးစားခွင့်များကျန်ပါသေးသည်။</item> + <item quantity="one">ဆင်းမ်ကဒ်၏ ပင်နံပါတ်ပြန်ဖွင့်သည့် ကုဒ် (PUK) မမှန်ပါ၊ ဆင်းမ်ကဒ်သည် ဆက်လက်အသုံးမပြုနိုင်အောင် မဖြစ်လာခင် သင့်တွင် <xliff:g id="NUMBER_0">%d</xliff:g> ခါ ကြိုးစားခွင့်ကျန်ပါသေးသည်။</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"ဆင်းမ်ကဒ် ပင် လုပ်ဆောင်မှု မအောင်မြင်ပါ"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ် လုပ်ဆောင်မှု မအောင်မြင်ပါ"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"ကုဒ်နံပါတ်ကို လက်ခံလိုက်ပါသည်"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"ဆားဗစ် မရှိပါ"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ထည့်သွင်းခြင်းခလုတ်အား ပြောင်းခြင်း"</string> </resources> diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml index c84f74e..efc25cf 100644 --- a/packages/Keyguard/res/values-nb/strings.xml +++ b/packages/Keyguard/res/values-nb/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp nettbrettet via en e-postkonto.\n\n Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp telefonen via en e-postkonto.\n\n Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Feil PIN-kode for SIM-kortet. Du må nå kontakte operatøren din for å låse opp enheten."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten."</item> - <item quantity="other" msgid="2215723361575359486">"Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen.</item> + <item quantity="one">Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet er ubrukelig. Kontakt operatøren din."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig."</item> - <item quantity="other" msgid="5477305226026342036">"Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER_1">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig.</item> + <item quantity="one">Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER_0">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"PIN-koden for SIM-kortet ble avvist."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK-koden for SIM-kortet ble avvist."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden er godkjent."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen tjeneste."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string> </resources> diff --git a/packages/Keyguard/res/values-ne-rNP/strings.xml b/packages/Keyguard/res/values-ne-rNP/strings.xml index d9d0e2e..7f6843a 100644 --- a/packages/Keyguard/res/values-ne-rNP/strings.xml +++ b/packages/Keyguard/res/values-ne-rNP/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तपाईंले गलत तरिकाले आफ्नो अनलक ढाँचा <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डहरूमा।"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तपाईँले आफ्नो अनलक ढाँचा गलत रूपमा <xliff:g id="NUMBER_0">%d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN कोड गलत छ। अब तपाईंले अाफ्नो उपकरण खोल्नलाई तपाईंको वाहकसँग सम्पर्क गर्नै पर्दर।"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN कोड गलत छ, तपाईंले अाफ्नो उपकरण खोल्नलाई तपाईंको वाहकसँग सम्पर्क गर्नै पर्दछ यस अघि तपाईंसँग <xliff:g id="NUMBER">%d</xliff:g> बाँकी प्रयास छ।"</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN कोड गलत छ, तपाईंसँग <xliff:g id="NUMBER">%d</xliff:g> बाँकी प्रयासहरू छन्।"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM प्रयोग बिहिन छ। तपाईंको वाहकलाई सम्पर्क गर्नुहोस्।"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUK कोड गलत छ, तपाईंसँग SIM स्थायी रूपमा काम नलाग्ने हुनु अघि <xliff:g id="NUMBER">%d</xliff:g> बाँकी प्रयास छ।"</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK कोड गलत छ, तपाईंसँग SIM स्थायी रूपमा काम नलाग्ने हुनु अघि <xliff:g id="NUMBER">%d</xliff:g> बाँकी प्रयासहरू छन्।"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK कोड गलत छ, तपाईंसँग SIM स्थायी रूपमा काम नलाग्ने हुनु अघि <xliff:g id="NUMBER_1">%d</xliff:g> पटक प्रयास बाँकी छ।</item> + <item quantity="one">SIM PUK कोड गलत छ, तपाईंसँग SIM स्थायी रूपमा काम नलाग्ने हुनु अघि <xliff:g id="NUMBER_0">%d</xliff:g> पटक प्रयास बाँकी छ।</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN राख्ने कार्य बिफल भयो!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK राख्ने कार्य बिफल भयो!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"कोड स्वीकृत!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"कुनै सेवा छैन।"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट विधि बटन स्विच गर्नुहोस्।"</string> </resources> diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml index 2011b7c..3a8d91c 100644 --- a/packages/Keyguard/res/values-nl/strings.xml +++ b/packages/Keyguard/res/values-nl/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw tablet te ontgrendelen via een e-mailaccount.\n\n Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw telefoon te ontgrendelen via een e-mailaccount.\n\n Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Onjuiste pincode voor simkaart. U moet nu contact opnemen met uw provider om uw apparaat te ontgrendelen."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> poging over voordat u contact met uw provider moet opnemen om uw apparaat te ontgrendelen."</item> - <item quantity="other" msgid="2215723361575359486">"Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> pogingen over."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over.</item> + <item quantity="one">Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat u contact met uw provider moet opnemen om uw apparaat te ontgrendelen.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Simkaart is onbruikbaar. Neem contact op met uw provider."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> poging over voordat de simkaart definitief onbruikbaar wordt."</item> - <item quantity="other" msgid="5477305226026342036">"Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> pogingen over voordat de simkaart definitief onbruikbaar wordt."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over voordat de simkaart definitief onbruikbaar wordt.</item> + <item quantity="one">Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat de simkaart definitief onbruikbaar wordt.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Bewerking met pincode voor simkaart mislukt."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Bewerking met pukcode voor simkaart is mislukt."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Code geaccepteerd."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Geen service"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string> </resources> diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml index 38b4676..40cd5e6 100644 --- a/packages/Keyguard/res/values-pl/strings.xml +++ b/packages/Keyguard/res/values-pl/strings.xml @@ -79,7 +79,7 @@ <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zbyt wiele prób narysowania wzoru"</string> <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowy PIN. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowe hasło. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> - <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> narysowałeś nieprawidłowy wzór odblokowania. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> + <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g> razy narysowałeś nieprawidłowy wzór odblokowania. \n\nSpróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="8774056606869646621">"Próbowałeś <xliff:g id="NUMBER_0">%d</xliff:g> razy nieprawidłowo odblokować tablet. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach tablet zostanie zresetowany, co spowoduje skasowanie z niego wszystkich danych."</string> <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="1843331751334128428">"Próbowałeś <xliff:g id="NUMBER_0">%d</xliff:g> razy nieprawidłowo odblokować telefon. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach telefon zostanie zresetowany, co spowoduje skasowanie z niego wszystkich danych."</string> <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="258925501999698032">"Próbowałeś <xliff:g id="NUMBER">%d</xliff:g> razy nieprawidłowo odblokować tablet. Zostanie on zresetowany, co spowoduje skasowanie z niego wszystkich danych."</string> @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie tabletu przy użyciu danych logowania na konto Google.\n\n Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie telefonu przy użyciu danych logowania na konto Google.\n\n Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nieprawidłowy kod PIN karty SIM. Musisz teraz skontaktować się z operatorem, by odblokował Twoje urządzenie."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> próbę, zanim będziesz musiał skontaktować się z operatorem, by odblokował Twoje urządzenie."</item> - <item quantity="other" msgid="2215723361575359486">"Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> prób(y)."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="few">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item> + <item quantity="many">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób.</item> + <item quantity="other">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby.</item> + <item quantity="one">Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER_0">%d</xliff:g> próbę, zanim będziesz musiał skontaktować się z operatorem, by odblokować swoje urządzenie.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Karta SIM została trwale zablokowana. Skontaktuj się z operatorem."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> próbę, zanim karta SIM zostanie trwale zablokowana."</item> - <item quantity="other" msgid="5477305226026342036">"Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> prób(y), zanim karta SIM zostanie trwale zablokowana."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="few">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana.</item> + <item quantity="many">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> prób, zanim karta SIM zostanie trwale zablokowana.</item> + <item quantity="other">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_1">%d</xliff:g> próby, zanim karta SIM zostanie trwale zablokowana.</item> + <item quantity="one">Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER_0">%d</xliff:g> próbę, zanim karta SIM zostanie trwale zablokowana.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operacja z kodem PIN karty SIM nie udała się."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operacja z kodem PUK karty SIM nie udała się."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod został zaakceptowany."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Brak usługi."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string> </resources> diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml index e9ab8de..9068898 100644 --- a/packages/Keyguard/res/values-pt-rPT/strings.xml +++ b/packages/Keyguard/res/values-pt-rPT/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN do cartão SIM incorreto. Tem de contactar o seu operador para desbloquear o dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativa antes de necessitar de contactar o seu operador para desbloquear o dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativas."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas.</item> + <item quantity="one">Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de necessitar de contactar o seu operador para desbloquear o dispositivo.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Cartão SIM inutilizável. Contacte o seu operador."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável."</item> - <item quantity="other" msgid="5477305226026342036">"Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável.</item> + <item quantity="one">Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER_0">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Falha ao introduzir o PIN do cartão SIM!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Falha ao introduzir o PUK do cartão SIM!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceite!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sem serviço."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alternar botão de método de introdução."</string> </resources> diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml index 0e2cba7..690b693 100644 --- a/packages/Keyguard/res/values-pt/strings.xml +++ b/packages/Keyguard/res/values-pt/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear seu tablet.\n\n Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear.\n\n Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN do SIM incorreto. Entre em contato com a operadora para desbloquear o dispositivo."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, será necessário entrar em contato com a operadora para desbloquear o dispositivo."</item> - <item quantity="other" msgid="2215723361575359486">"Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item> + <item quantity="other">Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"O SIM está inutilizável. Entre em contato com a operadora."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g> Caso o código correto não seja digitado, o SIM se tornará permanentemente inutilizável."</item> - <item quantity="other" msgid="5477305226026342036">"Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, o SIM se tornará permanentemente inutilizável."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o SIM não poderá mais ser usado.</item> + <item quantity="other">Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER_1">%d</xliff:g>. Caso o código correto não seja digitado, o SIM não poderá mais ser usado.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Falha na operação de PIN do SIM."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Falha na operação de PUK do SIM."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceito."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Sem serviço."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string> </resources> diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml index e36a37d..0c11689 100644 --- a/packages/Keyguard/res/values-ro/strings.xml +++ b/packages/Keyguard/res/values-ro/strings.xml @@ -25,7 +25,7 @@ <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Introduceți codul PUK pentru cardul SIM și codul PIN nou"</string> <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Codul PUK pentru cardul SIM"</string> <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Codul PIN nou pentru cardul SIM"</string> - <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeţi şi introduceţi parola"</font></string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeţi și introduceţi parola"</font></string> <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduceţi parola pentru a debloca"</string> <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduceţi codul PIN pentru a debloca"</string> <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Cod PIN incorect."</string> @@ -95,17 +95,20 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi tableta cu ajutorul unui cont de e-mail.\n\n Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi telefonul cu ajutorul unui cont de e-mail.\n\n Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Codul PIN pentru cardul SIM este incorect. Contactați operatorul pentru a vă debloca dispozitivul."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Codul PIN pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul."</item> - <item quantity="other" msgid="2215723361575359486">"Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercări."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="few">Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări.</item> + <item quantity="other">Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări.</item> + <item quantity="one">Codul PIN pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER_0">%d</xliff:g> încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Cardul SIM nu poate fi utilizat. Contactați operatorul."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Codul PUK pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercare până când cardul SIM va deveni inutilizabil definitiv."</item> - <item quantity="other" msgid="5477305226026342036">"Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercări până când cardul SIM va deveni inutilizabil definitiv."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="few">Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări până când cardul SIM va deveni inutilizabil definitiv.</item> + <item quantity="other">Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> de încercări până când cardul SIM va deveni inutilizabil definitiv.</item> + <item quantity="one">Codul PUK pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER_0">%d</xliff:g> încercare până când cardul SIM va deveni inutilizabil definitiv.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Deblocarea cu ajutorul codului PIN pentru cardul SIM nu a reușit!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Deblocarea cu ajutorul codului PUK pentru cardul SIM nu a reușit!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Cod acceptat!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Fără serviciu."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Buton pentru comutarea metodei de introducere."</string> </resources> diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml index 9ea14ff..48fd4f6 100644 --- a/packages/Keyguard/res/values-ru/strings.xml +++ b/packages/Keyguard/res/values-ru/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки планшетного ПК потребуется войти в аккаунт Google.\n\nПовтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки телефона потребуется войти в аккаунт Google.\n\nПовтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неверный PIN-код. Обратитесь к оператору связи, чтобы разблокировать SIM-карту."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Неверный PIN-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи."</item> - <item quantity="other" msgid="2215723361575359486">"Неверный PIN-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Неверный PIN-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи.</item> + <item quantity="few">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи.</item> + <item quantity="many">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи.</item> + <item quantity="other">Неверный PIN-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-карта заблокирована навсегда. Обратитесь к оператору связи."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Неверный PUK-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована навсегда."</item> - <item quantity="other" msgid="5477305226026342036">"Неверный PUK-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована навсегда."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Неверный PUK-код. Осталась <xliff:g id="NUMBER_1">%d</xliff:g> попытка. После этого SIM-карта будет заблокирована навсегда.</item> + <item quantity="few">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попытки. После этого SIM-карта будет заблокирована навсегда.</item> + <item quantity="many">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована навсегда.</item> + <item quantity="other">Неверный PUK-код. Осталось <xliff:g id="NUMBER_1">%d</xliff:g> попыток. После этого SIM-карта будет заблокирована навсегда.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Не удалось разблокировать SIM-карту"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Не удалось разблокировать SIM-карту"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Код принят"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Нет сигнала."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string> </resources> diff --git a/packages/Keyguard/res/values-si-rLK/strings.xml b/packages/Keyguard/res/values-si-rLK/strings.xml index af10fc9..740b0ea 100644 --- a/packages/Keyguard/res/values-si-rLK/strings.xml +++ b/packages/Keyguard/res/values-si-rLK/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> කින් උත්සාහ කරන්න."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"වැරදී SIM PIN කේතයකි, ඔබගේ දුරකතනයේ අඟුල හැරීමට ඔබගේ වාහකයා ඔබ දැන් සම්බන්ධ කරගත යුතුය."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"වැරදී SIM PIN කේතයකි, ඔබගේ දුරකතනයේ අඟුල හැරීමට ඔබගේ වාහකයා සම්බන්ධ කරගැනීමට පෙර ඔබ සතුව තවත් උත්සාහයන් <xliff:g id="NUMBER">%d</xliff:g> ඉතිරිව ඇත."</item> - <item quantity="other" msgid="2215723361575359486">"වැරදී SIM PIN කේතයකි, ඔබ සතුව තවත් උත්සාහයන් <xliff:g id="NUMBER">%d</xliff:g> ඉතිරිව ඇත."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">වැරදි SIM PIN කේතයකි, ඔබට උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඉතිරිව ඇත.</item> + <item quantity="other">වැරදි SIM PIN කේතයකි, ඔබට උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඉතිරිව ඇත.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM කාඩ් පත භාවිතා කළ නොහැක. ඔබගේ වාහකය සම්බන්ධ කරගන්න."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"වැරදී SIM PUK කේතයකි, SIM කාඩ් පත සදාකාලිකව භාවිතා කළ නොහැකි තත්ත්වයට පත්වීමට ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER">%d</xliff:g> ඉතිරිව ඇත."</item> - <item quantity="other" msgid="5477305226026342036">"වැරදී SIM PUK කේතයකි, SIM කාඩ් පත සදාකාලිකව භාවිතා කළ නොහැකි තත්ත්වයට පත්වීමට ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER">%d</xliff:g> ඉතිරිව ඇත."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">වැරදී SIM PUK කේතයකි, SIM කාඩ් පත ස්ථිරවම පාවිච්චි කළ නොහැකි ලෙසට පත්වීමට පෙර ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g> ඉතිරිව ඇත.</item> + <item quantity="other">වැරදී SIM PUK කේතයකි, SIM කාඩ් පත ස්ථිරවම පාවිච්චි කළ නොහැකි ලෙසට පත්වීමට පෙර ඔබට තවත් උත්සාහයන් <xliff:g id="NUMBER_1">%d</xliff:g> ඉතිරිව ඇත.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN ක්රියාවලිය අපොහොසත් විය!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK ක්රියාවලිය අපොහොසත් විය!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"කේතය පිළිගැණුනි!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"සේවාව නැත."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ආදාන ක්රමය මාරු කිරීමේ බොත්තම."</string> </resources> diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml index f1b92ac..2fbe838 100644 --- a/packages/Keyguard/res/values-sk/strings.xml +++ b/packages/Keyguard/res/values-sk/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších <xliff:g id="NUMBER_1">%d</xliff:g> neúspešných pokusoch sa zobrazí výzva na odomknutie tabletu pomocou e-mailového účtu.\n\n Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e-mailového účtu.\n\n Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nesprávny kód PIN karty SIM. Teraz musíte kontaktovať svojho operátora, aby vám odomkol zariadenie."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Nesprávny kód PIN karty SIM. Zostáva vám <xliff:g id="NUMBER">%d</xliff:g> pokus, inak budete musieť kontaktovať svojho operátora, aby vám odomkol zariadenie."</item> - <item quantity="other" msgid="2215723361575359486">"Nesprávny kód PIN karty SIM. Počet zostávajúcich pokusov: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="few">Nesprávny kód PIN SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy.</item> + <item quantity="many">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusu.</item> + <item quantity="other">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusov.</item> + <item quantity="one">Nesprávny kód PIN SIM karty. Zostáva vám <xliff:g id="NUMBER_0">%d</xliff:g> pokus, potom budete musieť kontaktovať svojho operátora, aby vám odomkol zariadenie.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Karta SIM je nepoužiteľná. Kontaktujte svojho operátora."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Nesprávny kód PUK karty SIM. Zostáva vám <xliff:g id="NUMBER">%d</xliff:g> pokus, inak sa vaša karta SIM natrvalo zablokuje."</item> - <item quantity="other" msgid="5477305226026342036">"Nesprávny kód PUK karty SIM. Počet zostávajúcich pokusov pred trvalým zablokovaním karty SIM: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="few">Nesprávny kód PUK SIM karty. Zostávajú vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusy, potom sa SIM karta natrvalo zablokuje.</item> + <item quantity="many">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusu, potom sa SIM karta natrvalo zablokuje.</item> + <item quantity="other">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_1">%d</xliff:g> pokusov, potom sa SIM karta natrvalo zablokuje.</item> + <item quantity="one">Nesprávny kód PUK SIM karty. Zostáva vám <xliff:g id="NUMBER_0">%d</xliff:g> pokus, potom sa SIM karta natrvalo zablokuje.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operácia kódu PIN karty SIM zlyhala!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operácia kódu PUK karty SIM zlyhala!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód bol prijatý!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Žiadny signál"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačidlo prepnutia metódy vstupu."</string> </resources> diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml index d67c212..a79d99a 100644 --- a/packages/Keyguard/res/values-sl/strings.xml +++ b/packages/Keyguard/res/values-sl/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da tablični računalnik odklenete z e-poštnim računom.\n\nPoskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da odklenete telefon z Googlovimi podatki za prijavo.\n\nPoskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Napačna koda PIN kartice SIM. Zdaj se boste morali za odklenitev naprave obrniti na operaterja."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER">%d</xliff:g> poskus. Potem se boste morali za odklenitev naprave obrniti na operaterja."</item> - <item quantity="other" msgid="2215723361575359486">"Napačna koda PIN kartice SIM. Poskusite lahko še <xliff:g id="NUMBER">%d</xliff:g>-krat."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus.</item> + <item quantity="two">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa.</item> + <item quantity="few">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskuse.</item> + <item quantity="other">Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusov.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Kartica SIM ni več uporabna. Obrnite se na operaterja."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER">%d</xliff:g> poskus. Potem bo kartica SIM postala trajno neuporabna."</item> - <item quantity="other" msgid="5477305226026342036">"Napačna koda PUK kartice SIM. Poskusite lahko še <xliff:g id="NUMBER">%d</xliff:g>-krat. Potem bo kartica SIM postala trajno neuporabna."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskus. Potem bo kartica SIM postala trajno neuporabna.</item> + <item quantity="two">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusa. Potem bo kartica SIM postala trajno neuporabna.</item> + <item quantity="few">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskuse. Potem bo kartica SIM postala trajno neuporabna.</item> + <item quantity="other">Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER_1">%d</xliff:g> poskusov. Potem bo kartica SIM postala trajno neuporabna.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Postopek za odklepanje s kodo PIN kartice SIM ni uspel."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Postopek za odklepanje s kodo PUK kartice SIM ni uspel."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Koda je sprejeta."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ni storitve."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklop načina vnosa."</string> </resources> diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml index 8438315..b7c439b 100644 --- a/packages/Keyguard/res/values-sr/strings.xml +++ b/packages/Keyguard/res/values-sr/strings.xml @@ -95,17 +95,20 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште.\n\nПокушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште.\n\nПокушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Нетачан SIM PIN кôд. Сада морате да контактирате мобилног оператера да бисте откључали уређај."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушај, а онда морате да контактирате мобилног оператера да бисте откључали уређај."</item> - <item quantity="other" msgid="2215723361575359486">"Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушаја."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај.</item> + <item quantity="few">Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item> + <item quantity="other">Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM картица је неупотребљива. Контактирајте мобилног оператера."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушај пре него што SIM картица постане трајно неупотребљива."</item> - <item quantity="other" msgid="5477305226026342036">"Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушај пре него што SIM картица постане трајно неупотребљива.</item> + <item quantity="few">Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива.</item> + <item quantity="other">Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER_1">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Радња са SIM PIN кодом није успела!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Радња са SIM PUK кодом није успела!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Кôд је прихваћен!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Офлајн сте."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Дугме Промени метод уноса."</string> </resources> diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml index d55c72f..75adc2c 100644 --- a/packages/Keyguard/res/values-sv/strings.xml +++ b/packages/Keyguard/res/values-sv/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp surfplattan med ett e-postkonto.\n\n Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp mobilen med hjälp av ett e-postkonto.\n\n Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Du angav fel pinkod för SIM-kortet och måste nu kontakta operatören för att låsa upp enheten."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten."</item> - <item quantity="other" msgid="2215723361575359486">"Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår.</item> + <item quantity="one">Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet är obrukbart. Kontakta operatören."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart."</item> - <item quantity="other" msgid="5477305226026342036">"Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER_1">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart.</item> + <item quantity="one">Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER_0">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Det gick inte att låsa upp med pinkoden för SIM-kortet."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Det gick inte att låsa upp med PUK-koden för SIM-kortet."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden godkändes!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ingen tjänst."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knapp för byte av inmatningsmetod."</string> </resources> diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml index bc8cffb..886c22e 100644 --- a/packages/Keyguard/res/values-sw/strings.xml +++ b/packages/Keyguard/res/values-sw/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Umekosea katika kuweka mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> bila kufaulu, utaombwa kufungua kompyuta yako ndogo kwa kutumia akaunti yako ya barua pepe.\n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe.\n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Msimbo wa PIN ya SIM usiosahihi sasa lazima uwasiliane na mtoa huduma wako ili ufungue kifaa chako."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Msimbo wa PIN ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ulazimike kuwasiliana na mtoa huduma wako ili ufungue kifaa chako."</item> - <item quantity="other" msgid="2215723361575359486">"Msimbo wa PIN ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Msimbo wa PIN ya SIM si sahihi, umebakisha majaribio <xliff:g id="NUMBER_1">%d</xliff:g>.</item> + <item quantity="one">Msimbo wa PIN ya SIM si sahihi, umebakisha majaribio <xliff:g id="NUMBER_0">%d</xliff:g> kabla ya kulazimika kuwasiliana na mtoa huduma wako ili afungue kifaa chako.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM haiwezi kutumika. Wasiliana na mtoa huduma wako."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Msimbo wa PUK ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa."</item> - <item quantity="other" msgid="5477305226026342036">"Msimbo wa PUK ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Msimbo wa PUK ya SIM si sahihi, umebakisha majaribio <xliff:g id="NUMBER_1">%d</xliff:g> kabla SIM haijafungwa kabisa.</item> + <item quantity="one">Msimbo wa PUK ya SIM si sahihi, umebakisha majaribio <xliff:g id="NUMBER_0">%d</xliff:g> kabla SIM haijfungwa kabisa.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Utendakazi wa PIN ya SIM umeshindwa!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Utendakazi wa PUK ya SIM umeshindwa!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Msimbo Umekubaliwa!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Hakuna huduma."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Swichi kitufe cha mbinu ingizi."</string> </resources> diff --git a/packages/Keyguard/res/values-ta-rIN/strings.xml b/packages/Keyguard/res/values-ta-rIN/strings.xml index 761cea8..89c1480 100644 --- a/packages/Keyguard/res/values-ta-rIN/strings.xml +++ b/packages/Keyguard/res/values-ta-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"திறப்பதற்கான வடிவத்தை <xliff:g id="NUMBER_0">%d</xliff:g> முறை தவறாக வரைந்துள்ளீர்கள். மேலும் <xliff:g id="NUMBER_1">%d</xliff:g> தோல்வி முயற்சிகளுக்குப் பிறகு, மின்னஞ்சல் கணக்கைப் பயன்படுத்தி உங்கள் டேப்லெட்டைத் திறக்க கேட்கப்படுவீர்கள்.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> வினாடிகளில் மீண்டும் முயற்சிக்கவும்."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"திறப்பதற்கான வடிவத்தை <xliff:g id="NUMBER_0">%d</xliff:g> முறை தவறாக வரைந்துள்ளீர்கள். மேலும் <xliff:g id="NUMBER_1">%d</xliff:g> தோல்வி முயற்சிகளுக்குப் பிறகு, மின்னஞ்சல் கணக்கைப் பயன்படுத்தி உங்கள் மொபைலைத் திறக்கக் கேட்கப்படுவீர்கள்.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> வினாடிகள் கழித்து முயற்சிக்கவும்."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"சிம் பின் குறியீடு தவறானது, உங்கள் சாதனத்தின் தடையை நீக்க, உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்ள வேண்டும்."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"சிம் பின் குறியீடு தவறானது, உங்கள் சாதனத்தைத் திறக்க, உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளும் முன், மேலும் <xliff:g id="NUMBER">%d</xliff:g> முறை முயர்ச்சிக்கலாம்."</item> - <item quantity="other" msgid="2215723361575359486">"சிம் பின் குறியீடு தவறானது, மேலும் <xliff:g id="NUMBER">%d</xliff:g> முறை முயற்சிக்கலாம்."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">சிம்மின் பின் குறியீடு தவறானது, உங்களிடம் <xliff:g id="NUMBER_1">%d</xliff:g> முயற்சிகள் மீதமுள்ளன.</item> + <item quantity="one">சிம்மின் பின் குறியீடு தவறானது, மேலும் <xliff:g id="NUMBER_0">%d</xliff:g> முயற்சிக்குப் பின்னர், சாதனத்தைத் திறக்க, கண்டிப்பாக உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்ள வேண்டும்.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"சிம் பயன்பாட்டிற்கு உகந்தது அல்ல. உங்கள் மொபைல் நிறுவனத்தைத் தொடர்புகொள்ளவும்."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"சிம் PUK குறியீடு தவறானது, சிம் நிரந்தரமாகப் பயன்படுத்த முடியாமல் போவதற்கு முன், நீங்கள் <xliff:g id="NUMBER">%d</xliff:g> முறை முயர்ச்சிக்கலாம்."</item> - <item quantity="other" msgid="5477305226026342036">"சிம் PUK குறியீடு தவறானது, சிம் நிரந்தரமாகப் பயன்படுத்த முடியாமல் போவதற்கு முன், நீங்கள் <xliff:g id="NUMBER">%d</xliff:g> முறை முயற்சிக்கலாம்."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">சிம் PUK குறியீடு தவறானது, நிரந்தரமாக சிம் முடக்கப்படும் முன், நீங்கள் <xliff:g id="NUMBER_1">%d</xliff:g> முறை முயற்சிக்கலாம்.</item> + <item quantity="one">சிம்மின் PUK குறியீடு தவறானது, நிரந்தரமாக சிம் முடக்கப்படும் முன், நீங்கள் <xliff:g id="NUMBER_0">%d</xliff:g> முறை முயற்சிக்கலாம்.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"சிம் பின் செயல்பாடு தோல்வி!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"சிம் PUK செயல்பாடு தோல்வி!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"குறியீடு ஏற்கப்பட்டது!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"சேவை இல்லை."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"உள்ளீட்டு முறையை மாற்றும் பொத்தான்."</string> </resources> diff --git a/packages/Keyguard/res/values-te-rIN/strings.xml b/packages/Keyguard/res/values-te-rIN/strings.xml index 67d843c..2f51742 100644 --- a/packages/Keyguard/res/values-te-rIN/strings.xml +++ b/packages/Keyguard/res/values-te-rIN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ టాబ్లెట్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"మీరు మీ అన్లాక్ నమూనాను <xliff:g id="NUMBER_0">%d</xliff:g> సార్లు తప్పుగా గీసారు. మరో <xliff:g id="NUMBER_1">%d</xliff:g> విఫల ప్రయత్నాల తర్వాత, ఇమెయిల్ ఖాతాను ఉపయోగించి మీ ఫోన్ను అన్లాక్ చేయాల్సిందిగా మిమ్మల్ని అడుగుతారు.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> సెకన్లలో మళ్లీ ప్రయత్నించండి."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"సిమ్ పిన్ కోడ్ చెల్లదు, మీరు ఇప్పుడు మీ పరికరాన్ని అన్లాక్ చేయడానికి తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించండి."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"సిమ్ పిన్ కోడ్ చెల్లదు, మీరు మీ పరికరాన్ని అన్లాక్ చేయడానికి తప్పనిసరిగా మీ క్యారియర్ను సంప్రదించాల్సిన పరిస్థితి ఏర్పడకుండా ఉండటానికి మీకు <xliff:g id="NUMBER">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది."</item> - <item quantity="other" msgid="2215723361575359486">"సిమ్ పిన్ కోడ్ చెల్లదు, మీకు <xliff:g id="NUMBER">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"సిమ్ నిరుపయోగమైనది. మీ క్యారియర్ను సంప్రదించండి."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"సిమ్ PUK కోడ్ చెల్లదు, సిమ్ శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="NUMBER">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది."</item> - <item quantity="other" msgid="5477305226026342036">"సిమ్ PUK కోడ్ చెల్లదు, సిమ్ శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="NUMBER">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK కోడ్ చెల్లదు, SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="NUMBER_1">%d</xliff:g> ప్రయత్నాలు మిగిలి ఉన్నాయి.</item> + <item quantity="one">SIM PUK కోడ్ చెల్లదు, SIM శాశ్వతంగా నిరుపయోగం కాకుండా ఉండటానికి మీకు <xliff:g id="NUMBER_0">%d</xliff:g> ప్రయత్నం మిగిలి ఉంది.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"సిమ్ పిన్ చర్య విఫలమైంది!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"సిమ్ PUK చర్య విఫలమైంది!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"కోడ్ ఆమోదించబడింది!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"సేవ లేదు."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ఇన్పుట్ పద్ధతి మార్చే బటన్."</string> </resources> diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml index ca2eab2..6d0d026 100644 --- a/packages/Keyguard/res/values-th/strings.xml +++ b/packages/Keyguard/res/values-th/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกแท็บเล็ตโดยใช้บัญชีอีเมล\n\n โปรดลองอีกครั้งใน <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้ับัญชีอีเมล\n\n โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"รหัส PIN ของซิมไม่ถูกต้อง ตอนนี้คุณต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ"</item> - <item quantity="other" msgid="2215723361575359486">"รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้ง"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง</item> + <item quantity="one">รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ซิมไม่สามารถใช้งานได้ ติดต่อผู้ให้บริการของคุณ"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร"</item> - <item quantity="other" msgid="5477305226026342036">"รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร</item> + <item quantity="one">รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"การปลดล็อกด้วย PIN ของซิมล้มเหลว!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"การปลดล็อกด้วย PUK ของซิมล้มเหลว!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"รหัสได้รับการยอมรับ!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"ไม่มีบริการ"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string> </resources> diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml index 7dbc067..8125efe 100644 --- a/packages/Keyguard/res/values-tl/strings.xml +++ b/packages/Keyguard/res/values-tl/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang tablet mo gamit ang isang email account.\n\n Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang telepono mo gamit ang isang email account.\n\n Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Maling PIN code ng SIM, dapat ka nang makipag-ugnay sa iyong carrier upang i-unlock ang iyong device."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago ka dapat makipag-ugnay sa iyong carrier upang i-unlock ang iyong device."</item> - <item quantity="other" msgid="2215723361575359486">"Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok.</item> + <item quantity="other">Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Hindi magagamit ang SIM. Makipag-ugnay sa iyong carrier."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago maging permanenteng hindi magagamit ang SIM."</item> - <item quantity="other" msgid="5477305226026342036">"Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago maging permanenteng hindi magagamit ang SIM."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> natitirang pagsubok bago tuluyang hindi magamit ang SIM.</item> + <item quantity="other">Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER_1">%d</xliff:g> na natitirang pagsubok bago tuluyang hindi magamit ang SIM.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Nabigo ang operasyon ng SIM PIN!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Nabigo ang operasyon ng SIM PUK!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Tinanggap ang Code!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Walang serbisyo."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button na pamamaraan ng pag-input."</string> </resources> diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml index 5a13aa9..aa32baa 100644 --- a/packages/Keyguard/res/values-tr/strings.xml +++ b/packages/Keyguard/res/values-tr/strings.xml @@ -61,7 +61,7 @@ <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Desen"</string> <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifre"</string> <string name="kg_wrong_pin" msgid="1131306510833563801">"Yanlış PIN"</string> - <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> saniye içinde yeniden deneyin."</string> + <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> saniye içinde tekrar deneyin."</string> <string name="kg_pattern_instructions" msgid="398978611683075868">"Deseninizi çizin"</string> <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodunu girin"</string> <string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"\"<xliff:g id="CARRIER">%1$s</xliff:g>\" için SIM PIN\'ini girin"</string> @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra, tabletinizi bir e-posta hesabı kullanarak açmanız istenir.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra telefonunuzu bir e-posta hesabı kullanarak açmanız istenir.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Yanlış SIM PIN kodu. Cihazınızın kilidini açmak için artık operatörünüzle bağlantı kurmanız gerekiyor."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Yanlış SIM PIN kodu. Cihazının kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item> - <item quantity="other" msgid="2215723361575359486">"Yanlış SIM PIN kodu. <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Yanlış SIM PIN kodu, <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item> + <item quantity="one">Yanlış SIM PIN kodu. Cihazınızın kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kullanılamaz. Operatörünüzle bağlantı kurun."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item> - <item quantity="other" msgid="5477305226026342036">"Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Yanlış SIM PUK kodu, SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER_1">%d</xliff:g> deneme hakkınız kaldı.</item> + <item quantity="one">Yanlış SIM PUK kodu, SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER_0">%d</xliff:g> deneme hakkınız kaldı.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN işlemi başarısız oldu!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK işlemi başarısız oldu!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod Kabul Edildi!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Hizmet yok."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string> </resources> diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml index cb51ec4..9e52283 100644 --- a/packages/Keyguard/res/values-uk/strings.xml +++ b/packages/Keyguard/res/values-uk/strings.xml @@ -95,17 +95,22 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати планшетний ПК за допомогою облікового запису електронної пошти.\n\n Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати телефон за допомогою облікового запису електронної пошти.\n\n Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неправильний PIN-код SIM-карти. Зв’яжіться зі своїм оператором, щоб розблокувати пристрій."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Неправильний PIN-код SIM-карти. У вас залишилась <xliff:g id="NUMBER">%d</xliff:g> спроба. Після цього потрібно буде зв’язатися з оператором, щоб розблокувати пристрій."</item> - <item quantity="other" msgid="2215723361575359486">"Неправильний PIN-код SIM-карти. У вас залишилося стільки спроб: <xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Неправильний PIN-код SIM-карти. У вас залишилась <xliff:g id="NUMBER_1">%d</xliff:g> спроба.</item> + <item quantity="few">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item> + <item quantity="many">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроб.</item> + <item quantity="other">Неправильний PIN-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-карту заблоковано. Зв’яжіться з оператором."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Неправильний PUK-код SIM-карти. У вас залишилась <xliff:g id="NUMBER">%d</xliff:g> спроба. Після цього SIM-карту буде назавжди заблоковано."</item> - <item quantity="other" msgid="5477305226026342036">"Неправильний PUK-код SIM-карти. У вас залишилося стільки спроб: <xliff:g id="NUMBER">%d</xliff:g>. Після цього SIM-карту буде назавжди заблоковано."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Неправильний PUK-код SIM-карти. У вас залишилася <xliff:g id="NUMBER_1">%d</xliff:g> спроба. Після цього SIM-карту буде назавжди заблоковано.</item> + <item quantity="few">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано.</item> + <item quantity="many">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроб. Після цього SIM-карту буде назавжди заблоковано.</item> + <item quantity="other">Неправильний PUK-код SIM-карти. У вас залишилося <xliff:g id="NUMBER_1">%d</xliff:g> спроби. Після цього SIM-карту буде назавжди заблоковано.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Помилка введення PIN-коду SIM-карти."</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Помилка введення PUK-коду SIM-карти."</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Код прийнято."</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Зв’язку немає."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка перемикання методу введення."</string> </resources> diff --git a/packages/Keyguard/res/values-ur-rPK/strings.xml b/packages/Keyguard/res/values-ur-rPK/strings.xml index 0daa46b..5cd54c0 100644 --- a/packages/Keyguard/res/values-ur-rPK/strings.xml +++ b/packages/Keyguard/res/values-ur-rPK/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے ایک ای میل اکاؤنٹ استعمال کرکے اپنا ٹیبلیٹ غیر مقفل کرنے کو کہا جائے گا۔\n\n <xliff:g id="NUMBER_2">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"آپ نے اپنا غیر مقفل کرنے کا پیٹرن <xliff:g id="NUMBER_0">%d</xliff:g> بار غلط طریقے سے ڈرا کیا ہے۔ <xliff:g id="NUMBER_1">%d</xliff:g> مزید ناکام کوششوں کے بعد، آپ سے ایک ای میل اکاؤنٹ استعمال کرکے اپنا فون غیر مقفل کرنے کو کہا جائے گا۔\n\n <xliff:g id="NUMBER_2">%d</xliff:g> سیکنڈ میں دوبارہ کوشش کریں۔"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"غلط SIM PIN کوڈ اب آپ کو اپنا آلہ غیر مقفل کرنے کیلئے لازمی طور پر اپنے کیریئر سے رابطہ کرنا چاہئے۔"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"غلط SIM PIN کوڈ، اس سے پہلے کہ آپ اپنا آلہ غیر مقفل کرنے کیلئے لازمی طور پر اپنے کیریئر سے رابطہ کریں آپ کے پاس <xliff:g id="NUMBER">%d</xliff:g> کوشش بچی ہے۔"</item> - <item quantity="other" msgid="2215723361575359486">"غلط SIM PIN کوڈ، آپ کے پاس <xliff:g id="NUMBER">%d</xliff:g> کوششیں بچی ہیں۔"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM ناقابل استعمال ہے۔ اپنے کیریئر رابطہ کریں۔"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"غلط SIM PUK کوڈ، SIM مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس <xliff:g id="NUMBER">%d</xliff:g> کوشش بچی ہے۔"</item> - <item quantity="other" msgid="5477305226026342036">"غلط SIM PUK کوڈ، SIM مستقل طور پر ناقابل استعمال ہونے سے پہلے آپ کے پاس <xliff:g id="NUMBER">%d</xliff:g> کوششیں بچی ہیں۔"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">غلط SIM PUK کوڈ، آپ کے پاس <xliff:g id="NUMBER_1">%d</xliff:g> کوششیں بچی ہیں، اس کے بعد SIM مستقل طور پر ناقابل استعمال ہو جائے گا۔</item> + <item quantity="one">SIM کا غلط PUK کوڈ، آپ ک پاس <xliff:g id="NUMBER_0">%d</xliff:g> کوشش بچی ہے، اس کے بعد SIM مستقل طور پر ناقابل استعمال ہو جائے گا۔</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN کارروائی ناکام ہو گئی!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK کارروائی ناکام ہو گئی!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"کوڈ قبول کر لیا گیا!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"کوئی سروس نہیں ہے۔"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"اندراج کا طریقہ سوئچ کرنے کا بٹن۔"</string> </resources> diff --git a/packages/Keyguard/res/values-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz-rUZ/strings.xml index 31eb593..a6852a7 100644 --- a/packages/Keyguard/res/values-uz-rUZ/strings.xml +++ b/packages/Keyguard/res/values-uz-rUZ/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Chizmali parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, planshet qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Chizmali parolni <xliff:g id="NUMBER_0">%d</xliff:g> marta noto‘g‘ri chizdingiz. <xliff:g id="NUMBER_1">%d</xliff:g> marta muvaffaqiyatsiz urinishdan so‘ng, sizdan e-pochtangizdan foydalanib, telefon qulfini ochishingiz so‘raladi.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> soniyadan so‘ng yana urinib ko‘ring."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM karta PIN kodi noto‘g‘ri. Qurilma qulfini ochish uchun aloqa operatoringiz bilan bog‘laning."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM karta PIN kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER">%d</xliff:g> marta uirinib ko‘rishingiz mumkin, urinishlar tugagandan keyin qurilmangizni qulfdan chiqarish uchun aloqa operatoringiz bilan bog‘lanishingiz kerak."</item> - <item quantity="other" msgid="2215723361575359486">"SIM karta PIN kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER">%d</xliff:g> marta urinib ko‘rishingiz mumkin."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">SIM kartaning PIN kodi noto‘g‘ri. Sizda yana <xliff:g id="NUMBER_1">%d</xliff:g> ta urinish qoldi.</item> + <item quantity="one">SIM kartaning PIN kodi noto‘g‘ri. Qurilmani qulfdan chiqarish uchun sizda yana <xliff:g id="NUMBER_0">%d</xliff:g> ta urinish qoldi.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartadan foydalanib bo‘lmaydi. Aloqa operatoringiz bilan bog‘laning."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM karta PUK kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER">%d</xliff:g> marta urinib ko‘rganingizdan so‘ng, SIM kartadan umuman foydalanib bo‘lmaydi."</item> - <item quantity="other" msgid="5477305226026342036">"SIM karta PUK kodi noto‘g‘ri terildi, yana <xliff:g id="NUMBER">%d</xliff:g> marta urinib ko‘rganingizdan so‘ng, SIM kartadan umuman foydalanib bo‘lmaydi."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_1">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item> + <item quantity="one">SIM kartaning PUK kodi noto‘g‘ri kiritildi. Yana <xliff:g id="NUMBER_0">%d</xliff:g> ta muvaffaqiyatsiz urinishdan so‘ng SIM karta butunlay ishdan chiqadi.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM karta PIN jarayoni amalga oshmadi!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM karta PUK jarayoni amalga oshmadi!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod qabul qilindi!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aloqa yo‘q."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Kiritish uslubi tugmasini almashtirish."</string> </resources> diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml index 0dcbaad..5727900 100644 --- a/packages/Keyguard/res/values-vi/strings.xml +++ b/packages/Keyguard/res/values-vi/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa máy tính bảng bằng tài khoản email.\n\n Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa điện thoại bằng tài khoản email.\n\n Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Mã PIN của SIM không chính xác, bây giờ bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của bạn."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của bạn."</item> - <item quantity="other" msgid="2215723361575359486">"Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="other">Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử.</item> + <item quantity="one">Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của mình.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM không thể sử dụng được. Liên hệ với nhà cung cấp dịch vụ của bạn."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được."</item> - <item quantity="other" msgid="5477305226026342036">"Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER_1">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không sử dụng được.</item> + <item quantity="one">Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER_0">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Thao tác mã PIN của SIM không thành công!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Thao tác mã PUK của SIM không thành công!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Mã được chấp nhận!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Không có dịch vụ."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string> </resources> diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml index 9f9f970..a93b54b 100644 --- a/packages/Keyguard/res/values-zh-rCN/strings.xml +++ b/packages/Keyguard/res/values-zh-rCN/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁平板电脑。\n\n请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁手机。\n\n请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM卡PIN码不正确,您现在必须联系运营商为您解锁设备。"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM卡PIN码不正确,您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败,则必须联系运营商帮您解锁设备。"</item> - <item quantity="other" msgid="2215723361575359486">"SIM卡PIN码不正确,您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM卡无法使用,请与您的运营商联系。"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM卡PUK码不正确,您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败,SIM卡将永远无法使用。"</item> - <item quantity="other" msgid="5477305226026342036">"SIM卡PUK码不正确,您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败,SIM卡将永远无法使用。"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM 卡 PUK 码不正确,您还可尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次。如果仍不正确,SIM 卡将永远无法使用。</item> + <item quantity="one">SIM 卡 PUK 码不正确,您还可尝试 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍不正确,SIM 卡将永远无法使用。</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM卡PIN码操作失败!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM卡PUK码操作失败!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"代码正确!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"无服务。"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"输入法切换按钮。"</string> </resources> diff --git a/packages/Keyguard/res/values-zh-rHK/strings.xml b/packages/Keyguard/res/values-zh-rHK/strings.xml index 2aa5d62..55a6a5e 100644 --- a/packages/Keyguard/res/values-zh-rHK/strings.xml +++ b/packages/Keyguard/res/values-zh-rHK/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統會要求您透過電郵帳戶解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN 碼不正確,您現在必須聯絡流動網絡供應商為您的裝置解鎖。"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM PIN 碼不正確,您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,您必須聯絡流動網絡供應商為您的裝置解鎖。"</item> - <item quantity="other" msgid="2215723361575359486">"SIM PIN 碼不正確,您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM 無法使用,請聯絡您的流動網絡供應商。"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM PUK 碼不正確,您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輪入錯誤,SIM 將永久無法使用。"</item> - <item quantity="other" msgid="5477305226026342036">"SIM PUK 碼不正確,您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 將永久無法使用。"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM PUK 碼不正確,您還有 <xliff:g id="NUMBER_1">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將永久無法使用。</item> + <item quantity="one">SIM PUK 碼不正確,您還有 <xliff:g id="NUMBER_0">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤,SIM 卡將永久無法使用。</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN 碼操作失敗!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK 碼操作失敗!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"密碼正確!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"沒有服務。"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string> </resources> diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml index f9a8cdb..66c665f 100644 --- a/packages/Keyguard/res/values-zh-rTW/strings.xml +++ b/packages/Keyguard/res/values-zh-rTW/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除平板電腦的鎖定狀態。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除手機的鎖定狀態。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM 卡的 PIN 碼輸入錯誤,您現在必須請行動通訊業者為裝置解鎖。"</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"SIM 卡的 PIN 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗,就必須請行動通訊業者為裝置解鎖。"</item> - <item quantity="other" msgid="2215723361575359486">"SIM 卡的 PIN 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。"</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <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="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM 卡無法使用,請與您的行動通訊業者聯絡。"</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"SIM 卡的 PUK 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。"</item> - <item quantity="other" msgid="5477305226026342036">"SIM 卡的 PUK 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。"</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="other">SIM 卡的 PUK 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER_1">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。</item> + <item quantity="one">SIM 卡的 PUK 碼輸入錯誤,您還可以再試 <xliff:g id="NUMBER_0">%d</xliff:g> 次。如果仍然失敗,SIM 卡將永久無法使用。</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM 卡 PIN 碼操作失敗!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM 卡 PUK 碼操作失敗!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"密碼正確!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"沒有服務。"</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string> </resources> diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml index 4c8f757..be8900a 100644 --- a/packages/Keyguard/res/values-zu/strings.xml +++ b/packages/Keyguard/res/values-zu/strings.xml @@ -95,17 +95,18 @@ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g> kweminye imizamo engaphumelelanga, uzocelwa ukuvula ithebhulethi yakho usebenzisa ukungena ngemvume kwi-Google.\n\n Sicela uzame futhi emuva kwamasekhondi angu-<xliff:g id="NUMBER_2">%d</xliff:g>"</string> <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google\n\n Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%d</xliff:g> amasekhondi."</string> <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Ikhodi yephinikhodi ye-SIM engalungile manje kumele uxhumane nenkampini yenethiwekhi yakho ukuvula idivayisi yakho."</string> - <plurals name="kg_password_wrong_pin_code"> - <item quantity="one" msgid="8134313997799638254">"Ikhodi yephinikhodi ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba uxhumane nenkampini yenethiwekhi."</item> - <item quantity="other" msgid="2215723361575359486">"Ikhodi yephinikhodi ye-SIM engalungile, unemizamo esele engu-<xliff:g id="NUMBER">%d</xliff:g>."</item> - </plurals> + <plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249"> + <item quantity="one">Ikhodi engalungile yephinikhodi ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item> + <item quantity="other">Ikhodi engalungile yephinikhodi ye-SIM, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele.</item> + </plurals> <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"I-SIM ayisebenziseki. Xhumana nemkampini yenethiwekhi yakho."</string> - <plurals name="kg_password_wrong_puk_code"> - <item quantity="one" msgid="3256893607561060649">"Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba i-SIM ibe engasebenziseki unaphakade."</item> - <item quantity="other" msgid="5477305226026342036">"Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba i-SIM iba engasebenziseki unaphakade."</item> - </plurals> + <plurals name="kg_password_wrong_puk_code" formatted="false" msgid="7576227366999858780"> + <item quantity="one">Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasasebenziseki unaphakade.</item> + <item quantity="other">Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g> esele ngaphambi kokuthi i-SIM ingasasebenziseki unaphakade.</item> + </plurals> <string name="kg_password_pin_failed" msgid="6268288093558031564">"Umsebenzi wephinikhodi ye-SIM wehlulekile!"</string> <string name="kg_password_puk_failed" msgid="2838824369502455984">"Umsebenzi we-PUK ye-SIM wehlulekile!"</string> <string name="kg_pin_accepted" msgid="1448241673570020097">"Ikhodi yamukelwe!"</string> <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ayikho isevisi."</string> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vula indlela yokungena yenkinobho"</string> </resources> diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml index 8b18b2e..5047330 100644 --- a/packages/Keyguard/res/values/strings.xml +++ b/packages/Keyguard/res/values/strings.xml @@ -297,4 +297,7 @@ This is displayed if the phone is not connected to a carrier.--> <string name="keyguard_carrier_default">No service.</string> + <!-- Content description of the switch input method button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_ime_switch_button" msgid="5032926134740456424">Switch input method button.</string> + </resources> diff --git a/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedImageButton.java b/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedImageButton.java index eda790f..58c79b4 100644 --- a/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedImageButton.java +++ b/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedImageButton.java @@ -19,7 +19,6 @@ package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageButton; -import android.widget.RelativeLayout; /** * A frame layout which does not have overlapping renderings commands and therefore does not need a diff --git a/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedLinearLayout.java b/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedLinearLayout.java index 36da6f1..2c6c4fa 100644 --- a/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedLinearLayout.java +++ b/packages/Keyguard/src/com/android/keyguard/AlphaOptimizedLinearLayout.java @@ -18,7 +18,6 @@ package com.android.keyguard; import android.content.Context; import android.util.AttributeSet; -import android.view.View; import android.widget.LinearLayout; /** diff --git a/packages/Keyguard/src/com/android/keyguard/AppearAnimationCreator.java b/packages/Keyguard/src/com/android/keyguard/AppearAnimationCreator.java index 3ff2cc0..e4706b6 100644 --- a/packages/Keyguard/src/com/android/keyguard/AppearAnimationCreator.java +++ b/packages/Keyguard/src/com/android/keyguard/AppearAnimationCreator.java @@ -16,7 +16,6 @@ package com.android.keyguard; -import android.animation.Animator; import android.view.animation.Interpolator; /** diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java index c023dc6..7d0b81d 100644 --- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java +++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java @@ -20,10 +20,11 @@ import java.util.List; import java.util.Locale; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.res.TypedArray; import android.net.ConnectivityManager; import android.telephony.SubscriptionInfo; -import android.telephony.SubscriptionManager; import android.text.TextUtils; import android.text.method.SingleLineTransformationMethod; import android.util.AttributeSet; @@ -33,7 +34,7 @@ import android.widget.TextView; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants.State; -import com.android.internal.widget.LockPatternUtils; +import com.android.internal.telephony.TelephonyIntents; public class CarrierText extends TextView { private static final boolean DEBUG = KeyguardConstants.DEBUG; @@ -122,10 +123,27 @@ public class CarrierText extends TextView { subs.get(0).getCarrierName()); } else { // We don't have a SubscriptionInfo to get the emergency calls only from. - // Lets just make it ourselves. + // Grab it from the old sticky broadcast if possible instead. We can use it + // here because no subscriptions are active, so we don't have + // to worry about MSIM clashing. + CharSequence text = + getContext().getText(com.android.internal.R.string.emergency_calls_only); + Intent i = getContext().registerReceiver(null, + new IntentFilter(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION)); + if (i != null) { + String spn = ""; + String plmn = ""; + if (i.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false)) { + spn = i.getStringExtra(TelephonyIntents.EXTRA_SPN); + } + if (i.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false)) { + plmn = i.getStringExtra(TelephonyIntents.EXTRA_PLMN); + } + if (DEBUG) Log.d(TAG, "Getting plmn/spn sticky brdcst " + plmn + "/" + spn); + text = concatenate(plmn, spn); + } displayText = makeCarrierStringOnEmergencyCapable( - getContext().getText(R.string.keyguard_missing_sim_message_short), - getContext().getText(com.android.internal.R.string.emergency_calls_only)); + getContext().getText(R.string.keyguard_missing_sim_message_short), text); } } setText(displayText); diff --git a/packages/Keyguard/src/com/android/keyguard/DisappearAnimationUtils.java b/packages/Keyguard/src/com/android/keyguard/DisappearAnimationUtils.java index 6fff0ba..517d96a 100644 --- a/packages/Keyguard/src/com/android/keyguard/DisappearAnimationUtils.java +++ b/packages/Keyguard/src/com/android/keyguard/DisappearAnimationUtils.java @@ -17,7 +17,6 @@ package com.android.keyguard; import android.content.Context; -import android.view.View; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java index b2e4728..322be91 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java @@ -17,7 +17,6 @@ package com.android.keyguard; import android.content.Context; -import android.graphics.drawable.Drawable; import android.os.CountDownTimer; import android.os.SystemClock; import android.util.AttributeSet; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java index 10ce426..a88497c 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java @@ -22,13 +22,11 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.media.AudioManager; -import android.os.Bundle; import android.os.SystemClock; import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.accessibility.AccessibilityEvent; import android.widget.FrameLayout; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java index 236cbf6..7ddeab4 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java @@ -19,9 +19,7 @@ package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; -import android.content.ContentResolver; import android.content.Context; -import android.os.BatteryManager; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java index dfea166..845d53a 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java @@ -90,9 +90,11 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView post(new Runnable() { @Override public void run() { - mPasswordEntry.requestFocus(); - if (reason != KeyguardSecurityView.SCREEN_ON || mShowImeAtScreenOn) { - mImm.showSoftInput(mPasswordEntry, InputMethodManager.SHOW_IMPLICIT); + if (isShown()) { + mPasswordEntry.requestFocus(); + if (reason != KeyguardSecurityView.SCREEN_ON || mShowImeAtScreenOn) { + mImm.showSoftInput(mPasswordEntry, InputMethodManager.SHOW_IMPLICIT); + } } } }); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java index 7c56e84..bca0305 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -17,11 +17,7 @@ package com.android.keyguard; import android.content.Context; -import android.database.ContentObserver; import android.graphics.Rect; -import android.os.Handler; -import android.os.UserHandle; -import android.provider.Settings; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; @@ -32,39 +28,19 @@ import android.view.View; public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView implements View.OnKeyListener { - private final android.database.ContentObserver mSpeakPasswordObserver - = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - super.onChange(selfChange); - // Ensure that it's not called too early - if (mButton0 != null) { - mButton0.updateContentDescription(); - mButton1.updateContentDescription(); - mButton2.updateContentDescription(); - mButton3.updateContentDescription(); - mButton4.updateContentDescription(); - mButton5.updateContentDescription(); - mButton6.updateContentDescription(); - mButton7.updateContentDescription(); - mButton8.updateContentDescription(); - mButton9.updateContentDescription(); - } - } - }; protected PasswordTextView mPasswordEntry; private View mOkButton; private View mDeleteButton; - private NumPadKey mButton0; - private NumPadKey mButton1; - private NumPadKey mButton2; - private NumPadKey mButton3; - private NumPadKey mButton4; - private NumPadKey mButton5; - private NumPadKey mButton6; - private NumPadKey mButton7; - private NumPadKey mButton8; - private NumPadKey mButton9; + private View mButton0; + private View mButton1; + private View mButton2; + private View mButton3; + private View mButton4; + private View mButton5; + private View mButton6; + private View mButton7; + private View mButton8; + private View mButton9; public KeyguardPinBasedInputView(Context context) { this(context, null); @@ -72,9 +48,6 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView public KeyguardPinBasedInputView(Context context, AttributeSet attrs) { super(context, attrs); - context.getContentResolver().registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD), true, - mSpeakPasswordObserver, UserHandle.USER_ALL); } @Override @@ -215,16 +188,16 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView } }); - mButton0 = (NumPadKey) findViewById(R.id.key0); - mButton1 = (NumPadKey) findViewById(R.id.key1); - mButton2 = (NumPadKey) findViewById(R.id.key2); - mButton3 = (NumPadKey) findViewById(R.id.key3); - mButton4 = (NumPadKey) findViewById(R.id.key4); - mButton5 = (NumPadKey) findViewById(R.id.key5); - mButton6 = (NumPadKey) findViewById(R.id.key6); - mButton7 = (NumPadKey) findViewById(R.id.key7); - mButton8 = (NumPadKey) findViewById(R.id.key8); - mButton9 = (NumPadKey) findViewById(R.id.key9); + mButton0 = findViewById(R.id.key0); + mButton1 = findViewById(R.id.key1); + mButton2 = findViewById(R.id.key2); + mButton3 = findViewById(R.id.key3); + mButton4 = findViewById(R.id.key4); + mButton5 = findViewById(R.id.key5); + mButton6 = findViewById(R.id.key6); + mButton7 = findViewById(R.id.key7); + mButton8 = findViewById(R.id.key8); + mButton9 = findViewById(R.id.key9); mPasswordEntry.requestFocus(); super.onFinishInflate(); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 755479f..5fa0dd1 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -51,8 +51,6 @@ import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyIntents; -import com.android.internal.telephony.TelephonyProperties; - import android.service.fingerprint.FingerprintManager; import android.service.fingerprint.FingerprintManagerReceiver; import android.service.fingerprint.FingerprintUtils; @@ -373,24 +371,11 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } private boolean isTrustDisabled(int userId) { - final DevicePolicyManager dpm = - (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); - if (dpm != null) { - // TODO once UI is finalized - final boolean disabledByGlobalActions = false; - final boolean disabledBySettings = false; - - // Don't allow trust agent if device is secured with a SIM PIN. This is here - // mainly because there's no other way to prompt the user to enter their SIM PIN - // once they get past the keyguard screen. - final boolean disabledBySimPin = isSimPinSecure(); - - final boolean disabledByDpm = (dpm.getKeyguardDisabledFeatures(null, userId) - & DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS) != 0; - return disabledByDpm || disabledByGlobalActions || disabledBySettings - || disabledBySimPin; - } - return false; + // Don't allow trust agent if device is secured with a SIM PIN. This is here + // mainly because there's no other way to prompt the user to enter their SIM PIN + // once they get past the keyguard screen. + final boolean disabledBySimPin = isSimPinSecure(); + return disabledBySimPin; } private boolean isFingerprintDisabled(int userId) { @@ -1254,7 +1239,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { mHandler.sendEmptyMessage(MSG_SCREEN_TURNED_ON); } - public void dispatchScreenTurndOff(int why) { + public void dispatchScreenTurnedOff(int why) { synchronized(this) { mScreenOn = false; } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index f610fec..f0e2389 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -15,7 +15,6 @@ */ package com.android.keyguard; -import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; import android.graphics.Bitmap; import android.media.AudioManager; diff --git a/packages/Keyguard/src/com/android/keyguard/NumPadKey.java b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java index 70a4108..ef8bb0b 100644 --- a/packages/Keyguard/src/com/android/keyguard/NumPadKey.java +++ b/packages/Keyguard/src/com/android/keyguard/NumPadKey.java @@ -18,19 +18,13 @@ package com.android.keyguard; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.os.Debug; import android.os.PowerManager; import android.os.SystemClock; -import android.os.UserHandle; -import android.provider.Settings; import android.util.AttributeSet; import android.view.HapticFeedbackConstants; -import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.accessibility.AccessibilityEvent; import android.widget.TextView; import com.android.internal.widget.LockPatternUtils; @@ -120,17 +114,7 @@ public class NumPadKey extends ViewGroup { } setBackground(mContext.getDrawable(R.drawable.ripple_drawable)); - updateContentDescription(); - } - - public void updateContentDescription() { - if (shouldSpeakPasswordsForAccessibility()) { - setContentDescription( - mDigitText.getText().toString() + mKlondikeText.getText().toString()); - } else { - setContentDescription(getContext().getString( - com.android.internal.R.string.keyboard_password_character_no_headset)); - } + setContentDescription(mDigitText.getText().toString()); } @Override @@ -164,15 +148,6 @@ public class NumPadKey extends ViewGroup { mKlondikeText.layout(left, top, left + mKlondikeText.getMeasuredWidth(), bottom); } - /** - * @return true if the user has explicitly allowed accessibility services - * to speak passwords. - */ - private boolean shouldSpeakPasswordsForAccessibility() { - return (Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0, UserHandle.USER_CURRENT) == 1); - } - @Override public boolean hasOverlappingRendering() { return false; diff --git a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java index 6497f46..67ddcfa 100644 --- a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java +++ b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java @@ -28,9 +28,15 @@ import android.graphics.Rect; import android.graphics.Typeface; import android.os.PowerManager; import android.os.SystemClock; +import android.os.UserHandle; import android.provider.Settings; +import android.text.InputType; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; @@ -176,6 +182,7 @@ public class PasswordTextView extends View { public void append(char c) { int visibleChars = mTextChars.size(); + String textbefore = mText; mText = mText + c; int newLength = mText.length(); CharState charState; @@ -196,6 +203,7 @@ public class PasswordTextView extends View { } } userActivity(); + sendAccessibilityEventTypeViewTextChanged(textbefore, textbefore.length(), 0, 1); } private void userActivity() { @@ -204,12 +212,14 @@ public class PasswordTextView extends View { public void deleteLastChar() { int length = mText.length(); + String textbefore = mText; if (length > 0) { mText = mText.substring(0, length - 1); CharState charState = mTextChars.get(length - 1); charState.startRemoveAnimation(0, 0); } userActivity(); + sendAccessibilityEventTypeViewTextChanged(textbefore, textbefore.length() - 1, 1, 0); } public String getText() { @@ -229,6 +239,7 @@ public class PasswordTextView extends View { } public void reset(boolean animated) { + String textbefore = mText; mText = ""; int length = mTextChars.size(); int middleIndex = (length - 1) / 2; @@ -256,6 +267,71 @@ public class PasswordTextView extends View { if (!animated) { mTextChars.clear(); } + sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0); + } + + void sendAccessibilityEventTypeViewTextChanged(String beforeText, int fromIndex, + int removedCount, int addedCount) { + if (AccessibilityManager.getInstance(mContext).isEnabled() && + (isFocused() || isSelected() && isShown())) { + if (!shouldSpeakPasswordsForAccessibility()) { + beforeText = null; + } + AccessibilityEvent event = + AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); + event.setFromIndex(fromIndex); + event.setRemovedCount(removedCount); + event.setAddedCount(addedCount); + event.setBeforeText(beforeText); + event.setPassword(true); + sendAccessibilityEventUnchecked(event); + } + } + + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + + event.setClassName(PasswordTextView.class.getName()); + event.setPassword(true); + } + + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + + if (shouldSpeakPasswordsForAccessibility()) { + final CharSequence text = mText; + if (!TextUtils.isEmpty(text)) { + event.getText().add(text); + } + } + } + + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + + info.setClassName(PasswordTextView.class.getName()); + info.setPassword(true); + + if (shouldSpeakPasswordsForAccessibility()) { + info.setText(mText); + } + + info.setEditable(true); + + info.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD); + } + + /** + * @return true if the user has explicitly allowed accessibility services + * to speak passwords. + */ + private boolean shouldSpeakPasswordsForAccessibility() { + return (Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0, + UserHandle.USER_CURRENT_OR_SELF) == 1); } private class CharState { diff --git a/packages/PrintSpooler/res/values-af/strings.xml b/packages/PrintSpooler/res/values-af/strings.xml index 923a38c..482bd22 100644 --- a/packages/PrintSpooler/res/values-af/strings.xml +++ b/packages/PrintSpooler/res/values-af/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papiergrootte"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papiergrootte:"</string> <string name="label_color" msgid="1108690305218188969">"Kleur"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dupleks"</string> <string name="label_orientation" msgid="2853142581990496477">"Oriëntasie"</string> <string name="label_pages" msgid="7768589729282182230">"Bladsye"</string> <string name="template_all_pages" msgid="3322235982020148762">"Al <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Voeg drukker by"</string> <string name="print_select_printer" msgid="7388760939873368698">"Kies drukker"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Vergeet drukker"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> drukker gekry"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> drukkers gekry"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> drukkers gevind</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> drukker gevind</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Kies drukdiens"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Soek tans vir drukkers"</string> <string name="print_no_printers" msgid="4869403323900054866">"Geen drukkers gekry nie"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kanselleer tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Drukkerfout by <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drukker het <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> geblokkeer"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-uitdruktaak"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-uitdruktake"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>-druktake</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>-druktaak</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Kanselleer"</string> <string name="restart" msgid="2472034227037808749">"Herbegin"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Geen verbinding met drukker nie"</string> diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml index 8f46249..588c337 100644 --- a/packages/PrintSpooler/res/values-am/strings.xml +++ b/packages/PrintSpooler/res/values-am/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"የወረቀት መጠን"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"የወረቀት መጠን፦"</string> <string name="label_color" msgid="1108690305218188969">"ቀለም"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"አቀማመጠ ገፅ"</string> <string name="label_pages" msgid="7768589729282182230">"ገፆች"</string> <string name="template_all_pages" msgid="3322235982020148762">"ሁሉም <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"አታሚ አክል"</string> <string name="print_select_printer" msgid="7388760939873368698">"አታሚ ምረጥ"</string> <string name="print_forget_printer" msgid="5035287497291910766">"አታሚ እርሳ"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> አታሚ ተገኝቷል"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> አታሚዎች ተገኝተዋል"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> አታሚዎች ተገኝተዋል</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> አታሚዎች ተገኝተዋል</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"የህትመት አገልግሎት ይምረጡ"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"አታሚዎችን በመፈለግ ላይ"</string> <string name="print_no_printers" msgid="4869403323900054866">"ምንም አታሚዎች አልተገኙም"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በመተው ላይ"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"የአታሚ ስህተት <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"አታሚ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን አግዷል"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> የህትመት ስራ"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> የህትመት ስራዎች"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> የህትመት ስራ</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> የህትመት ስራ</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ይቅር"</string> <string name="restart" msgid="2472034227037808749">"እንደገና ጀምር"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"ከአታሚ ጋር ምንም ግንኙነት የለም"</string> diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml index 9f931d5..83d5994 100644 --- a/packages/PrintSpooler/res/values-ar/strings.xml +++ b/packages/PrintSpooler/res/values-ar/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"حجم الورق"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"حجم الورق:"</string> <string name="label_color" msgid="1108690305218188969">"ألوان"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"مزدوج"</string> <string name="label_orientation" msgid="2853142581990496477">"الاتجاه"</string> <string name="label_pages" msgid="7768589729282182230">"الصفحات"</string> <string name="template_all_pages" msgid="3322235982020148762">"جميع الصفحات وعددها <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,14 @@ <string name="print_add_printer" msgid="1088656468360653455">"إضافة طابعة"</string> <string name="print_select_printer" msgid="7388760939873368698">"حدد الطابعة"</string> <string name="print_forget_printer" msgid="5035287497291910766">"تجاهل الطابعة"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"تم العثور على <xliff:g id="COUNT">%1$s</xliff:g> طابعة"</item> - <item quantity="other" msgid="6533817036607128241">"تم العثور على <xliff:g id="COUNT">%1$s</xliff:g> من الطابعات"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="zero">لم يتم العثور على أية طابعة (<xliff:g id="COUNT_1">%1$s</xliff:g>)</item> + <item quantity="two">تم العثور على طابعتين (<xliff:g id="COUNT_1">%1$s</xliff:g>)</item> + <item quantity="few">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> طابعات</item> + <item quantity="many">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> طابعة</item> + <item quantity="other">تم العثور على <xliff:g id="COUNT_1">%1$s</xliff:g> من الطابعات</item> + <item quantity="one">تم العثور على طابعة واحدة (<xliff:g id="COUNT_0">%1$s</xliff:g>)</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"اختر خدمة طباعة"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"البحث عن طابعات"</string> <string name="print_no_printers" msgid="4869403323900054866">"لم يتم العثور على طابعات"</string> @@ -66,10 +69,14 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"جارٍ إلغاء <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"خطا في الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"رفضت الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> مهمة طباعة"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> من مهام الطباعة"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="zero"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> مهمة طباعة</item> + <item quantity="two">مهمتا طباعة (<xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>)</item> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> مهام طباعة</item> + <item quantity="many"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> مهمة طباعة</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> من مهام الطباعة</item> + <item quantity="one">مهمة طباعة واحدة (<xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>)</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"إلغاء"</string> <string name="restart" msgid="2472034227037808749">"إعادة تشغيل"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"لا يوجد اتصال بالطابعة"</string> diff --git a/packages/PrintSpooler/res/values-bg/strings.xml b/packages/PrintSpooler/res/values-bg/strings.xml index 981b4c1..5df95cb 100644 --- a/packages/PrintSpooler/res/values-bg/strings.xml +++ b/packages/PrintSpooler/res/values-bg/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Размер на хартията"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Размер на хартията:"</string> <string name="label_color" msgid="1108690305218188969">"Цвят"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Двустранен режим"</string> <string name="label_orientation" msgid="2853142581990496477">"Ориентация"</string> <string name="label_pages" msgid="7768589729282182230">"Страници"</string> <string name="template_all_pages" msgid="3322235982020148762">"Всички <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Добавяне на принтер"</string> <string name="print_select_printer" msgid="7388760939873368698">"Избиране на принтер"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Забравяне на принтера"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Намерен е <xliff:g id="COUNT">%1$s</xliff:g> принтер"</item> - <item quantity="other" msgid="6533817036607128241">"Намерени са <xliff:g id="COUNT">%1$s</xliff:g> принтера"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Намерени са <xliff:g id="COUNT_1">%1$s</xliff:g> принтера</item> + <item quantity="one">Намерен е <xliff:g id="COUNT_0">%1$s</xliff:g> принтер</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Избиране на услуга за отпечатване"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Търсят се принтери"</string> <string name="print_no_printers" msgid="4869403323900054866">"Няма намерени принтери"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се анулира"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка в принтера при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтерът блокира при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Задание за отпечатване: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Задания за отпечатване: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Задания за отпечатване: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Задание за отпечатване: <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Отказ"</string> <string name="restart" msgid="2472034227037808749">"Рестартиране"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Няма връзка с принтера"</string> diff --git a/packages/PrintSpooler/res/values-bn-rBD/strings.xml b/packages/PrintSpooler/res/values-bn-rBD/strings.xml index 4d74ceb..cf6ed72 100644 --- a/packages/PrintSpooler/res/values-bn-rBD/strings.xml +++ b/packages/PrintSpooler/res/values-bn-rBD/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"কাগজের আকার"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"কাগজের আকার:"</string> <string name="label_color" msgid="1108690305218188969">"রঙ"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"দ্বৈত"</string> <string name="label_orientation" msgid="2853142581990496477">"সজ্জা"</string> <string name="label_pages" msgid="7768589729282182230">"পৃষ্ঠাগুলি"</string> <string name="template_all_pages" msgid="3322235982020148762">"সমস্ত <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"মুদ্রক যোগ করুন"</string> <string name="print_select_printer" msgid="7388760939873368698">"মুদ্রক নির্বাচন করুন"</string> <string name="print_forget_printer" msgid="5035287497291910766">"মুদ্রকটিকে সরিয়ে দিন"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>টি মুদ্রক খুঁজে পাওয়া গেছে</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"মুদ্রণ পরিষেবা চয়ন করুন"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"মুদ্রকগুলি অনুসন্ধান করা হচ্ছে"</string> <string name="print_no_printers" msgid="4869403323900054866">"কোনো মুদ্রক পাওয়া যায়নি"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> বাতিল করা হচ্ছে"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> মুদ্রক ত্রুটি"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"মুদ্রক <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> অবরুদ্ধ করেছে"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> মুদ্রণ কার্য"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> মুদ্রণ কার্যগুলি"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> মুদ্রণ কার্যগুলি</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> মুদ্রণ কার্যগুলি</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"বাতিল করুন"</string> <string name="restart" msgid="2472034227037808749">"পুনর্সূচনা"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"মুদ্রকে কোনো সংযোগ নেই"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"কালো এবং সাদা"</item> <item msgid="2762241247228983754">"রঙ"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"কোনো কিছুই নয়"</item> + <item msgid="7296563835355641719">"দীর্ঘ প্রান্ত"</item> + <item msgid="79513688117503758">"সংক্ষিপ্ত প্রান্ত"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"প্রতিকৃতি"</item> <item msgid="3199660090246166812">"ভূদৃশ্য"</item> diff --git a/packages/PrintSpooler/res/values-ca/strings.xml b/packages/PrintSpooler/res/values-ca/strings.xml index ca7bafa..04c3b90 100644 --- a/packages/PrintSpooler/res/values-ca/strings.xml +++ b/packages/PrintSpooler/res/values-ca/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Mida del paper"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Mida del paper:"</string> <string name="label_color" msgid="1108690305218188969">"Color"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dúplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientació"</string> <string name="label_pages" msgid="7768589729282182230">"Pàgines"</string> <string name="template_all_pages" msgid="3322235982020148762">"Totes (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Afegeix una impressora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Selecciona una impressora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Esborra la impressora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"S\'ha trobat <xliff:g id="COUNT">%1$s</xliff:g> impressora"</item> - <item quantity="other" msgid="6533817036607128241">"S\'han trobat <xliff:g id="COUNT">%1$s</xliff:g> impressores"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">S\'han trobat <xliff:g id="COUNT_1">%1$s</xliff:g> impressores</item> + <item quantity="one">S\'ha trobat <xliff:g id="COUNT_0">%1$s</xliff:g> impressora</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Selecció del servei d\'impressió"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Cerca d\'impressores"</string> <string name="print_no_printers" msgid="4869403323900054866">"No s\'ha trobat cap impressora"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"S\'està cancel·lant <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Error d\'impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impressora bloquejada <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tasca d\'impressió per a <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tasques d\'impressió per a <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tasques d\'impressió</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> tasca d\'impressió</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancel·la"</string> <string name="restart" msgid="2472034227037808749">"Reinicia"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"No hi ha connexió amb la impressora"</string> diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml index 77f338a..ca528c1 100644 --- a/packages/PrintSpooler/res/values-cs/strings.xml +++ b/packages/PrintSpooler/res/values-cs/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Velikost papíru"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Velikost papíru:"</string> <string name="label_color" msgid="1108690305218188969">"Barva"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Oboustranně"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientace"</string> <string name="label_pages" msgid="7768589729282182230">"Stránky"</string> <string name="template_all_pages" msgid="3322235982020148762">"Vše: <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Přidat tiskárnu"</string> <string name="print_select_printer" msgid="7388760939873368698">"Vybrat tiskárnu"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Odstranit tiskárnu"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Počet nalezených tiskáren: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - <item quantity="other" msgid="6533817036607128241">"Počet nalezených tiskáren: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="few">Nalezené tiskárny: <xliff:g id="COUNT_1">%1$s</xliff:g></item> + <item quantity="many">Nalezené tiskárny: <xliff:g id="COUNT_1">%1$s</xliff:g></item> + <item quantity="other">Nalezené tiskárny: <xliff:g id="COUNT_1">%1$s</xliff:g></item> + <item quantity="one">Nalezené tiskárny: <xliff:g id="COUNT_0">%1$s</xliff:g></item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Zvolte službu tisku"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhledávání tiskáren"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nebyly nalezeny žádné tiskárny"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Rušení úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tiskárny u úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tiskárna blokuje úlohu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Počet tiskových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Počet tiskových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="few">Tiskové úlohy: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="many">Tiskové úlohy: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">Tiskové úlohy: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Tiskové úlohy: <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Zrušit"</string> <string name="restart" msgid="2472034227037808749">"Restartovat"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nelze se připojit k tiskárně"</string> diff --git a/packages/PrintSpooler/res/values-da/strings.xml b/packages/PrintSpooler/res/values-da/strings.xml index b497c18..6b539d7 100644 --- a/packages/PrintSpooler/res/values-da/strings.xml +++ b/packages/PrintSpooler/res/values-da/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papirstørrelse"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papirstørrelse:"</string> <string name="label_color" msgid="1108690305218188969">"Farve"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Retning"</string> <string name="label_pages" msgid="7768589729282182230">"Sider"</string> <string name="template_all_pages" msgid="3322235982020148762">"Alle <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Tilføj printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Vælg printer"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Glem printer"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Der blev fundet <xliff:g id="COUNT">%1$s</xliff:g> printer"</item> - <item quantity="other" msgid="6533817036607128241">"Der blev fundet <xliff:g id="COUNT">%1$s</xliff:g> printere"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Der blev fundet <xliff:g id="COUNT_1">%1$s</xliff:g> printere</item> + <item quantity="other">Der blev fundet <xliff:g id="COUNT_1">%1$s</xliff:g> printere</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Vælg udskriftstjeneste"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Søger efter printere"</string> <string name="print_no_printers" msgid="4869403323900054866">"Der blev ikke fundet nogen printere"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annulleres"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Udskriften <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> mislykkedes"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printeren har blokeret <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-udskriftsjob"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-udskriftsjobs"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>-udskriftsjob</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>-udskriftsjob</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Annuller"</string> <string name="restart" msgid="2472034227037808749">"Genstart"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen forbindelse til printer"</string> diff --git a/packages/PrintSpooler/res/values-de/strings.xml b/packages/PrintSpooler/res/values-de/strings.xml index 1b9ce09..e3894c4 100644 --- a/packages/PrintSpooler/res/values-de/strings.xml +++ b/packages/PrintSpooler/res/values-de/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papierformat"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papierformat:"</string> <string name="label_color" msgid="1108690305218188969">"Farbe"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Ausrichtung"</string> <string name="label_pages" msgid="7768589729282182230">"Seiten"</string> <string name="template_all_pages" msgid="3322235982020148762">"Alle <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Drucker hinzufügen"</string> <string name="print_select_printer" msgid="7388760939873368698">"Drucker auswählen"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Drucker wieder vergessen"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> Drucker gefunden"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> Drucker gefunden"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> Drucker gefunden</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> Drucker gefunden</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Druckdienst auswählen"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Suche nach Druckern"</string> <string name="print_no_printers" msgid="4869403323900054866">"Keine Drucker gefunden"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird abgebrochen..."</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Druckerfehler <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drucker hat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> blockiert."</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Druckauftrag \"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>\""</item> - <item quantity="other" msgid="8746611264734222865">"Druckaufträge \"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>\""</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Druckaufträge \"<xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>\"</item> + <item quantity="one">Druckauftrag \"<xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>\"</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Abbrechen"</string> <string name="restart" msgid="2472034227037808749">"Neu starten"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Keine Verbindung zum Drucker"</string> diff --git a/packages/PrintSpooler/res/values-el/strings.xml b/packages/PrintSpooler/res/values-el/strings.xml index 2908b6a..ff2fe4e 100644 --- a/packages/PrintSpooler/res/values-el/strings.xml +++ b/packages/PrintSpooler/res/values-el/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Μεγέθος χαρτιού"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Μέγεθος χαρτιού:"</string> <string name="label_color" msgid="1108690305218188969">"Χρώμα"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Δύο πλευρές"</string> <string name="label_orientation" msgid="2853142581990496477">"Προσανατολισμός"</string> <string name="label_pages" msgid="7768589729282182230">"Σελίδες"</string> <string name="template_all_pages" msgid="3322235982020148762">"Και οι <xliff:g id="PAGE_COUNT">%1$s</xliff:g> σελίδες"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Προσθήκη εκτυπωτή"</string> <string name="print_select_printer" msgid="7388760939873368698">"Επιλογή εκτυπωτή"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Διαγραφή εκτυπωτή"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Βρέθηκε <xliff:g id="COUNT">%1$s</xliff:g> εκτυπωτής"</item> - <item quantity="other" msgid="6533817036607128241">"Βρέθηκαν <xliff:g id="COUNT">%1$s</xliff:g> εκτυπωτές"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Βρέθηκαν <xliff:g id="COUNT_1">%1$s</xliff:g> εκτυπωτές</item> + <item quantity="one">Βρέθηκε <xliff:g id="COUNT_0">%1$s</xliff:g> εκτυπωτής</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Επιλέξτε υπηρεσία εκτύπωσης"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Αναζήτηση για εκτυπωτές"</string> <string name="print_no_printers" msgid="4869403323900054866">"Δεν βρέθηκαν εκτυπωτές"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ακύρωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Σφάλμα εκτυπωτή <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Ο εκτυπωτής απέκλεισε <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"εργασία εκτύπωσης <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"εργασίες εκτύπωσης <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> εργασίες εκτύπωσης</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> εργασία εκτύπωσης</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Ακύρωση"</string> <string name="restart" msgid="2472034227037808749">"Επανεκκίνηση"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Δεν υπάρχει σύνδεση με εκτυπωτή"</string> diff --git a/packages/PrintSpooler/res/values-en-rAU/strings.xml b/packages/PrintSpooler/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..e5721b2 --- /dev/null +++ b/packages/PrintSpooler/res/values-en-rAU/strings.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string> + <string name="more_options_button" msgid="2243228396432556771">"More options"</string> + <string name="label_destination" msgid="9132510997381599275">"Destination"</string> + <string name="label_copies" msgid="3634531042822968308">"Copies"</string> + <string name="label_copies_summary" msgid="3861966063536529540">"Copies:"</string> + <string name="label_paper_size" msgid="908654383827777759">"Paper size"</string> + <string name="label_paper_size_summary" msgid="5668204981332138168">"Paper size:"</string> + <string name="label_color" msgid="1108690305218188969">"Colour"</string> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> + <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string> + <string name="label_pages" msgid="7768589729282182230">"Pages"</string> + <string name="template_all_pages" msgid="3322235982020148762">"All <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> + <string name="template_page_range" msgid="428638530038286328">"Range of <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> + <string name="pages_range_example" msgid="8558694453556945172">"e.g. 1–5,8,11–13"</string> + <string name="print_preview" msgid="8010217796057763343">"Print preview"</string> + <string name="install_for_print_preview" msgid="6366303997385509332">"Install PDF viewer for preview"</string> + <string name="printing_app_crashed" msgid="854477616686566398">"Printing app crashed"</string> + <string name="generating_print_job" msgid="3119608742651698916">"Generating print job"</string> + <string name="save_as_pdf" msgid="5718454119847596853">"Save as PDF"</string> + <string name="all_printers" msgid="5018829726861876202">"All printers…"</string> + <string name="print_dialog" msgid="32628687461331979">"Print dialogue"</string> + <string name="current_page_template" msgid="1386638343571771292">"<xliff:g id="CURRENT_PAGE">%1$d</xliff:g> /<xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="page_description_template" msgid="6831239682256197161">"Page <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> of <xliff:g id="PAGE_COUNT">%2$d</xliff:g>"</string> + <string name="summary_template" msgid="8899734908625669193">"Summary, copies <xliff:g id="COPIES">%1$s</xliff:g>, paper size <xliff:g id="PAPER_SIZE">%2$s</xliff:g>"</string> + <string name="expand_handle" msgid="7282974448109280522">"Expand handle"</string> + <string name="collapse_handle" msgid="6886637989442507451">"Collapse handle"</string> + <string name="print_button" msgid="645164566271246268">"Print"</string> + <string name="savetopdf_button" msgid="2976186791686924743">"Save to PDF"</string> + <string name="print_options_expanded" msgid="6944679157471691859">"Print options expanded"</string> + <string name="print_options_collapsed" msgid="7455930445670414332">"Print options collapsed"</string> + <string name="search" msgid="5421724265322228497">"Search"</string> + <string name="all_printers_label" msgid="3178848870161526399">"All printers"</string> + <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string> + <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Search box shown"</string> + <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Search box hidden"</string> + <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string> + <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string> + <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item> + </plurals> + <string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string> + <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string> + <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string> + <string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> + <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> + <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> + <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> print jobs</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> print job</item> + </plurals> + <string name="cancel" msgid="4373674107267141885">"Cancel"</string> + <string name="restart" msgid="2472034227037808749">"Restart"</string> + <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string> + <string name="reason_unknown" msgid="5507940196503246139">"unknown"</string> + <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – unavailable"</string> + <string-array name="color_mode_labels"> + <item msgid="7602948745415174937">"Black & White"</item> + <item msgid="2762241247228983754">"Colour"</item> + </string-array> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"None"</item> + <item msgid="7296563835355641719">"Long edge"</item> + <item msgid="79513688117503758">"Short edge"</item> + </string-array> + <string-array name="orientation_labels"> + <item msgid="4061931020926489228">"Portrait"</item> + <item msgid="3199660090246166812">"Landscape"</item> + </string-array> + <string name="print_write_error_message" msgid="5787642615179572543">"Couldn\'t write to file"</string> + <string name="print_error_default_message" msgid="8602678405502922346">"Sorry, that didn\'t work. Try again."</string> + <string name="print_error_retry" msgid="1426421728784259538">"Retry"</string> + <string name="print_error_printer_unavailable" msgid="8985614415253203381">"This printer isn\'t available right now."</string> + <string name="print_preparing_preview" msgid="3939930735671364712">"Preparing preview…"</string> +</resources> diff --git a/packages/PrintSpooler/res/values-en-rGB/strings.xml b/packages/PrintSpooler/res/values-en-rGB/strings.xml index 5fa5338..e5721b2 100644 --- a/packages/PrintSpooler/res/values-en-rGB/strings.xml +++ b/packages/PrintSpooler/res/values-en-rGB/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Paper size"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Paper size:"</string> <string name="label_color" msgid="1108690305218188969">"Colour"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string> <string name="label_pages" msgid="7768589729282182230">"Pages"</string> <string name="template_all_pages" msgid="3322235982020148762">"All <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer found"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers found"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string> <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print job"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print jobs"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> print jobs</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> print job</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancel"</string> <string name="restart" msgid="2472034227037808749">"Restart"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string> diff --git a/packages/PrintSpooler/res/values-en-rIN/strings.xml b/packages/PrintSpooler/res/values-en-rIN/strings.xml index 5fa5338..e5721b2 100644 --- a/packages/PrintSpooler/res/values-en-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-en-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Paper size"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Paper size:"</string> <string name="label_color" msgid="1108690305218188969">"Colour"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string> <string name="label_pages" msgid="7768589729282182230">"Pages"</string> <string name="template_all_pages" msgid="3322235982020148762">"All <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer found"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers found"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers found</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer found</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string> <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print job"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print jobs"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> print jobs</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> print job</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancel"</string> <string name="restart" msgid="2472034227037808749">"Restart"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string> diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml index 17ea709..cc275de 100644 --- a/packages/PrintSpooler/res/values-es-rUS/strings.xml +++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Tamaño del papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Tamaño de papel:"</string> <string name="label_color" msgid="1108690305218188969">"Color"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Doble faz"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientación"</string> <string name="label_pages" msgid="7768589729282182230">"Páginas"</string> <string name="template_all_pages" msgid="3322235982020148762">"Todas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Agregar impresora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Seleccionar impresora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"No recordar impresora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Se encontró <xliff:g id="COUNT">%1$s</xliff:g> impresora."</item> - <item quantity="other" msgid="6533817036607128241">"Se encontraron <xliff:g id="COUNT">%1$s</xliff:g> impresoras."</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Se encontraron <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras.</item> + <item quantity="one">Se encontró <xliff:g id="COUNT_0">%1$s</xliff:g> impresora.</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Elegir servicio de impresión"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string> <string name="print_no_printers" msgid="4869403323900054866">"No se encontraron impresoras"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"La impresora bloqueó <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>."</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Trabajo de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Trabajos de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Trabajos de impresión: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Trabajo de impresión: <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancelar"</string> <string name="restart" msgid="2472034227037808749">"Reiniciar"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"No hay conexión con la impresora."</string> diff --git a/packages/PrintSpooler/res/values-es/strings.xml b/packages/PrintSpooler/res/values-es/strings.xml index c597177..13417a4 100644 --- a/packages/PrintSpooler/res/values-es/strings.xml +++ b/packages/PrintSpooler/res/values-es/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Tamaño del papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Tamaño del papel:"</string> <string name="label_color" msgid="1108690305218188969">"Color"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Doble cara"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientación"</string> <string name="label_pages" msgid="7768589729282182230">"Páginas"</string> <string name="template_all_pages" msgid="3322235982020148762">"Todas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Añadir impresora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Seleccionar impresora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Borrar impresora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Se ha encontrado <xliff:g id="COUNT">%1$s</xliff:g> impresora"</item> - <item quantity="other" msgid="6533817036607128241">"Se han encontrado <xliff:g id="COUNT">%1$s</xliff:g> impresoras"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Se han encontrado <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras</item> + <item quantity="one">Se ha encontrado <xliff:g id="COUNT_0">%1$s</xliff:g> impresora</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Seleccionar servicio de impresión"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string> <string name="print_no_printers" msgid="4869403323900054866">"No se encontraron impresoras"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"La impresora ha bloqueado <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Trabajo de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Trabajos de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Trabajos de impresión <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Trabajo de impresión <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancelar"</string> <string name="restart" msgid="2472034227037808749">"Volver a empezar"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"No hay conexión con la impresora"</string> diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et-rEE/strings.xml index 5e300da..dde4f3b 100644 --- a/packages/PrintSpooler/res/values-et-rEE/strings.xml +++ b/packages/PrintSpooler/res/values-et-rEE/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Paberi suurus"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Paberi suurus:"</string> <string name="label_color" msgid="1108690305218188969">"Värv"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dupleksrežiim"</string> <string name="label_orientation" msgid="2853142581990496477">"Suund"</string> <string name="label_pages" msgid="7768589729282182230">"Lehed"</string> <string name="template_all_pages" msgid="3322235982020148762">"Kõik <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Lisa printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Printeri valimine"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Printeri unustamine"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Leiti <xliff:g id="COUNT">%1$s</xliff:g> printer"</item> - <item quantity="other" msgid="6533817036607128241">"Leiti <xliff:g id="COUNT">%1$s</xliff:g> printerit"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Leiti <xliff:g id="COUNT_1">%1$s</xliff:g> printerit</item> + <item quantity="one">Leiti <xliff:g id="COUNT_0">%1$s</xliff:g> printer</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Prinditeenuse valimine"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Printerite otsimine"</string> <string name="print_no_printers" msgid="4869403323900054866">"Printereid ei leitud"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> tühistamine"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printeri viga: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blokeeris töö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Prinditööd <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> prinditööd</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> prinditöö</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Tühista"</string> <string name="restart" msgid="2472034227037808749">"Taaskäivita"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Printeriühendus puudub"</string> diff --git a/packages/PrintSpooler/res/values-eu-rES/strings.xml b/packages/PrintSpooler/res/values-eu-rES/strings.xml index 4e79c60..3cc1b64 100644 --- a/packages/PrintSpooler/res/values-eu-rES/strings.xml +++ b/packages/PrintSpooler/res/values-eu-rES/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Paperaren tamaina"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Paperaren tamaina:"</string> <string name="label_color" msgid="1108690305218188969">"Koloretan"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Bikoitza"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientazioa"</string> <string name="label_pages" msgid="7768589729282182230">"Orriak"</string> <string name="template_all_pages" msgid="3322235982020148762">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> orriak"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Gehitu inprimagailua"</string> <string name="print_select_printer" msgid="7388760939873368698">"Hautatu inprimagailua"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Ahaztu inprimagailua"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> inprimagailu aurkitu da"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> inprimagailu aurkitu dira"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> inprimagailu aurkitu dira</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> inprimagailu aurkitu da</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Aukeratu inprimatze-zerbitzua"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Inprimagailuak bilatzen"</string> <string name="print_no_printers" msgid="4869403323900054866">"Ez da inprimagailurik aurkitu"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> bertan behera uzten"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Errorea <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> inprimatzean"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Inprimag. <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> blokeatu du"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> inprimatze-lana"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> inprimatze-lanak"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> inprimatze-lanak</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> inprimatze-lana</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Utzi"</string> <string name="restart" msgid="2472034227037808749">"Berrabiarazi"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Inprimagailua ez dago konektatuta"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Zuri-beltza"</item> <item msgid="2762241247228983754">"Koloretakoa"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Bat ere ez"</item> + <item msgid="7296563835355641719">"Ertz luzetik"</item> + <item msgid="79513688117503758">"Ertz laburretik"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Bertikala"</item> <item msgid="3199660090246166812">"Horizontala"</item> diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml index 1bc934e..c47a75a 100644 --- a/packages/PrintSpooler/res/values-fa/strings.xml +++ b/packages/PrintSpooler/res/values-fa/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"اندازه کاغذ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"اندازه کاغذ:"</string> <string name="label_color" msgid="1108690305218188969">"رنگی"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"دوبلکس"</string> <string name="label_orientation" msgid="2853142581990496477">"جهت"</string> <string name="label_pages" msgid="7768589729282182230">"صفحهها"</string> <string name="template_all_pages" msgid="3322235982020148762">"همه <xliff:g id="PAGE_COUNT">%1$s</xliff:g> صفحه"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"افزودن چاپگر"</string> <string name="print_select_printer" msgid="7388760939873368698">"انتخاب چاپگر"</string> <string name="print_forget_printer" msgid="5035287497291910766">"فراموش کردن چاپگر"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> چاپگر یافت شد"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> چاپگر یافت شد"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> چاپگر یافت شد</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> چاپگر یافت شد</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"انتخاب سرویس چاپ"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"در حال جستجو برای چاپگرها"</string> <string name="print_no_printers" msgid="4869403323900054866">"هیچ چاپگری یافت نشد"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"در حال لغو <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"خطای چاپگر <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"چاپگر، کار <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> را مسدود کرد"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"کار چاپ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"کارهای چاپ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one">کار چاپ <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">کار چاپ <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"لغو"</string> <string name="restart" msgid="2472034227037808749">"راهاندازی مجدد"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"اتصال با چاپگر برقرار نیست"</string> diff --git a/packages/PrintSpooler/res/values-fi/strings.xml b/packages/PrintSpooler/res/values-fi/strings.xml index 87dd636..6c88534 100644 --- a/packages/PrintSpooler/res/values-fi/strings.xml +++ b/packages/PrintSpooler/res/values-fi/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Paperikoko"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Paperikoko:"</string> <string name="label_color" msgid="1108690305218188969">"Väri"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Suunta"</string> <string name="label_pages" msgid="7768589729282182230">"Sivut"</string> <string name="template_all_pages" msgid="3322235982020148762">"Kaikki <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Lisää tulostin"</string> <string name="print_select_printer" msgid="7388760939873368698">"Valitse tulostin"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Unohda tulostin"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Löytyi <xliff:g id="COUNT">%1$s</xliff:g> tulostin"</item> - <item quantity="other" msgid="6533817036607128241">"Löytyi <xliff:g id="COUNT">%1$s</xliff:g> tulostinta"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> tulostinta löydetty</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> tulostin löydetty</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Valitse tulostuspalvelu"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Etsitään tulostimia"</string> <string name="print_no_printers" msgid="4869403323900054866">"Tulostimia ei löydy"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Peruutetaan työ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Tulostinvirhe työlle <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tulostin esti työn <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tulostustyö <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tulostustyöt <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tulostustyötä</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> tulostustyö</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Peruuta"</string> <string name="restart" msgid="2472034227037808749">"Käynnistä uudelleen"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Ei yhteyttä tulostimeen"</string> diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml index fe038fd..dbc1ea3 100644 --- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml +++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Taille du papier"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Taille du papier :"</string> <string name="label_color" msgid="1108690305218188969">"Couleur"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string> <string name="label_pages" msgid="7768589729282182230">"Pages"</string> <string name="template_all_pages" msgid="3322235982020148762">"Toutes (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Ajouter une imprimante"</string> <string name="print_select_printer" msgid="7388760939873368698">"Sélectionner une imprimante"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Supprimer l\'imprimante"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimante trouvée"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantes trouvées"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvée</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvées</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours..."</string> <string name="print_no_printers" msgid="4869403323900054866">"Aucune imprimante trouvée"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »…"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression : « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impression de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> » bloquée"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tâche d\'impression <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tâches d\'impression <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tâche d\'impression</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tâches d\'impression</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Annuler"</string> <string name="restart" msgid="2472034227037808749">"Recommencer"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Aucune connexion à l\'imprimante"</string> diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml index 23aaf51..cc0c352 100644 --- a/packages/PrintSpooler/res/values-fr/strings.xml +++ b/packages/PrintSpooler/res/values-fr/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Taille du papier"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Taille du papier :"</string> <string name="label_color" msgid="1108690305218188969">"Couleur"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Recto verso"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string> <string name="label_pages" msgid="7768589729282182230">"Pages"</string> <string name="template_all_pages" msgid="3322235982020148762">"Toutes (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Ajouter une imprimante"</string> <string name="print_select_printer" msgid="7388760939873368698">"Sélectionner une imprimante"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Supprimer l\'imprimante"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimante trouvée."</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantes trouvées."</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante trouvée</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimantes trouvées</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours"</string> <string name="print_no_printers" msgid="4869403323900054866">"Aucune imprimante trouvée"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression pour \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impression de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" bloquée"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> tâche d\'impression"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> tâches d\'impression"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tâche d\'impression</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tâches d\'impression</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Annuler"</string> <string name="restart" msgid="2472034227037808749">"Redémarrer"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Aucune connexion à l\'imprimante."</string> diff --git a/packages/PrintSpooler/res/values-gl-rES/strings.xml b/packages/PrintSpooler/res/values-gl-rES/strings.xml index ba8432f..0e3d9f5 100644 --- a/packages/PrintSpooler/res/values-gl-rES/strings.xml +++ b/packages/PrintSpooler/res/values-gl-rES/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Tamaño do papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Tamaño do papel:"</string> <string name="label_color" msgid="1108690305218188969">"Cor"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dobre cara"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientación"</string> <string name="label_pages" msgid="7768589729282182230">"Páxinas"</string> <string name="template_all_pages" msgid="3322235982020148762">"As <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Engadir impresora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Seleccionar impresora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impresora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Encontrouse <xliff:g id="COUNT">%1$s</xliff:g> impresora"</item> - <item quantity="other" msgid="6533817036607128241">"Encontráronse <xliff:g id="COUNT">%1$s</xliff:g> impresoras"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Encontráronse <xliff:g id="COUNT_1">%1$s</xliff:g> impresoras</item> + <item quantity="one">Encontrouse <xliff:g id="COUNT_0">%1$s</xliff:g> impresora</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Escoller servizo de impresión"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Busca de impresoras"</string> <string name="print_no_printers" msgid="4869403323900054866">"Non se atopou ningunha impresora"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Erro da impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"A impresora bloqueou <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Traballo de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Traballos de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> traballos de impresión</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> traballo de impresión</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancelar"</string> <string name="restart" msgid="2472034227037808749">"Reiniciar"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Non hai conexión coa impresora"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Branco e negro"</item> <item msgid="2762241247228983754">"Cor"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Ningún"</item> + <item msgid="7296563835355641719">"Bordo longo"</item> + <item msgid="79513688117503758">"Bordo curto"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Vertical"</item> <item msgid="3199660090246166812">"Horizontal"</item> diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml index b39efcb..5d8c3c6 100644 --- a/packages/PrintSpooler/res/values-hi/strings.xml +++ b/packages/PrintSpooler/res/values-hi/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"काग़ज़ का आकार"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"काग़ज़ का आकार:"</string> <string name="label_color" msgid="1108690305218188969">"रंग"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"डुप्लेक्स"</string> <string name="label_orientation" msgid="2853142581990496477">"अभिविन्यास"</string> <string name="label_pages" msgid="7768589729282182230">"पृष्ठ"</string> <string name="template_all_pages" msgid="3322235982020148762">"सभी <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"प्रिंटर जोड़ें"</string> <string name="print_select_printer" msgid="7388760939873368698">"प्रिंटर चुनें"</string> <string name="print_forget_printer" msgid="5035287497291910766">"प्रिंटर को भूल जाएं"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर मिला"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर मिले"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर मिले</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर मिले</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"प्रिंट सेवा चुनें"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर खोज रहा है"</string> <string name="print_no_printers" msgid="4869403323900054866">"कोई प्रिंटर नहीं मिले"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द हो रहा है"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिंटर अवरोधित <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिंट कार्य"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिंट कार्य"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> प्रिंट कार्य</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> प्रिंट कार्य</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"रहने दें"</string> <string name="restart" msgid="2472034227037808749">"पुन: आरंभ करें"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिंटर के लिए कोई कनेक्शन नहीं"</string> diff --git a/packages/PrintSpooler/res/values-hr/strings.xml b/packages/PrintSpooler/res/values-hr/strings.xml index 7e68f09..79eb2eb 100644 --- a/packages/PrintSpooler/res/values-hr/strings.xml +++ b/packages/PrintSpooler/res/values-hr/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Veličina papira"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Veličina papira:"</string> <string name="label_color" msgid="1108690305218188969">"U boji"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Obostrano"</string> <string name="label_orientation" msgid="2853142581990496477">"Orijentacija"</string> <string name="label_pages" msgid="7768589729282182230">"Stranice"</string> <string name="template_all_pages" msgid="3322235982020148762">"Sve stranice (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,11 @@ <string name="print_add_printer" msgid="1088656468360653455">"Dodaj pisač"</string> <string name="print_select_printer" msgid="7388760939873368698">"Odaberite pisač"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Zaboravite pisač"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Pronađen je <xliff:g id="COUNT">%1$s</xliff:g> pisač"</item> - <item quantity="other" msgid="6533817036607128241">"Pronađen je sljedeći broj pisača: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Pronađen je <xliff:g id="COUNT_1">%1$s</xliff:g> pisač</item> + <item quantity="few">Pronađena su <xliff:g id="COUNT_1">%1$s</xliff:g> pisača</item> + <item quantity="other">Pronađeno je <xliff:g id="COUNT_1">%1$s</xliff:g> pisača</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Odaberite uslugu ispisa"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Traženje pisača"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nije pronađen nijedan pisač"</string> @@ -66,10 +66,11 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Otkazivanje zadatka <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Pogreška pisača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Pisač je blokirao <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Zadatak ispisa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Broj zadataka ispisa: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadatak ispisa</item> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadatka ispisa</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadataka ispisa</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Odustani"</string> <string name="restart" msgid="2472034227037808749">"Ponovo pokreni"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nema veze s pisačem"</string> diff --git a/packages/PrintSpooler/res/values-hu/strings.xml b/packages/PrintSpooler/res/values-hu/strings.xml index 10b351d..91182cf 100644 --- a/packages/PrintSpooler/res/values-hu/strings.xml +++ b/packages/PrintSpooler/res/values-hu/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papírméret"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papírméret:"</string> <string name="label_color" msgid="1108690305218188969">"Szín"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Kétoldalas"</string> <string name="label_orientation" msgid="2853142581990496477">"Tájolás"</string> <string name="label_pages" msgid="7768589729282182230">"Oldalak"</string> <string name="template_all_pages" msgid="3322235982020148762">"Összes (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Nyomtató hozzáadása"</string> <string name="print_select_printer" msgid="7388760939873368698">"Nyomtató kiválasztása"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Nyomtató elfelejtése"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> nyomtató észlelve"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> nyomtató észlelve"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> nyomtató észlelve</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> nyomtató észlelve</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Nyomtatási szolgáltatás kiválasztása"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Nyomtatók keresése"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nem található nyomtató"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> törlése"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Nyomtatási hiba: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> letiltva."</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> – nyomtatási feladat"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> – nyomtatási feladatok"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> nyomtatási feladat</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> nyomtatási feladat</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Mégse"</string> <string name="restart" msgid="2472034227037808749">"Újraindítás"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nincs kapcsolat a nyomtatóval"</string> diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy-rAM/strings.xml index 08cb138..5babfe1 100644 --- a/packages/PrintSpooler/res/values-hy-rAM/strings.xml +++ b/packages/PrintSpooler/res/values-hy-rAM/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Թղթի չափը"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Թղթի չափը՝"</string> <string name="label_color" msgid="1108690305218188969">"Գույնը"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Երկակի"</string> <string name="label_orientation" msgid="2853142581990496477">"Դիրքավորում"</string> <string name="label_pages" msgid="7768589729282182230">"Էջեր"</string> <string name="template_all_pages" msgid="3322235982020148762">"Բոլորը՝ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Ավելացնել տպիչ"</string> <string name="print_select_printer" msgid="7388760939873368698">"Ընտրել տպիչ"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Մոռանալ տպիչը"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> տպիչ է գտնվել"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> տպիչ է գտնվել"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Գտնվել է <xliff:g id="COUNT_1">%1$s</xliff:g> տպիչ</item> + <item quantity="other">Գտնվել է <xliff:g id="COUNT_1">%1$s</xliff:g> տպիչ</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Ընտրեք տպելու ծառայությունը"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Տպիչների որոնում"</string> <string name="print_no_printers" msgid="4869403323900054866">"Տպիչներ չեն գտնվել"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը չեղարկվում է"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Տպիչի սխալ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Տպիչն արգելափակել է <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> տպման աշխատանք"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> տպման աշխատանքներ"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> տպման աշխատանք</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> տպման աշխատանք</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Չեղարկել"</string> <string name="restart" msgid="2472034227037808749">"Վերագործարկել"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Տպիչի հետ կապ չկա"</string> diff --git a/packages/PrintSpooler/res/values-in/strings.xml b/packages/PrintSpooler/res/values-in/strings.xml index 666442c..d6d505d 100644 --- a/packages/PrintSpooler/res/values-in/strings.xml +++ b/packages/PrintSpooler/res/values-in/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Ukuran kertas"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Ukuran kertas:"</string> <string name="label_color" msgid="1108690305218188969">"Warna"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dupleks"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientasi"</string> <string name="label_pages" msgid="7768589729282182230">"Halaman"</string> <string name="template_all_pages" msgid="3322235982020148762">"Semua dari <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Tambahkan printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Pilih printer"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Lupakan printer"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer ditemukan"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printer ditemukan"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printer ditemukan</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer ditemukan</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Pilih layanan cetak"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari printer"</string> <string name="print_no_printers" msgid="4869403323900054866">"Tidak ditemukan printer"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Ada kesalahan printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer memblokir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tugas cetak <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tugas cetak <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Tugas cetak <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Tugas cetak <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Batal"</string> <string name="restart" msgid="2472034227037808749">"Mulai Ulang"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Tidak ada sambungan ke printer"</string> diff --git a/packages/PrintSpooler/res/values-is-rIS/strings.xml b/packages/PrintSpooler/res/values-is-rIS/strings.xml index bb0c7ca..dbe05bc 100644 --- a/packages/PrintSpooler/res/values-is-rIS/strings.xml +++ b/packages/PrintSpooler/res/values-is-rIS/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Pappírsstærð"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Pappírsstærð:"</string> <string name="label_color" msgid="1108690305218188969">"Litur"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Tvíhliða"</string> <string name="label_orientation" msgid="2853142581990496477">"Stefna"</string> <string name="label_pages" msgid="7768589729282182230">"Síður"</string> <string name="template_all_pages" msgid="3322235982020148762">"Allar <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Bæta við prentara"</string> <string name="print_select_printer" msgid="7388760939873368698">"Veldu prentara"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Gleyma prentara"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> prentari fannst"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> prentarar fundust"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> prentari fannst</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> prentarar fundust</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Veldu prentþjónustu"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Leitar að prentara"</string> <string name="print_no_printers" msgid="4869403323900054866">"Engir prentarar fundust"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Hættir við <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Prentaravilla <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Prentari útilokaði <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> prentverk"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> prentverk"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> prentverk</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> prentverk</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Hætta við"</string> <string name="restart" msgid="2472034227037808749">"Endurræsa"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Engin tenging við prentara"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Svarthvítt"</item> <item msgid="2762241247228983754">"Í lit"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Ekki í boði"</item> + <item msgid="7296563835355641719">"Langhlið"</item> + <item msgid="79513688117503758">"Skammhlið"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Skammsnið"</item> <item msgid="3199660090246166812">"Langsnið"</item> diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml index 39043ee..ff388ca 100644 --- a/packages/PrintSpooler/res/values-it/strings.xml +++ b/packages/PrintSpooler/res/values-it/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Dimensioni carta"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Dimensioni carta:"</string> <string name="label_color" msgid="1108690305218188969">"A colori"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Due tonalità (Duplex)"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientamento"</string> <string name="label_pages" msgid="7768589729282182230">"Pagine"</string> <string name="template_all_pages" msgid="3322235982020148762">"Tutte e <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Aggiungi stampante"</string> <string name="print_select_printer" msgid="7388760939873368698">"Seleziona stampante"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Elimina stampante"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> stampante trovata"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> stampanti trovate"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> stampanti trovate</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> stampante trovata</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Scegli servizio di stampa"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Ricerca di stampanti"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nessuna stampante trovata"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annullamento di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Errore della stampante: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"La stampante ha bloccato <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Processo di stampa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Processi di stampa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> processi di stampa</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> processo di stampa</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Annulla"</string> <string name="restart" msgid="2472034227037808749">"Riavvia"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nessun collegamento alla stampante"</string> diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml index 1fd68e9..b103e2b 100644 --- a/packages/PrintSpooler/res/values-iw/strings.xml +++ b/packages/PrintSpooler/res/values-iw/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"גודל נייר"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"גודל נייר:"</string> <string name="label_color" msgid="1108690305218188969">"צבע"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"דו-צדדי"</string> <string name="label_orientation" msgid="2853142581990496477">"כיוון"</string> <string name="label_pages" msgid="7768589729282182230">"עמודים"</string> <string name="template_all_pages" msgid="3322235982020148762">"הכל <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"הוסף מדפסת"</string> <string name="print_select_printer" msgid="7388760939873368698">"בחר מדפסת"</string> <string name="print_forget_printer" msgid="5035287497291910766">"שכח את המדפסת"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"נמצאה מדפסת <xliff:g id="COUNT">%1$s</xliff:g>"</item> - <item quantity="other" msgid="6533817036607128241">"נמצאו <xliff:g id="COUNT">%1$s</xliff:g> מדפסות"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="two">נמצאו <xliff:g id="COUNT_1">%1$s</xliff:g> מדפסות</item> + <item quantity="many">נמצאו <xliff:g id="COUNT_1">%1$s</xliff:g> מדפסות</item> + <item quantity="other">נמצאו <xliff:g id="COUNT_1">%1$s</xliff:g> מדפסות</item> + <item quantity="one">נמצאה מדפסת <xliff:g id="COUNT_0">%1$s</xliff:g></item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"בחר שירות הדפסה"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"מחפש מדפסות"</string> <string name="print_no_printers" msgid="4869403323900054866">"לא נמצאו מדפסות"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"מבטל את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"המדפסת חסמה את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"עבודת הדפסה <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> עבודות הדפסה"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="two"> עבודות הדפסה <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="many"> עבודות הדפסה <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other"> עבודות הדפסה <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one"> עבודת הדפסה <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"בטל"</string> <string name="restart" msgid="2472034227037808749">"הפעל מחדש"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"אין חיבור למדפסת"</string> diff --git a/packages/PrintSpooler/res/values-ja/strings.xml b/packages/PrintSpooler/res/values-ja/strings.xml index 3cc7e8e..d782a16 100644 --- a/packages/PrintSpooler/res/values-ja/strings.xml +++ b/packages/PrintSpooler/res/values-ja/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"用紙サイズ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"用紙サイズ:"</string> <string name="label_color" msgid="1108690305218188969">"カラー選択"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"両面印刷"</string> <string name="label_orientation" msgid="2853142581990496477">"方向"</string> <string name="label_pages" msgid="7768589729282182230">"ページ"</string> <string name="template_all_pages" msgid="3322235982020148762">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g>ページすべて"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"プリンタを追加"</string> <string name="print_select_printer" msgid="7388760939873368698">"プリンタを選択"</string> <string name="print_forget_printer" msgid="5035287497291910766">"プリンタを切断"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g>台のプリンタが見つかりました"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g>台のプリンタが見つかりました"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g>台のプリンタが見つかりました</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g>台のプリンタが見つかりました</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"印刷サービスの選択"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"プリンタの検索中"</string> <string name="print_no_printers" msgid="4869403323900054866">"プリンタが見つかりません"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をキャンセルしています"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"プリンタエラー: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をブロックしました"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>の印刷ジョブ"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>の印刷ジョブ"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>の印刷ジョブ</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>の印刷ジョブ</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"キャンセル"</string> <string name="restart" msgid="2472034227037808749">"再試行"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"プリンタに接続されていません"</string> diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka-rGE/strings.xml index 4a55dfe..928ab6f 100644 --- a/packages/PrintSpooler/res/values-ka-rGE/strings.xml +++ b/packages/PrintSpooler/res/values-ka-rGE/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"ფურცლის ზომა"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"ფურცლის ზომა:"</string> <string name="label_color" msgid="1108690305218188969">"ფერი"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"დუპლექსი"</string> <string name="label_orientation" msgid="2853142581990496477">"ორიენტაცია"</string> <string name="label_pages" msgid="7768589729282182230">"გვერდები"</string> <string name="template_all_pages" msgid="3322235982020148762">"ყველა <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"პრინტერის დამატება"</string> <string name="print_select_printer" msgid="7388760939873368698">"პრინტერის არჩევა"</string> <string name="print_forget_printer" msgid="5035287497291910766">"პრინტერის დავიწყება"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"ნაპოვნია <xliff:g id="COUNT">%1$s</xliff:g> პრინტერი"</item> - <item quantity="other" msgid="6533817036607128241">"ნაპოვნია <xliff:g id="COUNT">%1$s</xliff:g> პრინტერი"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> პრინტერი ნაპოვნია</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> პრინტერი ნაპოვნია</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"აირჩიეთ ბეჭდვის სერვისი"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"მიმდინარეობს პრინტერების ძიება"</string> <string name="print_no_printers" msgid="4869403323900054866">"პრინტერები ვერ მოიძებნა"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"მიმდინარეობს <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ის გაუქმება"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"ბეჭდვის შეცდომა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"პრინტერმა დაბლოკა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"ბეჭდვის <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> დავალება"</item> - <item quantity="other" msgid="8746611264734222865">"ბეჭდვის <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> დავალება"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ბეჭდვის დავალება</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> ბეჭდვის დავალება</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"გაუქმება"</string> <string name="restart" msgid="2472034227037808749">"გადატვირთვა"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"პრინტერთან კავშირი არ არის"</string> diff --git a/packages/PrintSpooler/res/values-kk-rKZ/strings.xml b/packages/PrintSpooler/res/values-kk-rKZ/strings.xml index 362d790..8548048 100644 --- a/packages/PrintSpooler/res/values-kk-rKZ/strings.xml +++ b/packages/PrintSpooler/res/values-kk-rKZ/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Қағаз өлшемі"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Қағаз өлшемі:"</string> <string name="label_color" msgid="1108690305218188969">"Түс"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Дуплексті"</string> <string name="label_orientation" msgid="2853142581990496477">"Бағыты"</string> <string name="label_pages" msgid="7768589729282182230">"Беттер"</string> <string name="template_all_pages" msgid="3322235982020148762">"Барлық <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Принтер қосу"</string> <string name="print_select_printer" msgid="7388760939873368698">"Принтер таңдау"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Принтерді ұмытып кету"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> принтер табылды"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> принтерлер табылды"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> принтер табылды</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> принтер табылды</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Принтер қызметін таңдау"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Принтерлерді іздеу"</string> <string name="print_no_printers" msgid="4869403323900054866">"Ешқандай принтер табылмады"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> жұмысын тоқтатуда"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> принтер қателігі"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтер <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> жұмысын бөгеді"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> басып шығару жұмысы"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> басып шығару жұмыстары"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> баспа тапсырмасы</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> баспа тапсырмасы</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Тоқтату"</string> <string name="restart" msgid="2472034227037808749">"Қайта бастау"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Принтермен байланыс жоқ"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Қара & Ақ"</item> <item msgid="2762241247228983754">"Түс"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Ешқандай"</item> + <item msgid="7296563835355641719">"Ұзын жиек"</item> + <item msgid="79513688117503758">"Қысқа жиек"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Портреттік"</item> <item msgid="3199660090246166812">"Ландшафт"</item> diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km-rKH/strings.xml index 9bc3362..b600916 100644 --- a/packages/PrintSpooler/res/values-km-rKH/strings.xml +++ b/packages/PrintSpooler/res/values-km-rKH/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"ទំហំក្រដាស"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"ទំហំក្រដាស៖"</string> <string name="label_color" msgid="1108690305218188969">"ពណ៌"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ឌុប"</string> <string name="label_orientation" msgid="2853142581990496477">"ទិស"</string> <string name="label_pages" msgid="7768589729282182230">"ទំព័រ"</string> <string name="template_all_pages" msgid="3322235982020148762">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> ទាំងអស់"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"បន្ថែមម៉ាស៊ីនបោះពុម្ព"</string> <string name="print_select_printer" msgid="7388760939873368698">"ជ្រើសម៉ាស៊ីនបោះពុម្ព"</string> <string name="print_forget_printer" msgid="5035287497291910766">"ភ្លេចម៉ាស៊ីនបោះពុម្ព"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT">%1$s</xliff:g>"</item> - <item quantity="other" msgid="6533817036607128241">"រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT_1">%1$s</xliff:g></item> + <item quantity="one">រកឃើញម៉ាស៊ីនបោះពុម្ព <xliff:g id="COUNT_0">%1$s</xliff:g></item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"ជ្រើសសេវាបោះពុម្ព"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"ស្វែងរកម៉ាស៊ីនបោះពុម្ព"</string> <string name="print_no_printers" msgid="4869403323900054866">"រកមិនឃើញម៉ាស៊ីនបោះពុម្ព"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"ការបោះបង់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"កំហុសម៉ាស៊ីនបោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"ម៉ាស៊ីនបោះពុម្ពបានទប់ស្កាត់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"ការងារបោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"ការងារបោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">ការងារបោះពុម្ព <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">ការងារបោះពុម្ព <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"បោះបង់"</string> <string name="restart" msgid="2472034227037808749">"ចាប់ផ្ដើមឡើងវិញ"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"គ្មានការភ្ជាប់ទៅម៉ាស៊ីនបោះពុម្ព"</string> diff --git a/packages/PrintSpooler/res/values-kn-rIN/strings.xml b/packages/PrintSpooler/res/values-kn-rIN/strings.xml index 61065e0..67b0e58 100644 --- a/packages/PrintSpooler/res/values-kn-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-kn-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"ಪೇಪರ್ ಗಾತ್ರ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"ಪೇಪರ್ ಗಾತ್ರ:"</string> <string name="label_color" msgid="1108690305218188969">"ಬಣ್ಣ"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ಡ್ಯೂಪ್ಲೆಕ್ಸ್"</string> <string name="label_orientation" msgid="2853142581990496477">"ಓರಿಯಂಟೇಶನ್"</string> <string name="label_pages" msgid="7768589729282182230">"ಪುಟಗಳು"</string> <string name="template_all_pages" msgid="3322235982020148762">"ಎಲ್ಲಾ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"ಮುದ್ರಕವನ್ನು ಸೇರಿಸು"</string> <string name="print_select_printer" msgid="7388760939873368698">"ಮುದ್ರಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> <string name="print_forget_printer" msgid="5035287497291910766">"ಮುದ್ರಕವನ್ನು ಮರೆತುಬಿಡು"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> ಮುದ್ರಕ ಕಂಡುಬಂದಿದೆ"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> ಮುದ್ರಕಗಳು ಕಂಡುಬಂದಿವೆ"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> ಪ್ರಿಂಟರ್ಗಳು ಪತ್ತೆಯಾಗಿವೆ</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ಪ್ರಿಂಟರ್ಗಳು ಪತ್ತೆಯಾಗಿವೆ</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"ಮುದ್ರಣ ಸೇವೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"ಮುದ್ರಕಗಳಿಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string> <string name="print_no_printers" msgid="4869403323900054866">"ಯಾವುದೇ ಮುದ್ರಕಗಳು ಕಂಡುಬಂದಿಲ್ಲ"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ರದ್ದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"ಮುದ್ರಕ ದೋಷ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"ಮುದ್ರಕವು <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ನಿರ್ಬಂಧಿಸಿದೆ"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> ಮುದ್ರಣ ಕಾರ್ಯ"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> ಮುದ್ರಣ ಕಾರ್ಯಗಳು"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ಮುದ್ರಣ ಕಾರ್ಯಗಳು</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ಮುದ್ರಣ ಕಾರ್ಯಗಳು</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ರದ್ದುಮಾಡು"</string> <string name="restart" msgid="2472034227037808749">"ಮರುಪ್ರಾರಂಭಿಸು"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"ಮುದ್ರಕಕ್ಕೆ ಸಂಪರ್ಕವಿಲ್ಲ"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"ಕಪ್ಪು & ಬಿಳುಪು"</item> <item msgid="2762241247228983754">"ಬಣ್ಣ"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"ಯಾವುದೂ ಇಲ್ಲ"</item> + <item msgid="7296563835355641719">"ಉದ್ದವಾದ ಅಂಚು"</item> + <item msgid="79513688117503758">"ಚಿಕ್ಕದಾದ ಅಂಚು"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"ಪೋಟ್ರೇಟ್"</item> <item msgid="3199660090246166812">"ಲ್ಯಾಂಡ್ಸ್ಕೇಪ್"</item> diff --git a/packages/PrintSpooler/res/values-ko/strings.xml b/packages/PrintSpooler/res/values-ko/strings.xml index 448896c..7d03c44 100644 --- a/packages/PrintSpooler/res/values-ko/strings.xml +++ b/packages/PrintSpooler/res/values-ko/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"용지 크기"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"용지 크기:"</string> <string name="label_color" msgid="1108690305218188969">"색상"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"양면"</string> <string name="label_orientation" msgid="2853142581990496477">"방향"</string> <string name="label_pages" msgid="7768589729282182230">"페이지"</string> <string name="template_all_pages" msgid="3322235982020148762">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g>페이지 모두"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"프린터 추가"</string> <string name="print_select_printer" msgid="7388760939873368698">"프린터 선택"</string> <string name="print_forget_printer" msgid="5035287497291910766">"프린터 삭제"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"프린터 <xliff:g id="COUNT">%1$s</xliff:g>대 검색됨"</item> - <item quantity="other" msgid="6533817036607128241">"프린터 <xliff:g id="COUNT">%1$s</xliff:g>대 검색됨"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">프린터 <xliff:g id="COUNT_1">%1$s</xliff:g>대 검색됨</item> + <item quantity="one">프린터 <xliff:g id="COUNT_0">%1$s</xliff:g>대 검색됨</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"인쇄 서비스 선택"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"프린터 검색 중"</string> <string name="print_no_printers" msgid="4869403323900054866">"프린터 없음"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 취소 중"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"프린터 오류: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"차단된 프린터: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 인쇄 작업"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 인쇄 작업"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> 인쇄 작업</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> 인쇄 작업</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"취소"</string> <string name="restart" msgid="2472034227037808749">"다시 시작"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"프린터와 연결되지 않음"</string> diff --git a/packages/PrintSpooler/res/values-ky-rKG/strings.xml b/packages/PrintSpooler/res/values-ky-rKG/strings.xml index 64bd585..9053529 100644 --- a/packages/PrintSpooler/res/values-ky-rKG/strings.xml +++ b/packages/PrintSpooler/res/values-ky-rKG/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Барактын өлчөмү"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Барактын өлчөмү:"</string> <string name="label_color" msgid="1108690305218188969">"Түс"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Кош тараптуу"</string> <string name="label_orientation" msgid="2853142581990496477">"Багыттоо"</string> <string name="label_pages" msgid="7768589729282182230">"Баракчалар"</string> <string name="template_all_pages" msgid="3322235982020148762">"Бардыгы <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Принтер кошуу"</string> <string name="print_select_printer" msgid="7388760939873368698">"Принтер тандоо"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Принтерди унутуу"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> принтер табылды"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> принтер табылды"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> принтер табылды</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> принтер табылды</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Принтер кызматын тандоо"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Принтерлер изделүүдө"</string> <string name="print_no_printers" msgid="4869403323900054866">"Принтерлер табылган жок"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> токтотулууда"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Принтерде ката кетти: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтер бөгөттөдү: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> басуу тапшырмасы"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> басуу тапшырмалары"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> басуу тапшырмасы</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> басуу тапшырмасы</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Айнуу"</string> <string name="restart" msgid="2472034227037808749">"Кайра баштоо"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Принтер менен байланыш жок"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Кара-ак"</item> <item msgid="2762241247228983754">"Түстүү"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Эч бири"</item> + <item msgid="7296563835355641719">"Узун кыр"</item> + <item msgid="79513688117503758">"Кыска кыр"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Тикесинен"</item> <item msgid="3199660090246166812">"Туурасынан"</item> diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml index 9bd4d83..c8aed29 100644 --- a/packages/PrintSpooler/res/values-lo-rLA/strings.xml +++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"ຂະໜາດເຈ້ຍ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"ຂະໜາດເຈ້ຍ:"</string> <string name="label_color" msgid="1108690305218188969">"ສີ"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ສອງໜ້າ"</string> <string name="label_orientation" msgid="2853142581990496477">"ລວງ"</string> <string name="label_pages" msgid="7768589729282182230">"ໜ້າ"</string> <string name="template_all_pages" msgid="3322235982020148762">"ທັງໝົດ <xliff:g id="PAGE_COUNT">%1$s</xliff:g> ໜ້າ"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"ເພີ່ມເຄື່ອງພິມ"</string> <string name="print_select_printer" msgid="7388760939873368698">"ເລືອກເຄື່ອງພິມ"</string> <string name="print_forget_printer" msgid="5035287497291910766">"ລືມເຄື່ອງພິມ"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"ພົບ <xliff:g id="COUNT">%1$s</xliff:g> ເຄື່ອງພິມ"</item> - <item quantity="other" msgid="6533817036607128241">"ພົບ <xliff:g id="COUNT">%1$s</xliff:g> ເຄື່ອງພິມ"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ເຄື່ອງພິມຖືກພົບແລ້ວ</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ເຄື່ອງພິມຖືກພົບແລ້ວ</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"ເລືອກບໍລິການການພິມ"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"ກຳລັງຊອກຫາເຄື່ອງພິມ"</string> <string name="print_no_printers" msgid="4869403323900054866">"ບໍ່ພົບເຄື່ອງພິມ"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"ກຳລັງຍົກເລີກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"ເຄື່ອງພິມເກີດຂໍ້ຜິດພາດ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"ເຄື່ອງພິມຖືກບລອກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"ງານພິມ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"ງານພິມ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ງານພິມ</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> ງານພິມ</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ຍົກເລີກ"</string> <string name="restart" msgid="2472034227037808749">"ປິດເປີດໃໝ່"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"ບໍ່ມີການເຊື່ອມຕໍ່ຫາເຄື່ອງພິມ"</string> diff --git a/packages/PrintSpooler/res/values-lt/strings.xml b/packages/PrintSpooler/res/values-lt/strings.xml index 1116f6d..f2ca5b7 100644 --- a/packages/PrintSpooler/res/values-lt/strings.xml +++ b/packages/PrintSpooler/res/values-lt/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Popieriaus dydis"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Popieriaus dydis:"</string> <string name="label_color" msgid="1108690305218188969">"Spalva"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dvipusis"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientacija"</string> <string name="label_pages" msgid="7768589729282182230">"Puslapiai"</string> <string name="template_all_pages" msgid="3322235982020148762">"Visi <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Pridėti spausdintuvą"</string> <string name="print_select_printer" msgid="7388760939873368698">"Pasirinkti spausdintuvą"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Pamiršti spausdintuvą"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Rasta spausdintuvų: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - <item quantity="other" msgid="6533817036607128241">"Rasta spausdintuvų: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Rastas <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvas</item> + <item quantity="few">Rasti <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvai</item> + <item quantity="many">Rasta <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvo</item> + <item quantity="other">Rasta <xliff:g id="COUNT_1">%1$s</xliff:g> spausdintuvų</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Pasirinkite spausdinimo paslaugą"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Ieškoma spausdintuvų"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nerasta spausdintuvų"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Atšaukiama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Spausdintuvo klaida: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Spausdintuvas užblokavo: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Spausdinimo užduotis: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Spausdinimo užduotys: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> spausdinimo užduotis</item> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> spausdinimo užduotys</item> + <item quantity="many"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> spausdinimo užduoties</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> spausdinimo užduočių</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Atšaukti"</string> <string name="restart" msgid="2472034227037808749">"Paleisti iš naujo"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nėra ryšio su spausdintuvu"</string> diff --git a/packages/PrintSpooler/res/values-lv/strings.xml b/packages/PrintSpooler/res/values-lv/strings.xml index d079ea9..cc49244 100644 --- a/packages/PrintSpooler/res/values-lv/strings.xml +++ b/packages/PrintSpooler/res/values-lv/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papīra izmērs"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papīra izmērs:"</string> <string name="label_color" msgid="1108690305218188969">"Krāsa"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dubults"</string> <string name="label_orientation" msgid="2853142581990496477">"Virziens"</string> <string name="label_pages" msgid="7768589729282182230">"Lapas"</string> <string name="template_all_pages" msgid="3322235982020148762">"Visas <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,11 @@ <string name="print_add_printer" msgid="1088656468360653455">"Pievienot printeri"</string> <string name="print_select_printer" msgid="7388760939873368698">"Atlasīt printeri"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Neatcerēties printeri"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Atrasts <xliff:g id="COUNT">%1$s</xliff:g> printeris"</item> - <item quantity="other" msgid="6533817036607128241">"Atrasti <xliff:g id="COUNT">%1$s</xliff:g> printeri"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="zero">Atrasti <xliff:g id="COUNT_1">%1$s</xliff:g> printeri</item> + <item quantity="one">Atrasts <xliff:g id="COUNT_1">%1$s</xliff:g> printers</item> + <item quantity="other">Atrasti <xliff:g id="COUNT_1">%1$s</xliff:g> printeri</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Izvēlieties drukāšanas pakalpojumu"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Printeru meklēšana"</string> <string name="print_no_printers" msgid="4869403323900054866">"Netika atrasts neviens printeris."</string> @@ -66,10 +66,11 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Pārtrauc drukas darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printera kļūda ar darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printeris bloķēja darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Drukas darbs <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Drukas darbi <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="zero"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> drukas darbi</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> drukas darbs</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> drukas darbi</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Atcelt"</string> <string name="restart" msgid="2472034227037808749">"Restartēt"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nav savienojuma ar printeri"</string> diff --git a/packages/PrintSpooler/res/values-mk-rMK/strings.xml b/packages/PrintSpooler/res/values-mk-rMK/strings.xml index fec4841..43c7c56 100644 --- a/packages/PrintSpooler/res/values-mk-rMK/strings.xml +++ b/packages/PrintSpooler/res/values-mk-rMK/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Големина на хартија"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Големина на хартија:"</string> <string name="label_color" msgid="1108690305218188969">"Боја"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Двострано"</string> <string name="label_orientation" msgid="2853142581990496477">"Ориентација"</string> <string name="label_pages" msgid="7768589729282182230">"Страници"</string> <string name="template_all_pages" msgid="3322235982020148762">"Сите <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Додај печатач"</string> <string name="print_select_printer" msgid="7388760939873368698">"Избери печатач"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Заборави го печатачот"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Пронајден е <xliff:g id="COUNT">%1$s</xliff:g> печатач"</item> - <item quantity="other" msgid="6533817036607128241">"Пронајдени се <xliff:g id="COUNT">%1$s</xliff:g> печатачи"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Пронајдени се <xliff:g id="COUNT_1">%1$s</xliff:g> печатач</item> + <item quantity="other">Пронајдени се <xliff:g id="COUNT_1">%1$s</xliff:g> печатачи</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Избери услуга печатење"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Пребарување печатачи"</string> <string name="print_no_printers" msgid="4869403323900054866">"Не се пронајдени печатачи"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> се откажува"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка при печатење <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Печатачот го блокираше <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Печати <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Печати <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> работа за печатење</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> работи за печатење</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Откажи"</string> <string name="restart" msgid="2472034227037808749">"Рестартирај"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Нема поврзување со печатач"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Црно-бела"</item> <item msgid="2762241247228983754">"Во боја"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Нема"</item> + <item msgid="7296563835355641719">"Долг раб"</item> + <item msgid="79513688117503758">"Краток раб"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Портрет"</item> <item msgid="3199660090246166812">"Пејзаж"</item> diff --git a/packages/PrintSpooler/res/values-ml-rIN/strings.xml b/packages/PrintSpooler/res/values-ml-rIN/strings.xml index 743827f..9b577a0 100644 --- a/packages/PrintSpooler/res/values-ml-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-ml-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"പേപ്പർ വലുപ്പം"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"പേപ്പർ വലുപ്പം:"</string> <string name="label_color" msgid="1108690305218188969">"നിറം"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"രണ്ടുഭാഗങ്ങളുള്ളത്"</string> <string name="label_orientation" msgid="2853142581990496477">"ഓറിയന്റേഷന്"</string> <string name="label_pages" msgid="7768589729282182230">"പേജുകൾ"</string> <string name="template_all_pages" msgid="3322235982020148762">"എല്ലാ <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"പ്രിന്റർ ചേർക്കുക"</string> <string name="print_select_printer" msgid="7388760939873368698">"പ്രിന്റർ തിരഞ്ഞെടുക്കുക"</string> <string name="print_forget_printer" msgid="5035287497291910766">"പ്രിന്റർ മറന്നു"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> പ്രിന്റർ കണ്ടെത്തി"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> പ്രിന്ററുകൾ കണ്ടെത്തി"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> പ്രിന്ററുകൾ കണ്ടെത്തി</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> പ്രിന്റർ കണ്ടെത്തി</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"പ്രിന്റ് സേവനം തിരഞ്ഞെടുക്കുക"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"പ്രിന്ററുകൾക്കായി തിരയുന്നു"</string> <string name="print_no_printers" msgid="4869403323900054866">"പ്രിന്ററുകളൊന്നും കണ്ടെത്തിയില്ല"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> റദ്ദാക്കുന്നു"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"പ്രിന്റർ പിശക് <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"പ്രിന്റർ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> തടഞ്ഞു"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> പ്രിന്റ് ജോലി"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> പ്രിന്റ് ജോലികൾ"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> പ്രിന്റ് ജോലികൾ</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> പ്രിന്റ് ജോലി</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"റദ്ദാക്കുക"</string> <string name="restart" msgid="2472034227037808749">"പുനരാരംഭിക്കുക"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"പ്രിന്ററിൽ കണക്ഷനൊന്നുമില്ല"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"കറുപ്പ് & വെള്ള"</item> <item msgid="2762241247228983754">"നിറം"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"ഒന്നുമില്ല"</item> + <item msgid="7296563835355641719">"നീളമുള്ള അരിക്"</item> + <item msgid="79513688117503758">"ഹ്രസ്വ അരിക്"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"പോർട്രെയ്റ്റ്"</item> <item msgid="3199660090246166812">"ലാൻഡ്സ്കേപ്പ്"</item> diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn-rMN/strings.xml index 8d0604a..c36eacc 100644 --- a/packages/PrintSpooler/res/values-mn-rMN/strings.xml +++ b/packages/PrintSpooler/res/values-mn-rMN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Цаасны хэмжээ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Цаасны хэмжээ:"</string> <string name="label_color" msgid="1108690305218188969">"Өнгө"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Хоёр талд нь хэвлэх"</string> <string name="label_orientation" msgid="2853142581990496477">"Чиглэл"</string> <string name="label_pages" msgid="7768589729282182230">"Хуудас"</string> <string name="template_all_pages" msgid="3322235982020148762">"Нийт <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Принтер нэмэх"</string> <string name="print_select_printer" msgid="7388760939873368698">"Принтер сонгох"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Принтерийг мартах"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> принтер олдсон"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> принтер олдсон"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> хэвлэгч олдсон байна</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> хэвлэгч олдсон байна</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Хэвлэх үйлчилгээг сонгох"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Принтер хайж байна"</string> <string name="print_no_printers" msgid="4869403323900054866">"Принтер олдсонгүй"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Цуцлаж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Принтерийн алдаа <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтер хориглогдсон <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> хэвлэх ажил"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> хэвлэх ажлууд"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ажлыг хэвлэх</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> ажлыг хэвлэх</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Цуцлах"</string> <string name="restart" msgid="2472034227037808749">"Дахин эхлүүлэх"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Принтер холбогдоогүй байна"</string> diff --git a/packages/PrintSpooler/res/values-mr-rIN/strings.xml b/packages/PrintSpooler/res/values-mr-rIN/strings.xml index 9036e0e..c79b5d3 100644 --- a/packages/PrintSpooler/res/values-mr-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-mr-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"कागद आकार"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"कागद आकार:"</string> <string name="label_color" msgid="1108690305218188969">"रंग"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"डुप्लेक्स"</string> <string name="label_orientation" msgid="2853142581990496477">"अभिमुखता"</string> <string name="label_pages" msgid="7768589729282182230">"पृष्ठे"</string> <string name="template_all_pages" msgid="3322235982020148762">"सर्व <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"प्रिंटर जोडा"</string> <string name="print_select_printer" msgid="7388760939873368698">"प्रिंटर निवडा"</string> <string name="print_forget_printer" msgid="5035287497291910766">"प्रिंटर विसरा"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर आढळला"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर आढळले"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर आढळला</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिंटर आढळले</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"मुद्रण सेवा निवडा"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर शोधत आहे"</string> <string name="print_no_printers" msgid="4869403323900054866">"कोणतेही प्रिंटर आढळले नाही"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द करीत आहे"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटी <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिंटरने <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> अवरोधित केले"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> मुद्रण कार्य"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> मुद्रण कार्ये"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> मुद्रण कार्य</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> मुद्रण कार्ये</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"रद्द करा"</string> <string name="restart" msgid="2472034227037808749">"रीस्टार्ट करा"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिंटरवर कोणतेही कनेक्शन नाही"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"कृष्ण धवल"</item> <item msgid="2762241247228983754">"रंग"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"काहीही नाही"</item> + <item msgid="7296563835355641719">"दीर्घ किनार"</item> + <item msgid="79513688117503758">"लघु किनार"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"पोट्रेट"</item> <item msgid="3199660090246166812">"भूदृश्य"</item> diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms-rMY/strings.xml index 0c7ecfb..5111beb 100644 --- a/packages/PrintSpooler/res/values-ms-rMY/strings.xml +++ b/packages/PrintSpooler/res/values-ms-rMY/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Saiz kertas"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Saiz kertas:"</string> <string name="label_color" msgid="1108690305218188969">"Warna"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dupleks"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientasi"</string> <string name="label_pages" msgid="7768589729282182230">"Halaman"</string> <string name="template_all_pages" msgid="3322235982020148762">"Semua <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Tambah pencetak"</string> <string name="print_select_printer" msgid="7388760939873368698">"Pilih pencetak"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Lupakan pencetak"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> pencetak ditemui"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> pencetak ditemui"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> pencetak ditemui</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> pencetak ditemui</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Pilih perkhidmatan cetak"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari pencetak"</string> <string name="print_no_printers" msgid="4869403323900054866">"Tiada pencetak ditemui"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Ralat pencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Pencetak disekat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Kerja cetakan <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Kerja cetakan <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Kerja cetakan <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Kerja cetakan <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Batal"</string> <string name="restart" msgid="2472034227037808749">"Mulakan semula"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Tiada sambungan ke pencetak"</string> diff --git a/packages/PrintSpooler/res/values-my-rMM/strings.xml b/packages/PrintSpooler/res/values-my-rMM/strings.xml index bbf2de4..fc0c28e 100644 --- a/packages/PrintSpooler/res/values-my-rMM/strings.xml +++ b/packages/PrintSpooler/res/values-my-rMM/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"စက္ကူ ဆိုက်"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"စက္ကူ ဆိုက်:"</string> <string name="label_color" msgid="1108690305218188969">"ရောင်စုံ"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ဂျူးပလက်စ်"</string> <string name="label_orientation" msgid="2853142581990496477">"အနေအထား"</string> <string name="label_pages" msgid="7768589729282182230">"စာမျက်နှာများ"</string> <string name="template_all_pages" msgid="3322235982020148762">"အားလုံး <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"စာထုတ်စက်ကို ထည့်ပါ"</string> <string name="print_select_printer" msgid="7388760939873368698">"စာထုတ်စက်ကို ရွေးရန်"</string> <string name="print_forget_printer" msgid="5035287497291910766">"စာထုတ်စက်ကို မေ့လိုက်ရန်"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> စာထုတ်စက် တွေ့ရှိပါသည်"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> စာထုတ်စက်များ တွေ့ရှိပါသည်"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> စာထုတ်စက်များ တွေ့ရှိပါသည်</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g>စာထုတ်စက် တွေ့ရှိပါသည်</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"စာထုတ်ရန် ဝန်ဆောင်မှုကို ရွေးချယ်ပါ"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"စာထုတ်စက်များကို ရှာနေပါသည်"</string> <string name="print_no_printers" msgid="4869403323900054866">"စာထုတ်စက် တစ်ခုမှ မတွေ့ရှိပါ"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ကို ပယ်ဖျက်နေပါသည်"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"စာထုတ်စက်မှ အမှား <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ကိုစာထုတ်စက်ကငြင်းလိုက်သည်"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> စာထုတ်စရာ"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> စာထုတ်စရာများ"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> စာထုတ်စရာများ</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>စာထုတ်စရာ</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ပယ်ဖျက်"</string> <string name="restart" msgid="2472034227037808749">"အစက ပြန်စရန်"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"စာထုတ်စက်နဲ့ ဆက်သွယ်ထားမှု မရှိပါ"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"အဖြူ အမည်း"</item> <item msgid="2762241247228983754">"ရောင်စုံ"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"မရှိ"</item> + <item msgid="7296563835355641719">"အနားသတ် အရှည်"</item> + <item msgid="79513688117503758">"အနားသတ် အတို"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"ထောင်လိုက်"</item> <item msgid="3199660090246166812">"အလျားလိုက်"</item> diff --git a/packages/PrintSpooler/res/values-nb/strings.xml b/packages/PrintSpooler/res/values-nb/strings.xml index 1df90a9..390a3d7 100644 --- a/packages/PrintSpooler/res/values-nb/strings.xml +++ b/packages/PrintSpooler/res/values-nb/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papirstørrelse"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papirstørrelse:"</string> <string name="label_color" msgid="1108690305218188969">"Farge"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Retning"</string> <string name="label_pages" msgid="7768589729282182230">"Sider"</string> <string name="template_all_pages" msgid="3322235982020148762">"Alle <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Legg til skriver"</string> <string name="print_select_printer" msgid="7388760939873368698">"Velg skriver"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Glem skriveren"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> skriver ble funnet"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> skrivere ble funnet"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> skrivere ble funnet</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> skriver ble funnet</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Velg utskriftstjeneste"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Søker etter skrivere"</string> <string name="print_no_printers" msgid="4869403323900054866">"Fant ingen skrivere"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Skriverfeil <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Skriveren blokkerte <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Utskriftsjobb for <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Utskriftsjobber for <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> utskriftsjobber</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> utskriftsjobb</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Avbryt"</string> <string name="restart" msgid="2472034227037808749">"Start på nytt"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen forbindelse med skriveren"</string> diff --git a/packages/PrintSpooler/res/values-ne-rNP/strings.xml b/packages/PrintSpooler/res/values-ne-rNP/strings.xml index c2ecc3b..7c4ecb0 100644 --- a/packages/PrintSpooler/res/values-ne-rNP/strings.xml +++ b/packages/PrintSpooler/res/values-ne-rNP/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"कागजको आकार"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"कागजको आकार:"</string> <string name="label_color" msgid="1108690305218188969">"रङ्ग"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"डुप्लेक्स"</string> <string name="label_orientation" msgid="2853142581990496477">"अभिमुखिकरण"</string> <string name="label_pages" msgid="7768589729282182230">"पृष्ठहरू"</string> <string name="template_all_pages" msgid="3322235982020148762">"सबै <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"प्रिन्टर थप्नुहोस्"</string> <string name="print_select_printer" msgid="7388760939873368698">"प्रिन्टर चयन गर्नुहोस्"</string> <string name="print_forget_printer" msgid="5035287497291910766">"प्रिन्टर बिर्सनुहोस्"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिन्टर भेटाइयो"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिन्टरहरू भेटाइयो"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> प्रिन्टरहरू भेटिए</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> प्रिन्टर भेटियो</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"प्रिन्ट सेवा छनौट गर्नुहोस्"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिन्टरहरू खोज्दै"</string> <string name="print_no_printers" msgid="4869403323900054866">"कुनै प्रिन्टरहरू भेटाइएन"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"रद्द गरिँदै <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिन्टर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिन्टर ब्लक गरियो <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिन्ट कार्य"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिन्ट कार्यहरु"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> कार्यहरू प्रिन्ट गर्नुहोस्</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> कार्य प्रिन्ट गर्नुहोस्</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"रद्द गर्नुहोस्"</string> <string name="restart" msgid="2472034227037808749">"पुनःस्टार्ट गर्नुहोस्"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिन्टरमा कुनै जडान छैन"</string> diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml index 2a6c4c2..44ec72c 100644 --- a/packages/PrintSpooler/res/values-nl/strings.xml +++ b/packages/PrintSpooler/res/values-nl/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Papierformaat"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Papierformaat:"</string> <string name="label_color" msgid="1108690305218188969">"Kleur"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Stand"</string> <string name="label_pages" msgid="7768589729282182230">"Pagina\'s"</string> <string name="template_all_pages" msgid="3322235982020148762">"Alle <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Printer toevoegen"</string> <string name="print_select_printer" msgid="7388760939873368698">"Printer selecteren"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Printer vergeten"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer gevonden"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers gevonden"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> printers gevonden</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> printer gevonden</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Afdrukservice kiezen"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Printers zoeken"</string> <string name="print_no_printers" msgid="4869403323900054866">"Geen printers gevonden"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annuleren"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printerfout <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> geblokkeerd door printer"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> afdruktaak"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> afdruktaken"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> afdruktaken</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> afdruktaak</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Annuleren"</string> <string name="restart" msgid="2472034227037808749">"Opnieuw starten"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Geen verbinding met printer"</string> diff --git a/packages/PrintSpooler/res/values-pl/strings.xml b/packages/PrintSpooler/res/values-pl/strings.xml index a74a890..0365e1d 100644 --- a/packages/PrintSpooler/res/values-pl/strings.xml +++ b/packages/PrintSpooler/res/values-pl/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Rozmiar papieru"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Rozmiar papieru:"</string> <string name="label_color" msgid="1108690305218188969">"Kolor"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dupleks"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientacja"</string> <string name="label_pages" msgid="7768589729282182230">"Strony"</string> <string name="template_all_pages" msgid="3322235982020148762">"Wszystkie <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Dodaj drukarkę"</string> <string name="print_select_printer" msgid="7388760939873368698">"Wybierz drukarkę"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Nie zapamiętuj drukarki"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Znaleziono <xliff:g id="COUNT">%1$s</xliff:g> drukarkę"</item> - <item quantity="other" msgid="6533817036607128241">"Znalezione drukarki: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="few">Znaleziono <xliff:g id="COUNT_1">%1$s</xliff:g> drukarki</item> + <item quantity="many">Znaleziono <xliff:g id="COUNT_1">%1$s</xliff:g> drukarek</item> + <item quantity="other">Znaleziono <xliff:g id="COUNT_1">%1$s</xliff:g> drukarki</item> + <item quantity="one">Znaleziono <xliff:g id="COUNT_0">%1$s</xliff:g> drukarkę</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Wybierz usługę drukowania"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Szukanie drukarek"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nie znaleziono drukarek"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Anulowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Błąd drukarki: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drukarka zablokowała <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> zadanie drukowania"</item> - <item quantity="other" msgid="8746611264734222865">"Zadania drukowania: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadania drukowania</item> + <item quantity="many"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadań drukowania</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> zadania drukowania</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> zadanie drukowania</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Anuluj"</string> <string name="restart" msgid="2472034227037808749">"Od nowa"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Brak połączenia z drukarką"</string> diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml index 10b32ca..9f6ccdb 100644 --- a/packages/PrintSpooler/res/values-pt-rPT/strings.xml +++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Tamanho do papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Tamanho do papel:"</string> <string name="label_color" msgid="1108690305218188969">"Cor"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Frente e verso"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientação"</string> <string name="label_pages" msgid="7768589729282182230">"Páginas"</string> <string name="template_all_pages" msgid="3322235982020148762">"Todas as <xliff:g id="PAGE_COUNT">%1$s</xliff:g> páginas"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Adicionar impressora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> impressora encontrada"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> impressoras encontradas"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> impressora encontrada</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Escolher o serviço de impressão"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"A procurar impressoras"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nenhuma impressora encontrada"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"A cancelar <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Erro da impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"A impressora bloqueou <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tarefa de impressão: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tarefas de impressão: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tarefas de impressão</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> tarefa de impressão</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancelar"</string> <string name="restart" msgid="2472034227037808749">"Reiniciar"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Sem ligação à impressora"</string> diff --git a/packages/PrintSpooler/res/values-pt/strings.xml b/packages/PrintSpooler/res/values-pt/strings.xml index eb1d9a0..31a24ea 100644 --- a/packages/PrintSpooler/res/values-pt/strings.xml +++ b/packages/PrintSpooler/res/values-pt/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Tamanho do papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Tamanho do papel:"</string> <string name="label_color" msgid="1108690305218188969">"Cor"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientação"</string> <string name="label_pages" msgid="7768589729282182230">"Páginas"</string> <string name="template_all_pages" msgid="3322235982020148762">"Todas as <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Adicionar impressora"</string> <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> impressora encontrada"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> impressoras encontradas"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> impressoras encontradas</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Procurando impressoras"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nenhuma impressora encontrada"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Erro ao imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"A impressora bloqueou <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Trabalho de impressão <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Trabalhos de impressão <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one">Tarefas de impressão <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">Tarefas de impressão <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Cancelar"</string> <string name="restart" msgid="2472034227037808749">"Reiniciar"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Sem conexão com a impressora"</string> diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml index 15ccb7d..efcfc75 100644 --- a/packages/PrintSpooler/res/values-ro/strings.xml +++ b/packages/PrintSpooler/res/values-ro/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Formatul hârtiei"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Formatul hârtiei:"</string> <string name="label_color" msgid="1108690305218188969">"Color"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientare"</string> <string name="label_pages" msgid="7768589729282182230">"Pagini"</string> <string name="template_all_pages" msgid="3322235982020148762">"Toate cele <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,11 @@ <string name="print_add_printer" msgid="1088656468360653455">"Adăugați o imprimantă"</string> <string name="print_select_printer" msgid="7388760939873368698">"Selectați imprimanta"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Omiteți imprimanta"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantă găsită"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> (de) imprimante găsite"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="few"><xliff:g id="COUNT_1">%1$s</xliff:g> imprimante găsite</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> de imprimante găsite</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> imprimantă găsită</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Alegeți serviciul de printare"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Se caută imprimante"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nu au fost găsite imprimante"</string> @@ -66,10 +66,11 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Se anulează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Eroare de printare: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printare blocată: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Sarcină de printare <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Sarcini de printare <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> activități de printare</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> de activități de printare</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> activitate de printare</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Anulați"</string> <string name="restart" msgid="2472034227037808749">"Reporniți"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Nu există conexiune la o imprimantă"</string> diff --git a/packages/PrintSpooler/res/values-ru/strings.xml b/packages/PrintSpooler/res/values-ru/strings.xml index f2d5bef..4c8dfdc 100644 --- a/packages/PrintSpooler/res/values-ru/strings.xml +++ b/packages/PrintSpooler/res/values-ru/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Размер бумаги"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Размер бумаги:"</string> <string name="label_color" msgid="1108690305218188969">"Печать"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Двусторонняя печать"</string> <string name="label_orientation" msgid="2853142581990496477">"Ориентация"</string> <string name="label_pages" msgid="7768589729282182230">"Страницы"</string> <string name="template_all_pages" msgid="3322235982020148762">"Все <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Добавить принтер"</string> <string name="print_select_printer" msgid="7388760939873368698">"Выбрать принтер"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Удалить принтер"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Найден <xliff:g id="COUNT">%1$s</xliff:g> принтер"</item> - <item quantity="other" msgid="6533817036607128241">"Найдено принтеров: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Найден <xliff:g id="COUNT_1">%1$s</xliff:g> принтер</item> + <item quantity="few">Найдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтера</item> + <item quantity="many">Найдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтеров</item> + <item quantity="other">Найдены <xliff:g id="COUNT_1">%1$s</xliff:g> принтера</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Выберите службу печати"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Поиск принтеров…"</string> <string name="print_no_printers" msgid="4869403323900054866">"Ничего не найдено"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отмена задания <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Ошибка задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Задание \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" заблокировано"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Задание печати: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Задания печати: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one">Задания печати: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="few">Задания печати: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="many">Задания печати: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">Задания печати: <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Отмена"</string> <string name="restart" msgid="2472034227037808749">"Повторить"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Нет связи с принтером"</string> diff --git a/packages/PrintSpooler/res/values-si-rLK/strings.xml b/packages/PrintSpooler/res/values-si-rLK/strings.xml index f1b40c6..855dcd1 100644 --- a/packages/PrintSpooler/res/values-si-rLK/strings.xml +++ b/packages/PrintSpooler/res/values-si-rLK/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"කඩදාසියේ ප්රමාණය"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"කඩදාසියේ ප්රමාණය:"</string> <string name="label_color" msgid="1108690305218188969">"වර්ණය"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ඩුප්ලෙක්ස්"</string> <string name="label_orientation" msgid="2853142581990496477">"දිශානතිය"</string> <string name="label_pages" msgid="7768589729282182230">"පිටු"</string> <string name="template_all_pages" msgid="3322235982020148762">"සියලුම <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"මුද්රණ යන්ත්ර එකතු කරන්න"</string> <string name="print_select_printer" msgid="7388760939873368698">"මුද්රකය තේරීම"</string> <string name="print_forget_printer" msgid="5035287497291910766">"මුද්රකය අමතක කිරීම"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"මුද්රණ යන්ත්ර <xliff:g id="COUNT">%1$s</xliff:g> ක් සොයා ගැනිණි"</item> - <item quantity="other" msgid="6533817036607128241">"මුද්රණ යන්ත්ර <xliff:g id="COUNT">%1$s</xliff:g> ක් සොයා ගැනිණි"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">මුද්රණ යන්ත්ර <xliff:g id="COUNT_1">%1$s</xliff:g> ක් සොයා ගන්නා ලදි</item> + <item quantity="other">මුද්රණ යන්ත්ර <xliff:g id="COUNT_1">%1$s</xliff:g> ක් සොයා ගන්නා ලදි</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"මුද්රණ සේවාව තෝරන්න"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"මුද්රණ යන්ත්ර සොයමින්"</string> <string name="print_no_printers" msgid="4869403323900054866">"මුද්රණ යන්ත්ර සොයා නොගැනුණි"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"අවලංගු කෙරේ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"මුද්රණ දෝෂය <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"මුද්රණ යන්ත්රය <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> අවුරා ඇති"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> මුද්රණ කාර්යය"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> මුද්රණ කාර්යයන්"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one">මුද්රණ කාර්ය <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">මුද්රණ කාර්ය <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"අවලංගු කරන්න"</string> <string name="restart" msgid="2472034227037808749">"යළි අරඹන්න"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"මුද්රණ යන්ත්රය වෙත සම්බන්ධය නැත"</string> diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml index fbf2bc7..a5ff4a9 100644 --- a/packages/PrintSpooler/res/values-sk/strings.xml +++ b/packages/PrintSpooler/res/values-sk/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Veľkosť papiera"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Veľkosť papiera:"</string> <string name="label_color" msgid="1108690305218188969">"Farba"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientácia"</string> <string name="label_pages" msgid="7768589729282182230">"Strany"</string> <string name="template_all_pages" msgid="3322235982020148762">"Všetky: <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Pridať tlačiareň"</string> <string name="print_select_printer" msgid="7388760939873368698">"Vybrať tlačiareň"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Odstrániť tlačiareň"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Našla sa <xliff:g id="COUNT">%1$s</xliff:g> tlačiareň"</item> - <item quantity="other" msgid="6533817036607128241">"Počet nájdených tlačiarní: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="few">Našli sa <xliff:g id="COUNT_1">%1$s</xliff:g> tlačiarne</item> + <item quantity="many">Našlo sa <xliff:g id="COUNT_1">%1$s</xliff:g> tlačiarne</item> + <item quantity="other">Našlo sa <xliff:g id="COUNT_1">%1$s</xliff:g> tlačiarní</item> + <item quantity="one">Našla sa <xliff:g id="COUNT_0">%1$s</xliff:g> tlačiareň</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Výber tlačovej služby"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhľadávanie tlačiarní"</string> <string name="print_no_printers" msgid="4869403323900054866">"Nenašli sa žiadne tlačiarne"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prebieha zrušenie úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tlačiarne – úloha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tlačiareň zablok. úlohu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Počet tlačových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Počet tlačových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tlačové úlohy</item> + <item quantity="many"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tlačovej úlohy</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tlačových úloh</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> tlačová úloha</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Zrušiť"</string> <string name="restart" msgid="2472034227037808749">"Spustiť znova"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Žiadne pripojenie k tlačiarni"</string> diff --git a/packages/PrintSpooler/res/values-sl/strings.xml b/packages/PrintSpooler/res/values-sl/strings.xml index a441d7c..e6d7358 100644 --- a/packages/PrintSpooler/res/values-sl/strings.xml +++ b/packages/PrintSpooler/res/values-sl/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Velikost papirja"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Velikost papirja:"</string> <string name="label_color" msgid="1108690305218188969">"Barvno"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Obojestransko"</string> <string name="label_orientation" msgid="2853142581990496477">"Postavitev"</string> <string name="label_pages" msgid="7768589729282182230">"Strani"</string> <string name="template_all_pages" msgid="3322235982020148762">"Vse (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Dodajanje tiskalnika"</string> <string name="print_select_printer" msgid="7388760939873368698">"Izbira tiskalnika"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Odstranitev tiskalnika"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Najden <xliff:g id="COUNT">%1$s</xliff:g> tiskalnik"</item> - <item quantity="other" msgid="6533817036607128241">"Število najdenih tiskalnikov: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> najden tiskalnik</item> + <item quantity="two"><xliff:g id="COUNT_1">%1$s</xliff:g> najdena tiskalnika</item> + <item quantity="few"><xliff:g id="COUNT_1">%1$s</xliff:g> najdeni tiskalniki</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> najdenih tiskalnikov</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Izberite tiskalno storitev"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Iskanje tiskalnikov"</string> <string name="print_no_printers" msgid="4869403323900054866">"Tiskalnikov ni mogoče najti"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Preklic: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Napaka tiskalnika: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tiskalnik je blokiral <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Tiskalno opravilo: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Tiskalna opravila: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tiskalno opravilo</item> + <item quantity="two"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tiskalni opravili</item> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tiskalna opravila</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> tiskalnih opravil</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Prekliči"</string> <string name="restart" msgid="2472034227037808749">"Začni znova"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Ni povezave s tiskalnikom"</string> diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml index 622c84b..677d5e1 100644 --- a/packages/PrintSpooler/res/values-sr/strings.xml +++ b/packages/PrintSpooler/res/values-sr/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Величина папира"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Величина папира:"</string> <string name="label_color" msgid="1108690305218188969">"Боја"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Обострани режим"</string> <string name="label_orientation" msgid="2853142581990496477">"Положај"</string> <string name="label_pages" msgid="7768589729282182230">"Странице"</string> <string name="template_all_pages" msgid="3322235982020148762">"Све странице (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,11 @@ <string name="print_add_printer" msgid="1088656468360653455">"Додај штампач"</string> <string name="print_select_printer" msgid="7388760939873368698">"Изабери штампач"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Заборави штампач"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Пронађен је <xliff:g id="COUNT">%1$s</xliff:g> штампач"</item> - <item quantity="other" msgid="6533817036607128241">"Пронађено је <xliff:g id="COUNT">%1$s</xliff:g> штампача"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Пронађен је <xliff:g id="COUNT_1">%1$s</xliff:g> штампач</item> + <item quantity="few">Пронађена су <xliff:g id="COUNT_1">%1$s</xliff:g> штампача</item> + <item quantity="other">Пронађено је <xliff:g id="COUNT_1">%1$s</xliff:g> штампача</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Изаберите услугу штампања"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Претрага штампача"</string> <string name="print_no_printers" msgid="4869403323900054866">"Није пронађен ниједан штампач"</string> @@ -66,10 +66,11 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отказује се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Штампач је блокирао <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Задатак штампања <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Задаци штампања <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one">Задаци штампања <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="few">Задаци штампања <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="other">Задаци штампања <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Откажи"</string> <string name="restart" msgid="2472034227037808749">"Поново покрени"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Нема везе са штампачем"</string> diff --git a/packages/PrintSpooler/res/values-sv/strings.xml b/packages/PrintSpooler/res/values-sv/strings.xml index 09ce6ee..cda72e2 100644 --- a/packages/PrintSpooler/res/values-sv/strings.xml +++ b/packages/PrintSpooler/res/values-sv/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Pappersstorlek"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Pappersstorlek:"</string> <string name="label_color" msgid="1108690305218188969">"Färg"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dubbelsidigt"</string> <string name="label_orientation" msgid="2853142581990496477">"Orientering"</string> <string name="label_pages" msgid="7768589729282182230">"Sidor"</string> <string name="template_all_pages" msgid="3322235982020148762">"Alla <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Lägg till skrivare"</string> <string name="print_select_printer" msgid="7388760939873368698">"Välj en skrivare"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Ta bort en skrivare"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> skrivare hittades"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> skrivare hittades"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> skrivare hittades</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> skrivare hittades</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Välj utskriftstjänst"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Söker efter skrivare"</string> <string name="print_no_printers" msgid="4869403323900054866">"Det gick inte att hitta några skrivare"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Skrivarfel för <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Skrivaren har blockerat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Utskriftsjobb – <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Utskriftsjobb – <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> utskriftsjobb</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> utskriftsjobb</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Avbryt"</string> <string name="restart" msgid="2472034227037808749">"Starta om"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen anslutning till skrivaren"</string> diff --git a/packages/PrintSpooler/res/values-sw/strings.xml b/packages/PrintSpooler/res/values-sw/strings.xml index a0497e6..d784ab6 100644 --- a/packages/PrintSpooler/res/values-sw/strings.xml +++ b/packages/PrintSpooler/res/values-sw/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Ukubwa wa karatasi"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Ukubwa wa karatasi:"</string> <string name="label_color" msgid="1108690305218188969">"Rangi"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Maradufu"</string> <string name="label_orientation" msgid="2853142581990496477">"Mkao"</string> <string name="label_pages" msgid="7768589729282182230">"Kurasa"</string> <string name="template_all_pages" msgid="3322235982020148762">"Kurasa zote <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Ongeza printa"</string> <string name="print_select_printer" msgid="7388760939873368698">"Chagua printa"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Sahau printa"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Printa <xliff:g id="COUNT">%1$s</xliff:g> imepatikana"</item> - <item quantity="other" msgid="6533817036607128241">"Printa <xliff:g id="COUNT">%1$s</xliff:g> zimepatikana"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Printa <xliff:g id="COUNT_1">%1$s</xliff:g> zimepatikana</item> + <item quantity="one">Printa <xliff:g id="COUNT_0">%1$s</xliff:g> imepatikana</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Chagua huduma ya printa"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Inatafuta printa"</string> <string name="print_no_printers" msgid="4869403323900054866">"Hakuna printa zilizopatikana"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Inaghairi <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Hitilafu ya kuchapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printa imefungwa <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Kazi ya kuchapisha ya <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Kazi za kuchapisha za <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Kazi ya kuchapisha ya <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Kazi ya kuchapisha ya <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> </item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Ghairi"</string> <string name="restart" msgid="2472034227037808749">"Anzisha upya"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Hakuna muunganisho kwa printa"</string> diff --git a/packages/PrintSpooler/res/values-ta-rIN/strings.xml b/packages/PrintSpooler/res/values-ta-rIN/strings.xml index a50470a..6f29851 100644 --- a/packages/PrintSpooler/res/values-ta-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-ta-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"காகித அளவு"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"காகித அளவு:"</string> <string name="label_color" msgid="1108690305218188969">"வண்ணம்"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"டியூப்ளெக்ஸ்"</string> <string name="label_orientation" msgid="2853142581990496477">"திசையமைப்பு"</string> <string name="label_pages" msgid="7768589729282182230">"பக்கங்கள்"</string> <string name="template_all_pages" msgid="3322235982020148762">"எல்லாம்: <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"பிரிண்டரைச் சேர்"</string> <string name="print_select_printer" msgid="7388760939873368698">"பிரிண்டரைத் தேர்ந்தெடுக்கவும்"</string> <string name="print_forget_printer" msgid="5035287497291910766">"பிரிண்டரை நீக்கு"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> பிரிண்டர் உள்ளது"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> பிரிண்டர்கள் உள்ளன"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> பிரிண்டர்கள் உள்ளன</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> பிரிண்டர் உள்ளது</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"அச்சுப் பொறியைத் தேர்வுசெய்யவும்"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"அச்சுப்பொறிகளைத் தேடுகிறது"</string> <string name="print_no_printers" msgid="4869403323900054866">"பிரிண்டர்கள் எதுவுமில்லை"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ஐ ரத்துசெய்கிறது"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"பிரிண்டர் பிழை <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"பிரிண்டர் <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ஐத் தடுத்தது"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> அச்சுப் பணி"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> அச்சுப் பணிகள்"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> அச்சுப் பணிகள்</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> அச்சுப் பணி</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ரத்துசெய்"</string> <string name="restart" msgid="2472034227037808749">"மீண்டும் தொடங்கு"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"அச்சுப்பொறியுடன் இணைக்கப்படவில்லை"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"கருப்பு & வெள்ளை"</item> <item msgid="2762241247228983754">"வண்ணம்"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"ஏதுமில்லை"</item> + <item msgid="7296563835355641719">"லாங் எட்ஜ்"</item> + <item msgid="79513688117503758">"ஷார்ட் எட்ஜ்"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"உறுவப்படம்"</item> <item msgid="3199660090246166812">"நிலத்தோற்றம்"</item> diff --git a/packages/PrintSpooler/res/values-te-rIN/strings.xml b/packages/PrintSpooler/res/values-te-rIN/strings.xml index b35520d..88c83da 100644 --- a/packages/PrintSpooler/res/values-te-rIN/strings.xml +++ b/packages/PrintSpooler/res/values-te-rIN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"కాగితపు పరిమాణం"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"కాగితపు పరిమాణం:"</string> <string name="label_color" msgid="1108690305218188969">"రంగు"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"డూప్లెక్స్"</string> <string name="label_orientation" msgid="2853142581990496477">"దృగ్విన్యాసం"</string> <string name="label_pages" msgid="7768589729282182230">"పేజీలు"</string> <string name="template_all_pages" msgid="3322235982020148762">"మొత్తం <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"ప్రింటర్ను జోడించు"</string> <string name="print_select_printer" msgid="7388760939873368698">"ప్రింటర్ను ఎంచుకోండి"</string> <string name="print_forget_printer" msgid="5035287497291910766">"ప్రింటర్ను విస్మరించు"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> ప్రింటర్ కనుగొనబడింది"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> ప్రింటర్లు కనుగొనబడ్డాయి"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ప్రింటర్లు కనుగొనబడ్డాయి</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ప్రింటర్ కనుగొనబడింది</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"ముద్రణ సేవను ఎంచుకోండి"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"ప్రింటర్ల కోసం శోధిస్తోంది"</string> <string name="print_no_printers" msgid="4869403323900054866">"ప్రింటర్లు కనుగొనబడలేదు"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ను రద్దు చేస్తోంది"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"ప్రింటర్ లోపం <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"ప్రింటర్ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ను బ్లాక్ చేసింది"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> ముద్రణ జాబ్"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> ముద్రణ జాబ్లు"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ముద్రణ జాబ్లు</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> ముద్రణ జాబ్</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"రద్దు చేయి"</string> <string name="restart" msgid="2472034227037808749">"పునఃప్రారంభించు"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"ప్రింటర్కు కనెక్షన్ లేదు"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"నలుపు & తెలుపు"</item> <item msgid="2762241247228983754">"రంగు"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"ఏదీ వద్దు"</item> + <item msgid="7296563835355641719">"పొడవైన అంచు"</item> + <item msgid="79513688117503758">"చిన్న అంచు"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"పోర్ట్రెయిట్"</item> <item msgid="3199660090246166812">"ల్యాండ్స్కేప్"</item> diff --git a/packages/PrintSpooler/res/values-th/strings.xml b/packages/PrintSpooler/res/values-th/strings.xml index 9c8d55c..7731a7d 100644 --- a/packages/PrintSpooler/res/values-th/strings.xml +++ b/packages/PrintSpooler/res/values-th/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"ขนาดของกระดาษ"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"ขนาดของกระดาษ:"</string> <string name="label_color" msgid="1108690305218188969">"สี"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ดูเพล็กซ์"</string> <string name="label_orientation" msgid="2853142581990496477">"การวางแนว"</string> <string name="label_pages" msgid="7768589729282182230">"หน้า"</string> <string name="template_all_pages" msgid="3322235982020148762">"ทั้ง <xliff:g id="PAGE_COUNT">%1$s</xliff:g> หน้า"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"เพิ่มเครื่องพิมพ์"</string> <string name="print_select_printer" msgid="7388760939873368698">"เลือกเครื่องพิมพ์"</string> <string name="print_forget_printer" msgid="5035287497291910766">"ไม่ต้องจำเครื่องพิมพ์"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"พบเครื่องพิมพ์ <xliff:g id="COUNT">%1$s</xliff:g> เครื่อง"</item> - <item quantity="other" msgid="6533817036607128241">"พบเครื่องพิมพ์ <xliff:g id="COUNT">%1$s</xliff:g> เครื่อง"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">พบเครื่องพิมพ์ <xliff:g id="COUNT_1">%1$s</xliff:g> เครื่อง</item> + <item quantity="one">พบเครื่องพิมพ์ <xliff:g id="COUNT_0">%1$s</xliff:g> เครื่อง</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"เลือกบริการพิมพ์"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"กำลังค้นหาเครื่องพิมพ์"</string> <string name="print_no_printers" msgid="4869403323900054866">"ไม่พบเครื่องพิมพ์"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"กำลังยกเลิก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"ข้อผิดพลาดเครื่องพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"เครื่องพิมพ์ได้บล็อก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"งานพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"งานพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> งานพิมพ์</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> งานพิมพ์</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"ยกเลิก"</string> <string name="restart" msgid="2472034227037808749">"เริ่มต้นใหม่"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"ไม่มีการเชื่อมต่อไปยังเครื่องพิมพ์"</string> diff --git a/packages/PrintSpooler/res/values-tl/strings.xml b/packages/PrintSpooler/res/values-tl/strings.xml index 9e4c7be..b4bda0c 100644 --- a/packages/PrintSpooler/res/values-tl/strings.xml +++ b/packages/PrintSpooler/res/values-tl/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Laki ng papel"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Laki ng papel:"</string> <string name="label_color" msgid="1108690305218188969">"Kulay"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Oryentasyon"</string> <string name="label_pages" msgid="7768589729282182230">"Mga Page"</string> <string name="template_all_pages" msgid="3322235982020148762">"Lahat ng <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Magdagdag ng printer"</string> <string name="print_select_printer" msgid="7388760939873368698">"Piliin ang printer"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Kalimutan ang printer"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer ang nakita"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> (na) printer ang nakita"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> nakitang printer</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> na nakitang printer</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Pumili ng serbisyo ng pag-print"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Naghahanap ng mga printer"</string> <string name="print_no_printers" msgid="4869403323900054866">"Walang mga printer na nakita"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kinakansela ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Error sa printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Naka-block ang Printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Pag-print ng <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Mga pag-print ng <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> ipi-print</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> na ipi-print</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Kanselahin"</string> <string name="restart" msgid="2472034227037808749">"I-restart"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Hindi nakakonekta sa printer"</string> diff --git a/packages/PrintSpooler/res/values-tr/strings.xml b/packages/PrintSpooler/res/values-tr/strings.xml index 902f4ce..9fa7d8e 100644 --- a/packages/PrintSpooler/res/values-tr/strings.xml +++ b/packages/PrintSpooler/res/values-tr/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Kağıt boyutu"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Kağıt boyutu:"</string> <string name="label_color" msgid="1108690305218188969">"Renkli"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Dubleks"</string> <string name="label_orientation" msgid="2853142581990496477">"Sayfa yönü"</string> <string name="label_pages" msgid="7768589729282182230">"Sayfa"</string> <string name="template_all_pages" msgid="3322235982020148762">"<xliff:g id="PAGE_COUNT">%1$s</xliff:g> sayfanın tamamı"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Yazıcı ekle"</string> <string name="print_select_printer" msgid="7388760939873368698">"Yazıcı seç"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Yazıcıyı unut"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> yazıcı bulundu"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> yazıcı bulundu"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> yazıcı bulundu</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> yazıcı bulundu</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Yazdırma hizmetini seçin"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Yazıcılar aranıyor"</string> <string name="print_no_printers" msgid="4869403323900054866">"Yazıcı bulunamadı"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> iptal ediliyor"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Yazıcı hatası: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Yazıcı <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> işini engelledi"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> yazdırma işi"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> yazdırma işleri"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> yazdırma işi</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> yazdırma işi</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"İptal"</string> <string name="restart" msgid="2472034227037808749">"Yeniden başlat"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Yazıcı bağlantısı yok"</string> diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml index 71f9d61..0b283b9 100644 --- a/packages/PrintSpooler/res/values-uk/strings.xml +++ b/packages/PrintSpooler/res/values-uk/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Розмір паперу"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Розмір паперу:"</string> <string name="label_color" msgid="1108690305218188969">"Колір"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Двосторонній друк"</string> <string name="label_orientation" msgid="2853142581990496477">"Орієнтація"</string> <string name="label_pages" msgid="7768589729282182230">"Сторінки"</string> <string name="template_all_pages" msgid="3322235982020148762">"Усі <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,12 @@ <string name="print_add_printer" msgid="1088656468360653455">"Додати принтер"</string> <string name="print_select_printer" msgid="7388760939873368698">"Вибрати принтер"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Ігнорувати принтер"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Знайдено принтерів: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - <item quantity="other" msgid="6533817036607128241">"Знайдено принтерів: <xliff:g id="COUNT">%1$s</xliff:g>"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтер</item> + <item quantity="few">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтери</item> + <item quantity="many">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтерів</item> + <item quantity="other">Знайдено <xliff:g id="COUNT_1">%1$s</xliff:g> принтерів</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Вибрати службу друку"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Пошук принтерів"</string> <string name="print_no_printers" msgid="4869403323900054866">"Принтери не знайдено"</string> @@ -66,10 +67,12 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" скасовується"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Помилка завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" заблоковано"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Завдання друку <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Завдання друку <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> завдання друку</item> + <item quantity="few"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> завдання друку</item> + <item quantity="many"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> завдань друку</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> завдань друку</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Скасувати"</string> <string name="restart" msgid="2472034227037808749">"Перезапустити"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Немає з’єднання з принтером"</string> diff --git a/packages/PrintSpooler/res/values-ur-rPK/strings.xml b/packages/PrintSpooler/res/values-ur-rPK/strings.xml index 2b32c30..2b138c1 100644 --- a/packages/PrintSpooler/res/values-ur-rPK/strings.xml +++ b/packages/PrintSpooler/res/values-ur-rPK/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"کاغذ کا سائز"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"کاغذ کا سائز:"</string> <string name="label_color" msgid="1108690305218188969">"رنگ"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"ڈوپلیکس"</string> <string name="label_orientation" msgid="2853142581990496477">"سمت بندی"</string> <string name="label_pages" msgid="7768589729282182230">"صفحات"</string> <string name="template_all_pages" msgid="3322235982020148762">"سبھی <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"پرنٹر شامل کریں"</string> <string name="print_select_printer" msgid="7388760939873368698">"پرنٹر منتخب کریں"</string> <string name="print_forget_printer" msgid="5035287497291910766">"پرنٹر کو بھول جائیں"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> پرنٹر ملا"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> پرنٹرز ملے"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> پرنٹرز ملے</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> پرنٹر ملا</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"پرنٹ سروس منتخب کریں"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"پرنٹرز تلاش کر رہا ہے"</string> <string name="print_no_printers" msgid="4869403323900054866">"کوئی پرنٹرز نہيں ملے"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> کو منسوخ کر رہا ہے"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"پرنٹر کی خرابی <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"پرنٹر نے <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> کو مسدود کر دیا"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> پرنٹ جاب"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> پرنٹ جابز"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> پرنٹ جابز</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> پرنٹ جاب</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"منسوخ کریں"</string> <string name="restart" msgid="2472034227037808749">"دوبارہ شروع کریں"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"پرنٹر کے ساتھ کوئی کنکشن نہیں ہے"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"سیاہ و سفید"</item> <item msgid="2762241247228983754">"رنگ"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"کوئی نہیں"</item> + <item msgid="7296563835355641719">"طویل کنارہ"</item> + <item msgid="79513688117503758">"مختصر کنارہ"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"پورٹریٹ"</item> <item msgid="3199660090246166812">"لینڈ اسکیپ"</item> diff --git a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml index 57103d4..26b5c9f 100644 --- a/packages/PrintSpooler/res/values-uz-rUZ/strings.xml +++ b/packages/PrintSpooler/res/values-uz-rUZ/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Qog‘oz o‘lchami"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Qog‘oz o‘lchami:"</string> <string name="label_color" msgid="1108690305218188969">"Rang"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Ikki tomonlama"</string> <string name="label_orientation" msgid="2853142581990496477">"Joylashuv"</string> <string name="label_pages" msgid="7768589729282182230">"Sahifalar"</string> <string name="template_all_pages" msgid="3322235982020148762">"Barchasi (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Printer qo‘shish"</string> <string name="print_select_printer" msgid="7388760939873368698">"Printerni tanlang"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Printerni unutish"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g>ta printer topildi"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g>ta printer topildi"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> ta printer topildi</item> + <item quantity="one"><xliff:g id="COUNT_0">%1$s</xliff:g> ta printer topildi</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Chop etish xizmatini tanlang"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Printerlarni izlash"</string> <string name="print_no_printers" msgid="4869403323900054866">"Printerlar topilmadi"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> bekor qilinmoqda"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Printerda xatolik: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ni taqiqladi"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> chop etish buyrug‘i"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> chop etish buyruqlari"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> chop qilish vazifalari</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> chop qilish vazifasi</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Bekor qilish"</string> <string name="restart" msgid="2472034227037808749">"Qayta boshlash"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Printer ulanmagan"</string> @@ -79,9 +78,11 @@ <item msgid="7602948745415174937">"Oq & qora"</item> <item msgid="2762241247228983754">"Rang"</item> </string-array> - <!-- no translation found for duplex_mode_labels:0 (3882302912790928315) --> - <!-- no translation found for duplex_mode_labels:1 (7296563835355641719) --> - <!-- no translation found for duplex_mode_labels:2 (79513688117503758) --> + <string-array name="duplex_mode_labels"> + <item msgid="3882302912790928315">"Hech biri"</item> + <item msgid="7296563835355641719">"Uzun tomoni"</item> + <item msgid="79513688117503758">"Qisqa tomoni"</item> + </string-array> <string-array name="orientation_labels"> <item msgid="4061931020926489228">"Bo‘yiga"</item> <item msgid="3199660090246166812">"Eniga"</item> diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml index 3a9f8d4..d6ef07c 100644 --- a/packages/PrintSpooler/res/values-vi/strings.xml +++ b/packages/PrintSpooler/res/values-vi/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Khổ giấy"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Khổ giấy:"</string> <string name="label_color" msgid="1108690305218188969">"Màu"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Hai mặt"</string> <string name="label_orientation" msgid="2853142581990496477">"Hướng"</string> <string name="label_pages" msgid="7768589729282182230">"Trang"</string> <string name="template_all_pages" msgid="3322235982020148762">"Tất cả <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Thêm máy in"</string> <string name="print_select_printer" msgid="7388760939873368698">"Chọn máy in"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Bỏ qua máy in"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"Đã tìm thấy <xliff:g id="COUNT">%1$s</xliff:g> máy in"</item> - <item quantity="other" msgid="6533817036607128241">"Đã tìm thấy <xliff:g id="COUNT">%1$s</xliff:g> máy in"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">Đã tìm thấy <xliff:g id="COUNT_1">%1$s</xliff:g> máy in</item> + <item quantity="one">Đã tìm thấy <xliff:g id="COUNT_0">%1$s</xliff:g> máy in</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Chọn dịch vụ in"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Đang tìm kiếm máy in"</string> <string name="print_no_printers" msgid="4869403323900054866">"Không tìm thấy máy in"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Hủy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Lỗi máy in <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Máy in đã chặn <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"Lệnh in <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - <item quantity="other" msgid="8746611264734222865">"Lệnh in <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">Lệnh in <xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g></item> + <item quantity="one">Lệnh in <xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g></item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Hủy"</string> <string name="restart" msgid="2472034227037808749">"Bắt đầu lại"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Không có kết nối nào với máy in"</string> diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml index 80bab12..b6ab6b5 100644 --- a/packages/PrintSpooler/res/values-zh-rCN/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"纸张尺寸"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"纸张尺寸:"</string> <string name="label_color" msgid="1108690305218188969">"颜色"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"双面模式"</string> <string name="label_orientation" msgid="2853142581990496477">"方向"</string> <string name="label_pages" msgid="7768589729282182230">"页数"</string> <string name="template_all_pages" msgid="3322235982020148762">"全部<xliff:g id="PAGE_COUNT">%1$s</xliff:g>页"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"添加打印机"</string> <string name="print_select_printer" msgid="7388760939873368698">"选择打印机"</string> <string name="print_forget_printer" msgid="5035287497291910766">"取消保存打印机"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"找到<xliff:g id="COUNT">%1$s</xliff:g>台打印机"</item> - <item quantity="other" msgid="6533817036607128241">"找到<xliff:g id="COUNT">%1$s</xliff:g>台打印机"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 台打印机</item> + <item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台打印机</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"选择打印服务"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜索打印机"</string> <string name="print_no_printers" msgid="4869403323900054866">"找不到打印机"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"打印机在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”时出错"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"打印机拒绝打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"“<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>”打印作业"</item> - <item quantity="other" msgid="8746611264734222865">"“<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>”打印作业"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other">“<xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g>”打印作业</item> + <item quantity="one">“<xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g>”打印作业</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"取消"</string> <string name="restart" msgid="2472034227037808749">"重新开始"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"未与打印机建立连接"</string> diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml index bf6262c..8f8bf13 100644 --- a/packages/PrintSpooler/res/values-zh-rHK/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"紙張大小"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"紙張大小:"</string> <string name="label_color" msgid="1108690305218188969">"顏色"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"雙面列印"</string> <string name="label_orientation" msgid="2853142581990496477">"方向"</string> <string name="label_pages" msgid="7768589729282182230">"頁數"</string> <string name="template_all_pages" msgid="3322235982020148762">"全部 <xliff:g id="PAGE_COUNT">%1$s</xliff:g> 頁"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"新增打印機"</string> <string name="print_select_printer" msgid="7388760939873368698">"選取打印機"</string> <string name="print_forget_printer" msgid="5035287497291910766">"移除打印機"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 部打印機"</item> - <item quantity="other" msgid="6533817036607128241">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 部打印機"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">已找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 部打印機</item> + <item quantity="one">已找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 部打印機</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋打印機"</string> <string name="print_no_printers" msgid="4869403323900054866">"找不到打印機"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"打印機錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"打印機已封鎖 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"一項 <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 列印工作"</item> - <item quantity="other" msgid="8746611264734222865">"多項 <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 列印工作"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> 項列印工作</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> 項列印工作</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"取消"</string> <string name="restart" msgid="2472034227037808749">"重新開始"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與打印機連線"</string> diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml index d822b41..7872d24 100644 --- a/packages/PrintSpooler/res/values-zh-rTW/strings.xml +++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"紙張大小"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"紙張大小:"</string> <string name="label_color" msgid="1108690305218188969">"色彩"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"雙面"</string> <string name="label_orientation" msgid="2853142581990496477">"方向"</string> <string name="label_pages" msgid="7768589729282182230">"頁面"</string> <string name="template_all_pages" msgid="3322235982020148762">"全部 <xliff:g id="PAGE_COUNT">%1$s</xliff:g> 頁"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"新增印表機"</string> <string name="print_select_printer" msgid="7388760939873368698">"選取印表機"</string> <string name="print_forget_printer" msgid="5035287497291910766">"移除印表機"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 台印表機"</item> - <item quantity="other" msgid="6533817036607128241">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 台印表機"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="other">找到 <xliff:g id="COUNT_1">%1$s</xliff:g> 台印表機</item> + <item quantity="one">找到 <xliff:g id="COUNT_0">%1$s</xliff:g> 台印表機</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋印表機"</string> <string name="print_no_printers" msgid="4869403323900054866">"找不到印表機"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"印表機發生錯誤:<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"印表機封鎖了 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 個列印工作"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 個列印工作"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> 個列印工作</item> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_0">%1$d</xliff:g> 個列印工作</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"取消"</string> <string name="restart" msgid="2472034227037808749">"重新開始"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與印表機建立連線"</string> diff --git a/packages/PrintSpooler/res/values-zu/strings.xml b/packages/PrintSpooler/res/values-zu/strings.xml index 2b05cb0..ddb953b 100644 --- a/packages/PrintSpooler/res/values-zu/strings.xml +++ b/packages/PrintSpooler/res/values-zu/strings.xml @@ -24,8 +24,7 @@ <string name="label_paper_size" msgid="908654383827777759">"Usayizi wekhasi"</string> <string name="label_paper_size_summary" msgid="5668204981332138168">"Usayizi wekhasi"</string> <string name="label_color" msgid="1108690305218188969">"Umbala"</string> - <!-- no translation found for label_duplex (1263181386446435253) --> - <skip /> + <string name="label_duplex" msgid="1263181386446435253">"Duplex"</string> <string name="label_orientation" msgid="2853142581990496477">"Umumo"</string> <string name="label_pages" msgid="7768589729282182230">"Amakhasi"</string> <string name="template_all_pages" msgid="3322235982020148762">"Konke <xliff:g id="PAGE_COUNT">%1$s</xliff:g>"</string> @@ -55,10 +54,10 @@ <string name="print_add_printer" msgid="1088656468360653455">"Engeza iphrinta"</string> <string name="print_select_printer" msgid="7388760939873368698">"Khetha iphrinta"</string> <string name="print_forget_printer" msgid="5035287497291910766">"Khohlwa iphrinta"</string> - <plurals name="print_search_result_count_utterance"> - <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> iphrinta itholiwe"</item> - <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> amaphrinta atholiwe"</item> - </plurals> + <plurals name="print_search_result_count_utterance" formatted="false" msgid="6997663738361080868"> + <item quantity="one"><xliff:g id="COUNT_1">%1$s</xliff:g> amaphrinta atholakele</item> + <item quantity="other"><xliff:g id="COUNT_1">%1$s</xliff:g> amaphrinta atholakele</item> + </plurals> <string name="choose_print_service" msgid="3740309762324459694">"Khetha isevisi yephrinta"</string> <string name="print_searching_for_printers" msgid="6550424555079932867">"Isesha amaphrinta"</string> <string name="print_no_printers" msgid="4869403323900054866">"Awekho amaphrinta atholiwe"</string> @@ -66,10 +65,10 @@ <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ikhansela i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="failed_notification_title_template" msgid="2256217208186530973">"Iphutha lephrinta ye-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string> <string name="blocked_notification_title_template" msgid="1175435827331588646">"Iphrinta engu-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ivinjelwe"</string> - <plurals name="composite_notification_title_template"> - <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> umsebenzi wokuphrinta"</item> - <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> imisebenzi yokuphrinta"</item> - </plurals> + <plurals name="composite_notification_title_template" formatted="false" msgid="6940956968211733780"> + <item quantity="one"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> imisebenzi yokuphrinta</item> + <item quantity="other"><xliff:g id="PRINT_JOB_NAME_1">%1$d</xliff:g> imisebenzi yokuphrinta</item> + </plurals> <string name="cancel" msgid="4373674107267141885">"Khansela"</string> <string name="restart" msgid="2472034227037808749">"Qala kabusha"</string> <string name="no_connection_to_printer" msgid="2159246915977282728">"Akukho ukuxhumana kuphrinta"</string> diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java b/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java index 5233c79..33db831 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/NotificationController.java @@ -125,7 +125,7 @@ final class NotificationController { .setWhen(System.currentTimeMillis()) .setOngoing(true) .setShowWhen(true) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); mNotificationManager.notify(0, builder.build()); } @@ -143,7 +143,7 @@ final class NotificationController { .setWhen(System.currentTimeMillis()) .setOngoing(true) .setShowWhen(true) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); mNotificationManager.notify(0, builder.build()); } @@ -159,7 +159,7 @@ final class NotificationController { .setWhen(System.currentTimeMillis()) .setOngoing(true) .setShowWhen(true) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); mNotificationManager.notify(0, builder.build()); } @@ -173,7 +173,7 @@ final class NotificationController { .setWhen(System.currentTimeMillis()) .setOngoing(true) .setShowWhen(true) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); mNotificationManager.notify(0, builder.build()); } @@ -206,7 +206,7 @@ final class NotificationController { builder.setNumber(printJobCount); builder.setStyle(inboxStyle); - builder.setColor(mContext.getResources().getColor( + builder.setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); mNotificationManager.notify(0, builder.build()); diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerProvider.java b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerProvider.java index 8537d6c..06723c3 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerProvider.java +++ b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerProvider.java @@ -20,9 +20,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.os.Debug; import android.os.IBinder; -import android.util.Log; public class PrintSpoolerProvider implements ServiceConnection { private final Context mContext; diff --git a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java index bfcd334..e6613fa 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java +++ b/packages/PrintSpooler/src/com/android/printspooler/widget/PrintContentView.java @@ -87,7 +87,7 @@ public final class PrintContentView extends ViewGroup implements View.OnClickLis super(context, attrs); mDragger = ViewDragHelper.create(this, new DragCallbacks()); - mScrimColor = context.getResources().getColor(R.color.print_preview_scrim_color); + mScrimColor = context.getColor(R.color.print_preview_scrim_color); // The options view is sliding under the static header but appears // after it in the layout, so we will draw in opposite order. diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..6e29d23 --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_headphones_a2dp.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_headphones_a2dp.png Binary files differnew file mode 100644 index 0000000..6110e9e --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_headphones_a2dp.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_headset_hfp.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_headset_hfp.png Binary files differnew file mode 100644 index 0000000..6cca225 --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_headset_hfp.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_misc_hid.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_misc_hid.png Binary files differnew file mode 100644 index 0000000..6445f2a --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_misc_hid.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_network_pan.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_network_pan.png Binary files differnew file mode 100644 index 0000000..78c0294 --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_network_pan.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_bt_pointing_hid.png b/packages/SettingsLib/res/drawable-hdpi/ic_bt_pointing_hid.png Binary files differnew file mode 100644 index 0000000..2fcc3b0 --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_bt_pointing_hid.png diff --git a/packages/SettingsLib/res/drawable-hdpi/ic_lockscreen_ime.png b/packages/SettingsLib/res/drawable-hdpi/ic_lockscreen_ime.png Binary files differnew file mode 100644 index 0000000..70d35bf --- /dev/null +++ b/packages/SettingsLib/res/drawable-hdpi/ic_lockscreen_ime.png diff --git a/packages/SettingsLib/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..2d9b75e --- /dev/null +++ b/packages/SettingsLib/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..b6ebe34 --- /dev/null +++ b/packages/SettingsLib/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..8b67b91 --- /dev/null +++ b/packages/SettingsLib/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..1fa0a3d --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_headphones_a2dp.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_headphones_a2dp.png Binary files differnew file mode 100644 index 0000000..175bd78 --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_headphones_a2dp.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_headset_hfp.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_headset_hfp.png Binary files differnew file mode 100644 index 0000000..05b27e8 --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_headset_hfp.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_misc_hid.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_misc_hid.png Binary files differnew file mode 100644 index 0000000..6e9f8ae --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_misc_hid.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_network_pan.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_network_pan.png Binary files differnew file mode 100644 index 0000000..5f3371f --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_network_pan.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_bt_pointing_hid.png b/packages/SettingsLib/res/drawable-mdpi/ic_bt_pointing_hid.png Binary files differnew file mode 100644 index 0000000..539d77f --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_bt_pointing_hid.png diff --git a/packages/SettingsLib/res/drawable-mdpi/ic_lockscreen_ime.png b/packages/SettingsLib/res/drawable-mdpi/ic_lockscreen_ime.png Binary files differnew file mode 100644 index 0000000..3216776 --- /dev/null +++ b/packages/SettingsLib/res/drawable-mdpi/ic_lockscreen_ime.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..4f381ba --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headphones_a2dp.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headphones_a2dp.png Binary files differnew file mode 100644 index 0000000..c67127d --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headphones_a2dp.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headset_hfp.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headset_hfp.png Binary files differnew file mode 100644 index 0000000..d3b356b --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_headset_hfp.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_misc_hid.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_misc_hid.png Binary files differnew file mode 100644 index 0000000..2d38129 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_misc_hid.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_network_pan.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_network_pan.png Binary files differnew file mode 100644 index 0000000..fb76575 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_network_pan.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_bt_pointing_hid.png b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_pointing_hid.png Binary files differnew file mode 100644 index 0000000..d8b68eb --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_bt_pointing_hid.png diff --git a/packages/SettingsLib/res/drawable-xhdpi/ic_lockscreen_ime.png b/packages/SettingsLib/res/drawable-xhdpi/ic_lockscreen_ime.png Binary files differnew file mode 100644 index 0000000..02cc3af --- /dev/null +++ b/packages/SettingsLib/res/drawable-xhdpi/ic_lockscreen_ime.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..7805b7a --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png Binary files differnew file mode 100644 index 0000000..8127774 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headset_hfp.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headset_hfp.png Binary files differnew file mode 100644 index 0000000..84b8085 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_headset_hfp.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_misc_hid.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_misc_hid.png Binary files differnew file mode 100644 index 0000000..289d6ac --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_misc_hid.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_network_pan.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_network_pan.png Binary files differnew file mode 100644 index 0000000..72bc804 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_network_pan.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_pointing_hid.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_pointing_hid.png Binary files differnew file mode 100644 index 0000000..e31ce2b --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_bt_pointing_hid.png diff --git a/packages/SettingsLib/res/drawable-xxhdpi/ic_lockscreen_ime.png b/packages/SettingsLib/res/drawable-xxhdpi/ic_lockscreen_ime.png Binary files differnew file mode 100644 index 0000000..f23b0e7 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxhdpi/ic_lockscreen_ime.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_cellphone.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_cellphone.png Binary files differnew file mode 100644 index 0000000..1e12f96 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_cellphone.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png Binary files differnew file mode 100644 index 0000000..8b547d9 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headset_hfp.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headset_hfp.png Binary files differnew file mode 100644 index 0000000..03c5033 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_headset_hfp.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_misc_hid.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_misc_hid.png Binary files differnew file mode 100644 index 0000000..b9a9923 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_misc_hid.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_network_pan.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_network_pan.png Binary files differnew file mode 100644 index 0000000..989e1ab --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_network_pan.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_pointing_hid.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_pointing_hid.png Binary files differnew file mode 100644 index 0000000..de8c389 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_bt_pointing_hid.png diff --git a/packages/SettingsLib/res/drawable-xxxhdpi/ic_lockscreen_ime.png b/packages/SettingsLib/res/drawable-xxxhdpi/ic_lockscreen_ime.png Binary files differnew file mode 100644 index 0000000..2eb8a92 --- /dev/null +++ b/packages/SettingsLib/res/drawable-xxxhdpi/ic_lockscreen_ime.png diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index f055a2c..b5e49ce 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -67,4 +67,98 @@ <!-- Status message of Wi-Fi when it is connected by a Wi-Fi assistant application. [CHAR LIMIT=NONE] --> <string name="connected_via_wfa">Connected via Wi\u2011Fi assistant</string> + + <!-- Bluetooth settings. Message when a device is disconnected --> + <string name="bluetooth_disconnected">Disconnected</string> + <!-- Bluetooth settings. Message when disconnecting from a device --> + <string name="bluetooth_disconnecting">Disconnecting\u2026</string> + <!-- Bluetooth settings. Message when connecting to a device --> + <string name="bluetooth_connecting">Connecting\u2026</string> + <!-- Bluetooth settings. Message when connected to a device. [CHAR LIMIT=40] --> + <string name="bluetooth_connected">Connected</string> + <!--Bluetooth settings screen, summary text under individual Bluetooth devices when pairing --> + <string name="bluetooth_pairing">Pairing\u2026</string> + + <!-- Bluetooth settings. Message when connected to a device, except for phone audio. [CHAR LIMIT=40] --> + <string name="bluetooth_connected_no_headset">Connected (no phone)</string> + <!-- Bluetooth settings. Message when connected to a device, except for media audio. [CHAR LIMIT=40] --> + <string name="bluetooth_connected_no_a2dp">Connected (no media)</string> + <!-- Bluetooth settings. Message when connected to a device, except for map. [CHAR LIMIT=40] --> + <string name="bluetooth_connected_no_map">Connected (no message access)</string> + <!-- Bluetooth settings. Message when connected to a device, except for phone/media audio. [CHAR LIMIT=40] --> + <string name="bluetooth_connected_no_headset_no_a2dp">Connected (no phone or media)</string> + + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the A2DP profile. --> + <string name="bluetooth_profile_a2dp">Media audio</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the headset or handsfree profile. --> + <string name="bluetooth_profile_headset">Phone audio</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the OPP profile. --> + <string name="bluetooth_profile_opp">File transfer</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the HID profile. --> + <string name="bluetooth_profile_hid">Input device</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (accessing Internet through remote device). [CHAR LIMIT=40] --> + <string name="bluetooth_profile_pan">Internet access</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PBAP profile. [CHAR LIMIT=40] --> + <string name="bluetooth_profile_pbap">Contact sharing</string> + <!-- Bluetooth settings. The user-visible summary string that is used whenever referring to the PBAP profile (sharing contacts). [CHAR LIMIT=60] --> + <string name="bluetooth_profile_pbap_summary">Use for contact sharing</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (sharing this device's Internet connection). [CHAR LIMIT=40] --> + <string name="bluetooth_profile_pan_nap">Internet connection sharing</string> + <!-- Bluetooth settings. The user-visible string that is used whenever referring to the map profile. --> + <string name="bluetooth_profile_map">Message Access</string> + + <!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference when A2DP is connected. --> + <string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string> + <!-- Bluetooth settings. Connection options screen. The summary for the headset checkbox preference when headset is connected. --> + <string name="bluetooth_headset_profile_summary_connected">Connected to phone audio</string> + <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference when OPP is connected. --> + <string name="bluetooth_opp_profile_summary_connected">Connected to file transfer server</string> + <!-- Bluetooth settings. Connection options screen. The summary for the map checkbox preference when map is connected. --> + <string name="bluetooth_map_profile_summary_connected">Connected to map</string> + <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference when OPP is not connected. --> + <string name="bluetooth_opp_profile_summary_not_connected">Not connected to file transfer server</string> + <!-- Bluetooth settings. Connection options screen. The summary for the HID checkbox preference when HID is connected. --> + <string name="bluetooth_hid_profile_summary_connected">Connected to input device</string> + <!-- Bluetooth settings. Connection options screen. The summary for the checkbox preference when PAN is connected (user role). [CHAR LIMIT=25]--> + <string name="bluetooth_pan_user_profile_summary_connected">Connected to device for Internet access</string> + <!-- Bluetooth settings. Connection options screen. The summary for the checkbox preference when PAN is connected (NAP role). [CHAR LIMIT=25]--> + <string name="bluetooth_pan_nap_profile_summary_connected">Sharing local Internet connection with device</string> + + <!-- Bluetooth settings. Connection options screen. The summary + for the PAN checkbox preference that describes how checking it + will set the PAN profile as preferred. --> + <string name="bluetooth_pan_profile_summary_use_for">Use for Internet access</string> + <!-- Bluetooth settings. Connection options screen. The summary for the map checkbox preference that describes how checking it will set the map profile as preferred. --> + <string name="bluetooth_map_profile_summary_use_for">Use for map</string> + <!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference that describes how checking it will set the A2DP profile as preferred. --> + <string name="bluetooth_a2dp_profile_summary_use_for">Use for media audio</string> + <!-- Bluetooth settings. Connection options screen. The summary for the headset checkbox preference that describes how checking it will set the headset profile as preferred. --> + <string name="bluetooth_headset_profile_summary_use_for">Use for phone audio</string> + <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference that describes how checking it will set the OPP profile as preferred. --> + <string name="bluetooth_opp_profile_summary_use_for">Use for file transfer</string> + <!-- Bluetooth settings. Connection options screen. The summary + for the HID checkbox preference that describes how checking it + will set the HID profile as preferred. --> + <string name="bluetooth_hid_profile_summary_use_for">Use for input</string> + + <!-- Button text for accepting an incoming pairing request. [CHAR LIMIT=20] --> + <string name="bluetooth_pairing_accept">Pair</string> + <!-- Button text for accepting an incoming pairing request in all caps. [CHAR LIMIT=20] --> + <string name="bluetooth_pairing_accept_all_caps">PAIR</string> + <!-- Button text for declining an incoming pairing request. [CHAR LIMIT=20] --> + <string name="bluetooth_pairing_decline">Cancel</string> + + <!-- Message in pairing dialogs. [CHAR LIMIT=NONE] --> + <string name="bluetooth_pairing_will_share_phonebook">Pairing grants access to your contacts and call history when connected.</string> + <!-- Message for the error dialog when BT pairing fails generically. --> + <string name="bluetooth_pairing_error_message">Couldn\'t pair with <xliff:g id="device_name">%1$s</xliff:g>.</string> + + <!-- Message for the error dialog when BT pairing fails because the PIN / + Passkey entered is incorrect. --> + <string name="bluetooth_pairing_pin_error_message">Couldn\'t pair with <xliff:g id="device_name">%1$s</xliff:g> because of an incorrect PIN or passkey.</string> + <!-- Message for the error dialog when BT pairing fails because the other device is down. --> + <string name="bluetooth_pairing_device_down_error_message">Can\'t communicate with <xliff:g id="device_name">%1$s</xliff:g>.</string> + <!-- Message for the error dialog when BT pairing fails because the other device rejected the pairing. --> + <string name="bluetooth_pairing_rejected_error_message">Pairing rejected by <xliff:g id="device_name">%1$s</xliff:g>.</string> + </resources> diff --git a/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java b/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java new file mode 100644 index 0000000..58e5e29 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/TetherUtil.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settingslib; + +import android.app.ActivityManager; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Resources; +import android.net.ConnectivityManager; +import android.net.wifi.WifiManager; +import android.os.SystemProperties; +import android.os.UserHandle; +import android.provider.Settings; + +public class TetherUtil { + + // Types of tethering. + public static final int TETHERING_INVALID = -1; + public static final int TETHERING_WIFI = 0; + public static final int TETHERING_USB = 1; + public static final int TETHERING_BLUETOOTH = 2; + + // Extras used for communicating with the TetherService. + public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType"; + public static final String EXTRA_REM_TETHER_TYPE = "extraRemTetherType"; + public static final String EXTRA_SET_ALARM = "extraSetAlarm"; + /** + * Tells the service to run a provision check now. + */ + public static final String EXTRA_RUN_PROVISION = "extraRunProvision"; + /** + * Enables wifi tethering if the provision check is successful. Used by + * QS to enable tethering. + */ + public static final String EXTRA_ENABLE_WIFI_TETHER = "extraEnableWifiTether"; + + public static ComponentName TETHER_SERVICE = ComponentName.unflattenFromString(Resources + .getSystem().getString(com.android.internal.R.string.config_wifi_tether_enable)); + + public static boolean setWifiTethering(boolean enable, Context context) { + final WifiManager wifiManager = + (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + final ContentResolver cr = context.getContentResolver(); + /** + * Disable Wifi if enabling tethering + */ + int wifiState = wifiManager.getWifiState(); + if (enable && ((wifiState == WifiManager.WIFI_STATE_ENABLING) || + (wifiState == WifiManager.WIFI_STATE_ENABLED))) { + wifiManager.setWifiEnabled(false); + Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 1); + } + + boolean success = wifiManager.setWifiApEnabled(null, enable); + /** + * If needed, restore Wifi on tether disable + */ + if (!enable) { + int wifiSavedState = Settings.Global.getInt(cr, Settings.Global.WIFI_SAVED_STATE, 0); + if (wifiSavedState == 1) { + wifiManager.setWifiEnabled(true); + Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 0); + } + } + return success; + } + + public static boolean isWifiTetherEnabled(Context context) { + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + return wifiManager.getWifiApState() == WifiManager.WIFI_AP_STATE_ENABLED; + } + + public static boolean isProvisioningNeeded(Context context) { + // Keep in sync with other usage of config_mobile_hotspot_provision_app. + // ConnectivityManager#enforceTetherChangePermission + String[] provisionApp = context.getResources().getStringArray( + com.android.internal.R.array.config_mobile_hotspot_provision_app); + if (SystemProperties.getBoolean("net.tethering.noprovisioning", false) + || provisionApp == null) { + return false; + } + return (provisionApp.length == 2); + } + + public static boolean isTetheringSupported(Context context) { + final ConnectivityManager cm = + (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + final boolean isSecondaryUser = ActivityManager.getCurrentUser() != UserHandle.USER_OWNER; + return !isSecondaryUser && cm.isTetheringSupported(); + } + +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java new file mode 100755 index 0000000..9608daa --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/A2dpProfile.java @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothA2dp; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.List; + +public final class A2dpProfile implements LocalBluetoothProfile { + private static final String TAG = "A2dpProfile"; + private static boolean V = false; + + private BluetoothA2dp mService; + private boolean mIsProfileReady; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + + static final ParcelUuid[] SINK_UUIDS = { + BluetoothUuid.AudioSink, + BluetoothUuid.AdvAudioDist, + }; + + static final String NAME = "A2DP"; + private final LocalBluetoothProfileManager mProfileManager; + + // Order of this profile in device profiles list + private static final int ORDINAL = 1; + + // These callbacks run on the main thread. + private final class A2dpServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothA2dp) proxy; + // We just bound to the service, so refresh the UI for any connected A2DP devices. + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + Log.w(TAG, "A2dpProfile found new device: " + nextDevice); + device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice); + } + device.onProfileStateChanged(A2dpProfile.this, BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + A2dpProfile(Context context, LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + mLocalAdapter.getProfileProxy(context, new A2dpServiceListener(), + BluetoothProfile.A2DP); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) return new ArrayList<BluetoothDevice>(0); + return mService.getDevicesMatchingConnectionStates( + new int[] {BluetoothProfile.STATE_CONNECTED, + BluetoothProfile.STATE_CONNECTING, + BluetoothProfile.STATE_DISCONNECTING}); + } + + public boolean connect(BluetoothDevice device) { + if (mService == null) return false; + List<BluetoothDevice> sinks = getConnectedDevices(); + if (sinks != null) { + for (BluetoothDevice sink : sinks) { + mService.disconnect(sink); + } + } + return mService.connect(device); + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + // Downgrade priority as user is disconnecting the headset. + if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON){ + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + return mService.disconnect(device); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + return mService.getConnectionState(device); + } + + public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; + return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + } + + public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device); + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; + if (preferred) { + if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + } else { + mService.setPriority(device, BluetoothProfile.PRIORITY_OFF); + } + } + boolean isA2dpPlaying() { + if (mService == null) return false; + List<BluetoothDevice> sinks = mService.getConnectedDevices(); + if (!sinks.isEmpty()) { + if (mService.isA2dpPlaying(sinks.get(0))) { + return true; + } + } + return false; + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_a2dp; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_a2dp_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_a2dp_profile_summary_connected; + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_headphones_a2dp; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.A2DP, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up A2DP proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java new file mode 100644 index 0000000..4c41b49 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + + +/** + * BluetoothCallback provides a callback interface for the settings + * UI to receive events from {@link BluetoothEventManager}. + */ +public interface BluetoothCallback { + void onBluetoothStateChanged(int bluetoothState); + void onScanningStateChanged(boolean started); + void onDeviceAdded(CachedBluetoothDevice cachedDevice); + void onDeviceDeleted(CachedBluetoothDevice cachedDevice); + void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState); + void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state); +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDeviceFilter.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDeviceFilter.java new file mode 100644 index 0000000..8dec86a --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDeviceFilter.java @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothUuid; +import android.os.ParcelUuid; +import android.util.Log; + +/** + * BluetoothDeviceFilter contains a static method that returns a + * Filter object that returns whether or not the BluetoothDevice + * passed to it matches the specified filter type constant from + * {@link android.bluetooth.BluetoothDevicePicker}. + */ +public final class BluetoothDeviceFilter { + private static final String TAG = "BluetoothDeviceFilter"; + + /** The filter interface to external classes. */ + public interface Filter { + boolean matches(BluetoothDevice device); + } + + /** All filter singleton (referenced directly). */ + public static final Filter ALL_FILTER = new AllFilter(); + + /** Bonded devices only filter (referenced directly). */ + public static final Filter BONDED_DEVICE_FILTER = new BondedDeviceFilter(); + + /** Unbonded devices only filter (referenced directly). */ + public static final Filter UNBONDED_DEVICE_FILTER = new UnbondedDeviceFilter(); + + /** Table of singleton filter objects. */ + private static final Filter[] FILTERS = { + ALL_FILTER, // FILTER_TYPE_ALL + new AudioFilter(), // FILTER_TYPE_AUDIO + new TransferFilter(), // FILTER_TYPE_TRANSFER + new PanuFilter(), // FILTER_TYPE_PANU + new NapFilter() // FILTER_TYPE_NAP + }; + + /** Private constructor. */ + private BluetoothDeviceFilter() { + } + + /** + * Returns the singleton {@link Filter} object for the specified type, + * or {@link #ALL_FILTER} if the type value is out of range. + * + * @param filterType a constant from BluetoothDevicePicker + * @return a singleton object implementing the {@link Filter} interface. + */ + public static Filter getFilter(int filterType) { + if (filterType >= 0 && filterType < FILTERS.length) { + return FILTERS[filterType]; + } else { + Log.w(TAG, "Invalid filter type " + filterType + " for device picker"); + return ALL_FILTER; + } + } + + /** Filter that matches all devices. */ + private static final class AllFilter implements Filter { + public boolean matches(BluetoothDevice device) { + return true; + } + } + + /** Filter that matches only bonded devices. */ + private static final class BondedDeviceFilter implements Filter { + public boolean matches(BluetoothDevice device) { + return device.getBondState() == BluetoothDevice.BOND_BONDED; + } + } + + /** Filter that matches only unbonded devices. */ + private static final class UnbondedDeviceFilter implements Filter { + public boolean matches(BluetoothDevice device) { + return device.getBondState() != BluetoothDevice.BOND_BONDED; + } + } + + /** Parent class of filters based on UUID and/or Bluetooth class. */ + private abstract static class ClassUuidFilter implements Filter { + abstract boolean matches(ParcelUuid[] uuids, BluetoothClass btClass); + + public boolean matches(BluetoothDevice device) { + return matches(device.getUuids(), device.getBluetoothClass()); + } + } + + /** Filter that matches devices that support AUDIO profiles. */ + private static final class AudioFilter extends ClassUuidFilter { + @Override + boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) { + if (uuids != null) { + if (BluetoothUuid.containsAnyUuid(uuids, A2dpProfile.SINK_UUIDS)) { + return true; + } + if (BluetoothUuid.containsAnyUuid(uuids, HeadsetProfile.UUIDS)) { + return true; + } + } else if (btClass != null) { + if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP) || + btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) { + return true; + } + } + return false; + } + } + + /** Filter that matches devices that support Object Transfer. */ + private static final class TransferFilter extends ClassUuidFilter { + @Override + boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) { + if (uuids != null) { + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush)) { + return true; + } + } + return btClass != null + && btClass.doesClassMatch(BluetoothClass.PROFILE_OPP); + } + } + + /** Filter that matches devices that support PAN User (PANU) profile. */ + private static final class PanuFilter extends ClassUuidFilter { + @Override + boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) { + if (uuids != null) { + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.PANU)) { + return true; + } + } + return btClass != null + && btClass.doesClassMatch(BluetoothClass.PROFILE_PANU); + } + } + + /** Filter that matches devices that support NAP profile. */ + private static final class NapFilter extends ClassUuidFilter { + @Override + boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) { + if (uuids != null) { + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.NAP)) { + return true; + } + } + return btClass != null + && btClass.doesClassMatch(BluetoothClass.PROFILE_NAP); + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDiscoverableTimeoutReceiver.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDiscoverableTimeoutReceiver.java new file mode 100644 index 0000000..69b45e5 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothDiscoverableTimeoutReceiver.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2012 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.settingslib.bluetooth; + +/* Required to handle timeout notification when phone is suspended */ +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.bluetooth.BluetoothAdapter; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + + +public class BluetoothDiscoverableTimeoutReceiver extends BroadcastReceiver { + private static final String TAG = "BluetoothDiscoverableTimeoutReceiver"; + + private static final String INTENT_DISCOVERABLE_TIMEOUT = + "android.bluetooth.intent.DISCOVERABLE_TIMEOUT"; + + public static void setDiscoverableAlarm(Context context, long alarmTime) { + Log.d(TAG, "setDiscoverableAlarm(): alarmTime = " + alarmTime); + + Intent intent = new Intent(INTENT_DISCOVERABLE_TIMEOUT); + intent.setClass(context, BluetoothDiscoverableTimeoutReceiver.class); + PendingIntent pending = PendingIntent.getBroadcast( + context, 0, intent, 0); + AlarmManager alarmManager = + (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); + + if (pending != null) { + // Cancel any previous alarms that do the same thing. + alarmManager.cancel(pending); + Log.d(TAG, "setDiscoverableAlarm(): cancel prev alarm"); + } + pending = PendingIntent.getBroadcast( + context, 0, intent, 0); + + alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pending); + } + + public static void cancelDiscoverableAlarm(Context context) { + Log.d(TAG, "cancelDiscoverableAlarm(): Enter"); + + Intent intent = new Intent(INTENT_DISCOVERABLE_TIMEOUT); + intent.setClass(context, BluetoothDiscoverableTimeoutReceiver.class); + PendingIntent pending = PendingIntent.getBroadcast( + context, 0, intent, PendingIntent.FLAG_NO_CREATE); + if (pending != null) { + // Cancel any previous alarms that do the same thing. + AlarmManager alarmManager = + (AlarmManager) context.getSystemService (Context.ALARM_SERVICE); + + alarmManager.cancel(pending); + } + } + + @Override + public void onReceive(Context context, Intent intent) { + LocalBluetoothAdapter localBluetoothAdapter = LocalBluetoothAdapter.getInstance(); + + if(localBluetoothAdapter != null && + localBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) { + Log.d(TAG, "Disable discoverable..."); + + localBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE); + } else { + Log.e(TAG, "localBluetoothAdapter is NULL!!"); + } + } +}; diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java new file mode 100755 index 0000000..5d6b2f1 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -0,0 +1,381 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * BluetoothEventManager receives broadcasts and callbacks from the Bluetooth + * API and dispatches the event on the UI thread to the right class in the + * Settings. + */ +public final class BluetoothEventManager { + private static final String TAG = "BluetoothEventManager"; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private LocalBluetoothProfileManager mProfileManager; + private final IntentFilter mAdapterIntentFilter, mProfileIntentFilter; + private final Map<String, Handler> mHandlerMap; + private Context mContext; + + private final Collection<BluetoothCallback> mCallbacks = + new ArrayList<BluetoothCallback>(); + + interface Handler { + void onReceive(Context context, Intent intent, BluetoothDevice device); + } + + void addHandler(String action, Handler handler) { + mHandlerMap.put(action, handler); + mAdapterIntentFilter.addAction(action); + } + + void addProfileHandler(String action, Handler handler) { + mHandlerMap.put(action, handler); + mProfileIntentFilter.addAction(action); + } + + // Set profile manager after construction due to circular dependency + void setProfileManager(LocalBluetoothProfileManager manager) { + mProfileManager = manager; + } + + BluetoothEventManager(LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, Context context) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mAdapterIntentFilter = new IntentFilter(); + mProfileIntentFilter = new IntentFilter(); + mHandlerMap = new HashMap<String, Handler>(); + mContext = context; + + // Bluetooth on/off broadcasts + addHandler(BluetoothAdapter.ACTION_STATE_CHANGED, new AdapterStateChangedHandler()); + // Generic connected/not broadcast + addHandler(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED, + new ConnectionStateChangedHandler()); + + // Discovery broadcasts + addHandler(BluetoothAdapter.ACTION_DISCOVERY_STARTED, new ScanningStateChangedHandler(true)); + addHandler(BluetoothAdapter.ACTION_DISCOVERY_FINISHED, new ScanningStateChangedHandler(false)); + addHandler(BluetoothDevice.ACTION_FOUND, new DeviceFoundHandler()); + addHandler(BluetoothDevice.ACTION_DISAPPEARED, new DeviceDisappearedHandler()); + addHandler(BluetoothDevice.ACTION_NAME_CHANGED, new NameChangedHandler()); + + // Pairing broadcasts + addHandler(BluetoothDevice.ACTION_BOND_STATE_CHANGED, new BondStateChangedHandler()); + addHandler(BluetoothDevice.ACTION_PAIRING_CANCEL, new PairingCancelHandler()); + + // Fine-grained state broadcasts + addHandler(BluetoothDevice.ACTION_CLASS_CHANGED, new ClassChangedHandler()); + addHandler(BluetoothDevice.ACTION_UUID, new UuidChangedHandler()); + + // Dock event broadcasts + addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler()); + + mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter); + } + + void registerProfileIntentReceiver() { + mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter); + } + + /** Register to start receiving callbacks for Bluetooth events. */ + public void registerCallback(BluetoothCallback callback) { + synchronized (mCallbacks) { + mCallbacks.add(callback); + } + } + + /** Unregister to stop receiving callbacks for Bluetooth events. */ + public void unregisterCallback(BluetoothCallback callback) { + synchronized (mCallbacks) { + mCallbacks.remove(callback); + } + } + + private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + BluetoothDevice device = intent + .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + + Handler handler = mHandlerMap.get(action); + if (handler != null) { + handler.onReceive(context, intent, device); + } + } + }; + + private class AdapterStateChangedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, + BluetoothAdapter.ERROR); + // update local profiles and get paired devices + mLocalAdapter.setBluetoothStateInt(state); + // send callback to update UI and possibly start scanning + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onBluetoothStateChanged(state); + } + } + // Inform CachedDeviceManager that the adapter state has changed + mDeviceManager.onBluetoothStateChanged(state); + } + } + + private class ScanningStateChangedHandler implements Handler { + private final boolean mStarted; + + ScanningStateChangedHandler(boolean started) { + mStarted = started; + } + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onScanningStateChanged(mStarted); + } + } + mDeviceManager.onScanningStateChanged(mStarted); + } + } + + private class DeviceFoundHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE); + BluetoothClass btClass = intent.getParcelableExtra(BluetoothDevice.EXTRA_CLASS); + String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); + // TODO Pick up UUID. They should be available for 2.1 devices. + // Skip for now, there's a bluez problem and we are not getting uuids even for 2.1. + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + cachedDevice = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, device); + Log.d(TAG, "DeviceFoundHandler created new CachedBluetoothDevice: " + + cachedDevice); + } + cachedDevice.setRssi(rssi); + cachedDevice.setBtClass(btClass); + cachedDevice.setNewName(name); + cachedDevice.setVisible(true); + } + } + + private class ConnectionStateChangedHandler implements Handler { + @Override + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, + BluetoothAdapter.ERROR); + dispatchConnectionStateChanged(cachedDevice, state); + } + } + + private void dispatchConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) { + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onConnectionStateChanged(cachedDevice, state); + } + } + } + + void dispatchDeviceAdded(CachedBluetoothDevice cachedDevice) { + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onDeviceAdded(cachedDevice); + } + } + } + + private class DeviceDisappearedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + Log.w(TAG, "received ACTION_DISAPPEARED for an unknown device: " + device); + return; + } + if (CachedBluetoothDeviceManager.onDeviceDisappeared(cachedDevice)) { + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onDeviceDeleted(cachedDevice); + } + } + } + } + } + + private class NameChangedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + mDeviceManager.onDeviceNameUpdated(device); + } + } + + private class BondStateChangedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + if (device == null) { + Log.e(TAG, "ACTION_BOND_STATE_CHANGED with no EXTRA_DEVICE"); + return; + } + int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, + BluetoothDevice.ERROR); + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + Log.w(TAG, "CachedBluetoothDevice for device " + device + + " not found, calling readPairedDevices()."); + if (!readPairedDevices()) { + Log.e(TAG, "Got bonding state changed for " + device + + ", but we have no record of that device."); + return; + } + cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + Log.e(TAG, "Got bonding state changed for " + device + + ", but device not added in cache."); + return; + } + } + + synchronized (mCallbacks) { + for (BluetoothCallback callback : mCallbacks) { + callback.onDeviceBondStateChanged(cachedDevice, bondState); + } + } + cachedDevice.onBondingStateChanged(bondState); + + if (bondState == BluetoothDevice.BOND_NONE) { + int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON, + BluetoothDevice.ERROR); + + showUnbondMessage(context, cachedDevice.getName(), reason); + } + } + + /** + * Called when we have reached the unbonded state. + * + * @param reason one of the error reasons from + * BluetoothDevice.UNBOND_REASON_* + */ + private void showUnbondMessage(Context context, String name, int reason) { + int errorMsg; + + switch(reason) { + case BluetoothDevice.UNBOND_REASON_AUTH_FAILED: + errorMsg = R.string.bluetooth_pairing_pin_error_message; + break; + case BluetoothDevice.UNBOND_REASON_AUTH_REJECTED: + errorMsg = R.string.bluetooth_pairing_rejected_error_message; + break; + case BluetoothDevice.UNBOND_REASON_REMOTE_DEVICE_DOWN: + errorMsg = R.string.bluetooth_pairing_device_down_error_message; + break; + case BluetoothDevice.UNBOND_REASON_DISCOVERY_IN_PROGRESS: + case BluetoothDevice.UNBOND_REASON_AUTH_TIMEOUT: + case BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS: + case BluetoothDevice.UNBOND_REASON_REMOTE_AUTH_CANCELED: + errorMsg = R.string.bluetooth_pairing_error_message; + break; + default: + Log.w(TAG, "showUnbondMessage: Not displaying any message for reason: " + reason); + return; + } + Utils.showError(context, name, errorMsg); + } + } + + private class ClassChangedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + mDeviceManager.onBtClassChanged(device); + } + } + + private class UuidChangedHandler implements Handler { + public void onReceive(Context context, Intent intent, + BluetoothDevice device) { + mDeviceManager.onUuidChanged(device); + } + } + + private class PairingCancelHandler implements Handler { + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + if (device == null) { + Log.e(TAG, "ACTION_PAIRING_CANCEL with no EXTRA_DEVICE"); + return; + } + int errorMsg = R.string.bluetooth_pairing_error_message; + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + Utils.showError(context, cachedDevice.getName(), errorMsg); + } + } + + private class DockEventHandler implements Handler { + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + // Remove if unpair device upon undocking + int anythingButUnDocked = Intent.EXTRA_DOCK_STATE_UNDOCKED + 1; + int state = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, anythingButUnDocked); + if (state == Intent.EXTRA_DOCK_STATE_UNDOCKED) { + if (device != null && device.getBondState() == BluetoothDevice.BOND_NONE) { + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice != null) { + cachedDevice.setVisible(false); + } + } + } + } + } + boolean readPairedDevices() { + Set<BluetoothDevice> bondedDevices = mLocalAdapter.getBondedDevices(); + if (bondedDevices == null) { + return false; + } + + boolean deviceAdded = false; + for (BluetoothDevice device : bondedDevices) { + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + cachedDevice = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, device); + dispatchDeviceAdded(cachedDevice); + deviceAdded = true; + } + } + + return deviceAdded; + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java new file mode 100755 index 0000000..e1cb878 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java @@ -0,0 +1,847 @@ +/* + * Copyright (C) 2008 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.settingslib.bluetooth; + +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.ParcelUuid; +import android.os.SystemClock; +import android.text.TextUtils; +import android.util.Log; +import android.bluetooth.BluetoothAdapter; + +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +/** + * CachedBluetoothDevice represents a remote Bluetooth device. It contains + * attributes of the device (such as the address, name, RSSI, etc.) and + * functionality that can be performed on the device (connect, pair, disconnect, + * etc.). + */ +public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> { + private static final String TAG = "CachedBluetoothDevice"; + private static final boolean DEBUG = Utils.V; + + private final Context mContext; + private final LocalBluetoothAdapter mLocalAdapter; + private final LocalBluetoothProfileManager mProfileManager; + private final BluetoothDevice mDevice; + private String mName; + private short mRssi; + private BluetoothClass mBtClass; + private HashMap<LocalBluetoothProfile, Integer> mProfileConnectionState; + + private final List<LocalBluetoothProfile> mProfiles = + new ArrayList<LocalBluetoothProfile>(); + + // List of profiles that were previously in mProfiles, but have been removed + private final List<LocalBluetoothProfile> mRemovedProfiles = + new ArrayList<LocalBluetoothProfile>(); + + // Device supports PANU but not NAP: remove PanProfile after device disconnects from NAP + private boolean mLocalNapRoleConnected; + + private boolean mVisible; + + private int mPhonebookPermissionChoice; + + private int mMessagePermissionChoice; + + private int mMessageRejectionCount; + + private final Collection<Callback> mCallbacks = new ArrayList<Callback>(); + + // Following constants indicate the user's choices of Phone book/message access settings + // User hasn't made any choice or settings app has wiped out the memory + public final static int ACCESS_UNKNOWN = 0; + // User has accepted the connection and let Settings app remember the decision + public final static int ACCESS_ALLOWED = 1; + // User has rejected the connection and let Settings app remember the decision + public final static int ACCESS_REJECTED = 2; + + // How many times user should reject the connection to make the choice persist. + private final static int MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST = 2; + + private final static String MESSAGE_REJECTION_COUNT_PREFS_NAME = "bluetooth_message_reject"; + + /** + * When we connect to multiple profiles, we only want to display a single + * error even if they all fail. This tracks that state. + */ + private boolean mIsConnectingErrorPossible; + + /** + * Last time a bt profile auto-connect was attempted. + * If an ACTION_UUID intent comes in within + * MAX_UUID_DELAY_FOR_AUTO_CONNECT milliseconds, we will try auto-connect + * again with the new UUIDs + */ + private long mConnectAttempted; + + // See mConnectAttempted + private static final long MAX_UUID_DELAY_FOR_AUTO_CONNECT = 5000; + + /** Auto-connect after pairing only if locally initiated. */ + private boolean mConnectAfterPairing; + + /** + * Describes the current device and profile for logging. + * + * @param profile Profile to describe + * @return Description of the device and profile + */ + private String describe(LocalBluetoothProfile profile) { + StringBuilder sb = new StringBuilder(); + sb.append("Address:").append(mDevice); + if (profile != null) { + sb.append(" Profile:").append(profile); + } + + return sb.toString(); + } + + void onProfileStateChanged(LocalBluetoothProfile profile, int newProfileState) { + if (Utils.D) { + Log.d(TAG, "onProfileStateChanged: profile " + profile + + " newProfileState " + newProfileState); + } + if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_TURNING_OFF) + { + if (Utils.D) Log.d(TAG, " BT Turninig Off...Profile conn state change ignored..."); + return; + } + mProfileConnectionState.put(profile, newProfileState); + if (newProfileState == BluetoothProfile.STATE_CONNECTED) { + if (profile instanceof MapProfile) { + profile.setPreferred(mDevice, true); + } else if (!mProfiles.contains(profile)) { + mRemovedProfiles.remove(profile); + mProfiles.add(profile); + if (profile instanceof PanProfile && + ((PanProfile) profile).isLocalRoleNap(mDevice)) { + // Device doesn't support NAP, so remove PanProfile on disconnect + mLocalNapRoleConnected = true; + } + } + } else if (profile instanceof MapProfile && + newProfileState == BluetoothProfile.STATE_DISCONNECTED) { + profile.setPreferred(mDevice, false); + } else if (mLocalNapRoleConnected && profile instanceof PanProfile && + ((PanProfile) profile).isLocalRoleNap(mDevice) && + newProfileState == BluetoothProfile.STATE_DISCONNECTED) { + Log.d(TAG, "Removing PanProfile from device after NAP disconnect"); + mProfiles.remove(profile); + mRemovedProfiles.add(profile); + mLocalNapRoleConnected = false; + } + } + + CachedBluetoothDevice(Context context, + LocalBluetoothAdapter adapter, + LocalBluetoothProfileManager profileManager, + BluetoothDevice device) { + mContext = context; + mLocalAdapter = adapter; + mProfileManager = profileManager; + mDevice = device; + mProfileConnectionState = new HashMap<LocalBluetoothProfile, Integer>(); + fillData(); + } + + public void disconnect() { + for (LocalBluetoothProfile profile : mProfiles) { + disconnect(profile); + } + // Disconnect PBAP server in case its connected + // This is to ensure all the profiles are disconnected as some CK/Hs do not + // disconnect PBAP connection when HF connection is brought down + PbapServerProfile PbapProfile = mProfileManager.getPbapProfile(); + if (PbapProfile.getConnectionStatus(mDevice) == BluetoothProfile.STATE_CONNECTED) + { + PbapProfile.disconnect(mDevice); + } + } + + public void disconnect(LocalBluetoothProfile profile) { + if (profile.disconnect(mDevice)) { + if (Utils.D) { + Log.d(TAG, "Command sent successfully:DISCONNECT " + describe(profile)); + } + } + } + + public void connect(boolean connectAllProfiles) { + if (!ensurePaired()) { + return; + } + + mConnectAttempted = SystemClock.elapsedRealtime(); + connectWithoutResettingTimer(connectAllProfiles); + } + + void onBondingDockConnect() { + // Attempt to connect if UUIDs are available. Otherwise, + // we will connect when the ACTION_UUID intent arrives. + connect(false); + } + + private void connectWithoutResettingTimer(boolean connectAllProfiles) { + // Try to initialize the profiles if they were not. + if (mProfiles.isEmpty()) { + // if mProfiles is empty, then do not invoke updateProfiles. This causes a race + // condition with carkits during pairing, wherein RemoteDevice.UUIDs have been updated + // from bluetooth stack but ACTION.uuid is not sent yet. + // Eventually ACTION.uuid will be received which shall trigger the connection of the + // various profiles + // If UUIDs are not available yet, connect will be happen + // upon arrival of the ACTION_UUID intent. + Log.d(TAG, "No profiles. Maybe we will connect later"); + return; + } + + // Reset the only-show-one-error-dialog tracking variable + mIsConnectingErrorPossible = true; + + int preferredProfiles = 0; + for (LocalBluetoothProfile profile : mProfiles) { + if (connectAllProfiles ? profile.isConnectable() : profile.isAutoConnectable()) { + if (profile.isPreferred(mDevice)) { + ++preferredProfiles; + connectInt(profile); + } + } + } + if (DEBUG) Log.d(TAG, "Preferred profiles = " + preferredProfiles); + + if (preferredProfiles == 0) { + connectAutoConnectableProfiles(); + } + } + + private void connectAutoConnectableProfiles() { + if (!ensurePaired()) { + return; + } + // Reset the only-show-one-error-dialog tracking variable + mIsConnectingErrorPossible = true; + + for (LocalBluetoothProfile profile : mProfiles) { + if (profile.isAutoConnectable()) { + profile.setPreferred(mDevice, true); + connectInt(profile); + } + } + } + + /** + * Connect this device to the specified profile. + * + * @param profile the profile to use with the remote device + */ + public void connectProfile(LocalBluetoothProfile profile) { + mConnectAttempted = SystemClock.elapsedRealtime(); + // Reset the only-show-one-error-dialog tracking variable + mIsConnectingErrorPossible = true; + connectInt(profile); + // Refresh the UI based on profile.connect() call + refresh(); + } + + synchronized void connectInt(LocalBluetoothProfile profile) { + if (!ensurePaired()) { + return; + } + if (profile.connect(mDevice)) { + if (Utils.D) { + Log.d(TAG, "Command sent successfully:CONNECT " + describe(profile)); + } + return; + } + Log.i(TAG, "Failed to connect " + profile.toString() + " to " + mName); + } + + private boolean ensurePaired() { + if (getBondState() == BluetoothDevice.BOND_NONE) { + startPairing(); + return false; + } else { + return true; + } + } + + public boolean startPairing() { + // Pairing is unreliable while scanning, so cancel discovery + if (mLocalAdapter.isDiscovering()) { + mLocalAdapter.cancelDiscovery(); + } + + if (!mDevice.createBond()) { + return false; + } + + mConnectAfterPairing = true; // auto-connect after pairing + return true; + } + + /** + * Return true if user initiated pairing on this device. The message text is + * slightly different for local vs. remote initiated pairing dialogs. + */ + boolean isUserInitiatedPairing() { + return mConnectAfterPairing; + } + + public void unpair() { + int state = getBondState(); + + if (state == BluetoothDevice.BOND_BONDING) { + mDevice.cancelBondProcess(); + } + + if (state != BluetoothDevice.BOND_NONE) { + final BluetoothDevice dev = mDevice; + if (dev != null) { + final boolean successful = dev.removeBond(); + if (successful) { + if (Utils.D) { + Log.d(TAG, "Command sent successfully:REMOVE_BOND " + describe(null)); + } + } else if (Utils.V) { + Log.v(TAG, "Framework rejected command immediately:REMOVE_BOND " + + describe(null)); + } + } + } + } + + public int getProfileConnectionState(LocalBluetoothProfile profile) { + if (mProfileConnectionState == null || + mProfileConnectionState.get(profile) == null) { + // If cache is empty make the binder call to get the state + int state = profile.getConnectionStatus(mDevice); + mProfileConnectionState.put(profile, state); + } + return mProfileConnectionState.get(profile); + } + + public void clearProfileConnectionState () + { + if (Utils.D) { + Log.d(TAG," Clearing all connection state for dev:" + mDevice.getName()); + } + for (LocalBluetoothProfile profile :getProfiles()) { + mProfileConnectionState.put(profile, BluetoothProfile.STATE_DISCONNECTED); + } + } + + // TODO: do any of these need to run async on a background thread? + private void fillData() { + fetchName(); + fetchBtClass(); + updateProfiles(); + migratePhonebookPermissionChoice(); + migrateMessagePermissionChoice(); + fetchMessageRejectionCount(); + + mVisible = false; + dispatchAttributesChanged(); + } + + public BluetoothDevice getDevice() { + return mDevice; + } + + public String getName() { + return mName; + } + + /** + * Populate name from BluetoothDevice.ACTION_FOUND intent + */ + void setNewName(String name) { + if (mName == null) { + mName = name; + if (mName == null || TextUtils.isEmpty(mName)) { + mName = mDevice.getAddress(); + } + dispatchAttributesChanged(); + } + } + + /** + * user changes the device name + */ + public void setName(String name) { + if (!mName.equals(name)) { + mName = name; + mDevice.setAlias(name); + dispatchAttributesChanged(); + } + } + + void refreshName() { + fetchName(); + dispatchAttributesChanged(); + } + + private void fetchName() { + mName = mDevice.getAliasName(); + + if (TextUtils.isEmpty(mName)) { + mName = mDevice.getAddress(); + if (DEBUG) Log.d(TAG, "Device has no name (yet), use address: " + mName); + } + } + + void refresh() { + dispatchAttributesChanged(); + } + + public boolean isVisible() { + return mVisible; + } + + public void setVisible(boolean visible) { + if (mVisible != visible) { + mVisible = visible; + dispatchAttributesChanged(); + } + } + + public int getBondState() { + return mDevice.getBondState(); + } + + void setRssi(short rssi) { + if (mRssi != rssi) { + mRssi = rssi; + dispatchAttributesChanged(); + } + } + + /** + * Checks whether we are connected to this device (any profile counts). + * + * @return Whether it is connected. + */ + public boolean isConnected() { + for (LocalBluetoothProfile profile : mProfiles) { + int status = getProfileConnectionState(profile); + if (status == BluetoothProfile.STATE_CONNECTED) { + return true; + } + } + + return false; + } + + public boolean isConnectedProfile(LocalBluetoothProfile profile) { + int status = getProfileConnectionState(profile); + return status == BluetoothProfile.STATE_CONNECTED; + + } + + public boolean isBusy() { + for (LocalBluetoothProfile profile : mProfiles) { + int status = getProfileConnectionState(profile); + if (status == BluetoothProfile.STATE_CONNECTING + || status == BluetoothProfile.STATE_DISCONNECTING) { + return true; + } + } + return getBondState() == BluetoothDevice.BOND_BONDING; + } + + /** + * Fetches a new value for the cached BT class. + */ + private void fetchBtClass() { + mBtClass = mDevice.getBluetoothClass(); + } + + private boolean updateProfiles() { + ParcelUuid[] uuids = mDevice.getUuids(); + if (uuids == null) return false; + + ParcelUuid[] localUuids = mLocalAdapter.getUuids(); + if (localUuids == null) return false; + + /** + * Now we know if the device supports PBAP, update permissions... + */ + processPhonebookAccess(); + + mProfileManager.updateProfiles(uuids, localUuids, mProfiles, mRemovedProfiles, + mLocalNapRoleConnected, mDevice); + + if (DEBUG) { + Log.e(TAG, "updating profiles for " + mDevice.getAliasName()); + BluetoothClass bluetoothClass = mDevice.getBluetoothClass(); + + if (bluetoothClass != null) Log.v(TAG, "Class: " + bluetoothClass.toString()); + Log.v(TAG, "UUID:"); + for (ParcelUuid uuid : uuids) { + Log.v(TAG, " " + uuid); + } + } + return true; + } + + /** + * Refreshes the UI for the BT class, including fetching the latest value + * for the class. + */ + void refreshBtClass() { + fetchBtClass(); + dispatchAttributesChanged(); + } + + /** + * Refreshes the UI when framework alerts us of a UUID change. + */ + void onUuidChanged() { + updateProfiles(); + + if (DEBUG) { + Log.e(TAG, "onUuidChanged: Time since last connect" + + (SystemClock.elapsedRealtime() - mConnectAttempted)); + } + + /* + * If a connect was attempted earlier without any UUID, we will do the + * connect now. + */ + if (!mProfiles.isEmpty() + && (mConnectAttempted + MAX_UUID_DELAY_FOR_AUTO_CONNECT) > SystemClock + .elapsedRealtime()) { + connectWithoutResettingTimer(false); + } + dispatchAttributesChanged(); + } + + void onBondingStateChanged(int bondState) { + if (bondState == BluetoothDevice.BOND_NONE) { + mProfiles.clear(); + mConnectAfterPairing = false; // cancel auto-connect + setPhonebookPermissionChoice(ACCESS_UNKNOWN); + setMessagePermissionChoice(ACCESS_UNKNOWN); + mMessageRejectionCount = 0; + saveMessageRejectionCount(); + } + + refresh(); + + if (bondState == BluetoothDevice.BOND_BONDED) { + if (mDevice.isBluetoothDock()) { + onBondingDockConnect(); + } else if (mConnectAfterPairing) { + connect(false); + } + mConnectAfterPairing = false; + } + } + + void setBtClass(BluetoothClass btClass) { + if (btClass != null && mBtClass != btClass) { + mBtClass = btClass; + dispatchAttributesChanged(); + } + } + + public BluetoothClass getBtClass() { + return mBtClass; + } + + public List<LocalBluetoothProfile> getProfiles() { + return Collections.unmodifiableList(mProfiles); + } + + public List<LocalBluetoothProfile> getConnectableProfiles() { + List<LocalBluetoothProfile> connectableProfiles = + new ArrayList<LocalBluetoothProfile>(); + for (LocalBluetoothProfile profile : mProfiles) { + if (profile.isConnectable()) { + connectableProfiles.add(profile); + } + } + return connectableProfiles; + } + + public List<LocalBluetoothProfile> getRemovedProfiles() { + return mRemovedProfiles; + } + + public void registerCallback(Callback callback) { + synchronized (mCallbacks) { + mCallbacks.add(callback); + } + } + + public void unregisterCallback(Callback callback) { + synchronized (mCallbacks) { + mCallbacks.remove(callback); + } + } + + private void dispatchAttributesChanged() { + synchronized (mCallbacks) { + for (Callback callback : mCallbacks) { + callback.onDeviceAttributesChanged(); + } + } + } + + @Override + public String toString() { + return mDevice.toString(); + } + + @Override + public boolean equals(Object o) { + if ((o == null) || !(o instanceof CachedBluetoothDevice)) { + return false; + } + return mDevice.equals(((CachedBluetoothDevice) o).mDevice); + } + + @Override + public int hashCode() { + return mDevice.getAddress().hashCode(); + } + + // This comparison uses non-final fields so the sort order may change + // when device attributes change (such as bonding state). Settings + // will completely refresh the device list when this happens. + public int compareTo(CachedBluetoothDevice another) { + // Connected above not connected + int comparison = (another.isConnected() ? 1 : 0) - (isConnected() ? 1 : 0); + if (comparison != 0) return comparison; + + // Paired above not paired + comparison = (another.getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0) - + (getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0); + if (comparison != 0) return comparison; + + // Visible above not visible + comparison = (another.mVisible ? 1 : 0) - (mVisible ? 1 : 0); + if (comparison != 0) return comparison; + + // Stronger signal above weaker signal + comparison = another.mRssi - mRssi; + if (comparison != 0) return comparison; + + // Fallback on name + return mName.compareTo(another.mName); + } + + public interface Callback { + void onDeviceAttributesChanged(); + } + + public int getPhonebookPermissionChoice() { + int permission = mDevice.getPhonebookAccessPermission(); + if (permission == BluetoothDevice.ACCESS_ALLOWED) { + return ACCESS_ALLOWED; + } else if (permission == BluetoothDevice.ACCESS_REJECTED) { + return ACCESS_REJECTED; + } + return ACCESS_UNKNOWN; + } + + public void setPhonebookPermissionChoice(int permissionChoice) { + int permission = BluetoothDevice.ACCESS_UNKNOWN; + if (permissionChoice == ACCESS_ALLOWED) { + permission = BluetoothDevice.ACCESS_ALLOWED; + } else if (permissionChoice == ACCESS_REJECTED) { + permission = BluetoothDevice.ACCESS_REJECTED; + } + mDevice.setPhonebookAccessPermission(permission); + } + + // Migrates data from old data store (in Settings app's shared preferences) to new (in Bluetooth + // app's shared preferences). + private void migratePhonebookPermissionChoice() { + SharedPreferences preferences = mContext.getSharedPreferences( + "bluetooth_phonebook_permission", Context.MODE_PRIVATE); + if (!preferences.contains(mDevice.getAddress())) { + return; + } + + if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_UNKNOWN) { + int oldPermission = preferences.getInt(mDevice.getAddress(), ACCESS_UNKNOWN); + if (oldPermission == ACCESS_ALLOWED) { + mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED); + } else if (oldPermission == ACCESS_REJECTED) { + mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED); + } + } + + SharedPreferences.Editor editor = preferences.edit(); + editor.remove(mDevice.getAddress()); + editor.commit(); + } + + public int getMessagePermissionChoice() { + int permission = mDevice.getMessageAccessPermission(); + if (permission == BluetoothDevice.ACCESS_ALLOWED) { + return ACCESS_ALLOWED; + } else if (permission == BluetoothDevice.ACCESS_REJECTED) { + return ACCESS_REJECTED; + } + return ACCESS_UNKNOWN; + } + + public void setMessagePermissionChoice(int permissionChoice) { + int permission = BluetoothDevice.ACCESS_UNKNOWN; + if (permissionChoice == ACCESS_ALLOWED) { + permission = BluetoothDevice.ACCESS_ALLOWED; + } else if (permissionChoice == ACCESS_REJECTED) { + permission = BluetoothDevice.ACCESS_REJECTED; + } + mDevice.setMessageAccessPermission(permission); + } + + // Migrates data from old data store (in Settings app's shared preferences) to new (in Bluetooth + // app's shared preferences). + private void migrateMessagePermissionChoice() { + SharedPreferences preferences = mContext.getSharedPreferences( + "bluetooth_message_permission", Context.MODE_PRIVATE); + if (!preferences.contains(mDevice.getAddress())) { + return; + } + + if (mDevice.getMessageAccessPermission() == BluetoothDevice.ACCESS_UNKNOWN) { + int oldPermission = preferences.getInt(mDevice.getAddress(), ACCESS_UNKNOWN); + if (oldPermission == ACCESS_ALLOWED) { + mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_ALLOWED); + } else if (oldPermission == ACCESS_REJECTED) { + mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_REJECTED); + } + } + + SharedPreferences.Editor editor = preferences.edit(); + editor.remove(mDevice.getAddress()); + editor.commit(); + } + + /** + * @return Whether this rejection should persist. + */ + public boolean checkAndIncreaseMessageRejectionCount() { + if (mMessageRejectionCount < MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST) { + mMessageRejectionCount++; + saveMessageRejectionCount(); + } + return mMessageRejectionCount >= MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST; + } + + private void fetchMessageRejectionCount() { + SharedPreferences preference = mContext.getSharedPreferences( + MESSAGE_REJECTION_COUNT_PREFS_NAME, Context.MODE_PRIVATE); + mMessageRejectionCount = preference.getInt(mDevice.getAddress(), 0); + } + + private void saveMessageRejectionCount() { + SharedPreferences.Editor editor = mContext.getSharedPreferences( + MESSAGE_REJECTION_COUNT_PREFS_NAME, Context.MODE_PRIVATE).edit(); + if (mMessageRejectionCount == 0) { + editor.remove(mDevice.getAddress()); + } else { + editor.putInt(mDevice.getAddress(), mMessageRejectionCount); + } + editor.commit(); + } + + private void processPhonebookAccess() { + if (mDevice.getBondState() != BluetoothDevice.BOND_BONDED) return; + + ParcelUuid[] uuids = mDevice.getUuids(); + if (BluetoothUuid.containsAnyUuid(uuids, PbapServerProfile.PBAB_CLIENT_UUIDS)) { + // The pairing dialog now warns of phone-book access for paired devices. + // No separate prompt is displayed after pairing. + setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED); + } + } + + public int getMaxConnectionState() { + int maxState = BluetoothProfile.STATE_DISCONNECTED; + for (LocalBluetoothProfile profile : getProfiles()) { + int connectionStatus = getProfileConnectionState(profile); + if (connectionStatus > maxState) { + maxState = connectionStatus; + } + } + return maxState; + } + + /** + * @return resource for string that discribes the connection state of this device. + */ + public int getConnectionSummary() { + boolean profileConnected = false; // at least one profile is connected + boolean a2dpNotConnected = false; // A2DP is preferred but not connected + boolean headsetNotConnected = false; // Headset is preferred but not connected + + for (LocalBluetoothProfile profile : getProfiles()) { + int connectionStatus = getProfileConnectionState(profile); + + switch (connectionStatus) { + case BluetoothProfile.STATE_CONNECTING: + case BluetoothProfile.STATE_DISCONNECTING: + return Utils.getConnectionStateSummary(connectionStatus); + + case BluetoothProfile.STATE_CONNECTED: + profileConnected = true; + break; + + case BluetoothProfile.STATE_DISCONNECTED: + if (profile.isProfileReady()) { + if (profile instanceof A2dpProfile) { + a2dpNotConnected = true; + } else if (profile instanceof HeadsetProfile) { + headsetNotConnected = true; + } + } + break; + } + } + + if (profileConnected) { + if (a2dpNotConnected && headsetNotConnected) { + return R.string.bluetooth_connected_no_headset_no_a2dp; + } else if (a2dpNotConnected) { + return R.string.bluetooth_connected_no_a2dp; + } else if (headsetNotConnected) { + return R.string.bluetooth_connected_no_headset; + } else { + return R.string.bluetooth_connected; + } + } + + return getBondState() == BluetoothDevice.BOND_BONDING ? R.string.bluetooth_pairing : 0; + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java new file mode 100755 index 0000000..a9f4bd3 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManager.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2008 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.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.content.Context; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * CachedBluetoothDeviceManager manages the set of remote Bluetooth devices. + */ +public final class CachedBluetoothDeviceManager { + private static final String TAG = "CachedBluetoothDeviceManager"; + private static final boolean DEBUG = Utils.D; + + private Context mContext; + private final List<CachedBluetoothDevice> mCachedDevices = + new ArrayList<CachedBluetoothDevice>(); + private final LocalBluetoothManager mBtManager; + + CachedBluetoothDeviceManager(Context context, LocalBluetoothManager localBtManager) { + mContext = context; + mBtManager = localBtManager; + } + + public synchronized Collection<CachedBluetoothDevice> getCachedDevicesCopy() { + return new ArrayList<CachedBluetoothDevice>(mCachedDevices); + } + + public static boolean onDeviceDisappeared(CachedBluetoothDevice cachedDevice) { + cachedDevice.setVisible(false); + return cachedDevice.getBondState() == BluetoothDevice.BOND_NONE; + } + + public void onDeviceNameUpdated(BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = findDevice(device); + if (cachedDevice != null) { + cachedDevice.refreshName(); + } + } + + /** + * Search for existing {@link CachedBluetoothDevice} or return null + * if this device isn't in the cache. Use {@link #addDevice} + * to create and return a new {@link CachedBluetoothDevice} for + * a newly discovered {@link BluetoothDevice}. + * + * @param device the address of the Bluetooth device + * @return the cached device object for this device, or null if it has + * not been previously seen + */ + public CachedBluetoothDevice findDevice(BluetoothDevice device) { + for (CachedBluetoothDevice cachedDevice : mCachedDevices) { + if (cachedDevice.getDevice().equals(device)) { + return cachedDevice; + } + } + return null; + } + + /** + * Create and return a new {@link CachedBluetoothDevice}. This assumes + * that {@link #findDevice} has already been called and returned null. + * @param device the address of the new Bluetooth device + * @return the newly created CachedBluetoothDevice object + */ + public CachedBluetoothDevice addDevice(LocalBluetoothAdapter adapter, + LocalBluetoothProfileManager profileManager, + BluetoothDevice device) { + CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, adapter, + profileManager, device); + synchronized (mCachedDevices) { + mCachedDevices.add(newDevice); + mBtManager.getEventManager().dispatchDeviceAdded(newDevice); + } + return newDevice; + } + + /** + * Attempts to get the name of a remote device, otherwise returns the address. + * + * @param device The remote device. + * @return The name, or if unavailable, the address. + */ + public String getName(BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = findDevice(device); + if (cachedDevice != null) { + return cachedDevice.getName(); + } + + String name = device.getAliasName(); + if (name != null) { + return name; + } + + return device.getAddress(); + } + + public synchronized void clearNonBondedDevices() { + for (int i = mCachedDevices.size() - 1; i >= 0; i--) { + CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); + if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { + mCachedDevices.remove(i); + } + } + } + + public synchronized void onScanningStateChanged(boolean started) { + if (!started) return; + + // If starting a new scan, clear old visibility + // Iterate in reverse order since devices may be removed. + for (int i = mCachedDevices.size() - 1; i >= 0; i--) { + CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); + cachedDevice.setVisible(false); + } + } + + public synchronized void onBtClassChanged(BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = findDevice(device); + if (cachedDevice != null) { + cachedDevice.refreshBtClass(); + } + } + + public synchronized void onUuidChanged(BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = findDevice(device); + if (cachedDevice != null) { + cachedDevice.onUuidChanged(); + } + } + + public synchronized void onBluetoothStateChanged(int bluetoothState) { + // When Bluetooth is turning off, we need to clear the non-bonded devices + // Otherwise, they end up showing up on the next BT enable + if (bluetoothState == BluetoothAdapter.STATE_TURNING_OFF) { + for (int i = mCachedDevices.size() - 1; i >= 0; i--) { + CachedBluetoothDevice cachedDevice = mCachedDevices.get(i); + if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) { + cachedDevice.setVisible(false); + mCachedDevices.remove(i); + } else { + // For bonded devices, we need to clear the connection status so that + // when BT is enabled next time, device connection status shall be retrieved + // by making a binder call. + cachedDevice.clearProfileConnectionState(); + } + } + } + } + private void log(String msg) { + if (DEBUG) { + Log.d(TAG, msg); + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java new file mode 100755 index 0000000..5529866 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2012 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.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * HeadsetProfile handles Bluetooth HFP and Headset profiles. + */ +public final class HeadsetProfile implements LocalBluetoothProfile { + private static final String TAG = "HeadsetProfile"; + private static boolean V = true; + + private BluetoothHeadset mService; + private boolean mIsProfileReady; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private final LocalBluetoothProfileManager mProfileManager; + + static final ParcelUuid[] UUIDS = { + BluetoothUuid.HSP, + BluetoothUuid.Handsfree, + }; + + static final String NAME = "HEADSET"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 0; + + // These callbacks run on the main thread. + private final class HeadsetServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothHeadset) proxy; + // We just bound to the service, so refresh the UI for any connected HFP devices. + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + Log.w(TAG, "HeadsetProfile found new device: " + nextDevice); + device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice); + } + device.onProfileStateChanged(HeadsetProfile.this, + BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + + mProfileManager.callServiceConnectedListeners(); + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mProfileManager.callServiceDisconnectedListeners(); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + HeadsetProfile(Context context, LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + mLocalAdapter.getProfileProxy(context, new HeadsetServiceListener(), + BluetoothProfile.HEADSET); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public boolean connect(BluetoothDevice device) { + if (mService == null) return false; + List<BluetoothDevice> sinks = mService.getConnectedDevices(); + if (sinks != null) { + for (BluetoothDevice sink : sinks) { + Log.d(TAG,"Not disconnecting device = " + sink); + } + } + return mService.connect(device); + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty()) { + for (BluetoothDevice dev : deviceList) { + if (dev.equals(device)) { + if (V) Log.d(TAG,"Downgrade priority as user" + + "is disconnecting the headset"); + // Downgrade priority as user is disconnecting the headset. + if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + return mService.disconnect(device); + } + } + } + return false; + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.STATE_DISCONNECTED; + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty()){ + for (BluetoothDevice dev : deviceList) { + if (dev.equals(device)) { + return mService.getConnectionState(device); + } + } + } + return BluetoothProfile.STATE_DISCONNECTED; + } + + public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; + return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + } + + public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device); + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; + if (preferred) { + if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + } else { + mService.setPriority(device, BluetoothProfile.PRIORITY_OFF); + } + } + + public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) return new ArrayList<BluetoothDevice>(0); + return mService.getDevicesMatchingConnectionStates( + new int[] {BluetoothProfile.STATE_CONNECTED, + BluetoothProfile.STATE_CONNECTING, + BluetoothProfile.STATE_DISCONNECTING}); + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_headset; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_headset_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_headset_profile_summary_connected; + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_headset_hfp; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.HEADSET, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up HID proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java new file mode 100755 index 0000000..a9e8db5 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2012 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.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothInputDevice; +import android.bluetooth.BluetoothProfile; +import android.content.Context; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.List; + +/** + * HidProfile handles Bluetooth HID profile. + */ +public final class HidProfile implements LocalBluetoothProfile { + private static final String TAG = "HidProfile"; + private static boolean V = true; + + private BluetoothInputDevice mService; + private boolean mIsProfileReady; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private final LocalBluetoothProfileManager mProfileManager; + + static final String NAME = "HID"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 3; + + // These callbacks run on the main thread. + private final class InputDeviceServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothInputDevice) proxy; + // We just bound to the service, so refresh the UI for any connected HID devices. + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + Log.w(TAG, "HidProfile found new device: " + nextDevice); + device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice); + } + device.onProfileStateChanged(HidProfile.this, BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + HidProfile(Context context, LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + adapter.getProfileProxy(context, new InputDeviceServiceListener(), + BluetoothProfile.INPUT_DEVICE); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public boolean connect(BluetoothDevice device) { + if (mService == null) return false; + return mService.connect(device); + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + return mService.disconnect(device); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + + return !deviceList.isEmpty() && deviceList.get(0).equals(device) + ? mService.getConnectionState(device) + : BluetoothProfile.STATE_DISCONNECTED; + } + + public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; + return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + } + + public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device); + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; + if (preferred) { + if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + } else { + mService.setPriority(device, BluetoothProfile.PRIORITY_OFF); + } + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + // TODO: distinguish between keyboard and mouse? + return R.string.bluetooth_profile_hid; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_hid_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_hid_profile_summary_connected; + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + if (btClass == null) { + return R.drawable.ic_lockscreen_ime; + } + return getHidClassDrawable(btClass); + } + + public static int getHidClassDrawable(BluetoothClass btClass) { + switch (btClass.getDeviceClass()) { + case BluetoothClass.Device.PERIPHERAL_KEYBOARD: + case BluetoothClass.Device.PERIPHERAL_KEYBOARD_POINTING: + return R.drawable.ic_lockscreen_ime; + case BluetoothClass.Device.PERIPHERAL_POINTING: + return R.drawable.ic_bt_pointing_hid; + default: + return R.drawable.ic_bt_misc_hid; + } + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.INPUT_DEVICE, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up HID proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java new file mode 100644 index 0000000..e3d2a99 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothAdapter.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import java.util.Set; + +/** + * LocalBluetoothAdapter provides an interface between the Settings app + * and the functionality of the local {@link BluetoothAdapter}, specifically + * those related to state transitions of the adapter itself. + * + * <p>Connection and bonding state changes affecting specific devices + * are handled by {@link CachedBluetoothDeviceManager}, + * {@link BluetoothEventManager}, and {@link LocalBluetoothProfileManager}. + */ +public final class LocalBluetoothAdapter { + private static final String TAG = "LocalBluetoothAdapter"; + + /** This class does not allow direct access to the BluetoothAdapter. */ + private final BluetoothAdapter mAdapter; + + private LocalBluetoothProfileManager mProfileManager; + + private static LocalBluetoothAdapter sInstance; + + private int mState = BluetoothAdapter.ERROR; + + private static final int SCAN_EXPIRATION_MS = 5 * 60 * 1000; // 5 mins + + private long mLastScan; + + private LocalBluetoothAdapter(BluetoothAdapter adapter) { + mAdapter = adapter; + } + + void setProfileManager(LocalBluetoothProfileManager manager) { + mProfileManager = manager; + } + + /** + * Get the singleton instance of the LocalBluetoothAdapter. If this device + * doesn't support Bluetooth, then null will be returned. Callers must be + * prepared to handle a null return value. + * @return the LocalBluetoothAdapter object, or null if not supported + */ + static synchronized LocalBluetoothAdapter getInstance() { + if (sInstance == null) { + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + if (adapter != null) { + sInstance = new LocalBluetoothAdapter(adapter); + } + } + + return sInstance; + } + + // Pass-through BluetoothAdapter methods that we can intercept if necessary + + public void cancelDiscovery() { + mAdapter.cancelDiscovery(); + } + + public boolean enable() { + return mAdapter.enable(); + } + + public boolean disable() { + return mAdapter.disable(); + } + + void getProfileProxy(Context context, + BluetoothProfile.ServiceListener listener, int profile) { + mAdapter.getProfileProxy(context, listener, profile); + } + + public Set<BluetoothDevice> getBondedDevices() { + return mAdapter.getBondedDevices(); + } + + public String getName() { + return mAdapter.getName(); + } + + public int getScanMode() { + return mAdapter.getScanMode(); + } + + public int getState() { + return mAdapter.getState(); + } + + public ParcelUuid[] getUuids() { + return mAdapter.getUuids(); + } + + public boolean isDiscovering() { + return mAdapter.isDiscovering(); + } + + public boolean isEnabled() { + return mAdapter.isEnabled(); + } + + public int getConnectionState() { + return mAdapter.getConnectionState(); + } + + public void setDiscoverableTimeout(int timeout) { + mAdapter.setDiscoverableTimeout(timeout); + } + + public void setName(String name) { + mAdapter.setName(name); + } + + public void setScanMode(int mode) { + mAdapter.setScanMode(mode); + } + + public boolean setScanMode(int mode, int duration) { + return mAdapter.setScanMode(mode, duration); + } + + public void startScanning(boolean force) { + // Only start if we're not already scanning + if (!mAdapter.isDiscovering()) { + if (!force) { + // Don't scan more than frequently than SCAN_EXPIRATION_MS, + // unless forced + if (mLastScan + SCAN_EXPIRATION_MS > System.currentTimeMillis()) { + return; + } + + // If we are playing music, don't scan unless forced. + A2dpProfile a2dp = mProfileManager.getA2dpProfile(); + if (a2dp != null && a2dp.isA2dpPlaying()) { + return; + } + } + + if (mAdapter.startDiscovery()) { + mLastScan = System.currentTimeMillis(); + } + } + } + + public void stopScanning() { + if (mAdapter.isDiscovering()) { + mAdapter.cancelDiscovery(); + } + } + + public synchronized int getBluetoothState() { + // Always sync state, in case it changed while paused + syncBluetoothState(); + return mState; + } + + synchronized void setBluetoothStateInt(int state) { + mState = state; + + if (state == BluetoothAdapter.STATE_ON) { + // if mProfileManager hasn't been constructed yet, it will + // get the adapter UUIDs in its constructor when it is. + if (mProfileManager != null) { + mProfileManager.setBluetoothStateOn(); + } + } + } + + // Returns true if the state changed; false otherwise. + boolean syncBluetoothState() { + int currentState = mAdapter.getState(); + if (currentState != mState) { + setBluetoothStateInt(mAdapter.getState()); + return true; + } + return false; + } + + public void setBluetoothEnabled(boolean enabled) { + boolean success = enabled + ? mAdapter.enable() + : mAdapter.disable(); + + if (success) { + setBluetoothStateInt(enabled + ? BluetoothAdapter.STATE_TURNING_ON + : BluetoothAdapter.STATE_TURNING_OFF); + } else { + if (Utils.V) { + Log.v(TAG, "setBluetoothEnabled call, manager didn't return " + + "success for enabled: " + enabled); + } + + syncBluetoothState(); + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothManager.java new file mode 100644 index 0000000..623ccc3 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothManager.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.content.Context; +import android.util.Log; + +/** + * LocalBluetoothManager provides a simplified interface on top of a subset of + * the Bluetooth API. Note that {@link #getInstance} will return null + * if there is no Bluetooth adapter on this device, and callers must be + * prepared to handle this case. + */ +public final class LocalBluetoothManager { + private static final String TAG = "LocalBluetoothManager"; + + /** Singleton instance. */ + private static LocalBluetoothManager sInstance; + + private final Context mContext; + + /** If a BT-related activity is in the foreground, this will be it. */ + private Context mForegroundActivity; + + private final LocalBluetoothAdapter mLocalAdapter; + + private final CachedBluetoothDeviceManager mCachedDeviceManager; + + /** The Bluetooth profile manager. */ + private final LocalBluetoothProfileManager mProfileManager; + + /** The broadcast receiver event manager. */ + private final BluetoothEventManager mEventManager; + + public static synchronized LocalBluetoothManager getInstance(Context context, + BluetoothManagerCallback onInitCallback) { + if (sInstance == null) { + LocalBluetoothAdapter adapter = LocalBluetoothAdapter.getInstance(); + if (adapter == null) { + return null; + } + // This will be around as long as this process is + Context appContext = context.getApplicationContext(); + sInstance = new LocalBluetoothManager(adapter, appContext); + if (onInitCallback != null) { + onInitCallback.onBluetoothManagerInitialized(appContext, sInstance); + } + } + + return sInstance; + } + + private LocalBluetoothManager(LocalBluetoothAdapter adapter, Context context) { + mContext = context; + mLocalAdapter = adapter; + + mCachedDeviceManager = new CachedBluetoothDeviceManager(context, this); + mEventManager = new BluetoothEventManager(mLocalAdapter, + mCachedDeviceManager, context); + mProfileManager = new LocalBluetoothProfileManager(context, + mLocalAdapter, mCachedDeviceManager, mEventManager); + } + + public LocalBluetoothAdapter getBluetoothAdapter() { + return mLocalAdapter; + } + + public Context getContext() { + return mContext; + } + + public Context getForegroundActivity() { + return mForegroundActivity; + } + + public boolean isForegroundActivity() { + return mForegroundActivity != null; + } + + public synchronized void setForegroundActivity(Context context) { + if (context != null) { + Log.d(TAG, "setting foreground activity to non-null context"); + mForegroundActivity = context; + } else { + if (mForegroundActivity != null) { + Log.d(TAG, "setting foreground activity to null"); + mForegroundActivity = null; + } + } + } + + public CachedBluetoothDeviceManager getCachedDeviceManager() { + return mCachedDeviceManager; + } + + public BluetoothEventManager getEventManager() { + return mEventManager; + } + + public LocalBluetoothProfileManager getProfileManager() { + return mProfileManager; + } + + public interface BluetoothManagerCallback { + void onBluetoothManagerInitialized(Context appContext, + LocalBluetoothManager bluetoothManager); + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfile.java new file mode 100755 index 0000000..abcb989 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfile.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; + +/** + * LocalBluetoothProfile is an interface defining the basic + * functionality related to a Bluetooth profile. + */ +public interface LocalBluetoothProfile { + + /** + * Returns true if the user can initiate a connection, false otherwise. + */ + boolean isConnectable(); + + /** + * Returns true if the user can enable auto connection for this profile. + */ + boolean isAutoConnectable(); + + boolean connect(BluetoothDevice device); + + boolean disconnect(BluetoothDevice device); + + int getConnectionStatus(BluetoothDevice device); + + boolean isPreferred(BluetoothDevice device); + + int getPreferred(BluetoothDevice device); + + void setPreferred(BluetoothDevice device, boolean preferred); + + boolean isProfileReady(); + + /** Display order for device profile settings. */ + int getOrdinal(); + + /** + * Returns the string resource ID for the localized name for this profile. + * @param device the Bluetooth device (to distinguish between PAN roles) + */ + int getNameResource(BluetoothDevice device); + + /** + * Returns the string resource ID for the summary text for this profile + * for the specified device, e.g. "Use for media audio" or + * "Connected to media audio". + * @param device the device to query for profile connection status + * @return a string resource ID for the profile summary text + */ + int getSummaryResourceForDevice(BluetoothDevice device); + + int getDrawableResource(BluetoothClass btClass); +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java new file mode 100644 index 0000000..8f5e1f1 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothProfileManager.java @@ -0,0 +1,377 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothA2dp; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothMap; +import android.bluetooth.BluetoothInputDevice; +import android.bluetooth.BluetoothPan; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.content.Intent; +import android.os.ParcelUuid; +import android.util.Log; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * LocalBluetoothProfileManager provides access to the LocalBluetoothProfile + * objects for the available Bluetooth profiles. + */ +public final class LocalBluetoothProfileManager { + private static final String TAG = "LocalBluetoothProfileManager"; + private static final boolean DEBUG = Utils.D; + /** Singleton instance. */ + private static LocalBluetoothProfileManager sInstance; + + /** + * An interface for notifying BluetoothHeadset IPC clients when they have + * been connected to the BluetoothHeadset service. + * Only used by com.android.settings.bluetooth.DockService. + */ + public interface ServiceListener { + /** + * Called to notify the client when this proxy object has been + * connected to the BluetoothHeadset service. Clients must wait for + * this callback before making IPC calls on the BluetoothHeadset + * service. + */ + void onServiceConnected(); + + /** + * Called to notify the client that this proxy object has been + * disconnected from the BluetoothHeadset service. Clients must not + * make IPC calls on the BluetoothHeadset service after this callback. + * This callback will currently only occur if the application hosting + * the BluetoothHeadset service, but may be called more often in future. + */ + void onServiceDisconnected(); + } + + private final Context mContext; + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private final BluetoothEventManager mEventManager; + + private A2dpProfile mA2dpProfile; + private HeadsetProfile mHeadsetProfile; + private MapProfile mMapProfile; + private final HidProfile mHidProfile; + private OppProfile mOppProfile; + private final PanProfile mPanProfile; + private final PbapServerProfile mPbapProfile; + + /** + * Mapping from profile name, e.g. "HEADSET" to profile object. + */ + private final Map<String, LocalBluetoothProfile> + mProfileNameMap = new HashMap<String, LocalBluetoothProfile>(); + + LocalBluetoothProfileManager(Context context, + LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + BluetoothEventManager eventManager) { + mContext = context; + + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mEventManager = eventManager; + // pass this reference to adapter and event manager (circular dependency) + mLocalAdapter.setProfileManager(this); + mEventManager.setProfileManager(this); + + ParcelUuid[] uuids = adapter.getUuids(); + + // uuids may be null if Bluetooth is turned off + if (uuids != null) { + updateLocalProfiles(uuids); + } + + // Always add HID and PAN profiles + mHidProfile = new HidProfile(context, mLocalAdapter, mDeviceManager, this); + addProfile(mHidProfile, HidProfile.NAME, + BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED); + + mPanProfile = new PanProfile(context); + addPanProfile(mPanProfile, PanProfile.NAME, + BluetoothPan.ACTION_CONNECTION_STATE_CHANGED); + + if(DEBUG) Log.d(TAG, "Adding local MAP profile"); + mMapProfile = new MapProfile(mContext, mLocalAdapter, + mDeviceManager, this); + addProfile(mMapProfile, MapProfile.NAME, + BluetoothMap.ACTION_CONNECTION_STATE_CHANGED); + + //Create PBAP server profile, but do not add it to list of profiles + // as we do not need to monitor the profile as part of profile list + mPbapProfile = new PbapServerProfile(context); + + if (DEBUG) Log.d(TAG, "LocalBluetoothProfileManager construction complete"); + } + + /** + * Initialize or update the local profile objects. If a UUID was previously + * present but has been removed, we print a warning but don't remove the + * profile object as it might be referenced elsewhere, or the UUID might + * come back and we don't want multiple copies of the profile objects. + * @param uuids + */ + void updateLocalProfiles(ParcelUuid[] uuids) { + // A2DP + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.AudioSource)) { + if (mA2dpProfile == null) { + if(DEBUG) Log.d(TAG, "Adding local A2DP profile"); + mA2dpProfile = new A2dpProfile(mContext, mLocalAdapter, mDeviceManager, this); + addProfile(mA2dpProfile, A2dpProfile.NAME, + BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); + } + } else if (mA2dpProfile != null) { + Log.w(TAG, "Warning: A2DP profile was previously added but the UUID is now missing."); + } + + // Headset / Handsfree + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Handsfree_AG) || + BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.HSP_AG)) { + if (mHeadsetProfile == null) { + if (DEBUG) Log.d(TAG, "Adding local HEADSET profile"); + mHeadsetProfile = new HeadsetProfile(mContext, mLocalAdapter, + mDeviceManager, this); + addProfile(mHeadsetProfile, HeadsetProfile.NAME, + BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED); + } + } else if (mHeadsetProfile != null) { + Log.w(TAG, "Warning: HEADSET profile was previously added but the UUID is now missing."); + } + + // OPP + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush)) { + if (mOppProfile == null) { + if(DEBUG) Log.d(TAG, "Adding local OPP profile"); + mOppProfile = new OppProfile(); + // Note: no event handler for OPP, only name map. + mProfileNameMap.put(OppProfile.NAME, mOppProfile); + } + } else if (mOppProfile != null) { + Log.w(TAG, "Warning: OPP profile was previously added but the UUID is now missing."); + } + mEventManager.registerProfileIntentReceiver(); + + // There is no local SDP record for HID and Settings app doesn't control PBAP + } + + private final Collection<ServiceListener> mServiceListeners = + new ArrayList<ServiceListener>(); + + private void addProfile(LocalBluetoothProfile profile, + String profileName, String stateChangedAction) { + mEventManager.addProfileHandler(stateChangedAction, new StateChangedHandler(profile)); + mProfileNameMap.put(profileName, profile); + } + + private void addPanProfile(LocalBluetoothProfile profile, + String profileName, String stateChangedAction) { + mEventManager.addProfileHandler(stateChangedAction, + new PanStateChangedHandler(profile)); + mProfileNameMap.put(profileName, profile); + } + + public LocalBluetoothProfile getProfileByName(String name) { + return mProfileNameMap.get(name); + } + + // Called from LocalBluetoothAdapter when state changes to ON + void setBluetoothStateOn() { + ParcelUuid[] uuids = mLocalAdapter.getUuids(); + if (uuids != null) { + updateLocalProfiles(uuids); + } + mEventManager.readPairedDevices(); + } + + /** + * Generic handler for connection state change events for the specified profile. + */ + private class StateChangedHandler implements BluetoothEventManager.Handler { + final LocalBluetoothProfile mProfile; + + StateChangedHandler(LocalBluetoothProfile profile) { + mProfile = profile; + } + + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { + Log.w(TAG, "StateChangedHandler found new device: " + device); + cachedDevice = mDeviceManager.addDevice(mLocalAdapter, + LocalBluetoothProfileManager.this, device); + } + int newState = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, 0); + int oldState = intent.getIntExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, 0); + if (newState == BluetoothProfile.STATE_DISCONNECTED && + oldState == BluetoothProfile.STATE_CONNECTING) { + Log.i(TAG, "Failed to connect " + mProfile + " device"); + } + + cachedDevice.onProfileStateChanged(mProfile, newState); + cachedDevice.refresh(); + } + } + + /** State change handler for NAP and PANU profiles. */ + private class PanStateChangedHandler extends StateChangedHandler { + + PanStateChangedHandler(LocalBluetoothProfile profile) { + super(profile); + } + + @Override + public void onReceive(Context context, Intent intent, BluetoothDevice device) { + PanProfile panProfile = (PanProfile) mProfile; + int role = intent.getIntExtra(BluetoothPan.EXTRA_LOCAL_ROLE, 0); + panProfile.setLocalRole(device, role); + super.onReceive(context, intent, device); + } + } + + // called from DockService + public void addServiceListener(ServiceListener l) { + mServiceListeners.add(l); + } + + // called from DockService + public void removeServiceListener(ServiceListener l) { + mServiceListeners.remove(l); + } + + // not synchronized: use only from UI thread! (TODO: verify) + void callServiceConnectedListeners() { + for (ServiceListener l : mServiceListeners) { + l.onServiceConnected(); + } + } + + // not synchronized: use only from UI thread! (TODO: verify) + void callServiceDisconnectedListeners() { + for (ServiceListener listener : mServiceListeners) { + listener.onServiceDisconnected(); + } + } + + // This is called by DockService, so check Headset and A2DP. + public synchronized boolean isManagerReady() { + // Getting just the headset profile is fine for now. Will need to deal with A2DP + // and others if they aren't always in a ready state. + LocalBluetoothProfile profile = mHeadsetProfile; + if (profile != null) { + return profile.isProfileReady(); + } + profile = mA2dpProfile; + if (profile != null) { + return profile.isProfileReady(); + } + return false; + } + + public A2dpProfile getA2dpProfile() { + return mA2dpProfile; + } + + public HeadsetProfile getHeadsetProfile() { + return mHeadsetProfile; + } + + public PbapServerProfile getPbapProfile(){ + return mPbapProfile; + } + + public MapProfile getMapProfile(){ + return mMapProfile; + } + + /** + * Fill in a list of LocalBluetoothProfile objects that are supported by + * the local device and the remote device. + * + * @param uuids of the remote device + * @param localUuids UUIDs of the local device + * @param profiles The list of profiles to fill + * @param removedProfiles list of profiles that were removed + */ + synchronized void updateProfiles(ParcelUuid[] uuids, ParcelUuid[] localUuids, + Collection<LocalBluetoothProfile> profiles, + Collection<LocalBluetoothProfile> removedProfiles, + boolean isPanNapConnected, BluetoothDevice device) { + // Copy previous profile list into removedProfiles + removedProfiles.clear(); + removedProfiles.addAll(profiles); + profiles.clear(); + + if (uuids == null) { + return; + } + + if (mHeadsetProfile != null) { + if ((BluetoothUuid.isUuidPresent(localUuids, BluetoothUuid.HSP_AG) && + BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.HSP)) || + (BluetoothUuid.isUuidPresent(localUuids, BluetoothUuid.Handsfree_AG) && + BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Handsfree))) { + profiles.add(mHeadsetProfile); + removedProfiles.remove(mHeadsetProfile); + } + } + + if (BluetoothUuid.containsAnyUuid(uuids, A2dpProfile.SINK_UUIDS) && + mA2dpProfile != null) { + profiles.add(mA2dpProfile); + removedProfiles.remove(mA2dpProfile); + } + + if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush) && + mOppProfile != null) { + profiles.add(mOppProfile); + removedProfiles.remove(mOppProfile); + } + + if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hid) || + BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hogp)) && + mHidProfile != null) { + profiles.add(mHidProfile); + removedProfiles.remove(mHidProfile); + } + + if(isPanNapConnected) + if(DEBUG) Log.d(TAG, "Valid PAN-NAP connection exists."); + if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.NAP) && + mPanProfile != null) || isPanNapConnected) { + profiles.add(mPanProfile); + removedProfiles.remove(mPanProfile); + } + + if ((mMapProfile != null) && + (mMapProfile.getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED)) { + profiles.add(mMapProfile); + removedProfiles.remove(mMapProfile); + mMapProfile.setPreferred(device, true); + } + } + +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java new file mode 100644 index 0000000..e6a152f --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/MapProfile.java @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2012 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.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothMap; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * MapProfile handles Bluetooth MAP profile. + */ +public final class MapProfile implements LocalBluetoothProfile { + private static final String TAG = "MapProfile"; + private static boolean V = true; + + private BluetoothMap mService; + private boolean mIsProfileReady; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private final LocalBluetoothProfileManager mProfileManager; + + static final ParcelUuid[] UUIDS = { + BluetoothUuid.MAP, + BluetoothUuid.MNS, + BluetoothUuid.MAS, + }; + + static final String NAME = "MAP"; + + // Order of this profile in device profiles list + + // These callbacks run on the main thread. + private final class MapServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothMap) proxy; + // We just bound to the service, so refresh the UI for any connected MAP devices. + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + Log.w(TAG, "MapProfile found new device: " + nextDevice); + device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice); + } + device.onProfileStateChanged(MapProfile.this, + BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + + mProfileManager.callServiceConnectedListeners(); + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mProfileManager.callServiceDisconnectedListeners(); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + if(V) Log.d(TAG,"isProfileReady(): "+ mIsProfileReady); + return mIsProfileReady; + } + + MapProfile(Context context, LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + mLocalAdapter.getProfileProxy(context, new MapServiceListener(), + BluetoothProfile.MAP); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public boolean connect(BluetoothDevice device) { + if(V)Log.d(TAG,"connect() - should not get called"); + return false; // MAP never connects out + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty() && deviceList.get(0).equals(device)) { + if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + return mService.disconnect(device); + } else { + return false; + } + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.STATE_DISCONNECTED; + List<BluetoothDevice> deviceList = mService.getConnectedDevices(); + if(V) Log.d(TAG,"getConnectionStatus: status is: "+ mService.getConnectionState(device)); + + return !deviceList.isEmpty() && deviceList.get(0).equals(device) + ? mService.getConnectionState(device) + : BluetoothProfile.STATE_DISCONNECTED; + } + + public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; + return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + } + + public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device); + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; + if (preferred) { + if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + } else { + mService.setPriority(device, BluetoothProfile.PRIORITY_OFF); + } + } + + public List<BluetoothDevice> getConnectedDevices() { + if (mService == null) return new ArrayList<BluetoothDevice>(0); + return mService.getDevicesMatchingConnectionStates( + new int[] {BluetoothProfile.STATE_CONNECTED, + BluetoothProfile.STATE_CONNECTING, + BluetoothProfile.STATE_DISCONNECTING}); + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return BluetoothProfile.MAP; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_map; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_map_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_map_profile_summary_connected; + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_cellphone; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.MAP, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up MAP proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/OppProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/OppProfile.java new file mode 100755 index 0000000..31e675c --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/OppProfile.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import com.android.settingslib.R; + +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; + +/** + * OppProfile handles Bluetooth OPP. + */ +final class OppProfile implements LocalBluetoothProfile { + + static final String NAME = "OPP"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 2; + + public boolean isConnectable() { + return false; + } + + public boolean isAutoConnectable() { + return false; + } + + public boolean connect(BluetoothDevice device) { + return false; + } + + public boolean disconnect(BluetoothDevice device) { + return false; + } + + public int getConnectionStatus(BluetoothDevice device) { + return BluetoothProfile.STATE_DISCONNECTED; // Settings app doesn't handle OPP + } + + public boolean isPreferred(BluetoothDevice device) { + return false; + } + + public int getPreferred(BluetoothDevice device) { + return BluetoothProfile.PRIORITY_OFF; // Settings app doesn't handle OPP + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + } + + public boolean isProfileReady() { + return true; + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_opp; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + return 0; // OPP profile not displayed in UI + } + + public int getDrawableResource(BluetoothClass btClass) { + return 0; // no icon for OPP + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java new file mode 100755 index 0000000..3af89e6 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PanProfile.java @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothPan; +import android.bluetooth.BluetoothProfile; +import android.content.Context; +import android.util.Log; + +import com.android.settingslib.R; + +import java.util.HashMap; +import java.util.List; + +/** + * PanProfile handles Bluetooth PAN profile (NAP and PANU). + */ +final class PanProfile implements LocalBluetoothProfile { + private static final String TAG = "PanProfile"; + private static boolean V = true; + + private BluetoothPan mService; + private boolean mIsProfileReady; + + // Tethering direction for each device + private final HashMap<BluetoothDevice, Integer> mDeviceRoleMap = + new HashMap<BluetoothDevice, Integer>(); + + static final String NAME = "PAN"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 4; + + // These callbacks run on the main thread. + private final class PanServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothPan) proxy; + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + PanProfile(Context context) { + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + adapter.getProfileProxy(context, new PanServiceListener(), + BluetoothProfile.PAN); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return false; + } + + public boolean connect(BluetoothDevice device) { + if (mService == null) return false; + List<BluetoothDevice> sinks = mService.getConnectedDevices(); + if (sinks != null) { + for (BluetoothDevice sink : sinks) { + mService.disconnect(sink); + } + } + return mService.connect(device); + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + return mService.disconnect(device); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + return mService.getConnectionState(device); + } + + public boolean isPreferred(BluetoothDevice device) { + // return current connection status so profile checkbox is set correctly + return getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED; + } + + public int getPreferred(BluetoothDevice device) { + return -1; + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + // ignore: isPreferred is always true for PAN + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + if (isLocalRoleNap(device)) { + return R.string.bluetooth_profile_pan_nap; + } else { + return R.string.bluetooth_profile_pan; + } + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_pan_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + if (isLocalRoleNap(device)) { + return R.string.bluetooth_pan_nap_profile_summary_connected; + } else { + return R.string.bluetooth_pan_user_profile_summary_connected; + } + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_network_pan; + } + + // Tethering direction determines UI strings. + void setLocalRole(BluetoothDevice device, int role) { + mDeviceRoleMap.put(device, role); + } + + boolean isLocalRoleNap(BluetoothDevice device) { + if (mDeviceRoleMap.containsKey(device)) { + return mDeviceRoleMap.get(device) == BluetoothPan.LOCAL_NAP_ROLE; + } else { + return false; + } + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.PAN, mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up PAN proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapServerProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapServerProfile.java new file mode 100755 index 0000000..9e76933 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/PbapServerProfile.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothPbap; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import com.android.settingslib.R; + +/** + * PBAPServer Profile + */ +public final class PbapServerProfile implements LocalBluetoothProfile { + private static final String TAG = "PbapServerProfile"; + private static boolean V = true; + + private BluetoothPbap mService; + private boolean mIsProfileReady; + + static final String NAME = "PBAP Server"; + + // Order of this profile in device profiles list + private static final int ORDINAL = 6; + + // The UUIDs indicate that remote device might access pbap server + static final ParcelUuid[] PBAB_CLIENT_UUIDS = { + BluetoothUuid.HSP, + BluetoothUuid.Handsfree, + BluetoothUuid.PBAP_PCE + }; + + // These callbacks run on the main thread. + private final class PbapServiceListener + implements BluetoothPbap.ServiceListener { + + public void onServiceConnected(BluetoothPbap proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothPbap) proxy; + mIsProfileReady=true; + } + + public void onServiceDisconnected() { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + return mIsProfileReady; + } + + PbapServerProfile(Context context) { + BluetoothPbap pbap = new BluetoothPbap(context, new PbapServiceListener()); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return false; + } + + public boolean connect(BluetoothDevice device) { + /*Can't connect from server */ + return false; + + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + return mService.disconnect(); + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) { + return BluetoothProfile.STATE_DISCONNECTED; + } + if (mService.isConnected(device)) + return BluetoothProfile.STATE_CONNECTED; + else + return BluetoothProfile.STATE_DISCONNECTED; + } + + public boolean isPreferred(BluetoothDevice device) { + return false; + } + + public int getPreferred(BluetoothDevice device) { + return -1; + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + // ignore: isPreferred is always true for PBAP + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return ORDINAL; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_pbap; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + return R.string.bluetooth_profile_pbap_summary; + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_cellphone; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + mService.close(); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up PBAP proxy", t); + } + } + } +} diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/Utils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/Utils.java new file mode 100644 index 0000000..c919426 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/Utils.java @@ -0,0 +1,43 @@ +package com.android.settingslib.bluetooth; + +import android.bluetooth.BluetoothProfile; +import android.content.Context; + +import com.android.settingslib.R; + +public class Utils { + public static final boolean V = false; // verbose logging + public static final boolean D = true; // regular logging + + private static ErrorListener sErrorListener; + + public static int getConnectionStateSummary(int connectionState) { + switch (connectionState) { + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_connected; + case BluetoothProfile.STATE_CONNECTING: + return R.string.bluetooth_connecting; + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_disconnected; + case BluetoothProfile.STATE_DISCONNECTING: + return R.string.bluetooth_disconnecting; + default: + return 0; + } + } + + static void showError(Context context, String name, int messageResId) { + if (sErrorListener != null) { + sErrorListener.onShowError(context, name, messageResId); + } + } + + public static void setErrorListener(ErrorListener listener) { + sErrorListener = listener; + } + + public interface ErrorListener { + void onShowError(Context context, String name, int messageResId); + } + +} diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index c3e23d2..2eb7abf 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -127,6 +127,7 @@ public class WifiTracker { public void pauseScanning() { if (mScanner != null) { mScanner.pause(); + mScanner = null; } } @@ -134,10 +135,10 @@ public class WifiTracker { * Resume scanning for wifi networks after it has been paused. */ public void resumeScanning() { + if (mScanner == null) { + mScanner = new Scanner(); + } if (mWifiManager.isWifiEnabled()) { - if (mScanner == null) { - mScanner = new Scanner(); - } mScanner.resume(); } updateAccessPoints(); @@ -335,11 +336,17 @@ public class WifiTracker { private void updateWifiState(int state) { if (state == WifiManager.WIFI_STATE_ENABLED) { - mScanner.resume(); + if (mScanner != null) { + // We only need to resume if mScanner isn't null because + // that means we want to be scanning. + mScanner.resume(); + } } else { mLastInfo = null; mLastNetworkInfo = null; - mScanner.pause(); + if (mScanner != null) { + mScanner.pause(); + } } if (mListener != null) { mListener.onWifiStateChanged(state); @@ -382,26 +389,34 @@ public class WifiTracker { @VisibleForTesting class Scanner extends Handler { + private static final int MSG_SCAN = 0; + private int mRetry = 0; void resume() { - if (!hasMessages(0)) { - sendEmptyMessage(0); + if (!hasMessages(MSG_SCAN)) { + sendEmptyMessage(MSG_SCAN); } } void forceScan() { - removeMessages(0); - sendEmptyMessage(0); + removeMessages(MSG_SCAN); + sendEmptyMessage(MSG_SCAN); } void pause() { mRetry = 0; - removeMessages(0); + removeMessages(MSG_SCAN); + } + + @VisibleForTesting + boolean isScanning() { + return hasMessages(MSG_SCAN); } @Override public void handleMessage(Message message) { + if (message.what != MSG_SCAN) return; if (mWifiManager.startScan()) { mRetry = 0; } else if (++mRetry >= 3) { diff --git a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java b/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java index 73d4938..8eb1ca4 100644 --- a/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java +++ b/packages/SettingsLib/tests/src/com/android/settingslib/wifi/WifiTrackerTest.java @@ -201,6 +201,29 @@ public class WifiTrackerTest extends BaseTest { assertTrue("Connected to wifi", accessPoints.get(0).isActive()); } + public void testEnableResumeScanning() { + mWifiTracker.mScanner = null; + + Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); + // Make sure disable/enable cycle works with no scanner (no crashing). + i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); + mWifiTracker.mReceiver.onReceive(mContext, i); + i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); + mWifiTracker.mReceiver.onReceive(mContext, i); + + Mockito.when(mWifiManager.isWifiEnabled()).thenReturn(false); + i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); + mWifiTracker.mReceiver.onReceive(mContext, i); + // Now enable scanning while wifi is off, it shouldn't start. + mWifiTracker.resumeScanning(); + assertFalse(mWifiTracker.mScanner.isScanning()); + + // Turn on wifi and make sure scanning starts. + i.putExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED); + mWifiTracker.mReceiver.onReceive(mContext, i); + assertTrue(mWifiTracker.mScanner.isScanning()); + } + private String[] generateTestNetworks(List<WifiConfiguration> wifiConfigs, List<ScanResult> scanResults, boolean connectedIsEphemeral) { String[] expectedSsids = new String[NUM_NETWORKS]; diff --git a/packages/SettingsProvider/Android.mk b/packages/SettingsProvider/Android.mk index c16f7b6..2b833b2 100644 --- a/packages/SettingsProvider/Android.mk +++ b/packages/SettingsProvider/Android.mk @@ -3,7 +3,8 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional -LOCAL_SRC_FILES := $(call all-subdir-java-files) +LOCAL_SRC_FILES := $(call all-subdir-java-files) \ + src/com/android/providers/settings/EventLogTags.logtags LOCAL_JAVA_LIBRARIES := telephony-common ims-common diff --git a/packages/SettingsProvider/res/values-en-rAU/defaults.xml b/packages/SettingsProvider/res/values-en-rAU/defaults.xml new file mode 100644 index 0000000..22443a5 --- /dev/null +++ b/packages/SettingsProvider/res/values-en-rAU/defaults.xml @@ -0,0 +1,24 @@ +<?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. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="def_device_name" msgid="6309317409634339402">"%1$s %2$s"</string> + <string name="def_device_name_simple" msgid="9037785625140748221">"%1$s"</string> +</resources> diff --git a/packages/SettingsProvider/res/values-en-rAU/strings.xml b/packages/SettingsProvider/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..c19fdd7 --- /dev/null +++ b/packages/SettingsProvider/res/values-en-rAU/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * Copyright (c) 2007, 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. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="4567566098528588863">"Settings Storage"</string> +</resources> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 6a05af1..729efcb 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -28,8 +28,8 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; +import android.media.AudioSystem; import android.media.AudioManager; -import android.media.AudioService; import android.net.ConnectivityManager; import android.os.Build; import android.os.Environment; @@ -58,6 +58,7 @@ import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Database helper class for {@link SettingsProvider}. @@ -78,6 +79,9 @@ public class DatabaseHelper extends SQLiteOpenHelper { private static final HashSet<String> mValidTables = new HashSet<String>(); + private static final String DATABASE_JOURNAL_SUFFIX = "-journal"; + private static final String DATABASE_BACKUP_SUFFIX = "-backup"; + private static final String TABLE_SYSTEM = "system"; private static final String TABLE_SECURE = "secure"; private static final String TABLE_GLOBAL = "global"; @@ -86,13 +90,13 @@ public class DatabaseHelper extends SQLiteOpenHelper { mValidTables.add(TABLE_SYSTEM); mValidTables.add(TABLE_SECURE); mValidTables.add(TABLE_GLOBAL); - mValidTables.add("bluetooth_devices"); - mValidTables.add("bookmarks"); // These are old. + mValidTables.add("bluetooth_devices"); + mValidTables.add("bookmarks"); mValidTables.add("favorites"); - mValidTables.add("gservices"); mValidTables.add("old_favorites"); + mValidTables.add("android_metadata"); } static String dbNameForUser(final int userHandle) { @@ -118,6 +122,33 @@ public class DatabaseHelper extends SQLiteOpenHelper { return mValidTables.contains(name); } + public void dropDatabase() { + close(); + File databaseFile = mContext.getDatabasePath(getDatabaseName()); + if (databaseFile.exists()) { + databaseFile.delete(); + } + File databaseJournalFile = mContext.getDatabasePath(getDatabaseName() + + DATABASE_JOURNAL_SUFFIX); + if (databaseJournalFile.exists()) { + databaseJournalFile.delete(); + } + } + + public void backupDatabase() { + close(); + File databaseFile = mContext.getDatabasePath(getDatabaseName()); + if (!databaseFile.exists()) { + return; + } + File backupFile = mContext.getDatabasePath(getDatabaseName() + + DATABASE_BACKUP_SUFFIX); + if (backupFile.exists()) { + return; + } + databaseFile.renameTo(backupFile); + } + private void createSecureTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE secure (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT," + @@ -568,7 +599,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)" + " VALUES(?,?);"); loadSetting(stmt, Settings.System.VOLUME_BLUETOOTH_SCO, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO)); db.setTransactionSuccessful(); } finally { db.endTransaction(); @@ -1221,9 +1252,11 @@ public class DatabaseHelper extends SQLiteOpenHelper { // Migrate now-global settings. Note that this happens before // new users can be created. createGlobalTable(db); - String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys); + String[] settingsToMove = setToStringArray( + SettingsProvider.sSystemMovedToGlobalSettings); moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, false); - settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys); + settingsToMove = setToStringArray( + SettingsProvider.sSecureMovedToGlobalSettings); moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, false); db.setTransactionSuccessful(); @@ -1489,9 +1522,11 @@ public class DatabaseHelper extends SQLiteOpenHelper { db.beginTransaction(); try { // Migrate now-global settings - String[] settingsToMove = hashsetToStringArray(SettingsProvider.sSystemGlobalKeys); + String[] settingsToMove = setToStringArray( + SettingsProvider.sSystemMovedToGlobalSettings); moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, settingsToMove, true); - settingsToMove = hashsetToStringArray(SettingsProvider.sSecureGlobalKeys); + settingsToMove = setToStringArray( + SettingsProvider.sSecureMovedToGlobalSettings); moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, settingsToMove, true); db.setTransactionSuccessful(); @@ -1855,7 +1890,8 @@ public class DatabaseHelper extends SQLiteOpenHelper { try { stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)" + " VALUES(?,?);"); - loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED, ImsConfig.FeatureValueConstants.ON); + loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED, + ImsConfig.FeatureValueConstants.ON); db.setTransactionSuccessful(); } finally { db.endTransaction(); @@ -1895,34 +1931,50 @@ public class DatabaseHelper extends SQLiteOpenHelper { } upgradeVersion = 118; } + + /** + * IMPORTANT: Do not add any more upgrade steps here as the global, + * secure, and system settings are no longer stored in a database + * but are kept in memory and persisted to XML. The correct places + * for adding upgrade steps are: + * + * Global: SettingsProvider.UpgradeController#onUpgradeGlobalSettings + * Secure: SettingsProvider.UpgradeController#onUpgradeSecureSettings + * System: SettingsProvider.UpgradeController#onUpgradeSystemSettings + */ + // *** Remember to update DATABASE_VERSION above! if (upgradeVersion != currentVersion) { - Log.w(TAG, "Got stuck trying to upgrade from version " + upgradeVersion - + ", must wipe the settings provider"); - db.execSQL("DROP TABLE IF EXISTS global"); - db.execSQL("DROP TABLE IF EXISTS globalIndex1"); - db.execSQL("DROP TABLE IF EXISTS system"); - db.execSQL("DROP INDEX IF EXISTS systemIndex1"); - db.execSQL("DROP TABLE IF EXISTS secure"); - db.execSQL("DROP INDEX IF EXISTS secureIndex1"); - db.execSQL("DROP TABLE IF EXISTS gservices"); - db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); - db.execSQL("DROP TABLE IF EXISTS bluetooth_devices"); - db.execSQL("DROP TABLE IF EXISTS bookmarks"); - db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1"); - db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2"); - db.execSQL("DROP TABLE IF EXISTS favorites"); - onCreate(db); - - // Added for diagnosing settings.db wipes after the fact - String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion; - db.execSQL("INSERT INTO secure(name,value) values('" + - "wiped_db_reason" + "','" + wipeReason + "');"); + recreateDatabase(db, oldVersion, upgradeVersion, currentVersion); } } - private String[] hashsetToStringArray(HashSet<String> set) { + public void recreateDatabase(SQLiteDatabase db, int oldVersion, + int upgradeVersion, int currentVersion) { + db.execSQL("DROP TABLE IF EXISTS global"); + db.execSQL("DROP TABLE IF EXISTS globalIndex1"); + db.execSQL("DROP TABLE IF EXISTS system"); + db.execSQL("DROP INDEX IF EXISTS systemIndex1"); + db.execSQL("DROP TABLE IF EXISTS secure"); + db.execSQL("DROP INDEX IF EXISTS secureIndex1"); + db.execSQL("DROP TABLE IF EXISTS gservices"); + db.execSQL("DROP INDEX IF EXISTS gservicesIndex1"); + db.execSQL("DROP TABLE IF EXISTS bluetooth_devices"); + db.execSQL("DROP TABLE IF EXISTS bookmarks"); + db.execSQL("DROP INDEX IF EXISTS bookmarksIndex1"); + db.execSQL("DROP INDEX IF EXISTS bookmarksIndex2"); + db.execSQL("DROP TABLE IF EXISTS favorites"); + + onCreate(db); + + // Added for diagnosing settings.db wipes after the fact + String wipeReason = oldVersion + "/" + upgradeVersion + "/" + currentVersion; + db.execSQL("INSERT INTO secure(name,value) values('" + + "wiped_db_reason" + "','" + wipeReason + "');"); + } + + private String[] setToStringArray(Set<String> set) { String[] array = new String[set.size()]; return set.toArray(array); } @@ -2051,11 +2103,11 @@ public class DatabaseHelper extends SQLiteOpenHelper { int vibrateSetting = getIntValueFromSystem(db, Settings.System.VIBRATE_ON, 0); // If the ringer vibrate value is invalid, set it to the default if ((vibrateSetting & 3) == AudioManager.VIBRATE_SETTING_OFF) { - vibrateSetting = AudioService.getValueForVibrateSetting(0, + vibrateSetting = AudioSystem.getValueForVibrateSetting(0, AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); } // Apply the same setting to the notification vibrate value - vibrateSetting = AudioService.getValueForVibrateSetting(vibrateSetting, + vibrateSetting = AudioSystem.getValueForVibrateSetting(vibrateSetting, AudioManager.VIBRATE_TYPE_NOTIFICATION, vibrateSetting); SQLiteStatement stmt = null; @@ -2199,25 +2251,25 @@ public class DatabaseHelper extends SQLiteOpenHelper { + " VALUES(?,?);"); loadSetting(stmt, Settings.System.VOLUME_MUSIC, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_MUSIC)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_MUSIC)); loadSetting(stmt, Settings.System.VOLUME_RING, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_RING)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_RING)); loadSetting(stmt, Settings.System.VOLUME_SYSTEM, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_SYSTEM)); loadSetting( stmt, Settings.System.VOLUME_VOICE, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_VOICE_CALL)); loadSetting(stmt, Settings.System.VOLUME_ALARM, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_ALARM)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_ALARM)); loadSetting( stmt, Settings.System.VOLUME_NOTIFICATION, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_NOTIFICATION)); loadSetting( stmt, Settings.System.VOLUME_BLUETOOTH_SCO, - AudioService.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO)); + AudioSystem.getDefaultStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO)); // By default: // - ringtones, notification, system and music streams are affected by ringer mode @@ -2236,7 +2288,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { ringerModeAffectedStreams); loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED, - AudioService.DEFAULT_MUTE_STREAMS_AFFECTED); + AudioSystem.DEFAULT_MUTE_STREAMS_AFFECTED); } finally { if (stmt != null) stmt.close(); } @@ -2256,10 +2308,10 @@ public class DatabaseHelper extends SQLiteOpenHelper { // Vibrate on by default for ringer, on for notification int vibrate = 0; - vibrate = AudioService.getValueForVibrateSetting(vibrate, + vibrate = AudioSystem.getValueForVibrateSetting(vibrate, AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ONLY_SILENT); - vibrate |= AudioService.getValueForVibrateSetting(vibrate, + vibrate |= AudioSystem.getValueForVibrateSetting(vibrate, AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ONLY_SILENT); loadSetting(stmt, Settings.System.VIBRATE_ON, vibrate); } finally { @@ -2639,7 +2691,8 @@ public class DatabaseHelper extends SQLiteOpenHelper { loadBooleanSetting(stmt, Settings.Global.GUEST_USER_ENABLED, R.bool.def_guest_user_enabled); - loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED, ImsConfig.FeatureValueConstants.ON); + loadSetting(stmt, Settings.Global.ENHANCED_4G_MODE_ENABLED, + ImsConfig.FeatureValueConstants.ON); // --- New global settings start here } finally { if (stmt != null) stmt.close(); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/EventLogTags.logtags b/packages/SettingsProvider/src/com/android/providers/settings/EventLogTags.logtags new file mode 100644 index 0000000..298d776 --- /dev/null +++ b/packages/SettingsProvider/src/com/android/providers/settings/EventLogTags.logtags @@ -0,0 +1,5 @@ +# See system/core/logcat/e for a description of the format of this file. + +option java_package com.android.providers.settings; + +52100 unsupported_settings_query (uri|3),(selection|3),(whereArgs|3) diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java index 264dcae..7f826ef 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java @@ -32,14 +32,18 @@ import android.os.FileUtils; import android.os.Handler; import android.os.ParcelFileDescriptor; import android.os.Process; +import android.os.UserHandle; import android.provider.Settings; import android.util.Log; +import com.android.internal.widget.LockPatternUtils; + import libcore.io.IoUtils; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.CharArrayReader; import java.io.DataInputStream; @@ -76,10 +80,11 @@ public class SettingsBackupAgent extends BackupAgentHelper { private static final String KEY_SECURE = "secure"; private static final String KEY_GLOBAL = "global"; private static final String KEY_LOCALE = "locale"; + private static final String KEY_LOCK_SETTINGS = "lock_settings"; // Versioning of the state file. Increment this version // number any time the set of state items is altered. - private static final int STATE_VERSION = 3; + private static final int STATE_VERSION = 4; // Slots in the checksum array. Never insert new items in the middle // of this array; new slots must be appended. @@ -89,20 +94,23 @@ public class SettingsBackupAgent extends BackupAgentHelper { private static final int STATE_WIFI_SUPPLICANT = 3; private static final int STATE_WIFI_CONFIG = 4; private static final int STATE_GLOBAL = 5; + private static final int STATE_LOCK_SETTINGS = 6; - private static final int STATE_SIZE = 6; // The current number of state items + private static final int STATE_SIZE = 7; // The current number of state items // Number of entries in the checksum array at various version numbers private static final int STATE_SIZES[] = { 0, 4, // version 1 5, // version 2 added STATE_WIFI_CONFIG - STATE_SIZE // version 3 added STATE_GLOBAL + 6, // version 3 added STATE_GLOBAL + STATE_SIZE // version 4 added STATE_LOCK_SETTINGS }; // Versioning of the 'full backup' format - private static final int FULL_BACKUP_VERSION = 2; + private static final int FULL_BACKUP_VERSION = 3; private static final int FULL_BACKUP_ADDED_GLOBAL = 2; // added the "global" entry + private static final int FULL_BACKUP_ADDED_LOCK_SETTINGS = 3; // added the "lock_settings" entry private static final int INTEGER_BYTE_COUNT = Integer.SIZE / Byte.SIZE; @@ -110,11 +118,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { private static final String TAG = "SettingsBackupAgent"; - private static final int COLUMN_NAME = 1; - private static final int COLUMN_VALUE = 2; - private static final String[] PROJECTION = { - Settings.NameValueTable._ID, Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE }; @@ -128,6 +132,10 @@ public class SettingsBackupAgent extends BackupAgentHelper { private static final String KEY_WIFI_SUPPLICANT = "\uffedWIFI"; private static final String KEY_WIFI_CONFIG = "\uffedCONFIG_WIFI"; + // Keys within the lock settings section + private static final String KEY_LOCK_SETTINGS_OWNER_INFO_ENABLED = "owner_info_enabled"; + private static final String KEY_LOCK_SETTINGS_OWNER_INFO = "owner_info"; + // Name of the temporary file we use during full backup/restore. This is // stored in the full-backup tarfile as well, so should not be changed. private static final String STAGE_FILE = "flattened-data"; @@ -371,6 +379,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { byte[] systemSettingsData = getSystemSettings(); byte[] secureSettingsData = getSecureSettings(); byte[] globalSettingsData = getGlobalSettings(); + byte[] lockSettingsData = getLockSettings(); byte[] locale = mSettingsHelper.getLocaleData(); byte[] wifiSupplicantData = getWifiSupplicant(FILE_WIFI_SUPPLICANT); byte[] wifiConfigData = getFileData(mWifiConfigFile); @@ -391,6 +400,9 @@ public class SettingsBackupAgent extends BackupAgentHelper { stateChecksums[STATE_WIFI_CONFIG] = writeIfChanged(stateChecksums[STATE_WIFI_CONFIG], KEY_WIFI_CONFIG, wifiConfigData, data); + stateChecksums[STATE_LOCK_SETTINGS] = + writeIfChanged(stateChecksums[STATE_LOCK_SETTINGS], KEY_LOCK_SETTINGS, + lockSettingsData, data); writeNewChecksums(stateChecksums, newState); } @@ -473,8 +485,8 @@ public class SettingsBackupAgent extends BackupAgentHelper { ParcelFileDescriptor newState) throws IOException { HashSet<String> movedToGlobal = new HashSet<String>(); - Settings.System.getMovedKeys(movedToGlobal); - Settings.Secure.getMovedKeys(movedToGlobal); + Settings.System.getMovedToGlobalSettings(movedToGlobal); + Settings.Secure.getMovedToGlobalSettings(movedToGlobal); while (data.readNextHeader()) { final String key = data.getKey(); @@ -496,6 +508,8 @@ public class SettingsBackupAgent extends BackupAgentHelper { } else if (KEY_WIFI_CONFIG.equals(key)) { initWifiRestoreIfNecessary(); mWifiRestore.incorporateWifiConfigFile(data); + } else if (KEY_LOCK_SETTINGS.equals(key)) { + restoreLockSettings(data); } else { data.skipEntityData(); } @@ -517,6 +531,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { byte[] systemSettingsData = getSystemSettings(); byte[] secureSettingsData = getSecureSettings(); byte[] globalSettingsData = getGlobalSettings(); + byte[] lockSettingsData = getLockSettings(); byte[] locale = mSettingsHelper.getLocaleData(); byte[] wifiSupplicantData = getWifiSupplicant(FILE_WIFI_SUPPLICANT); byte[] wifiConfigData = getFileData(mWifiConfigFile); @@ -551,6 +566,9 @@ public class SettingsBackupAgent extends BackupAgentHelper { if (DEBUG_BACKUP) Log.d(TAG, wifiConfigData.length + " bytes of wifi config data"); out.writeInt(wifiConfigData.length); out.write(wifiConfigData); + if (DEBUG_BACKUP) Log.d(TAG, lockSettingsData.length + " bytes of lock settings data"); + out.writeInt(lockSettingsData.length); + out.write(lockSettingsData); out.flush(); // also flushes downstream @@ -577,8 +595,8 @@ public class SettingsBackupAgent extends BackupAgentHelper { if (version <= FULL_BACKUP_VERSION) { // Generate the moved-to-global lookup table HashSet<String> movedToGlobal = new HashSet<String>(); - Settings.System.getMovedKeys(movedToGlobal); - Settings.Secure.getMovedKeys(movedToGlobal); + Settings.System.getMovedToGlobalSettings(movedToGlobal); + Settings.Secure.getMovedToGlobalSettings(movedToGlobal); // system settings data first int nBytes = in.readInt(); @@ -633,6 +651,16 @@ public class SettingsBackupAgent extends BackupAgentHelper { in.readFully(buffer, 0, nBytes); restoreFileData(mWifiConfigFile, buffer, nBytes); + if (version >= FULL_BACKUP_ADDED_LOCK_SETTINGS) { + nBytes = in.readInt(); + if (DEBUG_BACKUP) Log.d(TAG, nBytes + " bytes of lock settings data"); + if (nBytes > buffer.length) buffer = new byte[nBytes]; + if (nBytes > 0) { + in.readFully(buffer, 0, nBytes); + restoreLockSettings(buffer, nBytes); + } + } + if (DEBUG_BACKUP) Log.d(TAG, "Full restore complete."); } else { data.close(); @@ -680,6 +708,9 @@ public class SettingsBackupAgent extends BackupAgentHelper { return oldChecksum; } try { + if (DEBUG_BACKUP) { + Log.v(TAG, "Writing entity " + key + " of size " + data.length); + } output.writeEntityHeader(key, data.length); output.writeEntityData(data, data.length); } catch (IOException ioe) { @@ -718,6 +749,31 @@ public class SettingsBackupAgent extends BackupAgentHelper { } } + /** + * Serialize the owner info settings + */ + private byte[] getLockSettings() { + final LockPatternUtils lockPatternUtils = new LockPatternUtils(this); + final boolean ownerInfoEnabled = lockPatternUtils.isOwnerInfoEnabled(); + final String ownerInfo = lockPatternUtils.getOwnerInfo(UserHandle.myUserId()); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(baos); + try { + out.writeUTF(KEY_LOCK_SETTINGS_OWNER_INFO_ENABLED); + out.writeUTF(ownerInfoEnabled ? "1" : "0"); + if (ownerInfo != null) { + out.writeUTF(KEY_LOCK_SETTINGS_OWNER_INFO); + out.writeUTF(ownerInfo != null ? ownerInfo : ""); + } + // End marker + out.writeUTF(""); + out.flush(); + } catch (IOException ioe) { + } + return baos.toByteArray(); + } + private void restoreSettings(BackupDataInput data, Uri contentUri, HashSet<String> movedToGlobal) { byte[] settings = new byte[data.getDataSize()]; @@ -737,7 +793,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { } // Figure out the white list and redirects to the global table. - String[] whitelist = null; + final String[] whitelist; if (contentUri.equals(Settings.Secure.CONTENT_URI)) { whitelist = Settings.Secure.SETTINGS_TO_BACKUP; } else if (contentUri.equals(Settings.System.CONTENT_URI)) { @@ -753,6 +809,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { Map<String, String> cachedEntries = new HashMap<String, String>(); ContentValues contentValues = new ContentValues(2); SettingsHelper settingsHelper = mSettingsHelper; + ContentResolver cr = getContentResolver(); final int whiteListSize = whitelist.length; for (int i = 0; i < whiteListSize; i++) { @@ -785,14 +842,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { final Uri destination = (movedToGlobal != null && movedToGlobal.contains(key)) ? Settings.Global.CONTENT_URI : contentUri; - - // The helper doesn't care what namespace the keys are in - if (settingsHelper.restoreValue(key, value)) { - contentValues.clear(); - contentValues.put(Settings.NameValueTable.NAME, key); - contentValues.put(Settings.NameValueTable.VALUE, value); - getContentResolver().insert(destination, contentValues); - } + settingsHelper.restoreValue(this, cr, contentValues, destination, key, value); if (DEBUG) { Log.d(TAG, "Restored setting: " + destination + " : "+ key + "=" + value); @@ -801,6 +851,50 @@ public class SettingsBackupAgent extends BackupAgentHelper { } /** + * Restores the owner info enabled and owner info settings in LockSettings. + * + * @param buffer + * @param nBytes + */ + private void restoreLockSettings(byte[] buffer, int nBytes) { + final LockPatternUtils lockPatternUtils = new LockPatternUtils(this); + + ByteArrayInputStream bais = new ByteArrayInputStream(buffer, 0, nBytes); + DataInputStream in = new DataInputStream(bais); + try { + String key; + // Read until empty string marker + while ((key = in.readUTF()).length() > 0) { + final String value = in.readUTF(); + if (DEBUG_BACKUP) { + Log.v(TAG, "Restoring lock_settings " + key + " = " + value); + } + switch (key) { + case KEY_LOCK_SETTINGS_OWNER_INFO_ENABLED: + lockPatternUtils.setOwnerInfoEnabled("1".equals(value)); + break; + case KEY_LOCK_SETTINGS_OWNER_INFO: + lockPatternUtils.setOwnerInfo(value, UserHandle.myUserId()); + break; + } + } + in.close(); + } catch (IOException ioe) { + } + } + + private void restoreLockSettings(BackupDataInput data) { + final byte[] settings = new byte[data.getDataSize()]; + try { + data.readEntityData(settings, 0, settings.length); + } catch (IOException ioe) { + Log.e(TAG, "Couldn't read entity data"); + return; + } + restoreLockSettings(settings, settings.length); + } + + /** * Given a cursor and a set of keys, extract the required keys and * values and write them to a byte array. * @@ -824,11 +918,14 @@ public class SettingsBackupAgent extends BackupAgentHelper { String key = settings[i]; String value = cachedEntries.remove(key); + final int nameColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.NAME); + final int valueColumnIndex = cursor.getColumnIndex(Settings.NameValueTable.VALUE); + // If the value not cached, let us look it up. if (value == null) { while (!cursor.isAfterLast()) { - String cursorKey = cursor.getString(COLUMN_NAME); - String cursorValue = cursor.getString(COLUMN_VALUE); + String cursorKey = cursor.getString(nameColumnIndex); + String cursorValue = cursor.getString(valueColumnIndex); cursor.moveToNext(); if (key.equals(cursorKey)) { value = cursorValue; @@ -942,6 +1039,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { ByteArrayOutputStream bos = new ByteArrayOutputStream(); OutputStreamWriter out = new OutputStreamWriter(bos); fromFile.write(out); + out.flush(); return bos.toByteArray(); } else { return EMPTY_DATA; diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java index 4144c80..952b220 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java @@ -19,7 +19,10 @@ package com.android.providers.settings; import android.app.ActivityManagerNative; import android.app.IActivityManager; import android.app.backup.IBackupManager; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.location.LocationManager; import android.media.AudioManager; @@ -28,10 +31,12 @@ import android.net.Uri; import android.os.IPowerManager; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; +import android.util.ArraySet; import java.util.Locale; @@ -41,6 +46,50 @@ public class SettingsHelper { private AudioManager mAudioManager; private TelephonyManager mTelephonyManager; + /** + * A few settings elements are special in that a restore of those values needs to + * be post-processed by relevant parts of the OS. A restore of any settings element + * mentioned in this table will therefore cause the system to send a broadcast with + * the {@link Intent#ACTION_SETTING_RESTORED} action, with extras naming the + * affected setting and supplying its pre-restore value for comparison. + * + * @see Intent#ACTION_SETTING_RESTORED + * @see System#SETTINGS_TO_BACKUP + * @see Secure#SETTINGS_TO_BACKUP + * @see Global#SETTINGS_TO_BACKUP + * + * {@hide} + */ + private static final ArraySet<String> sBroadcastOnRestore; + static { + sBroadcastOnRestore = new ArraySet<String>(3); + sBroadcastOnRestore.add(Settings.Secure.ENABLED_NOTIFICATION_LISTENERS); + sBroadcastOnRestore.add(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + sBroadcastOnRestore.add(Settings.Secure.ENABLED_INPUT_METHODS); + } + + private interface SettingsLookup { + public String lookup(ContentResolver resolver, String name, int userHandle); + } + + private static SettingsLookup sSystemLookup = new SettingsLookup() { + public String lookup(ContentResolver resolver, String name, int userHandle) { + return Settings.System.getStringForUser(resolver, name, userHandle); + } + }; + + private static SettingsLookup sSecureLookup = new SettingsLookup() { + public String lookup(ContentResolver resolver, String name, int userHandle) { + return Settings.Secure.getStringForUser(resolver, name, userHandle); + } + }; + + private static SettingsLookup sGlobalLookup = new SettingsLookup() { + public String lookup(ContentResolver resolver, String name, int userHandle) { + return Settings.Global.getStringForUser(resolver, name, userHandle); + } + }; + public SettingsHelper(Context context) { mContext = context; mAudioManager = (AudioManager) context @@ -58,24 +107,67 @@ public class SettingsHelper { * some cases the data will be written by the call to the appropriate API, * and in some cases the property value needs to be modified before setting. */ - public boolean restoreValue(String name, String value) { - if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) { - setBrightness(Integer.parseInt(value)); - } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) { - setSoundEffects(Integer.parseInt(value) == 1); - } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { - setGpsLocation(value); - return false; - } else if (Settings.Secure.BACKUP_AUTO_RESTORE.equals(name)) { - setAutoRestore(Integer.parseInt(value) == 1); - } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) { - return false; - } else if (Settings.System.RINGTONE.equals(name) - || Settings.System.NOTIFICATION_SOUND.equals(name)) { - setRingtone(name, value); - return false; + public void restoreValue(Context context, ContentResolver cr, ContentValues contentValues, + Uri destination, String name, String value) { + // Will we need a post-restore broadcast for this element? + String oldValue = null; + boolean sendBroadcast = false; + final SettingsLookup table; + + if (destination.equals(Settings.Secure.CONTENT_URI)) { + table = sSecureLookup; + } else if (destination.equals(Settings.System.CONTENT_URI)) { + table = sSystemLookup; + } else { /* must be GLOBAL; this was preflighted by the caller */ + table = sGlobalLookup; + } + + if (sBroadcastOnRestore.contains(name)) { + oldValue = table.lookup(cr, name, UserHandle.USER_OWNER); + sendBroadcast = true; + } + + try { + if (Settings.System.SCREEN_BRIGHTNESS.equals(name)) { + setBrightness(Integer.parseInt(value)); + // fall through to the ordinary write to settings + } else if (Settings.System.SOUND_EFFECTS_ENABLED.equals(name)) { + setSoundEffects(Integer.parseInt(value) == 1); + // fall through to the ordinary write to settings + } else if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { + setGpsLocation(value); + return; + } else if (Settings.Secure.BACKUP_AUTO_RESTORE.equals(name)) { + setAutoRestore(Integer.parseInt(value) == 1); + } else if (isAlreadyConfiguredCriticalAccessibilitySetting(name)) { + return; + } else if (Settings.System.RINGTONE.equals(name) + || Settings.System.NOTIFICATION_SOUND.equals(name)) { + setRingtone(name, value); + return; + } + + // Default case: write the restored value to settings + contentValues.clear(); + contentValues.put(Settings.NameValueTable.NAME, name); + contentValues.put(Settings.NameValueTable.VALUE, value); + cr.insert(destination, contentValues); + } catch (Exception e) { + // If we fail to apply the setting, by definition nothing happened + sendBroadcast = false; + } finally { + // If this was an element of interest, send the "we just restored it" + // broadcast with the historical value now that the new value has + // been committed and observers kicked off. + if (sendBroadcast) { + Intent intent = new Intent(Intent.ACTION_SETTING_RESTORED) + .setPackage("android").addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY) + .putExtra(Intent.EXTRA_SETTING_NAME, name) + .putExtra(Intent.EXTRA_SETTING_NEW_VALUE, value) + .putExtra(Intent.EXTRA_SETTING_PREVIOUS_VALUE, oldValue); + context.sendBroadcastAsUser(intent, UserHandle.OWNER, null); + } } - return true; } public String onBackupValue(String name, String value) { diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 6828301..2c63647 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -16,981 +16,1052 @@ package com.android.providers.settings; -import java.io.FileNotFoundException; -import java.security.SecureRandom; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - +import android.Manifest; import android.app.ActivityManager; import android.app.AppOpsManager; import android.app.backup.BackupManager; import android.content.BroadcastReceiver; import android.content.ContentProvider; -import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.UserInfo; -import android.database.AbstractCursor; import android.database.Cursor; +import android.database.MatrixCursor; import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteQueryBuilder; +import android.hardware.camera2.utils.ArrayUtils; import android.net.Uri; import android.os.Binder; +import android.os.Build; import android.os.Bundle; import android.os.DropBoxManager; -import android.os.FileObserver; +import android.os.Environment; import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; -import android.provider.Settings.Secure; import android.text.TextUtils; -import android.util.Log; -import android.util.LruCache; +import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; - +import com.android.internal.annotations.GuardedBy; +import com.android.internal.content.PackageMonitor; +import com.android.internal.os.BackgroundThread; +import java.io.File; +import java.io.FileDescriptor; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; + +import com.android.providers.settings.SettingsState.Setting; + +/** + * <p> + * This class is a content provider that publishes the system settings. + * It can be accessed via the content provider APIs or via custom call + * commands. The latter is a bit faster and is the preferred way to access + * the platform settings. + * </p> + * <p> + * There are three settings types, global (with signature level protection + * and shared across users), secure (with signature permission level + * protection and per user), and system (with dangerous permission level + * protection and per user). Global settings are stored under the device owner. + * Each of these settings is represented by a {@link + * com.android.providers.settings.SettingsState} object mapped to an integer + * key derived from the setting type in the most significant bits and user + * id in the least significant bits. Settings are synchronously loaded on + * instantiation of a SettingsState and asynchronously persisted on mutation. + * Settings are stored in the user specific system directory. + * </p> + * <p> + * Apps targeting APIs Lollipop MR1 and lower can add custom settings entries + * and get a warning. Targeting higher API version prohibits this as the + * system settings are not a place for apps to save their state. When a package + * is removed the settings it added are deleted. Apps cannot delete system + * settings added by the platform. System settings values are validated to + * ensure the clients do not put bad values. Global and secure settings are + * changed only by trusted parties, therefore no validation is performed. Also + * there is a limit on the amount of app specific settings that can be added + * to prevent unlimited growth of the system process memory footprint. + * </p> + */ +@SuppressWarnings("deprecation") public class SettingsProvider extends ContentProvider { - private static final String TAG = "SettingsProvider"; - private static final boolean LOCAL_LOGV = false; + private static final boolean DEBUG = false; + + private static final boolean DROP_DATABASE_ON_MIGRATION = !Build.IS_DEBUGGABLE; - private static final boolean USER_CHECK_THROWS = true; + private static final String LOG_TAG = "SettingsProvider"; private static final String TABLE_SYSTEM = "system"; private static final String TABLE_SECURE = "secure"; private static final String TABLE_GLOBAL = "global"; + + // Old tables no longer exist. private static final String TABLE_FAVORITES = "favorites"; private static final String TABLE_OLD_FAVORITES = "old_favorites"; + private static final String TABLE_BLUETOOTH_DEVICES = "bluetooth_devices"; + private static final String TABLE_BOOKMARKS = "bookmarks"; + private static final String TABLE_ANDROID_METADATA = "android_metadata"; - private static final String[] COLUMN_VALUE = new String[] { "value" }; + // The set of removed legacy tables. + private static final Set<String> REMOVED_LEGACY_TABLES = new ArraySet<>(); + static { + REMOVED_LEGACY_TABLES.add(TABLE_FAVORITES); + REMOVED_LEGACY_TABLES.add(TABLE_OLD_FAVORITES); + REMOVED_LEGACY_TABLES.add(TABLE_BLUETOOTH_DEVICES); + REMOVED_LEGACY_TABLES.add(TABLE_BOOKMARKS); + REMOVED_LEGACY_TABLES.add(TABLE_ANDROID_METADATA); + } - // Caches for each user's settings, access-ordered for acting as LRU. - // Guarded by themselves. - private static final int MAX_CACHE_ENTRIES = 200; - private static final SparseArray<SettingsCache> sSystemCaches - = new SparseArray<SettingsCache>(); - private static final SparseArray<SettingsCache> sSecureCaches - = new SparseArray<SettingsCache>(); - private static final SettingsCache sGlobalCache = new SettingsCache(TABLE_GLOBAL); + private static final int MUTATION_OPERATION_INSERT = 1; + private static final int MUTATION_OPERATION_DELETE = 2; + private static final int MUTATION_OPERATION_UPDATE = 3; - // The count of how many known (handled by SettingsProvider) - // database mutations are currently being handled for this user. - // Used by file observers to not reload the database when it's ourselves - // modifying it. - private static final SparseArray<AtomicInteger> sKnownMutationsInFlight - = new SparseArray<AtomicInteger>(); + private static final String[] ALL_COLUMNS = new String[] { + Settings.NameValueTable._ID, + Settings.NameValueTable.NAME, + Settings.NameValueTable.VALUE + }; - // Each defined user has their own settings - protected final SparseArray<DatabaseHelper> mOpenHelpers = new SparseArray<DatabaseHelper>(); + private static final Bundle NULL_SETTING = Bundle.forPair(Settings.NameValueTable.VALUE, null); - // Keep the list of managed profiles synced here - private List<UserInfo> mManagedProfiles = null; + // Per user settings that cannot be modified if associated user restrictions are enabled. + private static final Map<String, String> sSettingToUserRestrictionMap = new ArrayMap<>(); + static { + sSettingToUserRestrictionMap.put(Settings.Secure.LOCATION_MODE, + UserManager.DISALLOW_SHARE_LOCATION); + sSettingToUserRestrictionMap.put(Settings.Secure.LOCATION_PROVIDERS_ALLOWED, + UserManager.DISALLOW_SHARE_LOCATION); + sSettingToUserRestrictionMap.put(Settings.Secure.INSTALL_NON_MARKET_APPS, + UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES); + sSettingToUserRestrictionMap.put(Settings.Global.ADB_ENABLED, + UserManager.DISALLOW_DEBUGGING_FEATURES); + sSettingToUserRestrictionMap.put(Settings.Global.PACKAGE_VERIFIER_ENABLE, + UserManager.ENSURE_VERIFY_APPS); + sSettingToUserRestrictionMap.put(Settings.Global.PREFERRED_NETWORK_MODE, + UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS); + } - // Over this size we don't reject loading or saving settings but - // we do consider them broken/malicious and don't keep them in - // memory at least: - private static final int MAX_CACHE_ENTRY_SIZE = 500; + // Per user secure settings that moved to the for all users global settings. + static final Set<String> sSecureMovedToGlobalSettings = new ArraySet<>(); + static { + Settings.Secure.getMovedToGlobalSettings(sSecureMovedToGlobalSettings); + } - private static final Bundle NULL_SETTING = Bundle.forPair("value", null); + // Per user system settings that moved to the for all users global settings. + static final Set<String> sSystemMovedToGlobalSettings = new ArraySet<>(); + static { + Settings.System.getMovedToGlobalSettings(sSystemMovedToGlobalSettings); + } - // Used as a sentinel value in an instance equality test when we - // want to cache the existence of a key, but not store its value. - private static final Bundle TOO_LARGE_TO_CACHE_MARKER = Bundle.forPair("_dummy", null); + // Per user system settings that moved to the per user secure settings. + static final Set<String> sSystemMovedToSecureSettings = new ArraySet<>(); + static { + Settings.System.getMovedToSecureSettings(sSystemMovedToSecureSettings); + } - private UserManager mUserManager; - private BackupManager mBackupManager; + // Per all users global settings that moved to the per user secure settings. + static final Set<String> sGlobalMovedToSecureSettings = new ArraySet<>(); + static { + Settings.Global.getMovedToSecureSettings(sGlobalMovedToSecureSettings); + } - /** - * Settings which need to be treated as global/shared in multi-user environments. - */ - static final HashSet<String> sSecureGlobalKeys; - static final HashSet<String> sSystemGlobalKeys; + // Per user secure settings that are cloned for the managed profiles of the user. + private static final Set<String> sSecureCloneToManagedSettings = new ArraySet<>(); + static { + Settings.Secure.getCloneToManagedProfileSettings(sSecureCloneToManagedSettings); + } - // Settings that cannot be modified if associated user restrictions are enabled. - static final Map<String, String> sRestrictedKeys; + // Per user system settings that are cloned for the managed profiles of the user. + private static final Set<String> sSystemCloneToManagedSettings = new ArraySet<>(); + static { + Settings.System.getCloneToManagedProfileSettings(sSystemCloneToManagedSettings); + } - private static final String DROPBOX_TAG_USERLOG = "restricted_profile_ssaid"; + private final Object mLock = new Object(); - static final HashSet<String> sSecureCloneToManagedKeys; - static final HashSet<String> sSystemCloneToManagedKeys; + @GuardedBy("mLock") + private SettingsRegistry mSettingsRegistry; - static { - // Keys (name column) from the 'secure' table that are now in the owner user's 'global' - // table, shared across all users - // These must match Settings.Secure.MOVED_TO_GLOBAL - sSecureGlobalKeys = new HashSet<String>(); - Settings.Secure.getMovedKeys(sSecureGlobalKeys); - - // Keys from the 'system' table now moved to 'global' - // These must match Settings.System.MOVED_TO_GLOBAL - sSystemGlobalKeys = new HashSet<String>(); - Settings.System.getNonLegacyMovedKeys(sSystemGlobalKeys); - - sRestrictedKeys = new HashMap<String, String>(); - sRestrictedKeys.put(Settings.Secure.LOCATION_MODE, UserManager.DISALLOW_SHARE_LOCATION); - sRestrictedKeys.put(Settings.Secure.LOCATION_PROVIDERS_ALLOWED, - UserManager.DISALLOW_SHARE_LOCATION); - sRestrictedKeys.put(Settings.Secure.INSTALL_NON_MARKET_APPS, - UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES); - sRestrictedKeys.put(Settings.Global.ADB_ENABLED, UserManager.DISALLOW_DEBUGGING_FEATURES); - sRestrictedKeys.put(Settings.Global.PACKAGE_VERIFIER_ENABLE, - UserManager.ENSURE_VERIFY_APPS); - sRestrictedKeys.put(Settings.Global.PREFERRED_NETWORK_MODE, - UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS); + @GuardedBy("mLock") + private UserManager mUserManager; + + @GuardedBy("mLock") + private AppOpsManager mAppOpsManager; + + @GuardedBy("mLock") + private PackageManager mPackageManager; - sSecureCloneToManagedKeys = new HashSet<String>(); - for (int i = 0; i < Settings.Secure.CLONE_TO_MANAGED_PROFILE.length; i++) { - sSecureCloneToManagedKeys.add(Settings.Secure.CLONE_TO_MANAGED_PROFILE[i]); + @Override + public boolean onCreate() { + synchronized (mLock) { + mUserManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE); + mAppOpsManager = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE); + mPackageManager = getContext().getPackageManager(); + mSettingsRegistry = new SettingsRegistry(); } - sSystemCloneToManagedKeys = new HashSet<String>(); - for (int i = 0; i < Settings.System.CLONE_TO_MANAGED_PROFILE.length; i++) { - sSystemCloneToManagedKeys.add(Settings.System.CLONE_TO_MANAGED_PROFILE[i]); + registerBroadcastReceivers(); + return true; + } + + @Override + public Bundle call(String method, String name, Bundle args) { + synchronized (mLock) { + final int requestingUserId = getRequestingUserId(args); + switch (method) { + case Settings.CALL_METHOD_GET_GLOBAL: { + Setting setting = getGlobalSettingLocked(name); + return packageValueForCallResult(setting); + } + + case Settings.CALL_METHOD_GET_SECURE: { + Setting setting = getSecureSettingLocked(name, requestingUserId); + return packageValueForCallResult(setting); + } + + case Settings.CALL_METHOD_GET_SYSTEM: { + Setting setting = getSystemSettingLocked(name, requestingUserId); + return packageValueForCallResult(setting); + } + + case Settings.CALL_METHOD_PUT_GLOBAL: { + String value = getSettingValue(args); + insertGlobalSettingLocked(name, value, requestingUserId); + } break; + + case Settings.CALL_METHOD_PUT_SECURE: { + String value = getSettingValue(args); + insertSecureSettingLocked(name, value, requestingUserId); + } break; + + case Settings.CALL_METHOD_PUT_SYSTEM: { + String value = getSettingValue(args); + insertSystemSettingLocked(name, value, requestingUserId); + } break; + + default: { + Slog.w(LOG_TAG, "call() with invalid method: " + method); + } break; + } } + return null; } - private boolean settingMovedToGlobal(final String name) { - return sSecureGlobalKeys.contains(name) || sSystemGlobalKeys.contains(name); + @Override + public String getType(Uri uri) { + Arguments args = new Arguments(uri, null, null, true); + if (TextUtils.isEmpty(args.name)) { + return "vnd.android.cursor.dir/" + args.table; + } else { + return "vnd.android.cursor.item/" + args.table; + } } - /** - * Decode a content URL into the table, projection, and arguments - * used to access the corresponding database rows. - */ - private static class SqlArguments { - public String table; - public final String where; - public final String[] args; - - /** Operate on existing rows. */ - SqlArguments(Uri url, String where, String[] args) { - if (url.getPathSegments().size() == 1) { - // of the form content://settings/secure, arbitrary where clause - this.table = url.getPathSegments().get(0); - if (!DatabaseHelper.isValidTable(this.table)) { - throw new IllegalArgumentException("Bad root path: " + this.table); + @Override + public Cursor query(Uri uri, String[] projection, String where, String[] whereArgs, + String order) { + if (DEBUG) { + Slog.v(LOG_TAG, "query() for user: " + UserHandle.getCallingUserId()); + } + + Arguments args = new Arguments(uri, where, whereArgs, true); + String[] normalizedProjection = normalizeProjection(projection); + + // If a legacy table that is gone, done. + if (REMOVED_LEGACY_TABLES.contains(args.table)) { + return new MatrixCursor(normalizedProjection, 0); + } + + synchronized (mLock) { + switch (args.table) { + case TABLE_GLOBAL: { + if (args.name != null) { + Setting setting = getGlobalSettingLocked(args.name); + return packageSettingForQuery(setting, normalizedProjection); + } else { + return getAllGlobalSettingsLocked(projection); + } } - this.where = where; - this.args = args; - } else if (url.getPathSegments().size() != 2) { - throw new IllegalArgumentException("Invalid URI: " + url); - } else if (!TextUtils.isEmpty(where)) { - throw new UnsupportedOperationException("WHERE clause not supported: " + url); - } else { - // of the form content://settings/secure/element_name, no where clause - this.table = url.getPathSegments().get(0); - if (!DatabaseHelper.isValidTable(this.table)) { - throw new IllegalArgumentException("Bad root path: " + this.table); + + case TABLE_SECURE: { + final int userId = UserHandle.getCallingUserId(); + if (args.name != null) { + Setting setting = getSecureSettingLocked(args.name, userId); + return packageSettingForQuery(setting, normalizedProjection); + } else { + return getAllSecureSettingsLocked(userId, projection); + } } - if (TABLE_SYSTEM.equals(this.table) || TABLE_SECURE.equals(this.table) || - TABLE_GLOBAL.equals(this.table)) { - this.where = Settings.NameValueTable.NAME + "=?"; - final String name = url.getPathSegments().get(1); - this.args = new String[] { name }; - // Rewrite the table for known-migrated names - if (TABLE_SYSTEM.equals(this.table) || TABLE_SECURE.equals(this.table)) { - if (sSecureGlobalKeys.contains(name) || sSystemGlobalKeys.contains(name)) { - this.table = TABLE_GLOBAL; - } + + case TABLE_SYSTEM: { + final int userId = UserHandle.getCallingUserId(); + if (args.name != null) { + Setting setting = getSystemSettingLocked(args.name, userId); + return packageSettingForQuery(setting, normalizedProjection); + } else { + return getAllSystemSettingsLocked(userId, projection); } - } else { - // of the form content://bookmarks/19 - this.where = "_id=" + ContentUris.parseId(url); - this.args = null; + } + + default: { + throw new IllegalArgumentException("Invalid Uri path:" + uri); } } } + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + if (DEBUG) { + Slog.v(LOG_TAG, "insert() for user: " + UserHandle.getCallingUserId()); + } + + String table = getValidTableOrThrow(uri); + + // If a legacy table that is gone, done. + if (REMOVED_LEGACY_TABLES.contains(table)) { + return null; + } + + String name = values.getAsString(Settings.Secure.NAME); + if (TextUtils.isEmpty(name)) { + return null; + } + + String value = values.getAsString(Settings.Secure.VALUE); + + synchronized (mLock) { + switch (table) { + case TABLE_GLOBAL: { + if (insertGlobalSettingLocked(name, value, UserHandle.getCallingUserId())) { + return Uri.withAppendedPath(Settings.Global.CONTENT_URI, name); + } + } break; - /** Insert new rows (no where clause allowed). */ - SqlArguments(Uri url) { - if (url.getPathSegments().size() == 1) { - this.table = url.getPathSegments().get(0); - if (!DatabaseHelper.isValidTable(this.table)) { - throw new IllegalArgumentException("Bad root path: " + this.table); + case TABLE_SECURE: { + if (insertSecureSettingLocked(name, value, UserHandle.getCallingUserId())) { + return Uri.withAppendedPath(Settings.Secure.CONTENT_URI, name); + } + } break; + + case TABLE_SYSTEM: { + if (insertSystemSettingLocked(name, value, UserHandle.getCallingUserId())) { + return Uri.withAppendedPath(Settings.System.CONTENT_URI, name); + } + } break; + + default: { + throw new IllegalArgumentException("Bad Uri path:" + uri); } - this.where = null; - this.args = null; - } else { - throw new IllegalArgumentException("Invalid URI: " + url); } } + + return null; } - /** - * Get the content URI of a row added to a table. - * @param tableUri of the entire table - * @param values found in the row - * @param rowId of the row - * @return the content URI for this particular row - */ - private Uri getUriFor(Uri tableUri, ContentValues values, long rowId) { - if (tableUri.getPathSegments().size() != 1) { - throw new IllegalArgumentException("Invalid URI: " + tableUri); - } - String table = tableUri.getPathSegments().get(0); - if (TABLE_SYSTEM.equals(table) || - TABLE_SECURE.equals(table) || - TABLE_GLOBAL.equals(table)) { - String name = values.getAsString(Settings.NameValueTable.NAME); - return Uri.withAppendedPath(tableUri, name); - } else { - return ContentUris.withAppendedId(tableUri, rowId); + @Override + public int bulkInsert(Uri uri, ContentValues[] allValues) { + if (DEBUG) { + Slog.v(LOG_TAG, "bulkInsert() for user: " + UserHandle.getCallingUserId()); } - } - /** - * Send a notification when a particular content URI changes. - * Modify the system property used to communicate the version of - * this table, for tables which have such a property. (The Settings - * contract class uses these to provide client-side caches.) - * @param uri to send notifications for - */ - private void sendNotify(Uri uri, int userHandle) { - // Update the system property *first*, so if someone is listening for - // a notification and then using the contract class to get their data, - // the system property will be updated and they'll get the new data. - - boolean backedUpDataChanged = false; - String property = null, table = uri.getPathSegments().get(0); - final boolean isGlobal = table.equals(TABLE_GLOBAL); - if (table.equals(TABLE_SYSTEM)) { - property = Settings.System.SYS_PROP_SETTING_VERSION; - backedUpDataChanged = true; - } else if (table.equals(TABLE_SECURE)) { - property = Settings.Secure.SYS_PROP_SETTING_VERSION; - backedUpDataChanged = true; - } else if (isGlobal) { - property = Settings.Global.SYS_PROP_SETTING_VERSION; // this one is global - backedUpDataChanged = true; - } - - if (property != null) { - long version = SystemProperties.getLong(property, 0) + 1; - if (LOCAL_LOGV) Log.v(TAG, "property: " + property + "=" + version); - SystemProperties.set(property, Long.toString(version)); - } - - // Inform the backup manager about a data change - if (backedUpDataChanged) { - mBackupManager.dataChanged(); - } - // Now send the notification through the content framework. - - String notify = uri.getQueryParameter("notify"); - if (notify == null || "true".equals(notify)) { - final int notifyTarget = isGlobal ? UserHandle.USER_ALL : userHandle; - final long oldId = Binder.clearCallingIdentity(); - try { - getContext().getContentResolver().notifyChange(uri, null, true, notifyTarget); - } finally { - Binder.restoreCallingIdentity(oldId); + int insertionCount = 0; + final int valuesCount = allValues.length; + for (int i = 0; i < valuesCount; i++) { + ContentValues values = allValues[i]; + if (insert(uri, values) != null) { + insertionCount++; } - if (LOCAL_LOGV) Log.v(TAG, "notifying for " + notifyTarget + ": " + uri); - } else { - if (LOCAL_LOGV) Log.v(TAG, "notification suppressed: " + uri); } + + return insertionCount; } - /** - * Make sure the caller has permission to write this data. - * @param args supplied by the caller - * @throws SecurityException if the caller is forbidden to write. - */ - private void checkWritePermissions(SqlArguments args) { - if ((TABLE_SECURE.equals(args.table) || TABLE_GLOBAL.equals(args.table)) && - getContext().checkCallingOrSelfPermission( - android.Manifest.permission.WRITE_SECURE_SETTINGS) != - PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - String.format("Permission denial: writing to secure settings requires %1$s", - android.Manifest.permission.WRITE_SECURE_SETTINGS)); + @Override + public int delete(Uri uri, String where, String[] whereArgs) { + if (DEBUG) { + Slog.v(LOG_TAG, "delete() for user: " + UserHandle.getCallingUserId()); } - } - private void checkUserRestrictions(String setting, int userId) { - String userRestriction = sRestrictedKeys.get(setting); - if (!TextUtils.isEmpty(userRestriction) - && mUserManager.hasUserRestriction(userRestriction, new UserHandle(userId))) { - throw new SecurityException( - "Permission denial: user is restricted from changing this setting."); + Arguments args = new Arguments(uri, where, whereArgs, false); + + // If a legacy table that is gone, done. + if (REMOVED_LEGACY_TABLES.contains(args.table)) { + return 0; } - } - // FileObserver for external modifications to the database file. - // Note that this is for platform developers only with - // userdebug/eng builds who should be able to tinker with the - // sqlite database out from under the SettingsProvider, which is - // normally the exclusive owner of the database. But we keep this - // enabled all the time to minimize development-vs-user - // differences in testing. - private static SparseArray<SettingsFileObserver> sObserverInstances - = new SparseArray<SettingsFileObserver>(); - private class SettingsFileObserver extends FileObserver { - private final AtomicBoolean mIsDirty = new AtomicBoolean(false); - private final int mUserHandle; - private final String mPath; - - public SettingsFileObserver(int userHandle, String path) { - super(path, FileObserver.CLOSE_WRITE | - FileObserver.CREATE | FileObserver.DELETE | - FileObserver.MOVED_TO | FileObserver.MODIFY); - mUserHandle = userHandle; - mPath = path; - } - - public void onEvent(int event, String path) { - final AtomicInteger mutationCount; - synchronized (SettingsProvider.this) { - mutationCount = sKnownMutationsInFlight.get(mUserHandle); - } - if (mutationCount != null && mutationCount.get() > 0) { - // our own modification. - return; + if (TextUtils.isEmpty(args.name)) { + return 0; + } + + synchronized (mLock) { + switch (args.table) { + case TABLE_GLOBAL: { + final int userId = UserHandle.getCallingUserId(); + return deleteGlobalSettingLocked(args.name, userId) ? 1 : 0; + } + + case TABLE_SECURE: { + final int userId = UserHandle.getCallingUserId(); + return deleteSecureSettingLocked(args.name, userId) ? 1 : 0; + } + + case TABLE_SYSTEM: { + final int userId = UserHandle.getCallingUserId(); + return deleteSystemSettingLocked(args.name, userId) ? 1 : 0; + } + + default: { + throw new IllegalArgumentException("Bad Uri path:" + uri); + } } - Log.d(TAG, "User " + mUserHandle + " external modification to " + mPath - + "; event=" + event); - if (!mIsDirty.compareAndSet(false, true)) { - // already handled. (we get a few update events - // during an sqlite write) - return; + } + } + + @Override + public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { + if (DEBUG) { + Slog.v(LOG_TAG, "update() for user: " + UserHandle.getCallingUserId()); + } + + Arguments args = new Arguments(uri, where, whereArgs, false); + + // If a legacy table that is gone, done. + if (REMOVED_LEGACY_TABLES.contains(args.table)) { + return 0; + } + + String value = values.getAsString(Settings.Secure.VALUE); + if (TextUtils.isEmpty(value)) { + return 0; + } + + synchronized (mLock) { + switch (args.table) { + case TABLE_GLOBAL: { + final int userId = UserHandle.getCallingUserId(); + return updateGlobalSettingLocked(args.name, value, userId) ? 1 : 0; + } + + case TABLE_SECURE: { + final int userId = UserHandle.getCallingUserId(); + return updateSecureSettingLocked(args.name, value, userId) ? 1 : 0; + } + + case TABLE_SYSTEM: { + final int userId = UserHandle.getCallingUserId(); + return updateSystemSettingLocked(args.name, value, userId) ? 1 : 0; + } + + default: { + throw new IllegalArgumentException("Invalid Uri path:" + uri); + } } - Log.d(TAG, "User " + mUserHandle + " updating our caches for " + mPath); - fullyPopulateCaches(mUserHandle); - mIsDirty.set(false); } } @Override - public boolean onCreate() { - mBackupManager = new BackupManager(getContext()); - mUserManager = UserManager.get(getContext()); + public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { + throw new FileNotFoundException("Direct file access no longer supported; " + + "ringtone playback is available through android.media.Ringtone"); + } + + @Override + public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + synchronized (mLock) { + final long identity = Binder.clearCallingIdentity(); + try { + List<UserInfo> users = mUserManager.getUsers(true); + final int userCount = users.size(); + for (int i = 0; i < userCount; i++) { + UserInfo user = users.get(i); + dumpForUser(user.id, pw); + } + } finally { + Binder.restoreCallingIdentity(identity); + } + } + } - setAppOps(AppOpsManager.OP_NONE, AppOpsManager.OP_WRITE_SETTINGS); - establishDbTracking(UserHandle.USER_OWNER); + private void dumpForUser(int userId, PrintWriter pw) { + if (userId == UserHandle.USER_OWNER) { + pw.println("GLOBAL SETTINGS (user " + userId + ")"); + Cursor globalCursor = getAllGlobalSettingsLocked(ALL_COLUMNS); + dumpSettings(globalCursor, pw); + pw.println(); + } + + pw.println("SECURE SETTINGS (user " + userId + ")"); + Cursor secureCursor = getAllSecureSettingsLocked(userId, ALL_COLUMNS); + dumpSettings(secureCursor, pw); + pw.println(); + + pw.println("SYSTEM SETTINGS (user " + userId + ")"); + Cursor systemCursor = getAllSystemSettingsLocked(userId, ALL_COLUMNS); + dumpSettings(systemCursor, pw); + pw.println(); + } + + private void dumpSettings(Cursor cursor, PrintWriter pw) { + if (!cursor.moveToFirst()) { + return; + } + + final int idColumnIdx = cursor.getColumnIndex(Settings.NameValueTable._ID); + final int nameColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.NAME); + final int valueColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.VALUE); + + do { + pw.append("_id:").append(cursor.getString(idColumnIdx)); + pw.append(" name:").append(cursor.getString(nameColumnIdx)); + pw.append(" value:").append(cursor.getString(valueColumnIdx)); + pw.println(); + } while (cursor.moveToNext()); + } + private void registerBroadcastReceivers() { IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_REMOVED); - userFilter.addAction(Intent.ACTION_USER_ADDED); + userFilter.addAction(Intent.ACTION_USER_STOPPED); + getContext().registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, + final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_OWNER); - if (intent.getAction().equals(Intent.ACTION_USER_REMOVED)) { - onUserRemoved(userHandle); - } else if (intent.getAction().equals(Intent.ACTION_USER_ADDED)) { - onProfilesChanged(); + + switch (intent.getAction()) { + case Intent.ACTION_USER_REMOVED: { + mSettingsRegistry.removeUserStateLocked(userId, true); + } break; + + case Intent.ACTION_USER_STOPPED: { + mSettingsRegistry.removeUserStateLocked(userId, false); + } break; } } }, userFilter); - onProfilesChanged(); + PackageMonitor monitor = new PackageMonitor() { + @Override + public void onPackageRemoved(String packageName, int uid) { + synchronized (mLock) { + mSettingsRegistry.onPackageRemovedLocked(packageName, + UserHandle.getUserId(uid)); + } + } + }; - return true; + // package changes + monitor.register(getContext(), BackgroundThread.getHandler().getLooper(), + UserHandle.ALL, true); } - void onUserRemoved(int userHandle) { - synchronized (this) { - // the db file itself will be deleted automatically, but we need to tear down - // our caches and other internal bookkeeping. - FileObserver observer = sObserverInstances.get(userHandle); - if (observer != null) { - observer.stopWatching(); - sObserverInstances.delete(userHandle); - } + private Cursor getAllGlobalSettingsLocked(String[] projection) { + if (DEBUG) { + Slog.v(LOG_TAG, "getAllGlobalSettingsLocked()"); + } + + // Get the settings. + SettingsState settingsState = mSettingsRegistry.getSettingsLocked( + SettingsRegistry.SETTINGS_TYPE_GLOBAL, UserHandle.USER_OWNER); - mOpenHelpers.delete(userHandle); - sSystemCaches.delete(userHandle); - sSecureCaches.delete(userHandle); - sKnownMutationsInFlight.delete(userHandle); - onProfilesChanged(); + List<String> names = settingsState.getSettingNamesLocked(); + + final int nameCount = names.size(); + + String[] normalizedProjection = normalizeProjection(projection); + MatrixCursor result = new MatrixCursor(normalizedProjection, nameCount); + + // Anyone can get the global settings, so no security checks. + for (int i = 0; i < nameCount; i++) { + String name = names.get(i); + Setting setting = settingsState.getSettingLocked(name); + appendSettingToCursor(result, setting); } + + return result; } - /** - * Updates the list of managed profiles. It assumes that only the primary user - * can have managed profiles. Modify this code if that changes in the future. - */ - void onProfilesChanged() { - synchronized (this) { - mManagedProfiles = mUserManager.getProfiles(UserHandle.USER_OWNER); - if (mManagedProfiles != null) { - // Remove the primary user from the list - for (int i = mManagedProfiles.size() - 1; i >= 0; i--) { - if (mManagedProfiles.get(i).id == UserHandle.USER_OWNER) { - mManagedProfiles.remove(i); - } - } - // If there are no managed profiles, reset the variable - if (mManagedProfiles.size() == 0) { - mManagedProfiles = null; - } - } - if (LOCAL_LOGV) { - Slog.d(TAG, "Managed Profiles = " + mManagedProfiles); - } + private Setting getGlobalSettingLocked(String name) { + if (DEBUG) { + Slog.v(LOG_TAG, "getGlobalSetting(" + name + ")"); + } + + // Get the value. + return mSettingsRegistry.getSettingLocked(SettingsRegistry.SETTINGS_TYPE_GLOBAL, + UserHandle.USER_OWNER, name); + } + + private boolean updateGlobalSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "updateGlobalSettingLocked(" + name + ", " + value + ")"); } + return mutateGlobalSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_UPDATE); } - private void establishDbTracking(int userHandle) { - if (LOCAL_LOGV) { - Slog.i(TAG, "Installing settings db helper and caches for user " + userHandle); + private boolean insertGlobalSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "insertGlobalSettingLocked(" + name + ", " + value + ")"); } + return mutateGlobalSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_INSERT); + } - DatabaseHelper dbhelper; + private boolean deleteGlobalSettingLocked(String name, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "deleteGlobalSettingLocked(" + name + ")"); + } + return mutateGlobalSettingLocked(name, null, requestingUserId, MUTATION_OPERATION_DELETE); + } - synchronized (this) { - dbhelper = mOpenHelpers.get(userHandle); - if (dbhelper == null) { - dbhelper = new DatabaseHelper(getContext(), userHandle); - mOpenHelpers.append(userHandle, dbhelper); + private boolean mutateGlobalSettingLocked(String name, String value, int requestingUserId, + int operation) { + // Make sure the caller can change the settings - treated as secure. + enforceWritePermission(Manifest.permission.WRITE_SECURE_SETTINGS); - sSystemCaches.append(userHandle, new SettingsCache(TABLE_SYSTEM)); - sSecureCaches.append(userHandle, new SettingsCache(TABLE_SECURE)); - sKnownMutationsInFlight.append(userHandle, new AtomicInteger(0)); - } + // Verify whether this operation is allowed for the calling package. + if (!isAppOpWriteSettingsAllowedForCallingPackage()) { + return false; } - // Initialization of the db *outside* the locks. It's possible that racing - // threads might wind up here, the second having read the cache entries - // written by the first, but that's benign: the SQLite helper implementation - // manages concurrency itself, and it's important that we not run the db - // initialization with any of our own locks held, so we're fine. - SQLiteDatabase db = dbhelper.getWritableDatabase(); - - // Watch for external modifications to the database files, - // keeping our caches in sync. We synchronize the observer set - // separately, and of course it has to run after the db file - // itself was set up by the DatabaseHelper. - synchronized (sObserverInstances) { - if (sObserverInstances.get(userHandle) == null) { - SettingsFileObserver observer = new SettingsFileObserver(userHandle, db.getPath()); - sObserverInstances.append(userHandle, observer); - observer.startWatching(); - } + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId); + + // If this is a setting that is currently restricted for this user, done. + if (isGlobalOrSecureSettingRestrictedForUser(name, callingUserId)) { + return false; } - ensureAndroidIdIsSet(userHandle); + // Perform the mutation. + switch (operation) { + case MUTATION_OPERATION_INSERT: { + return mSettingsRegistry.insertSettingLocked(SettingsRegistry.SETTINGS_TYPE_GLOBAL, + UserHandle.USER_OWNER, name, value, getCallingPackage()); + } - startAsyncCachePopulation(userHandle); - } + case MUTATION_OPERATION_DELETE: { + return mSettingsRegistry.deleteSettingLocked( + SettingsRegistry.SETTINGS_TYPE_GLOBAL, + UserHandle.USER_OWNER, name); + } - class CachePrefetchThread extends Thread { - private int mUserHandle; + case MUTATION_OPERATION_UPDATE: { + return mSettingsRegistry.updateSettingLocked(SettingsRegistry.SETTINGS_TYPE_GLOBAL, + UserHandle.USER_OWNER, name, value, getCallingPackage()); + } + } + + return false; + } - CachePrefetchThread(int userHandle) { - super("populate-settings-caches"); - mUserHandle = userHandle; + private Cursor getAllSecureSettingsLocked(int userId, String[] projection) { + if (DEBUG) { + Slog.v(LOG_TAG, "getAllSecureSettings(" + userId + ")"); } - @Override - public void run() { - fullyPopulateCaches(mUserHandle); + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId); + + List<String> names = mSettingsRegistry.getSettingsNamesLocked( + SettingsRegistry.SETTINGS_TYPE_SECURE, callingUserId); + + final int nameCount = names.size(); + + String[] normalizedProjection = normalizeProjection(projection); + MatrixCursor result = new MatrixCursor(normalizedProjection, nameCount); + + for (int i = 0; i < nameCount; i++) { + String name = names.get(i); + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name); + + // Special case for location (sigh). + if (isLocationProvidersAllowedRestricted(name, callingUserId, owningUserId)) { + return null; + } + + Setting setting = mSettingsRegistry.getSettingLocked( + SettingsRegistry.SETTINGS_TYPE_SECURE, owningUserId, name); + appendSettingToCursor(result, setting); } - } - private void startAsyncCachePopulation(int userHandle) { - new CachePrefetchThread(userHandle).start(); + return result; } - private void fullyPopulateCaches(final int userHandle) { - DatabaseHelper dbHelper; - synchronized (this) { - dbHelper = mOpenHelpers.get(userHandle); + private Setting getSecureSettingLocked(String name, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "getSecureSetting(" + name + ", " + requestingUserId + ")"); } - if (dbHelper == null) { - // User is gone. - return; - } - // Only populate the globals cache once, for the owning user - if (userHandle == UserHandle.USER_OWNER) { - fullyPopulateCache(dbHelper, TABLE_GLOBAL, sGlobalCache); + + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId); + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name); + + // Special case for location (sigh). + if (isLocationProvidersAllowedRestricted(name, callingUserId, owningUserId)) { + return null; } - fullyPopulateCache(dbHelper, TABLE_SECURE, sSecureCaches.get(userHandle)); - fullyPopulateCache(dbHelper, TABLE_SYSTEM, sSystemCaches.get(userHandle)); + + // Get the value. + return mSettingsRegistry.getSettingLocked(SettingsRegistry.SETTINGS_TYPE_SECURE, + owningUserId, name); } - // Slurp all values (if sane in number & size) into cache. - private void fullyPopulateCache(DatabaseHelper dbHelper, String table, SettingsCache cache) { - SQLiteDatabase db = dbHelper.getReadableDatabase(); - Cursor c = db.query( - table, - new String[] { Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE }, - null, null, null, null, null, - "" + (MAX_CACHE_ENTRIES + 1) /* limit */); - try { - synchronized (cache) { - cache.evictAll(); - cache.setFullyMatchesDisk(true); // optimistic - int rows = 0; - while (c.moveToNext()) { - rows++; - String name = c.getString(0); - String value = c.getString(1); - cache.populate(name, value); - } - if (rows > MAX_CACHE_ENTRIES) { - // Somewhat redundant, as removeEldestEntry() will - // have already done this, but to be explicit: - cache.setFullyMatchesDisk(false); - Log.d(TAG, "row count exceeds max cache entries for table " + table); - } - if (LOCAL_LOGV) Log.d(TAG, "cache for settings table '" + table - + "' rows=" + rows + "; fullycached=" + cache.fullyMatchesDisk()); - } - } finally { - c.close(); + private boolean insertSecureSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "insertSecureSettingLocked(" + name + ", " + value + ", " + + requestingUserId + ")"); } - } - private boolean ensureAndroidIdIsSet(int userHandle) { - final Cursor c = queryForUser(Settings.Secure.CONTENT_URI, - new String[] { Settings.NameValueTable.VALUE }, - Settings.NameValueTable.NAME + "=?", - new String[] { Settings.Secure.ANDROID_ID }, null, - userHandle); - try { - final String value = c.moveToNext() ? c.getString(0) : null; - if (value == null) { - // sanity-check the user before touching the db - final UserInfo user = mUserManager.getUserInfo(userHandle); - if (user == null) { - // can happen due to races when deleting users; treat as benign - return false; - } + return mutateSecureSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_INSERT); + } - final SecureRandom random = new SecureRandom(); - final String newAndroidIdValue = Long.toHexString(random.nextLong()); - final ContentValues values = new ContentValues(); - values.put(Settings.NameValueTable.NAME, Settings.Secure.ANDROID_ID); - values.put(Settings.NameValueTable.VALUE, newAndroidIdValue); - final Uri uri = insertForUser(Settings.Secure.CONTENT_URI, values, userHandle); - if (uri == null) { - Slog.e(TAG, "Unable to generate new ANDROID_ID for user " + userHandle); - return false; - } - Slog.d(TAG, "Generated and saved new ANDROID_ID [" + newAndroidIdValue - + "] for user " + userHandle); - // Write a dropbox entry if it's a restricted profile - if (user.isRestricted()) { - DropBoxManager dbm = (DropBoxManager) - getContext().getSystemService(Context.DROPBOX_SERVICE); - if (dbm != null && dbm.isTagEnabled(DROPBOX_TAG_USERLOG)) { - dbm.addText(DROPBOX_TAG_USERLOG, System.currentTimeMillis() - + ",restricted_profile_ssaid," - + newAndroidIdValue + "\n"); - } - } - } - return true; - } finally { - c.close(); + private boolean deleteSecureSettingLocked(String name, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "deleteSecureSettingLocked(" + name + ", " + requestingUserId + ")"); } + + return mutateSecureSettingLocked(name, null, requestingUserId, MUTATION_OPERATION_DELETE); } - // Lazy-initialize the settings caches for non-primary users - private SettingsCache getOrConstructCache(int callingUser, SparseArray<SettingsCache> which) { - getOrEstablishDatabase(callingUser); // ignore return value; we don't need it - return which.get(callingUser); + private boolean updateSecureSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "updateSecureSettingLocked(" + name + ", " + value + ", " + + requestingUserId + ")"); + } + + return mutateSecureSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_UPDATE); } - // Lazy initialize the database helper and caches for this user, if necessary - private DatabaseHelper getOrEstablishDatabase(int callingUser) { - if (callingUser >= Process.SYSTEM_UID) { - if (USER_CHECK_THROWS) { - throw new IllegalArgumentException("Uid rather than user handle: " + callingUser); - } else { - Slog.wtf(TAG, "establish db for uid rather than user: " + callingUser); - } + private boolean mutateSecureSettingLocked(String name, String value, int requestingUserId, + int operation) { + // Make sure the caller can change the settings. + enforceWritePermission(Manifest.permission.WRITE_SECURE_SETTINGS); + + // Verify whether this operation is allowed for the calling package. + if (!isAppOpWriteSettingsAllowedForCallingPackage()) { + return false; } - long oldId = Binder.clearCallingIdentity(); - try { - DatabaseHelper dbHelper; - synchronized (this) { - dbHelper = mOpenHelpers.get(callingUser); + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId); + + // If this is a setting that is currently restricted for this user, done. + if (isGlobalOrSecureSettingRestrictedForUser(name, callingUserId)) { + return false; + } + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSecureSettingLocked(callingUserId, name); + + // Only the owning user can change the setting. + if (owningUserId != callingUserId) { + return false; + } + + // Special cases for location providers (sigh). + if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { + return updateLocationProvidersAllowedLocked(value, owningUserId); + } + + // Mutate the value. + switch(operation) { + case MUTATION_OPERATION_INSERT: { + return mSettingsRegistry.insertSettingLocked(SettingsRegistry.SETTINGS_TYPE_SECURE, + owningUserId, name, value, getCallingPackage()); } - if (null == dbHelper) { - establishDbTracking(callingUser); - synchronized (this) { - dbHelper = mOpenHelpers.get(callingUser); - } + + case MUTATION_OPERATION_DELETE: { + return mSettingsRegistry.deleteSettingLocked( + SettingsRegistry.SETTINGS_TYPE_SECURE, + owningUserId, name); + } + + case MUTATION_OPERATION_UPDATE: { + return mSettingsRegistry.updateSettingLocked(SettingsRegistry.SETTINGS_TYPE_SECURE, + owningUserId, name, value, getCallingPackage()); } - return dbHelper; - } finally { - Binder.restoreCallingIdentity(oldId); } + + return false; } - public SettingsCache cacheForTable(final int callingUser, String tableName) { - if (TABLE_SYSTEM.equals(tableName)) { - return getOrConstructCache(callingUser, sSystemCaches); - } - if (TABLE_SECURE.equals(tableName)) { - return getOrConstructCache(callingUser, sSecureCaches); + private Cursor getAllSystemSettingsLocked(int userId, String[] projection) { + if (DEBUG) { + Slog.v(LOG_TAG, "getAllSecureSystemLocked(" + userId + ")"); } - if (TABLE_GLOBAL.equals(tableName)) { - return sGlobalCache; + + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(userId); + + List<String> names = mSettingsRegistry.getSettingsNamesLocked( + SettingsRegistry.SETTINGS_TYPE_SYSTEM, callingUserId); + + final int nameCount = names.size(); + + String[] normalizedProjection = normalizeProjection(projection); + MatrixCursor result = new MatrixCursor(normalizedProjection, nameCount); + + for (int i = 0; i < nameCount; i++) { + String name = names.get(i); + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name); + + Setting setting = mSettingsRegistry.getSettingLocked( + SettingsRegistry.SETTINGS_TYPE_SYSTEM, owningUserId, name); + appendSettingToCursor(result, setting); } - return null; + + return result; } - /** - * Used for wiping a whole cache on deletes when we're not - * sure what exactly was deleted or changed. - */ - public void invalidateCache(final int callingUser, String tableName) { - SettingsCache cache = cacheForTable(callingUser, tableName); - if (cache == null) { - return; + private Setting getSystemSettingLocked(String name, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "getSystemSetting(" + name + ", " + requestingUserId + ")"); } - synchronized (cache) { - cache.evictAll(); - cache.mCacheFullyMatchesDisk = false; + + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(requestingUserId); + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name); + + // Get the value. + return mSettingsRegistry.getSettingLocked(SettingsRegistry.SETTINGS_TYPE_SYSTEM, + owningUserId, name); + } + + private boolean insertSystemSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "insertSystemSettingLocked(" + name + ", " + value + ", " + + requestingUserId + ")"); } + + return mutateSystemSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_INSERT); } - /** - * Checks if the calling user is a managed profile of the primary user. - * Currently only the primary user (USER_OWNER) can have managed profiles. - * @param callingUser the user trying to read/write settings - * @return true if it is a managed profile of the primary user - */ - private boolean isManagedProfile(int callingUser) { - synchronized (this) { - if (mManagedProfiles == null) return false; - for (int i = mManagedProfiles.size() - 1; i >= 0; i--) { - if (mManagedProfiles.get(i).id == callingUser) { - return true; - } - } - return false; + private boolean deleteSystemSettingLocked(String name, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "deleteSystemSettingLocked(" + name + ", " + requestingUserId + ")"); } + + return mutateSystemSettingLocked(name, null, requestingUserId, MUTATION_OPERATION_DELETE); } - /** - * Fast path that avoids the use of chatty remoted Cursors. - */ - @Override - public Bundle call(String method, String request, Bundle args) { - int callingUser = UserHandle.getCallingUserId(); - if (args != null) { - int reqUser = args.getInt(Settings.CALL_METHOD_USER_KEY, callingUser); - if (reqUser != callingUser) { - callingUser = ActivityManager.handleIncomingUser(Binder.getCallingPid(), - Binder.getCallingUid(), reqUser, false, true, - "get/set setting for user", null); - if (LOCAL_LOGV) Slog.v(TAG, " access setting for user " + callingUser); - } + private boolean updateSystemSettingLocked(String name, String value, int requestingUserId) { + if (DEBUG) { + Slog.v(LOG_TAG, "updateSystemSettingLocked(" + name + ", " + value + ", " + + requestingUserId + ")"); } - // Note: we assume that get/put operations for moved-to-global names have already - // been directed to the new location on the caller side (otherwise we'd fix them - // up here). - DatabaseHelper dbHelper; - SettingsCache cache; + return mutateSystemSettingLocked(name, value, requestingUserId, MUTATION_OPERATION_UPDATE); + } - // Get methods - if (Settings.CALL_METHOD_GET_SYSTEM.equals(method)) { - if (LOCAL_LOGV) Slog.v(TAG, "call(system:" + request + ") for " + callingUser); - // Check if this request should be (re)directed to the primary user's db - if (callingUser != UserHandle.USER_OWNER - && shouldShadowParentProfile(callingUser, sSystemCloneToManagedKeys, request)) { - callingUser = UserHandle.USER_OWNER; - } - dbHelper = getOrEstablishDatabase(callingUser); - cache = sSystemCaches.get(callingUser); - return lookupValue(dbHelper, TABLE_SYSTEM, cache, request); - } - if (Settings.CALL_METHOD_GET_SECURE.equals(method)) { - if (LOCAL_LOGV) Slog.v(TAG, "call(secure:" + request + ") for " + callingUser); - // Check if this is a setting to be copied from the primary user - if (shouldShadowParentProfile(callingUser, sSecureCloneToManagedKeys, request)) { - // If the request if for location providers and there's a restriction, return none - if (Secure.LOCATION_PROVIDERS_ALLOWED.equals(request) - && mUserManager.hasUserRestriction( - UserManager.DISALLOW_SHARE_LOCATION, new UserHandle(callingUser))) { - return sSecureCaches.get(callingUser).putIfAbsent(request, ""); - } - callingUser = UserHandle.USER_OWNER; - } - dbHelper = getOrEstablishDatabase(callingUser); - cache = sSecureCaches.get(callingUser); - return lookupValue(dbHelper, TABLE_SECURE, cache, request); - } - if (Settings.CALL_METHOD_GET_GLOBAL.equals(method)) { - if (LOCAL_LOGV) Slog.v(TAG, "call(global:" + request + ") for " + callingUser); - // fast path: owner db & cache are immutable after onCreate() so we need not - // guard on the attempt to look them up - return lookupValue(getOrEstablishDatabase(UserHandle.USER_OWNER), TABLE_GLOBAL, - sGlobalCache, request); - } - - // Put methods - new value is in the args bundle under the key named by - // the Settings.NameValueTable.VALUE static. - final String newValue = (args == null) - ? null : args.getString(Settings.NameValueTable.VALUE); - - // Framework can't do automatic permission checking for calls, so we need - // to do it here. - if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SETTINGS) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - String.format("Permission denial: writing to settings requires %1$s", - android.Manifest.permission.WRITE_SETTINGS)); + private boolean mutateSystemSettingLocked(String name, String value, int runAsUserId, + int operation) { + // Make sure the caller can change the settings. + enforceWritePermission(Manifest.permission.WRITE_SETTINGS); + + // Verify whether this operation is allowed for the calling package. + if (!isAppOpWriteSettingsAllowedForCallingPackage()) { + return false; } - // Also need to take care of app op. - if (getAppOpsManager().noteOp(AppOpsManager.OP_WRITE_SETTINGS, Binder.getCallingUid(), - getCallingPackage()) != AppOpsManager.MODE_ALLOWED) { - return null; + // Enforce what the calling package can mutate in the system settings. + enforceRestrictedSystemSettingsMutationForCallingPackageLocked(operation, name); + + // Resolve the userId on whose behalf the call is made. + final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(runAsUserId); + + // Determine the owning user as some profile settings are cloned from the parent. + final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name); + + // Only the owning user id can change the setting. + if (owningUserId != callingUserId) { + return false; } - final ContentValues values = new ContentValues(); - values.put(Settings.NameValueTable.NAME, request); - values.put(Settings.NameValueTable.VALUE, newValue); - if (Settings.CALL_METHOD_PUT_SYSTEM.equals(method)) { - if (LOCAL_LOGV) { - Slog.v(TAG, "call_put(system:" + request + "=" + newValue + ") for " - + callingUser); - } - // Extra check for USER_OWNER to optimize for the 99% - if (callingUser != UserHandle.USER_OWNER && shouldShadowParentProfile(callingUser, - sSystemCloneToManagedKeys, request)) { - // Don't write these settings, as they are cloned from the parent profile - return null; - } - insertForUser(Settings.System.CONTENT_URI, values, callingUser); - // Clone the settings to the managed profiles so that notifications can be sent out - if (callingUser == UserHandle.USER_OWNER && mManagedProfiles != null - && sSystemCloneToManagedKeys.contains(request)) { - final long token = Binder.clearCallingIdentity(); - try { - for (int i = mManagedProfiles.size() - 1; i >= 0; i--) { - if (LOCAL_LOGV) { - Slog.v(TAG, "putting to additional user " - + mManagedProfiles.get(i).id); - } - insertForUser(Settings.System.CONTENT_URI, values, - mManagedProfiles.get(i).id); - } - } finally { - Binder.restoreCallingIdentity(token); - } - } - } else if (Settings.CALL_METHOD_PUT_SECURE.equals(method)) { - if (LOCAL_LOGV) { - Slog.v(TAG, "call_put(secure:" + request + "=" + newValue + ") for " - + callingUser); - } - // Extra check for USER_OWNER to optimize for the 99% - if (callingUser != UserHandle.USER_OWNER && shouldShadowParentProfile(callingUser, - sSecureCloneToManagedKeys, request)) { - // Don't write these settings, as they are cloned from the parent profile - return null; + // Mutate the value. + switch (operation) { + case MUTATION_OPERATION_INSERT: { + validateSystemSettingValue(name, value); + return mSettingsRegistry.insertSettingLocked(SettingsRegistry.SETTINGS_TYPE_SYSTEM, + owningUserId, name, value, getCallingPackage()); } - insertForUser(Settings.Secure.CONTENT_URI, values, callingUser); - // Clone the settings to the managed profiles so that notifications can be sent out - if (callingUser == UserHandle.USER_OWNER && mManagedProfiles != null - && sSecureCloneToManagedKeys.contains(request)) { - final long token = Binder.clearCallingIdentity(); - try { - for (int i = mManagedProfiles.size() - 1; i >= 0; i--) { - if (LOCAL_LOGV) { - Slog.v(TAG, "putting to additional user " - + mManagedProfiles.get(i).id); - } - try { - insertForUser(Settings.Secure.CONTENT_URI, values, - mManagedProfiles.get(i).id); - } catch (SecurityException e) { - // Temporary fix, see b/17450158 - Slog.w(TAG, "Cannot clone request '" + request + "' with value '" - + newValue + "' to managed profile (id " - + mManagedProfiles.get(i).id + ")", e); - } - } - } finally { - Binder.restoreCallingIdentity(token); - } + + case MUTATION_OPERATION_DELETE: { + return mSettingsRegistry.deleteSettingLocked( + SettingsRegistry.SETTINGS_TYPE_SYSTEM, + owningUserId, name); } - } else if (Settings.CALL_METHOD_PUT_GLOBAL.equals(method)) { - if (LOCAL_LOGV) { - Slog.v(TAG, "call_put(global:" + request + "=" + newValue + ") for " - + callingUser); + + case MUTATION_OPERATION_UPDATE: { + validateSystemSettingValue(name, value); + return mSettingsRegistry.updateSettingLocked(SettingsRegistry.SETTINGS_TYPE_SYSTEM, + owningUserId, name, value, getCallingPackage()); } - insertForUser(Settings.Global.CONTENT_URI, values, callingUser); - } else { - Slog.w(TAG, "call() with invalid method: " + method); } - return null; + return false; } - /** - * Check if the user is a managed profile and name is one of the settings to be cloned - * from the parent profile. - */ - private boolean shouldShadowParentProfile(int userId, HashSet<String> keys, String name) { - return isManagedProfile(userId) && keys.contains(name); + private void validateSystemSettingValue(String name, String value) { + Settings.System.Validator validator = Settings.System.VALIDATORS.get(name); + if (validator != null && !validator.validate(value)) { + throw new IllegalArgumentException("Invalid value: " + value + + " for setting: " + name); + } } - // Looks up value 'key' in 'table' and returns either a single-pair Bundle, - // possibly with a null value, or null on failure. - private Bundle lookupValue(DatabaseHelper dbHelper, String table, - final SettingsCache cache, String key) { - if (cache == null) { - Slog.e(TAG, "cache is null for user " + UserHandle.getCallingUserId() + " : key=" + key); - return null; + private boolean isLocationProvidersAllowedRestricted(String name, int callingUserId, + int owningUserId) { + // Optimization - location providers are restricted only for managed profiles. + if (callingUserId == owningUserId) { + return false; } - synchronized (cache) { - Bundle value = cache.get(key); - if (value != null) { - if (value != TOO_LARGE_TO_CACHE_MARKER) { - return value; - } - // else we fall through and read the value from disk - } else if (cache.fullyMatchesDisk()) { - // Fast path (very common). Don't even try touch disk - // if we know we've slurped it all in. Trying to - // touch the disk would mean waiting for yaffs2 to - // give us access, which could takes hundreds of - // milliseconds. And we're very likely being called - // from somebody's UI thread... - return NULL_SETTING; - } + if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name) + && mUserManager.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION, + new UserHandle(callingUserId))) { + return true; } + return false; + } - SQLiteDatabase db = dbHelper.getReadableDatabase(); - Cursor cursor = null; - try { - cursor = db.query(table, COLUMN_VALUE, "name=?", new String[]{key}, - null, null, null, null); - if (cursor != null && cursor.getCount() == 1) { - cursor.moveToFirst(); - return cache.putIfAbsent(key, cursor.getString(0)); - } - } catch (SQLiteException e) { - Log.w(TAG, "settings lookup error", e); - return null; - } finally { - if (cursor != null) cursor.close(); + private boolean isGlobalOrSecureSettingRestrictedForUser(String setting, int userId) { + String restriction = sSettingToUserRestrictionMap.get(setting); + if (restriction == null) { + return false; } - cache.putIfAbsent(key, null); - return NULL_SETTING; + return mUserManager.hasUserRestriction(restriction, new UserHandle(userId)); } - @Override - public Cursor query(Uri url, String[] select, String where, String[] whereArgs, String sort) { - return queryForUser(url, select, where, whereArgs, sort, UserHandle.getCallingUserId()); + private int resolveOwningUserIdForSecureSettingLocked(int userId, String setting) { + return resolveOwningUserIdLocked(userId, sSecureCloneToManagedSettings, setting); } - private Cursor queryForUser(Uri url, String[] select, String where, String[] whereArgs, - String sort, int forUser) { - if (LOCAL_LOGV) Slog.v(TAG, "query(" + url + ") for user " + forUser); - SqlArguments args = new SqlArguments(url, where, whereArgs); - DatabaseHelper dbH; - dbH = getOrEstablishDatabase( - TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : forUser); - SQLiteDatabase db = dbH.getReadableDatabase(); - - // The favorites table was moved from this provider to a provider inside Home - // Home still need to query this table to upgrade from pre-cupcake builds - // However, a cupcake+ build with no data does not contain this table which will - // cause an exception in the SQL stack. The following line is a special case to - // let the caller of the query have a chance to recover and avoid the exception - if (TABLE_FAVORITES.equals(args.table)) { - return null; - } else if (TABLE_OLD_FAVORITES.equals(args.table)) { - args.table = TABLE_FAVORITES; - Cursor cursor = db.rawQuery("PRAGMA table_info(favorites);", null); - if (cursor != null) { - boolean exists = cursor.getCount() > 0; - cursor.close(); - if (!exists) return null; - } else { - return null; - } + private int resolveOwningUserIdForSystemSettingLocked(int userId, String setting) { + return resolveOwningUserIdLocked(userId, sSystemCloneToManagedSettings, setting); + } + + private int resolveOwningUserIdLocked(int userId, Set<String> keys, String name) { + final int parentId = getGroupParentLocked(userId); + if (parentId != userId && keys.contains(name)) { + return parentId; } + return userId; + } - SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); - qb.setTables(args.table); + private void enforceRestrictedSystemSettingsMutationForCallingPackageLocked(int operation, + String name) { + // System/root/shell can mutate whatever secure settings they want. + final int callingUid = Binder.getCallingUid(); + if (callingUid == android.os.Process.SYSTEM_UID + || callingUid == Process.SHELL_UID + || callingUid == Process.ROOT_UID) { + return; + } - Cursor ret = qb.query(db, select, args.where, args.args, null, null, sort); - // the default Cursor interface does not support per-user observation - try { - AbstractCursor c = (AbstractCursor) ret; - c.setNotificationUri(getContext().getContentResolver(), url, forUser); - } catch (ClassCastException e) { - // details of the concrete Cursor implementation have changed and this code has - // not been updated to match -- complain and fail hard. - Log.wtf(TAG, "Incompatible cursor derivation!"); - throw e; - } - return ret; - } + switch (operation) { + case MUTATION_OPERATION_INSERT: + // Insert updates. + case MUTATION_OPERATION_UPDATE: { + if (Settings.System.PUBLIC_SETTINGS.contains(name)) { + return; + } - @Override - public String getType(Uri url) { - // If SqlArguments supplies a where clause, then it must be an item - // (because we aren't supplying our own where clause). - SqlArguments args = new SqlArguments(url, null, null); - if (TextUtils.isEmpty(args.where)) { - return "vnd.android.cursor.dir/" + args.table; - } else { - return "vnd.android.cursor.item/" + args.table; + // The calling package is already verified. + PackageInfo packageInfo = getCallingPackageInfoOrThrow(); + + // Privileged apps can do whatever they want. + if ((packageInfo.applicationInfo.privateFlags + & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) { + return; + } + + warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk( + packageInfo.applicationInfo.targetSdkVersion, name); + } break; + + case MUTATION_OPERATION_DELETE: { + if (Settings.System.PUBLIC_SETTINGS.contains(name) + || Settings.System.PRIVATE_SETTINGS.contains(name)) { + throw new IllegalArgumentException("You cannot delete system defined" + + " secure settings."); + } + + // The calling package is already verified. + PackageInfo packageInfo = getCallingPackageInfoOrThrow(); + + // Privileged apps can do whatever they want. + if ((packageInfo.applicationInfo.privateFlags & + ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0) { + return; + } + + warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk( + packageInfo.applicationInfo.targetSdkVersion, name); + } break; } } - @Override - public int bulkInsert(Uri uri, ContentValues[] values) { - final int callingUser = UserHandle.getCallingUserId(); - if (LOCAL_LOGV) Slog.v(TAG, "bulkInsert() for user " + callingUser); - SqlArguments args = new SqlArguments(uri); - if (TABLE_FAVORITES.equals(args.table)) { - return 0; + private PackageInfo getCallingPackageInfoOrThrow() { + try { + return mPackageManager.getPackageInfo(getCallingPackage(), 0); + } catch (PackageManager.NameNotFoundException e) { + throw new IllegalStateException("Calling package doesn't exist"); } - checkWritePermissions(args); - SettingsCache cache = cacheForTable(callingUser, args.table); + } - final AtomicInteger mutationCount; - synchronized (this) { - mutationCount = sKnownMutationsInFlight.get(callingUser); - } - if (mutationCount != null) { - mutationCount.incrementAndGet(); + private int getGroupParentLocked(int userId) { + // Most frequent use case. + if (userId == UserHandle.USER_OWNER) { + return userId; } - DatabaseHelper dbH = getOrEstablishDatabase( - TABLE_GLOBAL.equals(args.table) ? UserHandle.USER_OWNER : callingUser); - SQLiteDatabase db = dbH.getWritableDatabase(); - db.beginTransaction(); + // We are in the same process with the user manager and the returned + // user info is a cached instance, so just look up instead of cache. + final long identity = Binder.clearCallingIdentity(); try { - int numValues = values.length; - for (int i = 0; i < numValues; i++) { - checkUserRestrictions(values[i].getAsString(Settings.Secure.NAME), callingUser); - if (db.insert(args.table, null, values[i]) < 0) return 0; - SettingsCache.populate(cache, values[i]); - if (LOCAL_LOGV) Log.v(TAG, args.table + " <- " + values[i]); - } - db.setTransactionSuccessful(); + UserInfo userInfo = mUserManager.getProfileParent(userId); + return (userInfo != null) ? userInfo.id : userId; } finally { - db.endTransaction(); - if (mutationCount != null) { - mutationCount.decrementAndGet(); - } + Binder.restoreCallingIdentity(identity); } + } + + private boolean isAppOpWriteSettingsAllowedForCallingPackage() { + final int callingUid = Binder.getCallingUid(); + + mAppOpsManager.checkPackage(Binder.getCallingUid(), getCallingPackage()); - sendNotify(uri, callingUser); - return values.length; + return mAppOpsManager.noteOp(AppOpsManager.OP_WRITE_SETTINGS, callingUid, + getCallingPackage()) == AppOpsManager.MODE_ALLOWED; + } + + private void enforceWritePermission(String permission) { + if (getContext().checkCallingOrSelfPermission(permission) + != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Permission denial: writing to settings requires:" + + permission); + } } /* @@ -999,332 +1070,829 @@ public class SettingsProvider extends ContentProvider { * But helper functions in android.providers.Settings can enable or disable * a single provider by using a "+" or "-" prefix before the provider name. * - * @returns whether the database needs to be updated or not, also modifying - * 'initialValues' if needed. + * @returns whether the enabled location providers changed. */ - private boolean parseProviderList(Uri url, ContentValues initialValues, int desiredUser) { - String value = initialValues.getAsString(Settings.Secure.VALUE); - String newProviders = null; - if (value != null && value.length() > 1) { - char prefix = value.charAt(0); - if (prefix == '+' || prefix == '-') { - // skip prefix - value = value.substring(1); - - // read list of enabled providers into "providers" - String providers = ""; - String[] columns = {Settings.Secure.VALUE}; - String where = Settings.Secure.NAME + "=\'" + Settings.Secure.LOCATION_PROVIDERS_ALLOWED + "\'"; - Cursor cursor = queryForUser(url, columns, where, null, null, desiredUser); - if (cursor != null && cursor.getCount() == 1) { - try { - cursor.moveToFirst(); - providers = cursor.getString(0); - } finally { - cursor.close(); - } - } + private boolean updateLocationProvidersAllowedLocked(String value, int owningUserId) { + if (TextUtils.isEmpty(value)) { + return false; + } + + final char prefix = value.charAt(0); + if (prefix != '+' && prefix != '-') { + return false; + } - int index = providers.indexOf(value); - int end = index + value.length(); - // check for commas to avoid matching on partial string - if (index > 0 && providers.charAt(index - 1) != ',') index = -1; - if (end < providers.length() && providers.charAt(end) != ',') index = -1; + // skip prefix + value = value.substring(1); - if (prefix == '+' && index < 0) { - // append the provider to the list if not present - if (providers.length() == 0) { - newProviders = value; - } else { - newProviders = providers + ',' + value; - } - } else if (prefix == '-' && index >= 0) { - // remove the provider from the list if present - // remove leading or trailing comma - if (index > 0) { - index--; - } else if (end < providers.length()) { - end++; - } + Setting settingValue = getSecureSettingLocked( + Settings.Secure.LOCATION_PROVIDERS_ALLOWED, owningUserId); - newProviders = providers.substring(0, index); - if (end < providers.length()) { - newProviders += providers.substring(end); - } - } else { - // nothing changed, so no need to update the database - return false; - } + String oldProviders = (settingValue != null) ? settingValue.getValue() : ""; - if (newProviders != null) { - initialValues.put(Settings.Secure.VALUE, newProviders); - } + int index = oldProviders.indexOf(value); + int end = index + value.length(); + + // check for commas to avoid matching on partial string + if (index > 0 && oldProviders.charAt(index - 1) != ',') { + index = -1; + } + + // check for commas to avoid matching on partial string + if (end < oldProviders.length() && oldProviders.charAt(end) != ',') { + index = -1; + } + + String newProviders; + + if (prefix == '+' && index < 0) { + // append the provider to the list if not present + if (oldProviders.length() == 0) { + newProviders = value; + } else { + newProviders = oldProviders + ',' + value; + } + } else if (prefix == '-' && index >= 0) { + // remove the provider from the list if present + // remove leading or trailing comma + if (index > 0) { + index--; + } else if (end < oldProviders.length()) { + end++; } + + newProviders = oldProviders.substring(0, index); + if (end < oldProviders.length()) { + newProviders += oldProviders.substring(end); + } + } else { + // nothing changed, so no need to update the database + return false; } - return true; + return mSettingsRegistry.insertSettingLocked(SettingsRegistry.SETTINGS_TYPE_SECURE, + owningUserId, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, newProviders, + getCallingPackage()); } - @Override - public Uri insert(Uri url, ContentValues initialValues) { - return insertForUser(url, initialValues, UserHandle.getCallingUserId()); + private void sendNotify(Uri uri, int userId) { + final long identity = Binder.clearCallingIdentity(); + try { + getContext().getContentResolver().notifyChange(uri, null, true, userId); + if (DEBUG) { + Slog.v(LOG_TAG, "Notifying for " + userId + ": " + uri); + } + } finally { + Binder.restoreCallingIdentity(identity); + } } - // Settings.put*ForUser() always winds up here, so this is where we apply - // policy around permission to write settings for other users. - private Uri insertForUser(Uri url, ContentValues initialValues, int desiredUserHandle) { - final int callingUser = UserHandle.getCallingUserId(); - if (callingUser != desiredUserHandle) { - getContext().enforceCallingOrSelfPermission( - android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, - "Not permitted to access settings for other users"); + private static void warnOrThrowForUndesiredSecureSettingsMutationForTargetSdk( + int targetSdkVersion, String name) { + // If the app targets Lollipop MR1 or older SDK we warn, otherwise crash. + if (targetSdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1) { + if (Settings.System.PRIVATE_SETTINGS.contains(name)) { + Slog.w(LOG_TAG, "You shouldn't not change private system settings." + + " This will soon become an error."); + } else { + Slog.w(LOG_TAG, "You shouldn't keep your settings in the secure settings." + + " This will soon become an error."); + } + } else { + if (Settings.System.PRIVATE_SETTINGS.contains(name)) { + throw new IllegalArgumentException("You cannot change private secure settings."); + } else { + throw new IllegalArgumentException("You cannot keep your settings in" + + " the secure settings."); + } } + } - if (LOCAL_LOGV) Slog.v(TAG, "insert(" + url + ") for user " + desiredUserHandle - + " by " + callingUser); - - SqlArguments args = new SqlArguments(url); - if (TABLE_FAVORITES.equals(args.table)) { - return null; + private static int resolveCallingUserIdEnforcingPermissionsLocked(int requestingUserId) { + if (requestingUserId == UserHandle.getCallingUserId()) { + return requestingUserId; } + return ActivityManager.handleIncomingUser(Binder.getCallingPid(), + Binder.getCallingUid(), requestingUserId, false, true, + "get/set setting for user", null); + } - // Special case LOCATION_PROVIDERS_ALLOWED. - // Support enabling/disabling a single provider (using "+" or "-" prefix) - String name = initialValues.getAsString(Settings.Secure.NAME); - if (Settings.Secure.LOCATION_PROVIDERS_ALLOWED.equals(name)) { - if (!parseProviderList(url, initialValues, desiredUserHandle)) return null; + private static Bundle packageValueForCallResult(Setting setting) { + if (setting == null) { + return NULL_SETTING; } + return Bundle.forPair(Settings.NameValueTable.VALUE, setting.getValue()); + } - // If this is an insert() of a key that has been migrated to the global store, - // redirect the operation to that store - if (name != null) { - if (sSecureGlobalKeys.contains(name) || sSystemGlobalKeys.contains(name)) { - if (!TABLE_GLOBAL.equals(args.table)) { - if (LOCAL_LOGV) Slog.i(TAG, "Rewrite of insert() of now-global key " + name); - } - args.table = TABLE_GLOBAL; // next condition will rewrite the user handle - } - } + private static int getRequestingUserId(Bundle args) { + final int callingUserId = UserHandle.getCallingUserId(); + return (args != null) ? args.getInt(Settings.CALL_METHOD_USER_KEY, callingUserId) + : callingUserId; + } - // Check write permissions only after determining which table the insert will touch - checkWritePermissions(args); + private static String getSettingValue(Bundle args) { + return (args != null) ? args.getString(Settings.NameValueTable.VALUE) : null; + } - checkUserRestrictions(name, desiredUserHandle); + private static String getValidTableOrThrow(Uri uri) { + if (uri.getPathSegments().size() > 0) { + String table = uri.getPathSegments().get(0); + if (DatabaseHelper.isValidTable(table)) { + return table; + } + throw new IllegalArgumentException("Bad root path: " + table); + } + throw new IllegalArgumentException("Invalid URI:" + uri); + } - // The global table is stored under the owner, always - if (TABLE_GLOBAL.equals(args.table)) { - desiredUserHandle = UserHandle.USER_OWNER; + private static MatrixCursor packageSettingForQuery(Setting setting, String[] projection) { + if (setting == null) { + return new MatrixCursor(projection, 0); } + MatrixCursor cursor = new MatrixCursor(projection, 1); + appendSettingToCursor(cursor, setting); + return cursor; + } - SettingsCache cache = cacheForTable(desiredUserHandle, args.table); - String value = initialValues.getAsString(Settings.NameValueTable.VALUE); - if (SettingsCache.isRedundantSetValue(cache, name, value)) { - return Uri.withAppendedPath(url, name); + private static String[] normalizeProjection(String[] projection) { + if (projection == null) { + return ALL_COLUMNS; } - final AtomicInteger mutationCount; - synchronized (this) { - mutationCount = sKnownMutationsInFlight.get(callingUser); + final int columnCount = projection.length; + for (int i = 0; i < columnCount; i++) { + String column = projection[i]; + if (!ArrayUtils.contains(ALL_COLUMNS, column)) { + throw new IllegalArgumentException("Invalid column: " + column); + } } - if (mutationCount != null) { - mutationCount.incrementAndGet(); + + return projection; + } + + private static void appendSettingToCursor(MatrixCursor cursor, Setting setting) { + final int columnCount = cursor.getColumnCount(); + + String[] values = new String[columnCount]; + + for (int i = 0; i < columnCount; i++) { + String column = cursor.getColumnName(i); + + switch (column) { + case Settings.NameValueTable._ID: { + values[i] = setting.getId(); + } break; + + case Settings.NameValueTable.NAME: { + values[i] = setting.getName(); + } break; + + case Settings.NameValueTable.VALUE: { + values[i] = setting.getValue(); + } break; + } } - DatabaseHelper dbH = getOrEstablishDatabase(desiredUserHandle); - SQLiteDatabase db = dbH.getWritableDatabase(); - final long rowId = db.insert(args.table, null, initialValues); - if (mutationCount != null) { - mutationCount.decrementAndGet(); + + cursor.addRow(values); + } + + private static final class Arguments { + private static final Pattern WHERE_PATTERN_WITH_PARAM_NO_BRACKETS = + Pattern.compile("[\\s]*name[\\s]*=[\\s]*\\?[\\s]*"); + + private static final Pattern WHERE_PATTERN_WITH_PARAM_IN_BRACKETS = + Pattern.compile("[\\s]*\\([\\s]*name[\\s]*=[\\s]*\\?[\\s]*\\)[\\s]*"); + + private static final Pattern WHERE_PATTERN_NO_PARAM_IN_BRACKETS = + Pattern.compile("[\\s]*\\([\\s]*name[\\s]*=[\\s]*['\"].*['\"][\\s]*\\)[\\s]*"); + + private static final Pattern WHERE_PATTERN_NO_PARAM_NO_BRACKETS = + Pattern.compile("[\\s]*name[\\s]*=[\\s]*['\"].*['\"][\\s]*"); + + public final String table; + public final String name; + + public Arguments(Uri uri, String where, String[] whereArgs, boolean supportAll) { + final int segmentSize = uri.getPathSegments().size(); + switch (segmentSize) { + case 1: { + if (where != null + && (WHERE_PATTERN_WITH_PARAM_NO_BRACKETS.matcher(where).matches() + || WHERE_PATTERN_WITH_PARAM_IN_BRACKETS.matcher(where).matches()) + && whereArgs.length == 1) { + name = whereArgs[0]; + table = computeTableForSetting(uri, name); + return; + } else if (where != null + && (WHERE_PATTERN_NO_PARAM_NO_BRACKETS.matcher(where).matches() + || WHERE_PATTERN_NO_PARAM_IN_BRACKETS.matcher(where).matches())) { + final int startIndex = Math.max(where.indexOf("'"), + where.indexOf("\"")) + 1; + final int endIndex = Math.max(where.lastIndexOf("'"), + where.lastIndexOf("\"")); + name = where.substring(startIndex, endIndex); + table = computeTableForSetting(uri, name); + return; + } else if (supportAll && where == null && whereArgs == null) { + name = null; + table = computeTableForSetting(uri, null); + return; + } + } break; + + case 2: { + if (where == null && whereArgs == null) { + name = uri.getPathSegments().get(1); + table = computeTableForSetting(uri, name); + return; + } + } break; + } + + EventLogTags.writeUnsupportedSettingsQuery( + uri.toSafeString(), where, Arrays.toString(whereArgs)); + String message = String.format( "Supported SQL:\n" + + " uri content://some_table/some_property with null where and where args\n" + + " uri content://some_table with query name=? and single name as arg\n" + + " uri content://some_table with query name=some_name and null args\n" + + " but got - uri:%1s, where:%2s whereArgs:%3s", uri, where, + Arrays.toString(whereArgs)); + throw new IllegalArgumentException(message); } - if (rowId <= 0) return null; - SettingsCache.populate(cache, initialValues); // before we notify + private static String computeTableForSetting(Uri uri, String name) { + String table = getValidTableOrThrow(uri); + + if (name != null) { + if (sSystemMovedToSecureSettings.contains(name)) { + table = TABLE_SECURE; + } + + if (sSystemMovedToGlobalSettings.contains(name)) { + table = TABLE_GLOBAL; + } - if (LOCAL_LOGV) Log.v(TAG, args.table + " <- " + initialValues - + " for user " + desiredUserHandle); - // Note that we use the original url here, not the potentially-rewritten table name - url = getUriFor(url, initialValues, rowId); - sendNotify(url, desiredUserHandle); - return url; + if (sSecureMovedToGlobalSettings.contains(name)) { + table = TABLE_GLOBAL; + } + + if (sGlobalMovedToSecureSettings.contains(name)) { + table = TABLE_SECURE; + } + } + + return table; + } } - @Override - public int delete(Uri url, String where, String[] whereArgs) { - int callingUser = UserHandle.getCallingUserId(); - if (LOCAL_LOGV) Slog.v(TAG, "delete() for user " + callingUser); - SqlArguments args = new SqlArguments(url, where, whereArgs); - if (TABLE_FAVORITES.equals(args.table)) { - return 0; - } else if (TABLE_OLD_FAVORITES.equals(args.table)) { - args.table = TABLE_FAVORITES; - } else if (TABLE_GLOBAL.equals(args.table)) { - callingUser = UserHandle.USER_OWNER; + final class SettingsRegistry { + private static final String DROPBOX_TAG_USERLOG = "restricted_profile_ssaid"; + + private static final int SETTINGS_TYPE_GLOBAL = 0; + private static final int SETTINGS_TYPE_SYSTEM = 1; + private static final int SETTINGS_TYPE_SECURE = 2; + + private static final int SETTINGS_TYPE_MASK = 0xF0000000; + private static final int SETTINGS_TYPE_SHIFT = 28; + + private static final String SETTINGS_FILE_GLOBAL = "settings_global.xml"; + private static final String SETTINGS_FILE_SYSTEM = "settings_system.xml"; + private static final String SETTINGS_FILE_SECURE = "settings_secure.xml"; + + private final SparseArray<SettingsState> mSettingsStates = new SparseArray<>(); + + private final BackupManager mBackupManager; + + public SettingsRegistry() { + mBackupManager = new BackupManager(getContext()); + migrateAllLegacySettingsIfNeeded(); } - checkWritePermissions(args); - final AtomicInteger mutationCount; - synchronized (this) { - mutationCount = sKnownMutationsInFlight.get(callingUser); + public List<String> getSettingsNamesLocked(int type, int userId) { + final int key = makeKey(type, userId); + SettingsState settingsState = peekSettingsStateLocked(key); + return settingsState.getSettingNamesLocked(); } - if (mutationCount != null) { - mutationCount.incrementAndGet(); + + public SettingsState getSettingsLocked(int type, int userId) { + final int key = makeKey(type, userId); + return peekSettingsStateLocked(key); } - DatabaseHelper dbH = getOrEstablishDatabase(callingUser); - SQLiteDatabase db = dbH.getWritableDatabase(); - int count = db.delete(args.table, args.where, args.args); - if (mutationCount != null) { - mutationCount.decrementAndGet(); + + public void ensureSettingsForUserLocked(int userId) { + // Migrate the setting for this user if needed. + migrateLegacySettingsForUserIfNeededLocked(userId); + + // Ensure global settings loaded if owner. + if (userId == UserHandle.USER_OWNER) { + final int globalKey = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_OWNER); + ensureSettingsStateLocked(globalKey); + } + + // Ensure secure settings loaded. + final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); + ensureSettingsStateLocked(secureKey); + + // Make sure the secure settings have an Android id set. + SettingsState secureSettings = getSettingsLocked(SETTINGS_TYPE_SECURE, userId); + ensureSecureSettingAndroidIdSetLocked(secureSettings); + + // Ensure system settings loaded. + final int systemKey = makeKey(SETTINGS_TYPE_SYSTEM, userId); + ensureSettingsStateLocked(systemKey); + + // Upgrade the settings to the latest version. + UpgradeController upgrader = new UpgradeController(userId); + upgrader.upgradeIfNeededLocked(); } - if (count > 0) { - invalidateCache(callingUser, args.table); // before we notify - sendNotify(url, callingUser); + + private void ensureSettingsStateLocked(int key) { + if (mSettingsStates.get(key) == null) { + final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); + SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, + maxBytesPerPackage); + mSettingsStates.put(key, settingsState); + } } - startAsyncCachePopulation(callingUser); - if (LOCAL_LOGV) Log.v(TAG, args.table + ": " + count + " row(s) deleted"); - return count; - } - @Override - public int update(Uri url, ContentValues initialValues, String where, String[] whereArgs) { - // NOTE: update() is never called by the front-end Settings API, and updates that - // wind up affecting rows in Secure that are globally shared will not have the - // intended effect (the update will be invisible to the rest of the system). - // This should have no practical effect, since writes to the Secure db can only - // be done by system code, and that code should be using the correct API up front. - int callingUser = UserHandle.getCallingUserId(); - if (LOCAL_LOGV) Slog.v(TAG, "update() for user " + callingUser); - SqlArguments args = new SqlArguments(url, where, whereArgs); - if (TABLE_FAVORITES.equals(args.table)) { - return 0; - } else if (TABLE_GLOBAL.equals(args.table)) { - callingUser = UserHandle.USER_OWNER; + public void removeUserStateLocked(int userId, boolean permanently) { + // We always keep the global settings in memory. + + // Nuke system settings. + final int systemKey = makeKey(SETTINGS_TYPE_SYSTEM, userId); + final SettingsState systemSettingsState = mSettingsStates.get(systemKey); + if (systemSettingsState != null) { + if (permanently) { + mSettingsStates.remove(systemKey); + systemSettingsState.destroyLocked(null); + } else { + systemSettingsState.destroyLocked(new Runnable() { + @Override + public void run() { + mSettingsStates.remove(systemKey); + } + }); + } + } + + // Nuke secure settings. + final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); + final SettingsState secureSettingsState = mSettingsStates.get(secureKey); + if (secureSettingsState != null) { + if (permanently) { + mSettingsStates.remove(secureKey); + secureSettingsState.destroyLocked(null); + } else { + secureSettingsState.destroyLocked(new Runnable() { + @Override + public void run() { + mSettingsStates.remove(secureKey); + } + }); + } + } } - checkWritePermissions(args); - checkUserRestrictions(initialValues.getAsString(Settings.Secure.NAME), callingUser); - final AtomicInteger mutationCount; - synchronized (this) { - mutationCount = sKnownMutationsInFlight.get(callingUser); + public boolean insertSettingLocked(int type, int userId, String name, String value, + String packageName) { + final int key = makeKey(type, userId); + + SettingsState settingsState = peekSettingsStateLocked(key); + final boolean success = settingsState.insertSettingLocked(name, value, packageName); + + if (success) { + notifyForSettingsChange(key, name); + } + return success; } - if (mutationCount != null) { - mutationCount.incrementAndGet(); + + public boolean deleteSettingLocked(int type, int userId, String name) { + final int key = makeKey(type, userId); + + SettingsState settingsState = peekSettingsStateLocked(key); + final boolean success = settingsState.deleteSettingLocked(name); + + if (success) { + notifyForSettingsChange(key, name); + } + return success; } - DatabaseHelper dbH = getOrEstablishDatabase(callingUser); - SQLiteDatabase db = dbH.getWritableDatabase(); - int count = db.update(args.table, initialValues, args.where, args.args); - if (mutationCount != null) { - mutationCount.decrementAndGet(); + + public Setting getSettingLocked(int type, int userId, String name) { + final int key = makeKey(type, userId); + + SettingsState settingsState = peekSettingsStateLocked(key); + return settingsState.getSettingLocked(name); } - if (count > 0) { - invalidateCache(callingUser, args.table); // before we notify - sendNotify(url, callingUser); + + public boolean updateSettingLocked(int type, int userId, String name, String value, + String packageName) { + final int key = makeKey(type, userId); + + SettingsState settingsState = peekSettingsStateLocked(key); + final boolean success = settingsState.updateSettingLocked(name, value, packageName); + + if (success) { + notifyForSettingsChange(key, name); + } + + return success; } - startAsyncCachePopulation(callingUser); - if (LOCAL_LOGV) Log.v(TAG, args.table + ": " + count + " row(s) <- " + initialValues); - return count; - } - @Override - public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { - throw new FileNotFoundException("Direct file access no longer supported; " - + "ringtone playback is available through android.media.Ringtone"); - } + public void onPackageRemovedLocked(String packageName, int userId) { + final int globalKey = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_OWNER); + SettingsState globalSettings = mSettingsStates.get(globalKey); + globalSettings.onPackageRemovedLocked(packageName); - /** - * In-memory LRU Cache of system and secure settings, along with - * associated helper functions to keep cache coherent with the - * database. - */ - private static final class SettingsCache extends LruCache<String, Bundle> { + final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); + SettingsState secureSettings = mSettingsStates.get(secureKey); + secureSettings.onPackageRemovedLocked(packageName); - private final String mCacheName; - private boolean mCacheFullyMatchesDisk = false; // has the whole database slurped. + final int systemKey = makeKey(SETTINGS_TYPE_SYSTEM, userId); + SettingsState systemSettings = mSettingsStates.get(systemKey); + systemSettings.onPackageRemovedLocked(packageName); + } + + private SettingsState peekSettingsStateLocked(int key) { + SettingsState settingsState = mSettingsStates.get(key); + if (settingsState != null) { + return settingsState; + } - public SettingsCache(String name) { - super(MAX_CACHE_ENTRIES); - mCacheName = name; + ensureSettingsForUserLocked(getUserIdFromKey(key)); + return mSettingsStates.get(key); } - /** - * Is the whole database table slurped into this cache? - */ - public boolean fullyMatchesDisk() { - synchronized (this) { - return mCacheFullyMatchesDisk; + private void migrateAllLegacySettingsIfNeeded() { + synchronized (mLock) { + final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_OWNER); + File globalFile = getSettingsFile(key); + if (globalFile.exists()) { + return; + } + + final long identity = Binder.clearCallingIdentity(); + try { + List<UserInfo> users = mUserManager.getUsers(true); + + final int userCount = users.size(); + for (int i = 0; i < userCount; i++) { + final int userId = users.get(i).id; + + DatabaseHelper dbHelper = new DatabaseHelper(getContext(), userId); + SQLiteDatabase database = dbHelper.getWritableDatabase(); + migrateLegacySettingsForUserLocked(dbHelper, database, userId); + + // Upgrade to the latest version. + UpgradeController upgrader = new UpgradeController(userId); + upgrader.upgradeIfNeededLocked(); + + // Drop from memory if not a running user. + if (!mUserManager.isUserRunning(new UserHandle(userId))) { + removeUserStateLocked(userId, false); + } + } + } finally { + Binder.restoreCallingIdentity(identity); + } } } - public void setFullyMatchesDisk(boolean value) { - synchronized (this) { - mCacheFullyMatchesDisk = value; + private void migrateLegacySettingsForUserIfNeededLocked(int userId) { + // Every user has secure settings and if no file we need to migrate. + final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); + File secureFile = getSettingsFile(secureKey); + if (secureFile.exists()) { + return; } + + DatabaseHelper dbHelper = new DatabaseHelper(getContext(), userId); + SQLiteDatabase database = dbHelper.getWritableDatabase(); + + migrateLegacySettingsForUserLocked(dbHelper, database, userId); } - @Override - protected void entryRemoved(boolean evicted, String key, Bundle oldValue, Bundle newValue) { - if (evicted) { - mCacheFullyMatchesDisk = false; + private void migrateLegacySettingsForUserLocked(DatabaseHelper dbHelper, + SQLiteDatabase database, int userId) { + // Move over the global settings if owner. + if (userId == UserHandle.USER_OWNER) { + final int globalKey = makeKey(SETTINGS_TYPE_GLOBAL, userId); + ensureSettingsStateLocked(globalKey); + SettingsState globalSettings = mSettingsStates.get(globalKey); + migrateLegacySettingsLocked(globalSettings, database, TABLE_GLOBAL); + globalSettings.persistSyncLocked(); + } + + // Move over the secure settings. + final int secureKey = makeKey(SETTINGS_TYPE_SECURE, userId); + ensureSettingsStateLocked(secureKey); + SettingsState secureSettings = mSettingsStates.get(secureKey); + migrateLegacySettingsLocked(secureSettings, database, TABLE_SECURE); + ensureSecureSettingAndroidIdSetLocked(secureSettings); + secureSettings.persistSyncLocked(); + + // Move over the system settings. + final int systemKey = makeKey(SETTINGS_TYPE_SYSTEM, userId); + ensureSettingsStateLocked(systemKey); + SettingsState systemSettings = mSettingsStates.get(systemKey); + migrateLegacySettingsLocked(systemSettings, database, TABLE_SYSTEM); + systemSettings.persistSyncLocked(); + + // Drop the database as now all is moved and persisted. + if (DROP_DATABASE_ON_MIGRATION) { + dbHelper.dropDatabase(); + } else { + dbHelper.backupDatabase(); } } - /** - * Atomic cache population, conditional on size of value and if - * we lost a race. - * - * @returns a Bundle to send back to the client from call(), even - * if we lost the race. - */ - public Bundle putIfAbsent(String key, String value) { - Bundle bundle = (value == null) ? NULL_SETTING : Bundle.forPair("value", value); - if (value == null || value.length() <= MAX_CACHE_ENTRY_SIZE) { - synchronized (this) { - if (get(key) == null) { - put(key, bundle); - } + private void migrateLegacySettingsLocked(SettingsState settingsState, + SQLiteDatabase database, String table) { + SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); + queryBuilder.setTables(table); + + Cursor cursor = queryBuilder.query(database, ALL_COLUMNS, + null, null, null, null, null); + + if (cursor == null) { + return; + } + + try { + if (!cursor.moveToFirst()) { + return; } + + final int nameColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.NAME); + final int valueColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.VALUE); + + settingsState.setVersionLocked(database.getVersion()); + + while (!cursor.isAfterLast()) { + String name = cursor.getString(nameColumnIdx); + String value = cursor.getString(valueColumnIdx); + settingsState.insertSettingLocked(name, value, + SettingsState.SYSTEM_PACKAGE_NAME); + cursor.moveToNext(); + } + } finally { + cursor.close(); } - return bundle; } - /** - * Populates a key in a given (possibly-null) cache. - */ - public static void populate(SettingsCache cache, ContentValues contentValues) { - if (cache == null) { + private void ensureSecureSettingAndroidIdSetLocked(SettingsState secureSettings) { + Setting value = secureSettings.getSettingLocked(Settings.Secure.ANDROID_ID); + + if (value != null) { return; } - String name = contentValues.getAsString(Settings.NameValueTable.NAME); - if (name == null) { - Log.w(TAG, "null name populating settings cache."); + + final int userId = getUserIdFromKey(secureSettings.mKey); + + final UserInfo user; + final long identity = Binder.clearCallingIdentity(); + try { + user = mUserManager.getUserInfo(userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + if (user == null) { + // Can happen due to races when deleting users - treat as benign. return; } - String value = contentValues.getAsString(Settings.NameValueTable.VALUE); - cache.populate(name, value); + + String androidId = Long.toHexString(new SecureRandom().nextLong()); + secureSettings.insertSettingLocked(Settings.Secure.ANDROID_ID, androidId, + SettingsState.SYSTEM_PACKAGE_NAME); + + Slog.d(LOG_TAG, "Generated and saved new ANDROID_ID [" + androidId + + "] for user " + userId); + + // Write a drop box entry if it's a restricted profile + if (user.isRestricted()) { + DropBoxManager dbm = (DropBoxManager) getContext().getSystemService( + Context.DROPBOX_SERVICE); + if (dbm != null && dbm.isTagEnabled(DROPBOX_TAG_USERLOG)) { + dbm.addText(DROPBOX_TAG_USERLOG, System.currentTimeMillis() + + "," + DROPBOX_TAG_USERLOG + "," + androidId + "\n"); + } + } } - public void populate(String name, String value) { - synchronized (this) { - if (value == null || value.length() <= MAX_CACHE_ENTRY_SIZE) { - put(name, Bundle.forPair(Settings.NameValueTable.VALUE, value)); - } else { - put(name, TOO_LARGE_TO_CACHE_MARKER); + private void notifyForSettingsChange(int key, String name) { + // Update the system property *first*, so if someone is listening for + // a notification and then using the contract class to get their data, + // the system property will be updated and they'll get the new data. + + boolean backedUpDataChanged = false; + String property = null; + if (isGlobalSettingsKey(key)) { + property = Settings.Global.SYS_PROP_SETTING_VERSION; + backedUpDataChanged = true; + } else if (isSecureSettingsKey(key)) { + property = Settings.Secure.SYS_PROP_SETTING_VERSION; + backedUpDataChanged = true; + } else if (isSystemSettingsKey(key)) { + property = Settings.System.SYS_PROP_SETTING_VERSION; + backedUpDataChanged = true; + } + + if (property != null) { + final long version = SystemProperties.getLong(property, 0) + 1; + SystemProperties.set(property, Long.toString(version)); + if (DEBUG) { + Slog.v(LOG_TAG, "System property " + property + "=" + version); } } + + // Inform the backup manager about a data change + if (backedUpDataChanged) { + mBackupManager.dataChanged(); + } + + // Now send the notification through the content framework. + + final int userId = getUserIdFromKey(key); + Uri uri = getNotificationUriFor(key, name); + + sendNotify(uri, userId); + } + + private int makeKey(int type, int userId) { + return (type << SETTINGS_TYPE_SHIFT) | userId; + } + + private int getTypeFromKey(int key) { + return key >> SETTINGS_TYPE_SHIFT; + } + + private int getUserIdFromKey(int key) { + return key & ~SETTINGS_TYPE_MASK; } - /** - * For suppressing duplicate/redundant settings inserts early, - * checking our cache first (but without faulting it in), - * before going to sqlite with the mutation. - */ - public static boolean isRedundantSetValue(SettingsCache cache, String name, String value) { - if (cache == null) return false; - synchronized (cache) { - Bundle bundle = cache.get(name); - if (bundle == null) return false; - String oldValue = bundle.getPairValue(); - if (oldValue == null && value == null) return true; - if ((oldValue == null) != (value == null)) return false; - return oldValue.equals(value); + private boolean isGlobalSettingsKey(int key) { + return getTypeFromKey(key) == SETTINGS_TYPE_GLOBAL; + } + + private boolean isSystemSettingsKey(int key) { + return getTypeFromKey(key) == SETTINGS_TYPE_SYSTEM; + } + + private boolean isSecureSettingsKey(int key) { + return getTypeFromKey(key) == SETTINGS_TYPE_SECURE; + } + + private File getSettingsFile(int key) { + if (isGlobalSettingsKey(key)) { + final int userId = getUserIdFromKey(key); + return new File(Environment.getUserSystemDirectory(userId), + SETTINGS_FILE_GLOBAL); + } else if (isSystemSettingsKey(key)) { + final int userId = getUserIdFromKey(key); + return new File(Environment.getUserSystemDirectory(userId), + SETTINGS_FILE_SYSTEM); + } else if (isSecureSettingsKey(key)) { + final int userId = getUserIdFromKey(key); + return new File(Environment.getUserSystemDirectory(userId), + SETTINGS_FILE_SECURE); + } else { + throw new IllegalArgumentException("Invalid settings key:" + key); + } + } + + private Uri getNotificationUriFor(int key, String name) { + if (isGlobalSettingsKey(key)) { + return (name != null) ? Uri.withAppendedPath(Settings.Global.CONTENT_URI, name) + : Settings.Global.CONTENT_URI; + } else if (isSecureSettingsKey(key)) { + return (name != null) ? Uri.withAppendedPath(Settings.Secure.CONTENT_URI, name) + : Settings.Secure.CONTENT_URI; + } else if (isSystemSettingsKey(key)) { + return (name != null) ? Uri.withAppendedPath(Settings.System.CONTENT_URI, name) + : Settings.System.CONTENT_URI; + } else { + throw new IllegalArgumentException("Invalid settings key:" + key); + } + } + + private int getMaxBytesPerPackageForType(int type) { + switch (type) { + case SETTINGS_TYPE_GLOBAL: + case SETTINGS_TYPE_SECURE: { + return SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED; + } + + default: { + return SettingsState.MAX_BYTES_PER_APP_PACKAGE_LIMITED; + } + } + } + + private final class UpgradeController { + private static final int SETTINGS_VERSION = 118; + + private final int mUserId; + + public UpgradeController(int userId) { + mUserId = userId; + } + + public void upgradeIfNeededLocked() { + // The version of all settings for a user is the same (all users have secure). + SettingsState secureSettings = getSettingsLocked( + SettingsRegistry.SETTINGS_TYPE_SECURE, mUserId); + + // Try an update from the current state. + final int oldVersion = secureSettings.getVersionLocked(); + final int newVersion = SETTINGS_VERSION; + + // If up do data - done. + if (oldVersion == newVersion) { + return; + } + + // Try to upgrade. + final int curVersion = onUpgradeLocked(mUserId, oldVersion, newVersion); + + // If upgrade failed start from scratch and upgrade. + if (curVersion != newVersion) { + // Drop state we have for this user. + removeUserStateLocked(mUserId, true); + + // Recreate the database. + DatabaseHelper dbHelper = new DatabaseHelper(getContext(), mUserId); + SQLiteDatabase database = dbHelper.getWritableDatabase(); + dbHelper.recreateDatabase(database, newVersion, curVersion, oldVersion); + + // Migrate the settings for this user. + migrateLegacySettingsForUserLocked(dbHelper, database, mUserId); + + // Now upgrade should work fine. + onUpgradeLocked(mUserId, oldVersion, newVersion); + } + + // Set the global settings version if owner. + if (mUserId == UserHandle.USER_OWNER) { + SettingsState globalSettings = getSettingsLocked( + SettingsRegistry.SETTINGS_TYPE_GLOBAL, mUserId); + globalSettings.setVersionLocked(newVersion); + } + + // Set the secure settings version. + secureSettings.setVersionLocked(newVersion); + + // Set the system settings version. + SettingsState systemSettings = getSettingsLocked( + SettingsRegistry.SETTINGS_TYPE_SYSTEM, mUserId); + systemSettings.setVersionLocked(newVersion); + } + + private SettingsState getGlobalSettingsLocked() { + return getSettingsLocked(SETTINGS_TYPE_GLOBAL, UserHandle.USER_OWNER); + } + + private SettingsState getSecureSettingsLocked(int userId) { + return getSettingsLocked(SETTINGS_TYPE_SECURE, userId); + } + + private SettingsState getSystemSettingsLocked(int userId) { + return getSettingsLocked(SETTINGS_TYPE_SYSTEM, userId); + } + + private int onUpgradeLocked(int userId, int oldVersion, int newVersion) { + if (DEBUG) { + Slog.w(LOG_TAG, "Upgrading settings for user: " + userId + " from version: " + + oldVersion + " to version: " + newVersion); + } + + // You must perform all necessary mutations to bring the settings + // for this user from the old to the new version. When you add a new + // upgrade step you *must* update SETTINGS_VERSION. + + /** + * This is an example of moving a setting from secure to global. + * + * int currentVersion = oldVersion; + * if (currentVersion == 118) { + * // Remove from the secure settings. + * SettingsState secureSettings = getSecureSettingsLocked(userId); + * String name = "example_setting_to_move"; + * String value = secureSettings.getSetting(name); + * secureSettings.deleteSetting(name); + * + * // Add to the global settings. + * SettingsState globalSettings = getGlobalSettingsLocked(); + * globalSettings.insertSetting(name, value, SettingsState.SYSTEM_PACKAGE_NAME); + * + * // Update the current version. + * currentVersion = 119; + * } + * + * // Return the current version. + * return currentVersion; + */ + + return SettingsState.VERSION_UNDEFINED; } } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java new file mode 100644 index 0000000..3bf6828 --- /dev/null +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java @@ -0,0 +1,577 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.providers.settings; + +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.ArrayMap; +import android.util.AtomicFile; +import android.util.Slog; +import android.util.Xml; +import com.android.internal.annotations.GuardedBy; +import com.android.internal.os.BackgroundThread; +import libcore.io.IoUtils; +import libcore.util.Objects; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * This class contains the state for one type of settings. It is responsible + * for saving the state asynchronously to an XML file after a mutation and + * loading the from an XML file on construction. + * <p> + * This class uses the same lock as the settings provider to ensure that + * multiple changes made by the settings provider, e,g, upgrade, bulk insert, + * etc, are atomically persisted since the asynchronous persistence is using + * the same lock to grab the current state to write to disk. + * </p> + */ +final class SettingsState { + private static final boolean DEBUG = false; + private static final boolean DEBUG_PERSISTENCE = false; + + private static final String LOG_TAG = "SettingsState"; + + private static final long WRITE_SETTINGS_DELAY_MILLIS = 200; + private static final long MAX_WRITE_SETTINGS_DELAY_MILLIS = 2000; + + public static final int MAX_BYTES_PER_APP_PACKAGE_UNLIMITED = -1; + public static final int MAX_BYTES_PER_APP_PACKAGE_LIMITED = 20000; + + public static final String SYSTEM_PACKAGE_NAME = "android"; + + public static final int VERSION_UNDEFINED = -1; + + private static final String TAG_SETTINGS = "settings"; + private static final String TAG_SETTING = "setting"; + private static final String ATTR_PACKAGE = "package"; + + private static final String ATTR_VERSION = "version"; + private static final String ATTR_ID = "id"; + private static final String ATTR_NAME = "name"; + private static final String ATTR_VALUE = "value"; + + private static final String NULL_VALUE = "null"; + + private final Object mLock; + + private final Handler mHandler = new MyHandler(); + + @GuardedBy("mLock") + private final ArrayMap<String, Setting> mSettings = new ArrayMap<>(); + + @GuardedBy("mLock") + private final ArrayMap<String, Integer> mPackageToMemoryUsage; + + @GuardedBy("mLock") + private final int mMaxBytesPerAppPackage; + + @GuardedBy("mLock") + private final File mStatePersistFile; + + public final int mKey; + + @GuardedBy("mLock") + private int mVersion = VERSION_UNDEFINED; + + @GuardedBy("mLock") + private long mLastNotWrittenMutationTimeMillis; + + @GuardedBy("mLock") + private boolean mDirty; + + @GuardedBy("mLock") + private boolean mWriteScheduled; + + @GuardedBy("mLock") + private long mNextId; + + public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage) { + // It is important that we use the same lock as the settings provider + // to ensure multiple mutations on this state are atomicaly persisted + // as the async persistence should be blocked while we make changes. + mLock = lock; + mStatePersistFile = file; + mKey = key; + if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { + mMaxBytesPerAppPackage = maxBytesPerAppPackage; + mPackageToMemoryUsage = new ArrayMap<>(); + } else { + mMaxBytesPerAppPackage = maxBytesPerAppPackage; + mPackageToMemoryUsage = null; + } + synchronized (mLock) { + readStateSyncLocked(); + } + } + + // The settings provider must hold its lock when calling here. + public int getVersionLocked() { + return mVersion; + } + + // The settings provider must hold its lock when calling here. + public void setVersionLocked(int version) { + if (version == mVersion) { + return; + } + mVersion = version; + + scheduleWriteIfNeededLocked(); + } + + // The settings provider must hold its lock when calling here. + public void onPackageRemovedLocked(String packageName) { + boolean removedSomething = false; + + final int settingCount = mSettings.size(); + for (int i = settingCount - 1; i >= 0; i--) { + String name = mSettings.keyAt(i); + // Settings defined by use are never dropped. + if (Settings.System.PUBLIC_SETTINGS.contains(name) + || Settings.System.PRIVATE_SETTINGS.contains(name)) { + continue; + } + Setting setting = mSettings.valueAt(i); + if (packageName.equals(setting.packageName)) { + mSettings.removeAt(i); + removedSomething = true; + } + } + + if (removedSomething) { + scheduleWriteIfNeededLocked(); + } + } + + // The settings provider must hold its lock when calling here. + public List<String> getSettingNamesLocked() { + ArrayList<String> names = new ArrayList<>(); + final int settingsCount = mSettings.size(); + for (int i = 0; i < settingsCount; i++) { + String name = mSettings.keyAt(i); + names.add(name); + } + return names; + } + + // The settings provider must hold its lock when calling here. + public Setting getSettingLocked(String name) { + if (TextUtils.isEmpty(name)) { + return null; + } + return mSettings.get(name); + } + + // The settings provider must hold its lock when calling here. + public boolean updateSettingLocked(String name, String value, String packageName) { + if (!hasSettingLocked(name)) { + return false; + } + + return insertSettingLocked(name, value, packageName); + } + + // The settings provider must hold its lock when calling here. + public boolean insertSettingLocked(String name, String value, String packageName) { + if (TextUtils.isEmpty(name)) { + return false; + } + + Setting oldState = mSettings.get(name); + String oldValue = (oldState != null) ? oldState.value : null; + + if (oldState != null) { + if (!oldState.update(value, packageName)) { + return false; + } + } else { + Setting state = new Setting(name, value, packageName); + mSettings.put(name, state); + } + + updateMemoryUsagePerPackageLocked(packageName, oldValue, value); + + scheduleWriteIfNeededLocked(); + + return true; + } + + // The settings provider must hold its lock when calling here. + public void persistSyncLocked() { + mHandler.removeMessages(MyHandler.MSG_PERSIST_SETTINGS); + doWriteState(); + } + + // The settings provider must hold its lock when calling here. + public boolean deleteSettingLocked(String name) { + if (TextUtils.isEmpty(name) || !hasSettingLocked(name)) { + return false; + } + + Setting oldState = mSettings.remove(name); + + updateMemoryUsagePerPackageLocked(oldState.packageName, oldState.value, null); + + scheduleWriteIfNeededLocked(); + + return true; + } + + // The settings provider must hold its lock when calling here. + public void destroyLocked(Runnable callback) { + mHandler.removeMessages(MyHandler.MSG_PERSIST_SETTINGS); + if (callback != null) { + if (mDirty) { + // Do it without a delay. + mHandler.obtainMessage(MyHandler.MSG_PERSIST_SETTINGS, + callback).sendToTarget(); + return; + } + callback.run(); + } + } + + private void updateMemoryUsagePerPackageLocked(String packageName, String oldValue, + String newValue) { + if (mMaxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_UNLIMITED) { + return; + } + + if (SYSTEM_PACKAGE_NAME.equals(packageName)) { + return; + } + + final int oldValueSize = (oldValue != null) ? oldValue.length() : 0; + final int newValueSize = (newValue != null) ? newValue.length() : 0; + final int deltaSize = newValueSize - oldValueSize; + + Integer currentSize = mPackageToMemoryUsage.get(packageName); + final int newSize = Math.max((currentSize != null) + ? currentSize + deltaSize : deltaSize, 0); + + if (newSize > mMaxBytesPerAppPackage) { + throw new IllegalStateException("You are adding too many system settings. " + + "You should stop using system settings for app specific data" + + " package: " + packageName); + } + + if (DEBUG) { + Slog.i(LOG_TAG, "Settings for package: " + packageName + + " size: " + newSize + " bytes."); + } + + mPackageToMemoryUsage.put(packageName, newSize); + } + + private boolean hasSettingLocked(String name) { + return mSettings.indexOfKey(name) >= 0; + } + + private void scheduleWriteIfNeededLocked() { + // If dirty then we have a write already scheduled. + if (!mDirty) { + mDirty = true; + writeStateAsyncLocked(); + } + } + + private void writeStateAsyncLocked() { + final long currentTimeMillis = SystemClock.uptimeMillis(); + + if (mWriteScheduled) { + mHandler.removeMessages(MyHandler.MSG_PERSIST_SETTINGS); + + // If enough time passed, write without holding off anymore. + final long timeSinceLastNotWrittenMutationMillis = currentTimeMillis + - mLastNotWrittenMutationTimeMillis; + if (timeSinceLastNotWrittenMutationMillis >= MAX_WRITE_SETTINGS_DELAY_MILLIS) { + mHandler.obtainMessage(MyHandler.MSG_PERSIST_SETTINGS).sendToTarget(); + return; + } + + // Hold off a bit more as settings are frequently changing. + final long maxDelayMillis = Math.max(mLastNotWrittenMutationTimeMillis + + MAX_WRITE_SETTINGS_DELAY_MILLIS - currentTimeMillis, 0); + final long writeDelayMillis = Math.min(WRITE_SETTINGS_DELAY_MILLIS, maxDelayMillis); + + Message message = mHandler.obtainMessage(MyHandler.MSG_PERSIST_SETTINGS); + mHandler.sendMessageDelayed(message, writeDelayMillis); + } else { + mLastNotWrittenMutationTimeMillis = currentTimeMillis; + Message message = mHandler.obtainMessage(MyHandler.MSG_PERSIST_SETTINGS); + mHandler.sendMessageDelayed(message, WRITE_SETTINGS_DELAY_MILLIS); + mWriteScheduled = true; + } + } + + private void doWriteState() { + if (DEBUG_PERSISTENCE) { + Slog.i(LOG_TAG, "[PERSIST START]"); + } + + AtomicFile destination = new AtomicFile(mStatePersistFile); + + final int version; + final ArrayMap<String, Setting> settings; + + synchronized (mLock) { + version = mVersion; + settings = new ArrayMap<>(mSettings); + mDirty = false; + mWriteScheduled = false; + } + + FileOutputStream out = null; + try { + out = destination.startWrite(); + + XmlSerializer serializer = Xml.newSerializer(); + serializer.setOutput(out, "utf-8"); + serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); + serializer.startDocument(null, true); + serializer.startTag(null, TAG_SETTINGS); + serializer.attribute(null, ATTR_VERSION, String.valueOf(version)); + + final int settingCount = settings.size(); + for (int i = 0; i < settingCount; i++) { + Setting setting = settings.valueAt(i); + + serializer.startTag(null, TAG_SETTING); + serializer.attribute(null, ATTR_ID, setting.getId()); + serializer.attribute(null, ATTR_NAME, setting.getName()); + serializer.attribute(null, ATTR_VALUE, packValue(setting.getValue())); + serializer.attribute(null, ATTR_PACKAGE, packValue(setting.getPackageName())); + serializer.endTag(null, TAG_SETTING); + + if (DEBUG_PERSISTENCE) { + Slog.i(LOG_TAG, "[PERSISTED]" + setting.getName() + "=" + setting.getValue()); + } + } + + serializer.endTag(null, TAG_SETTINGS); + serializer.endDocument(); + destination.finishWrite(out); + + if (DEBUG_PERSISTENCE) { + Slog.i(LOG_TAG, "[PERSIST END]"); + } + + } catch (IOException e) { + Slog.wtf(LOG_TAG, "Failed to write settings, restoring backup", e); + destination.failWrite(out); + } finally { + IoUtils.closeQuietly(out); + } + } + + private void readStateSyncLocked() { + FileInputStream in; + if (!mStatePersistFile.exists()) { + return; + } + try { + in = new FileInputStream(mStatePersistFile); + } catch (FileNotFoundException fnfe) { + Slog.i(LOG_TAG, "No settings state"); + return; + } + try { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(in, null); + parseStateLocked(parser); + } catch (XmlPullParserException | IOException ise) { + throw new IllegalStateException("Failed parsing settings file: " + + mStatePersistFile , ise); + } finally { + IoUtils.closeQuietly(in); + } + } + + private void parseStateLocked(XmlPullParser parser) + throws IOException, XmlPullParserException { + parser.next(); + skipEmptyTextTags(parser); + expect(parser, XmlPullParser.START_TAG, TAG_SETTINGS); + + mVersion = Integer.parseInt(parser.getAttributeValue(null, ATTR_VERSION)); + + parser.next(); + + while (parseSettingLocked(parser)) { + parser.next(); + } + + skipEmptyTextTags(parser); + expect(parser, XmlPullParser.END_TAG, TAG_SETTINGS); + } + + private boolean parseSettingLocked(XmlPullParser parser) + throws IOException, XmlPullParserException { + skipEmptyTextTags(parser); + if (!accept(parser, XmlPullParser.START_TAG, TAG_SETTING)) { + return false; + } + + String id = parser.getAttributeValue(null, ATTR_ID); + String name = parser.getAttributeValue(null, ATTR_NAME); + String value = parser.getAttributeValue(null, ATTR_VALUE); + String packageName = parser.getAttributeValue(null, ATTR_PACKAGE); + mSettings.put(name, new Setting(name, unpackValue(value), + unpackValue(packageName), id)); + + if (DEBUG_PERSISTENCE) { + Slog.i(LOG_TAG, "[RESTORED] " + name + "=" + value); + } + + parser.next(); + + skipEmptyTextTags(parser); + expect(parser, XmlPullParser.END_TAG, TAG_SETTING); + + return true; + } + + private void expect(XmlPullParser parser, int type, String tag) + throws IOException, XmlPullParserException { + if (!accept(parser, type, tag)) { + throw new XmlPullParserException("Expected event: " + type + + " and tag: " + tag + " but got event: " + parser.getEventType() + + " and tag:" + parser.getName()); + } + } + + private void skipEmptyTextTags(XmlPullParser parser) + throws IOException, XmlPullParserException { + while (accept(parser, XmlPullParser.TEXT, null) + && parser.isWhitespace()) { + parser.next(); + } + } + + private boolean accept(XmlPullParser parser, int type, String tag) + throws IOException, XmlPullParserException { + if (parser.getEventType() != type) { + return false; + } + if (tag != null) { + if (!tag.equals(parser.getName())) { + return false; + } + } else if (parser.getName() != null) { + return false; + } + return true; + } + + private final class MyHandler extends Handler { + public static final int MSG_PERSIST_SETTINGS = 1; + + public MyHandler() { + super(BackgroundThread.getHandler().getLooper()); + } + + @Override + public void handleMessage(Message message) { + switch (message.what) { + case MSG_PERSIST_SETTINGS: { + Runnable callback = (Runnable) message.obj; + doWriteState(); + if (callback != null) { + callback.run(); + } + } + break; + } + } + } + + private static String packValue(String value) { + if (value == null) { + return NULL_VALUE; + } + return value; + } + + private static String unpackValue(String value) { + if (NULL_VALUE.equals(value)) { + return null; + } + return value; + } + + public final class Setting { + private String name; + private String value; + private String packageName; + private String id; + + public Setting(String name, String value, String packageName) { + init(name, value, packageName, String.valueOf(mNextId++)); + } + + public Setting(String name, String value, String packageName, String id) { + mNextId = Math.max(mNextId, Long.valueOf(id) + 1); + init(name, value, packageName, id); + } + + private void init(String name, String value, String packageName, String id) { + this.name = name; + this.value = value; + this.packageName = packageName; + this.id = id; + } + + public String getName() { + return name; + } + + public String getValue() { + return value; + } + + public String getPackageName() { + return packageName; + } + + public String getId() { + return id; + } + + public boolean update(String value, String packageName) { + if (Objects.equal(value, this.value)) { + return false; + } + this.value = value; + this.packageName = packageName; + this.id = String.valueOf(mNextId++); + return true; + } + } +} diff --git a/packages/SettingsProvider/test/Android.mk b/packages/SettingsProvider/test/Android.mk new file mode 100644 index 0000000..01c6ccf --- /dev/null +++ b/packages/SettingsProvider/test/Android.mk @@ -0,0 +1,13 @@ +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_PACKAGE_NAME := SettingsProviderTest + +LOCAL_MODULE_TAGS := tests + +LOCAL_CERTIFICATE := platform + +include $(BUILD_PACKAGE)
\ No newline at end of file diff --git a/packages/SettingsProvider/test/AndroidManifest.xml b/packages/SettingsProvider/test/AndroidManifest.xml new file mode 100644 index 0000000..7a86b5f --- /dev/null +++ b/packages/SettingsProvider/test/AndroidManifest.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.android.providers.setting.test"> + + <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" /> + + <uses-permission android:name="android.permission.WRITE_SETTINGS"/> + <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> + <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/> + <uses-permission android:name="android.permission.MANAGE_USERS"/> + + <application> + <uses-library android:name="android.test.runner" /> + </application> + + <instrumentation + android:name="android.test.InstrumentationTestRunner" + android:targetPackage="com.android.providers.setting.test" + android:label="Settings Provider Tests" /> +</manifest> diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/BaseSettingsProviderTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/BaseSettingsProviderTest.java new file mode 100644 index 0000000..8473db4 --- /dev/null +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/BaseSettingsProviderTest.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.providers.settings; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.pm.UserInfo; +import android.database.Cursor; +import android.net.Uri; +import android.os.UserHandle; +import android.os.UserManager; +import android.provider.Settings; +import android.test.AndroidTestCase; + +import java.util.List; + +/** + * Base class for the SettingContentProvider tests. + */ +abstract class BaseSettingsProviderTest extends AndroidTestCase { + protected static final int SETTING_TYPE_GLOBAL = 1; + protected static final int SETTING_TYPE_SECURE = 2; + protected static final int SETTING_TYPE_SYSTEM = 3; + + protected static final String FAKE_SETTING_NAME = "fake_setting_name"; + protected static final String FAKE_SETTING_NAME_1 = "fake_setting_name1"; + protected static final String FAKE_SETTING_VALUE = "fake_setting_value"; + protected static final String FAKE_SETTING_VALUE_1 = "fake_setting_value_1"; + + private static final String[] NAME_VALUE_COLUMNS = new String[] { + Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE + }; + + protected int mSecondaryUserId = UserHandle.USER_OWNER; + + @Override + public void setContext(Context context) { + super.setContext(context); + + UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + List<UserInfo> users = userManager.getUsers(); + final int userCount = users.size(); + for (int i = 0; i < userCount; i++) { + UserInfo user = users.get(i); + if (!user.isPrimary() && !user.isManagedProfile()) { + mSecondaryUserId = user.id; + break; + } + } + } + + protected void setStringViaFrontEndApiSetting(int type, String name, String value, int userId) { + ContentResolver contentResolver = getContext().getContentResolver(); + + switch (type) { + case SETTING_TYPE_GLOBAL: { + Settings.Global.putStringForUser(contentResolver, name, value, userId); + } break; + + case SETTING_TYPE_SECURE: { + Settings.Secure.putStringForUser(contentResolver, name, value, userId); + } break; + + case SETTING_TYPE_SYSTEM: { + Settings.System.putStringForUser(contentResolver, name, value, userId); + } break; + + default: { + throw new IllegalArgumentException("Invalid type: " + type); + } + } + } + + protected String getStringViaFrontEndApiSetting(int type, String name, int userId) { + ContentResolver contentResolver = getContext().getContentResolver(); + + switch (type) { + case SETTING_TYPE_GLOBAL: { + return Settings.Global.getStringForUser(contentResolver, name, userId); + } + + case SETTING_TYPE_SECURE: { + return Settings.Secure.getStringForUser(contentResolver, name, userId); + } + + case SETTING_TYPE_SYSTEM: { + return Settings.System.getStringForUser(contentResolver, name, userId); + } + + default: { + throw new IllegalArgumentException("Invalid type: " + type); + } + } + } + + protected Uri insertStringViaProviderApi(int type, String name, String value, + boolean withTableRowUri) { + Uri uri = getBaseUriForType(type); + if (withTableRowUri) { + uri = Uri.withAppendedPath(uri, name); + } + ContentValues values = new ContentValues(); + values.put(Settings.NameValueTable.NAME, name); + values.put(Settings.NameValueTable.VALUE, value); + + return getContext().getContentResolver().insert(uri, values); + } + + protected int deleteStringViaProviderApi(int type, String name) { + Uri uri = getBaseUriForType(type); + return getContext().getContentResolver().delete(uri, "name=?", new String[]{name}); + } + + protected int updateStringViaProviderApiSetting(int type, String name, String value) { + Uri uri = getBaseUriForType(type); + ContentValues values = new ContentValues(); + values.put(Settings.NameValueTable.NAME, name); + values.put(Settings.NameValueTable.VALUE, value); + return getContext().getContentResolver().update(uri, values, "name=?", + new String[]{name}); + } + + protected String queryStringViaProviderApi(int type, String name) { + return queryStringViaProviderApi(type, name, false, false); + } + + protected String queryStringViaProviderApi(int type, String name, boolean queryStringInQuotes, + boolean appendNameToUri) { + final Uri uri; + final String queryString; + final String[] queryArgs; + + if (appendNameToUri) { + uri = Uri.withAppendedPath(getBaseUriForType(type), name); + queryString = null; + queryArgs = null; + } else { + uri = getBaseUriForType(type); + queryString = queryStringInQuotes ? "(name=?)" : "name=?"; + queryArgs = new String[]{name}; + } + + Cursor cursor = getContext().getContentResolver().query(uri, NAME_VALUE_COLUMNS, + queryString, queryArgs, null); + + if (cursor == null) { + return null; + } + + try { + if (cursor.moveToFirst()) { + final int valueColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.VALUE); + return cursor.getString(valueColumnIdx); + } + } finally { + cursor.close(); + } + + return null; + } + + protected static Uri getBaseUriForType(int type) { + switch (type) { + case SETTING_TYPE_GLOBAL: { + return Settings.Global.CONTENT_URI; + } + + case SETTING_TYPE_SECURE: { + return Settings.Secure.CONTENT_URI; + } + + case SETTING_TYPE_SYSTEM: { + return Settings.System.CONTENT_URI; + } + + default: { + throw new IllegalArgumentException("Invalid type: " + type); + } + } + } +} diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderPerformanceTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderPerformanceTest.java new file mode 100644 index 0000000..d581f3b --- /dev/null +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderPerformanceTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.providers.settings; + +import android.os.SystemClock; +import android.os.UserHandle; +import android.util.Log; + +/** +* Performance tests for the SettingContentProvider. +*/ +public class SettingsProviderPerformanceTest extends BaseSettingsProviderTest { + private static final String LOG_TAG = "SettingsProviderPerformanceTest"; + + private static final int ITERATION_COUNT = 100; + + private static final int MICRO_SECONDS_IN_MILLISECOND = 1000; + + private static final long MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS = 20; + + public void testSetAndGetPerformanceForGlobalViaFrontEndApi() throws Exception { + // Start with a clean slate. + insertStringViaProviderApi(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); + + final long startTimeMicro = SystemClock.currentTimeMicro(); + + try { + for (int i = 0; i < ITERATION_COUNT; i++) { + // Set the setting to its first value. + updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE); + + // Make sure the setting changed. + String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, UserHandle.USER_OWNER); + assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); + + // Set the setting to its second value. + updateStringViaProviderApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE_1); + + // Make sure the setting changed. + String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, UserHandle.USER_OWNER); + assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); + } + } finally { + // Clean up. + deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); + } + + final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; + + final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) + / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); + + Log.i(LOG_TAG, "Average time to set and get setting via provider APIs: " + + averageTimePerIterationMillis + " ms"); + + assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis + < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); + } + + public void testSetAndGetPerformanceForGlobalViaProviderApi() throws Exception { + // Start with a clean slate. + deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); + + final long startTimeMicro = SystemClock.currentTimeMicro(); + + try { + for (int i = 0; i < ITERATION_COUNT; i++) { + // Set the setting to its first value. + setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE, UserHandle.USER_OWNER); + + // Make sure the setting changed. + String firstValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, UserHandle.USER_OWNER); + assertEquals("Setting value didn't change", FAKE_SETTING_VALUE, firstValue); + + // Set the setting to its second value. + setStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE_1, UserHandle.USER_OWNER); + + // Make sure the setting changed. + String secondValue = getStringViaFrontEndApiSetting(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, UserHandle.USER_OWNER); + assertEquals("Setting value didn't change", FAKE_SETTING_VALUE_1, secondValue); + } + } finally { + // Clean up. + deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); + } + + final long elapsedTimeMicro = SystemClock.currentTimeMicro() - startTimeMicro; + + final long averageTimePerIterationMillis = (long) ((((float) elapsedTimeMicro) + / ITERATION_COUNT) / MICRO_SECONDS_IN_MILLISECOND); + + Log.i(LOG_TAG, "Average time to set and get setting via front-eng APIs: " + + averageTimePerIterationMillis + " ms"); + + assertTrue("Setting and getting a settings takes too long.", averageTimePerIterationMillis + < MAX_AVERAGE_SET_AND_GET_SETTING_DURATION_MILLIS); + } +} diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java new file mode 100644 index 0000000..b89fb10 --- /dev/null +++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsProviderTest.java @@ -0,0 +1,429 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.providers.settings; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.os.SystemClock; +import android.os.UserHandle; +import android.provider.Settings; +import android.util.Log; + +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Tests for the SettingContentProvider. + * + * Before you run this test you must add a secondary user. + */ +public class SettingsProviderTest extends BaseSettingsProviderTest { + private static final String LOG_TAG = "SettingsProviderTest"; + + private static final long WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS = 2000; // 2 sec + + private static final String[] NAME_VALUE_COLUMNS = new String[]{ + Settings.NameValueTable.NAME, Settings.NameValueTable.VALUE + }; + + private final Object mLock = new Object(); + + public void testSetAndGetGlobalViaFrontEndApiForOwnerUser() throws Exception { + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_GLOBAL, UserHandle.USER_OWNER); + } + + public void testSetAndGetGlobalViaFrontEndApiForNonOwnerUser() throws Exception { + if (mSecondaryUserId == UserHandle.USER_OWNER) { + Log.w(LOG_TAG, "No secondary user. Skipping " + + "testSetAndGetGlobalViaFrontEndApiForNonOwnerUser"); + return; + } + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_GLOBAL, mSecondaryUserId); + } + + public void testSetAndGetSecureViaFrontEndApiForOwnerUser() throws Exception { + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SECURE, UserHandle.USER_OWNER); + } + + public void testSetAndGetSecureViaFrontEndApiForNonOwnerUser() throws Exception { + if (mSecondaryUserId == UserHandle.USER_OWNER) { + Log.w(LOG_TAG, "No secondary user. Skipping " + + "testSetAndGetSecureViaFrontEndApiForNonOwnerUser"); + return; + } + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SECURE, mSecondaryUserId); + } + + public void testSetAndGetSystemViaFrontEndApiForOwnerUser() throws Exception { + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SYSTEM, UserHandle.USER_OWNER); + } + + public void testSetAndGetSystemViaFrontEndApiForNonOwnerUser() throws Exception { + if (mSecondaryUserId == UserHandle.USER_OWNER) { + Log.w(LOG_TAG, "No secondary user. Skipping " + + "testSetAndGetSystemViaFrontEndApiForNonOwnerUser"); + return; + } + performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SYSTEM, mSecondaryUserId); + } + + public void testSetAndGetGlobalViaProviderApi() throws Exception { + performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_GLOBAL); + } + + public void testSetAndGetSecureViaProviderApi() throws Exception { + performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_SECURE); + } + + public void testSetAndGetSystemViaProviderApi() throws Exception { + performSetAndGetSettingTestViaProviderApi(SETTING_TYPE_SYSTEM); + } + + public void testSelectAllGlobalViaProviderApi() throws Exception { + setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); + try { + queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_GLOBAL, + FAKE_SETTING_NAME); + } finally { + deleteStringViaProviderApi(SETTING_TYPE_GLOBAL, FAKE_SETTING_NAME); + } + } + + public void testSelectAllSecureViaProviderApi() throws Exception { + setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_SECURE, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); + try { + queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_SECURE, + FAKE_SETTING_NAME); + } finally { + deleteStringViaProviderApi(SETTING_TYPE_SECURE, FAKE_SETTING_NAME); + } + } + + public void testSelectAllSystemViaProviderApi() throws Exception { + setSettingViaProviderApiAndAssertSuccessfulChange(SETTING_TYPE_SYSTEM, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE, true); + try { + queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(SETTING_TYPE_SYSTEM, + FAKE_SETTING_NAME); + } finally { + deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); + } + } + + public void testQueryUpdateDeleteGlobalViaProviderApi() throws Exception { + doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_GLOBAL); + } + + public void testQueryUpdateDeleteSecureViaProviderApi() throws Exception { + doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_SECURE); + } + + public void testQueryUpdateDeleteSystemViaProviderApi() throws Exception { + doTestQueryUpdateDeleteGlobalViaProviderApiForType(SETTING_TYPE_SYSTEM); + } + + public void testBulkInsertGlobalViaProviderApi() throws Exception { + toTestBulkInsertViaProviderApiForType(SETTING_TYPE_GLOBAL); + } + + public void testBulkInsertSystemViaProviderApi() throws Exception { + toTestBulkInsertViaProviderApiForType(SETTING_TYPE_SYSTEM); + } + + public void testBulkInsertSecureViaProviderApi() throws Exception { + toTestBulkInsertViaProviderApiForType(SETTING_TYPE_SECURE); + } + + public void testAppCannotRunsSystemOutOfMemoryWritingSystemSettings() throws Exception { + int insertedCount = 0; + try { + for (; insertedCount < 1200; insertedCount++) { + Log.w(LOG_TAG, "Adding app specific setting: " + insertedCount); + insertStringViaProviderApi(SETTING_TYPE_SYSTEM, + String.valueOf(insertedCount), FAKE_SETTING_VALUE, false); + } + fail("Adding app specific settings must be bound."); + } catch (Exception e) { + for (; insertedCount >= 0; insertedCount--) { + Log.w(LOG_TAG, "Removing app specific setting: " + insertedCount); + deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, + String.valueOf(insertedCount)); + } + } + } + + public void testQueryStringInBracketsGlobalViaProviderApiForType() throws Exception { + doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_GLOBAL); + } + + public void testQueryStringInBracketsSecureViaProviderApiForType() throws Exception { + doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_SECURE); + } + + public void testQueryStringInBracketsSystemViaProviderApiForType() throws Exception { + doTestQueryStringInBracketsViaProviderApiForType(SETTING_TYPE_SYSTEM); + } + + public void testQueryStringWithAppendedNameToUriViaProviderApi() throws Exception { + // Make sure we have a clean slate. + deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); + + try { + // Insert the setting. + final Uri uri = insertStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE, false); + Uri expectUri = Uri.withAppendedPath(getBaseUriForType(SETTING_TYPE_SYSTEM), + FAKE_SETTING_NAME); + assertEquals("Did not get expected Uri.", expectUri, uri); + + // Make sure the first setting is there. + String firstValue = queryStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME, + false, true); + assertEquals("Setting must be present", FAKE_SETTING_VALUE, firstValue); + } finally { + // Clean up. + deleteStringViaProviderApi(SETTING_TYPE_SYSTEM, FAKE_SETTING_NAME); + } + } + + private void doTestQueryStringInBracketsViaProviderApiForType(int type) { + // Make sure we have a clean slate. + deleteStringViaProviderApi(type, FAKE_SETTING_NAME); + + try { + // Insert the setting. + final Uri uri = insertStringViaProviderApi(type, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE, false); + Uri expectUri = Uri.withAppendedPath(getBaseUriForType(type), FAKE_SETTING_NAME); + assertEquals("Did not get expected Uri.", expectUri, uri); + + // Make sure the first setting is there. + String firstValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME, true, false); + assertEquals("Setting must be present", FAKE_SETTING_VALUE, firstValue); + } finally { + // Clean up. + deleteStringViaProviderApi(type, FAKE_SETTING_NAME); + } + } + + private void toTestBulkInsertViaProviderApiForType(int type) { + // Make sure we have a clean slate. + deleteStringViaProviderApi(type, FAKE_SETTING_NAME); + deleteStringViaProviderApi(type, FAKE_SETTING_NAME_1); + + try { + Uri uri = getBaseUriForType(type); + ContentValues[] allValues = new ContentValues[2]; + + // Insert the first setting. + ContentValues firstValues = new ContentValues(); + firstValues.put(Settings.NameValueTable.NAME, FAKE_SETTING_NAME); + firstValues.put(Settings.NameValueTable.VALUE, FAKE_SETTING_VALUE); + allValues[0] = firstValues; + + // Insert the first setting. + ContentValues secondValues = new ContentValues(); + secondValues.put(Settings.NameValueTable.NAME, FAKE_SETTING_NAME_1); + secondValues.put(Settings.NameValueTable.VALUE, FAKE_SETTING_VALUE_1); + allValues[1] = secondValues; + + // Verify insertion count. + final int insertCount = getContext().getContentResolver().bulkInsert(uri, allValues); + assertSame("Couldn't insert both values", 2, insertCount); + + // Make sure the first setting is there. + String firstValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME); + assertEquals("First setting must be present", FAKE_SETTING_VALUE, firstValue); + + // Make sure the second setting is there. + String secondValue = queryStringViaProviderApi(type, FAKE_SETTING_NAME_1); + assertEquals("Second setting must be present", FAKE_SETTING_VALUE_1, secondValue); + } finally { + // Clean up. + deleteStringViaProviderApi(type, FAKE_SETTING_NAME); + deleteStringViaProviderApi(type, FAKE_SETTING_NAME_1); + } + } + + private void doTestQueryUpdateDeleteGlobalViaProviderApiForType(int type) throws Exception { + // Make sure it is not there. + deleteStringViaProviderApi(type, FAKE_SETTING_NAME); + + // Now selection should return nothing. + String value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); + assertNull("Setting should not be present.", value); + + // Insert the setting. + Uri uri = insertStringViaProviderApi(type, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE, false); + Uri expectUri = Uri.withAppendedPath(getBaseUriForType(type), FAKE_SETTING_NAME); + assertEquals("Did not get expected Uri.", expectUri, uri); + + // Now selection should return the setting. + value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); + assertEquals("Setting should be present.", FAKE_SETTING_VALUE, value); + + // Update the setting. + final int changeCount = updateStringViaProviderApiSetting(type, + FAKE_SETTING_NAME, FAKE_SETTING_VALUE_1); + assertEquals("Did not get expected change count.", 1, changeCount); + + // Now selection should return the new setting. + value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); + assertEquals("Setting should be present.", FAKE_SETTING_VALUE_1, value); + + // Delete the setting. + final int deletedCount = deleteStringViaProviderApi(type, + FAKE_SETTING_NAME); + assertEquals("Did not get expected deleted count", 1, deletedCount); + + // Now selection should return nothing. + value = queryStringViaProviderApi(type, FAKE_SETTING_NAME); + assertNull("Setting should not be present.", value); + } + + private void performSetAndGetSettingTestViaFrontEndApi(int type, int userId) + throws Exception { + try { + // Change the setting and assert a successful change. + setSettingViaFrontEndApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE, userId); + } finally { + // Remove the setting. + setStringViaFrontEndApiSetting(type, FAKE_SETTING_NAME, null, userId); + } + } + + private void performSetAndGetSettingTestViaProviderApi(int type) + throws Exception { + try { + // Change the setting and assert a successful change. + setSettingViaProviderApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, + FAKE_SETTING_VALUE, true); + } finally { + // Remove the setting. + setSettingViaProviderApiAndAssertSuccessfulChange(type, FAKE_SETTING_NAME, null, + true); + } + } + + private void setSettingViaFrontEndApiAndAssertSuccessfulChange(final int type, + final String name, final String value, final int userId) throws Exception { + setSettingAndAssertSuccessfulChange(new Runnable() { + @Override + public void run() { + setStringViaFrontEndApiSetting(type, name, value, userId); + } + }, type, name, value, userId); + } + + private void setSettingViaProviderApiAndAssertSuccessfulChange(final int type, + final String name, final String value, final boolean withTableRowUri) + throws Exception { + setSettingAndAssertSuccessfulChange(new Runnable() { + @Override + public void run() { + insertStringViaProviderApi(type, name, value, withTableRowUri); + } + }, type, name, value, UserHandle.USER_OWNER); + } + + private void setSettingAndAssertSuccessfulChange(Runnable setCommand, final int type, + final String name, final String value, final int userId) throws Exception { + ContentResolver contentResolver = getContext().getContentResolver(); + + final Uri settingUri = getBaseUriForType(type); + + final AtomicBoolean success = new AtomicBoolean(); + + ContentObserver contentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { + public void onChange(boolean selfChange, Uri changeUri, int changeId) { + Log.i(LOG_TAG, "onChange(" + selfChange + ", " + changeUri + ", " + changeId + ")"); + assertEquals("Wrong change Uri", changeUri, settingUri); + assertEquals("Wrong user id", userId, changeId); + String changeValue = getStringViaFrontEndApiSetting(type, name, userId); + assertEquals("Wrong setting value", value, changeValue); + + success.set(true); + + synchronized (mLock) { + mLock.notifyAll(); + } + } + }; + + contentResolver.registerContentObserver(settingUri, false, contentObserver, userId); + + try { + setCommand.run(); + + final long startTimeMillis = SystemClock.uptimeMillis(); + synchronized (mLock) { + if (success.get()) { + return; + } + final long elapsedTimeMillis = SystemClock.uptimeMillis() - startTimeMillis; + if (elapsedTimeMillis > WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS) { + fail("Could not change setting for " + + WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS + " ms"); + } + final long remainingTimeMillis = WAIT_FOR_SETTING_URI_CHANGE_TIMEOUT_MILLIS + - elapsedTimeMillis; + try { + mLock.wait(remainingTimeMillis); + } catch (InterruptedException ie) { + /* ignore */ + } + } + } finally { + contentResolver.unregisterContentObserver(contentObserver); + } + } + + private void queryAllSettingsViaProviderApiSettingAndAssertSettingPresent(int type, + String name) { + Uri uri = getBaseUriForType(type); + + Cursor cursor = getContext().getContentResolver().query(uri, NAME_VALUE_COLUMNS, + null, null, null); + + if (cursor == null || !cursor.moveToFirst()) { + fail("Nothing selected"); + } + + try { + final int nameColumnIdx = cursor.getColumnIndex(Settings.NameValueTable.NAME); + + while (cursor.moveToNext()) { + String currentName = cursor.getString(nameColumnIdx); + if (name.equals(currentName)) { + return; + } + } + + fail("Not found setting: " + name); + } finally { + cursor.close(); + } + } +} diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 3c44245..9d16501 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -105,6 +105,18 @@ android:resource="@xml/file_provider_paths" /> </provider> + <provider + android:name=".BugreportStorageProvider" + android:authorities="com.android.shell.documents" + android:grantUriPermissions="true" + android:exported="true" + android:permission="android.permission.MANAGE_DOCUMENTS" + android:enabled="false"> + <intent-filter> + <action android:name="android.content.action.DOCUMENTS_PROVIDER" /> + </intent-filter> + </provider> + <activity android:name=".BugreportWarningActivity" android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert" diff --git a/packages/Shell/res/values-en-rAU/strings.xml b/packages/Shell/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..fab4223 --- /dev/null +++ b/packages/Shell/res/values-en-rAU/strings.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="3701846017049540910">"Shell"</string> + <string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string> + <string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string> + <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string> + <string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string> + <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string> +</resources> diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu-rES/strings.xml index 2904cbb..0c42cab 100644 --- a/packages/Shell/res/values-eu-rES/strings.xml +++ b/packages/Shell/res/values-eu-rES/strings.xml @@ -17,9 +17,9 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="3701846017049540910">"Shell-interfazea"</string> - <string name="bugreport_finished_title" msgid="2293711546892863898">"Programa-akatsen txostena jaso da"</string> + <string name="bugreport_finished_title" msgid="2293711546892863898">"Akatsen txostena jaso da"</string> <string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Programa-akatsen txostena partekatzeko, pasatu hatza ezkerrera"</string> - <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Programa-akatsen txostena partekatzeko, ukitu"</string> - <string name="bugreport_confirm" msgid="5130698467795669780">"Programa-akatsen txostenek sistemaren erregistro-fitxategietako datuak dauzkate, informazio pertsonala eta pribatua barne. Programa-akatsen txostenak partekatzen badituzu, partekatu soilik aplikazio eta pertsona fidagarriekin."</string> + <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Akatsen txostena partekatzeko, ukitu"</string> + <string name="bugreport_confirm" msgid="5130698467795669780">"Akatsen txostenek sistemaren erregistro-fitxategietako datuak dauzkate, informazio pertsonala eta pribatua barne. Akatsen txostenak partekatzen badituzu, partekatu soilik aplikazio eta pertsona fidagarriekin."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Erakutsi mezu hau hurrengoan"</string> </resources> diff --git a/packages/Shell/res/values-nb/strings.xml b/packages/Shell/res/values-nb/strings.xml index b9d969d..657a209 100644 --- a/packages/Shell/res/values-nb/strings.xml +++ b/packages/Shell/res/values-nb/strings.xml @@ -20,6 +20,6 @@ <string name="bugreport_finished_title" msgid="2293711546892863898">"Feilrapporten er lagret"</string> <string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Sveip til venstre for å dele feilrapporten din"</string> <string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Trykk for å dele feilrapporten din"</string> - <string name="bugreport_confirm" msgid="5130698467795669780">"Feilrapporter inkluderer data fra systemets forskjellige loggfiler. Dette omfatter personlig og privat informasjon. Du bør bare dele feilrapporter ned apper og folk du stoler på."</string> + <string name="bugreport_confirm" msgid="5130698467795669780">"Feilrapporter inkluderer data fra systemets forskjellige loggfiler. Dette omfatter personlig og privat informasjon. Du bør bare dele feilrapporter med apper og folk du stoler på."</string> <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne meldingen neste gang"</string> </resources> diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml index 51e2c95..3db0848 100644 --- a/packages/Shell/res/values/strings.xml +++ b/packages/Shell/res/values/strings.xml @@ -30,4 +30,7 @@ <string name="bugreport_confirm">Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people you trust.</string> <!-- Checkbox that indicates this dialog should be shown again when the next bugreport is taken. [CHAR LIMIT=50] --> <string name="bugreport_confirm_repeat">Show this message next time</string> + + <!-- Title for documents backend that offers bugreports. --> + <string name="bugreport_storage_title">Bug reports</string> </resources> diff --git a/packages/Shell/src/com/android/shell/BugreportReceiver.java b/packages/Shell/src/com/android/shell/BugreportReceiver.java index 48ecaa5..e1bfc43 100644 --- a/packages/Shell/src/com/android/shell/BugreportReceiver.java +++ b/packages/Shell/src/com/android/shell/BugreportReceiver.java @@ -93,7 +93,7 @@ public class BugreportReceiver extends BroadcastReceiver { context, 0, notifIntent, PendingIntent.FLAG_CANCEL_CURRENT)) .setAutoCancel(true) .setLocalOnly(true) - .setColor(context.getResources().getColor( + .setColor(context.getColor( com.android.internal.R.color.system_notification_accent_color)); NotificationManager.from(context).notify(TAG, 0, builder.build()); diff --git a/packages/Shell/src/com/android/shell/BugreportStorageProvider.java b/packages/Shell/src/com/android/shell/BugreportStorageProvider.java new file mode 100644 index 0000000..814aa8c --- /dev/null +++ b/packages/Shell/src/com/android/shell/BugreportStorageProvider.java @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.shell; + +import android.database.Cursor; +import android.database.MatrixCursor; +import android.database.MatrixCursor.RowBuilder; +import android.os.CancellationSignal; +import android.os.FileUtils; +import android.os.ParcelFileDescriptor; +import android.provider.DocumentsContract.Document; +import android.provider.DocumentsContract.Root; +import android.provider.DocumentsProvider; +import android.webkit.MimeTypeMap; + +import java.io.File; +import java.io.FileNotFoundException; + +public class BugreportStorageProvider extends DocumentsProvider { + private static final String DOC_ID_ROOT = "bugreport"; + + private static final String[] DEFAULT_ROOT_PROJECTION = new String[] { + Root.COLUMN_ROOT_ID, Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE, + Root.COLUMN_DOCUMENT_ID, + }; + + private static final String[] DEFAULT_DOCUMENT_PROJECTION = new String[] { + Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE, Document.COLUMN_DISPLAY_NAME, + Document.COLUMN_LAST_MODIFIED, Document.COLUMN_FLAGS, Document.COLUMN_SIZE, + }; + + private File mRoot; + + @Override + public boolean onCreate() { + mRoot = new File(getContext().getFilesDir(), "bugreports"); + return true; + } + + @Override + public Cursor queryRoots(String[] projection) throws FileNotFoundException { + final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection)); + final RowBuilder row = result.newRow(); + row.add(Root.COLUMN_ROOT_ID, DOC_ID_ROOT); + row.add(Root.COLUMN_FLAGS, Root.FLAG_LOCAL_ONLY | Root.FLAG_ADVANCED); + row.add(Root.COLUMN_ICON, android.R.mipmap.sym_def_app_icon); + row.add(Root.COLUMN_TITLE, getContext().getString(R.string.bugreport_storage_title)); + row.add(Root.COLUMN_DOCUMENT_ID, DOC_ID_ROOT); + return result; + } + + @Override + public Cursor queryDocument(String documentId, String[] projection) + throws FileNotFoundException { + final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection)); + if (DOC_ID_ROOT.equals(documentId)) { + final RowBuilder row = result.newRow(); + row.add(Document.COLUMN_DOCUMENT_ID, documentId); + row.add(Document.COLUMN_MIME_TYPE, Document.MIME_TYPE_DIR); + row.add(Document.COLUMN_DISPLAY_NAME, mRoot.getName()); + row.add(Document.COLUMN_LAST_MODIFIED, mRoot.lastModified()); + row.add(Document.COLUMN_FLAGS, Document.FLAG_DIR_PREFERS_LAST_MODIFIED); + } else { + addFileRow(result, getFileForDocId(documentId)); + } + return result; + } + + @Override + public Cursor queryChildDocuments( + String parentDocumentId, String[] projection, String sortOrder) + throws FileNotFoundException { + final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection)); + if (DOC_ID_ROOT.equals(parentDocumentId)) { + final File[] files = mRoot.listFiles(); + if (files != null) { + for (File file : files) { + addFileRow(result, file); + } + } + } + return result; + } + + @Override + public ParcelFileDescriptor openDocument( + String documentId, String mode, CancellationSignal signal) + throws FileNotFoundException { + if (ParcelFileDescriptor.parseMode(mode) != ParcelFileDescriptor.MODE_READ_ONLY) { + throw new FileNotFoundException("Failed to open: " + documentId + ", mode = " + mode); + } + return ParcelFileDescriptor.open(getFileForDocId(documentId), + ParcelFileDescriptor.MODE_READ_ONLY); + } + + @Override + public void deleteDocument(String documentId) throws FileNotFoundException { + if (!getFileForDocId(documentId).delete()) { + throw new FileNotFoundException("Failed to delete: " + documentId); + } + } + + private static String[] resolveRootProjection(String[] projection) { + return projection != null ? projection : DEFAULT_ROOT_PROJECTION; + } + + private static String[] resolveDocumentProjection(String[] projection) { + return projection != null ? projection : DEFAULT_DOCUMENT_PROJECTION; + } + + private static String getTypeForName(String name) { + final int lastDot = name.lastIndexOf('.'); + if (lastDot >= 0) { + final String extension = name.substring(lastDot + 1).toLowerCase(); + final String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + if (mime != null) { + return mime; + } + } + return "application/octet-stream"; + } + + private String getDocIdForFile(File file) { + return DOC_ID_ROOT + ":" + file.getName(); + } + + private File getFileForDocId(String documentId) throws FileNotFoundException { + final int splitIndex = documentId.indexOf(':', 1); + final String name = documentId.substring(splitIndex + 1); + if (splitIndex == -1 || !DOC_ID_ROOT.equals(documentId.substring(0, splitIndex)) || + !FileUtils.isValidExtFilename(name)) { + throw new FileNotFoundException("Invalid document ID: " + documentId); + } + final File file = new File(mRoot, name); + if (!file.exists()) { + throw new FileNotFoundException("File not found: " + documentId); + } + return file; + } + + private void addFileRow(MatrixCursor result, File file) { + final RowBuilder row = result.newRow(); + row.add(Document.COLUMN_DOCUMENT_ID, getDocIdForFile(file)); + row.add(Document.COLUMN_MIME_TYPE, getTypeForName(file.getName())); + row.add(Document.COLUMN_DISPLAY_NAME, file.getName()); + row.add(Document.COLUMN_LAST_MODIFIED, file.lastModified()); + row.add(Document.COLUMN_FLAGS, Document.FLAG_SUPPORTS_DELETE); + row.add(Document.COLUMN_SIZE, file.length()); + } +} diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 035bb0e..7a58c87 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -47,6 +47,7 @@ <!-- Networking and telephony --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> + <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> @@ -103,6 +104,10 @@ <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" /> <uses-permission android:name="android.permission.TRUST_LISTENER" /> + <uses-permission android:name="android.permission.USE_FINGERPRINT" /> + + <!-- Needed for WallpaperManager.clear in ImageWallpaper.updateWallpaperLocked --> + <uses-permission android:name="android.permission.SET_WALLPAPER"/> <!-- Recents --> <uses-permission android:name="android.permission.BIND_APPWIDGET" /> diff --git a/packages/SystemUI/res/drawable/ic_collapse_children.xml b/packages/SystemUI/res/drawable/ic_collapse_children.xml new file mode 100644 index 0000000..b0ce1e6 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_collapse_children.xml @@ -0,0 +1,19 @@ +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> + +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:insetTop="2dp" + android:drawable="@drawable/ic_expand_less"/> diff --git a/packages/SystemUI/res/drawable/ic_expand_children.xml b/packages/SystemUI/res/drawable/ic_expand_children.xml new file mode 100644 index 0000000..1762be4 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_expand_children.xml @@ -0,0 +1,18 @@ +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:insetTop="2dp" + android:drawable="@drawable/ic_expand_more"/> diff --git a/packages/SystemUI/res/drawable/ic_expand_less.xml b/packages/SystemUI/res/drawable/ic_expand_less.xml new file mode 100644 index 0000000..e968013 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_expand_less.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="20.0dp" + android:height="20.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M12.000000,8.000000l-6.000000,6.000000 1.400000,1.400000 4.600000,-4.599999 4.600000,4.599999 1.400000,-1.400000z" + android:fillColor="#FF000000"/> +</vector> diff --git a/packages/SystemUI/res/drawable/ic_expand_more.xml b/packages/SystemUI/res/drawable/ic_expand_more.xml new file mode 100644 index 0000000..72e98ec --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_expand_more.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="20.0dp" + android:height="20.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M16.600000,8.600000l-4.600000,4.599999 -4.600000,-4.599999 -1.400000,1.400000 6.000000,6.000000 6.000000,-6.000000z" + android:fillColor="#FF000000"/> +</vector> diff --git a/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml b/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml new file mode 100644 index 0000000..28d2e26 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_qs_dnd_off.xml @@ -0,0 +1,41 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:height="64dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0" + android:alpha=".3" + android:width="64dp" > + + <path + android:fillColor="#FFFFFFFF" + android:pathData="M13.8,11.1L17.0,11.1l0.0,2.0l-1.2,0.0l4.5,4.5c1.1,-1.6 1.7,-3.5 1.7,-5.5c0.0,-5.5 -4.5,-10.0 -10.0,-10.0c-2.0,0.0 -3.9,0.6 -5.5,1.7L13.8,11.1z" /> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M13.0,13.1L7.0,13.1l0.0,-2.0l4.0,0.0L4.9,5.0C3.1,6.8 2.0,9.3 2.0,12.1c0.0,5.5 4.5,10.0 10.0,10.0c2.8,0.0 5.3,-1.1 7.1,-2.9L13.0,13.1z" /> + + <group + android:pivotX="12.0" + android:pivotY="12.0" + android:rotation="45.0" + android:translateX="0.5" + android:translateY="0.5" > + <path + android:fillColor="#FFFFFFFF" + android:pathData="M-2.8,11.8l28.3,0.0l0.0,2.0l-28.3,0.0z" /> + </group> + +</vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml b/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml new file mode 100644 index 0000000..7617ec4 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_qs_dnd_on.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="64dp" + android:height="64dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M24.0,4.0C12.95,4.0 4.0,12.95 4.0,24.0s8.95,20.0 20.0,20.0 20.0,-8.95 20.0,-20.0S35.05,4.0 24.0,4.0zm10.0,22.0L14.0,26.0l0.0,-4.0l20.0,0.0l0.0,4.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/stat_sys_dnd.xml b/packages/SystemUI/res/drawable/stat_sys_dnd.xml new file mode 100644 index 0000000..9361bc0 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_dnd.xml @@ -0,0 +1,28 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:insetLeft="2.5dp" + android:insetRight="2.5dp"> + <vector + android:width="17dp" + android:height="17dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M24.0,4.0C12.95,4.0 4.0,12.95 4.0,24.0s8.95,20.0 20.0,20.0 20.0,-8.95 20.0,-20.0S35.05,4.0 24.0,4.0zm10.0,22.0L14.0,26.0l0.0,-4.0l20.0,0.0l0.0,4.0z"/> + </vector> +</inset> diff --git a/packages/SystemUI/res/drawable/stat_sys_ringer_silent.xml b/packages/SystemUI/res/drawable/stat_sys_ringer_silent.xml new file mode 100644 index 0000000..36e6cef --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_ringer_silent.xml @@ -0,0 +1,27 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:insetLeft="3dp" + android:insetRight="3dp"> + <vector android:width="18dp" + android:height="18dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M23.000000,44.000000c2.200000,0.000000 4.000000,-1.800000 4.000000,-4.000000l-8.000000,0.000000C19.000000,42.200001 20.799999,44.000000 23.000000,44.000000zM36.000000,21.000000c0.000000,-6.100000 -4.300000,-11.300000 -10.000000,-12.600000L26.000000,7.000000c0.000000,-1.700000 -1.300000,-3.000000 -3.000000,-3.000000c-1.700000,0.000000 -3.000000,1.300000 -3.000000,3.000000l0.000000,1.400000c-1.000000,0.200000 -2.000000,0.600000 -2.900000,1.100000L36.000000,28.400000L36.000000,21.000000zM35.500000,38.000000l4.000000,4.000000l2.500000,-2.500000L8.500000,6.000000L6.000000,8.500000l5.800000,5.800000C10.700000,16.299999 10.000000,18.600000 10.000000,21.000000l0.000000,11.000000l-4.000000,4.000000l0.000000,2.000000L35.500000,38.000000z"/> + </vector> +</inset> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml b/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml new file mode 100644 index 0000000..14f1981 --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_bottom.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0zM4.0,10.0l16.0,0.0l0.0,10.0L4.0,20.0L4.0,10.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml b/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml new file mode 100644 index 0000000..aee0b7f --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_fullscreen.xml @@ -0,0 +1,33 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,8.0l4.0,0.0 0.0,-4.0 4.0,0.0 0.0,-4.0 -8.0,0.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M4.0,16.0l-4.0,0.0 0.0,8.0 8.0,0.0 0.0,-4.0 -4.0,0.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M16.0,0.0l0.0,4.0 4.0,0.0 0.0,4.0 4.0,0.0 0.0,-8.0z"/> + <path + android:fillColor="#FF000000" + android:pathData="M20.0,20.0l-4.0,0.0 0.0,4.0 8.0,0.0 0.0,-8.0 -4.0,0.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_left.xml b/packages/SystemUI/res/drawable/vector_drawable_place_left.xml new file mode 100644 index 0000000..078f83c --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_left.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M24.0,0.0L0.0,0.0l0.0,24.0l24.0,0.0L24.0,0.0zM14.0,4.0l0.0,16.0L4.0,20.0L4.0,4.0L14.0,4.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_right.xml b/packages/SystemUI/res/drawable/vector_drawable_place_right.xml new file mode 100644 index 0000000..86730db --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_right.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M0.0,24.0l24.0,0.0L24.0,0.0L0.0,0.0L0.0,24.0zM10.0,20.0L10.0,4.0l10.0,0.0l0.0,16.0L10.0,20.0z"/> +</vector> diff --git a/packages/SystemUI/res/drawable/vector_drawable_place_top.xml b/packages/SystemUI/res/drawable/vector_drawable_place_top.xml new file mode 100644 index 0000000..92e01af --- /dev/null +++ b/packages/SystemUI/res/drawable/vector_drawable_place_top.xml @@ -0,0 +1,24 @@ +<!-- +Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M24.0,24.0L24.0,0.0L0.0,0.0l0.0,24.0L24.0,24.0zM20.0,14.0L4.0,14.0L4.0,4.0l16.0,0.0L20.0,14.0z"/> +</vector> diff --git a/packages/SystemUI/res/layout/notification_children_container.xml b/packages/SystemUI/res/layout/notification_children_container.xml new file mode 100644 index 0000000..ac6a000 --- /dev/null +++ b/packages/SystemUI/res/layout/notification_children_container.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> + +<com.android.systemui.statusbar.stack.NotificationChildrenContainer + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> diff --git a/packages/SystemUI/res/layout/notification_children_divider.xml b/packages/SystemUI/res/layout/notification_children_divider.xml new file mode 100644 index 0000000..f011afe --- /dev/null +++ b/packages/SystemUI/res/layout/notification_children_divider.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> + +<com.android.systemui.statusbar.AlphaOptimizedView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/notification_more_divider" + android:layout_width="match_parent" + android:layout_height="@dimen/notification_children_divider_height" + android:background="@*android:drawable/notification_template_divider" /> diff --git a/packages/SystemUI/res/layout/notification_collapse_button.xml b/packages/SystemUI/res/layout/notification_collapse_button.xml new file mode 100644 index 0000000..3ec5f63 --- /dev/null +++ b/packages/SystemUI/res/layout/notification_collapse_button.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="@dimen/notification_bottom_decor_height"> + <TextView + android:id="@+id/notification_expand_button" + android:layout_width="wrap_content" + android:layout_height="@dimen/notification_bottom_decor_height" + android:background="@null" + android:layout_gravity="top|center_horizontal" + android:gravity="center_vertical|center_horizontal" + android:textAppearance="@*android:style/TextAppearance.Material.Notification.Title" + android:text="@string/notification_collapse_button_text" + android:drawableEnd="@drawable/ic_collapse_children" + android:drawablePadding="1dp" + /> +</FrameLayout> diff --git a/packages/SystemUI/res/layout/notification_expand_button.xml b/packages/SystemUI/res/layout/notification_expand_button.xml new file mode 100644 index 0000000..3c478f7 --- /dev/null +++ b/packages/SystemUI/res/layout/notification_expand_button.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> + +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="@dimen/notification_bottom_decor_height"> + <TextView + android:id="@+id/notification_expand_button" + android:layout_width="wrap_content" + android:layout_height="@dimen/notification_bottom_decor_height" + android:background="@null" + android:layout_gravity="top|center_horizontal" + android:gravity="center_vertical|center_horizontal" + android:textAppearance="@*android:style/TextAppearance.Material.Notification.Title" + android:text="@string/notification_expand_button_text" + android:drawableEnd="@drawable/ic_expand_children" + android:drawablePadding="1dp" + /> + <com.android.systemui.statusbar.AlphaOptimizedView + android:id="@+id/notification_expand_divider" + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_gravity="top|center" + android:background="@*android:drawable/notification_template_divider" /> +</FrameLayout> diff --git a/packages/SystemUI/res/layout/recents.xml b/packages/SystemUI/res/layout/recents.xml index 26523f9..bdda527 100644 --- a/packages/SystemUI/res/layout/recents.xml +++ b/packages/SystemUI/res/layout/recents.xml @@ -32,12 +32,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true"> - <!-- MultiStack Debug View --> - <ViewStub android:id="@+id/multistack_debug_view_stub" - android:layout="@layout/recents_multistack_debug" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="left|bottom" /> </com.android.systemui.recents.views.RecentsView> <!-- Empty View --> diff --git a/packages/SystemUI/res/layout/recents_multistack_debug.xml b/packages/SystemUI/res/layout/recents_multistack_debug.xml deleted file mode 100644 index 6524a54..0000000 --- a/packages/SystemUI/res/layout/recents_multistack_debug.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2014 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="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="left|bottom" - android:orientation="vertical"> - <Button - android:id="@+id/add_stack" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center" - android:padding="8dp" - android:textSize="20sp" - android:textColor="#ffffffff" - android:text="@string/recents_multistack_add_stack" - android:fontFamily="sans-serif" - android:background="#000000" - android:alpha="0.5" /> - <Button - android:id="@+id/resize_stack" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:gravity="center" - android:padding="8dp" - android:textSize="20sp" - android:textColor="#ffffffff" - android:text="@string/recents_multistack_resize_stack" - android:fontFamily="sans-serif" - android:background="#000000" - android:alpha="0.5" /> -</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml b/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml deleted file mode 100644 index 36e54a0..0000000 --- a/packages/SystemUI/res/layout/recents_multistack_stack_size_dialog.xml +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2015 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="16dp" - android:orientation="vertical" - android:descendantFocusability="beforeDescendants" - android:focusableInTouchMode="true"> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <EditText - android:id="@+id/inset_left" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Left" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_top" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Top" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_right" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Right" - android:singleLine="true" - android:imeOptions="actionNext" - android:inputType="number" - android:selectAllOnFocus="true" /> - <EditText - android:id="@+id/inset_bottom" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_weight="1" - android:hint="Bottom" - android:singleLine="true" - android:imeOptions="actionDone" - android:inputType="number" - android:selectAllOnFocus="true" /> - </LinearLayout> -</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_task_resize_dialog.xml b/packages/SystemUI/res/layout/recents_task_resize_dialog.xml new file mode 100644 index 0000000..a8c6ee9 --- /dev/null +++ b/packages/SystemUI/res/layout/recents_task_resize_dialog.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="16dp" + android:orientation="vertical" + android:descendantFocusability="beforeDescendants" + android:focusableInTouchMode="true"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + <Button + android:id="@+id/place_left" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_left" /> + <Button + android:id="@+id/place_right" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_right" /> + <Button + android:id="@+id/place_top" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_top" /> + <Button + android:id="@+id/place_bottom" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_bottom" /> + <Button + android:id="@+id/place_full" + android:layout_width="36dp" + android:layout_height="36dp" + android:layout_weight="1" + android:layout_margin="10dp" + android:background="@drawable/vector_drawable_place_fullscreen" /> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/remote_input.xml b/packages/SystemUI/res/layout/remote_input.xml new file mode 100644 index 0000000..8ca5634 --- /dev/null +++ b/packages/SystemUI/res/layout/remote_input.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- + ~ Copyright (C) 2015 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> + +<!-- FrameLayout --> +<com.android.systemui.statusbar.policy.RemoteInputView + xmlns:android="http://schemas.android.com/apk/res/android" + android:theme="@style/systemui_theme_light" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:paddingStart="4dp" + android:paddingEnd="2dp" + android:paddingBottom="4dp" + android:paddingTop="2dp"> + + <view class="com.android.systemui.statusbar.policy.RemoteInputView$RemoteEditText" + android:id="@+id/remote_input_text" + android:layout_height="wrap_content" + android:layout_width="match_parent" + android:singleLine="true" + android:imeOptions="actionSend" /> + + <ProgressBar + android:id="@+id/remote_input_progress" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:visibility="invisible" + android:indeterminate="true" + style="?android:attr/progressBarStyleHorizontal" /> + +</com.android.systemui.statusbar.policy.RemoteInputView> diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml index 1d8cb46..f7bbce0 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded.xml @@ -79,7 +79,8 @@ android:layout_width="@dimen/notification_panel_width" android:layout_height="match_parent" android:layout_gravity="@integer/notification_panel_layout_gravity" - android:layout_marginBottom="@dimen/close_handle_underlap" /> + android:layout_marginBottom="@dimen/close_handle_underlap" + android:importantForAccessibility="no" /> <ViewStub android:id="@+id/keyguard_user_switcher" diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml index e9d86d6..ea7ce96 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_row.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml @@ -53,6 +53,22 @@ /> <ViewStub + android:layout="@layout/notification_children_container" + android:id="@+id/child_container_stub" + android:inflatedId="@+id/notification_children_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + /> + + <ViewStub + android:layout="@layout/notification_expand_button" + android:id="@+id/more_button_stub" + android:inflatedId="@+id/notification_more_button_container" + android:layout_width="match_parent" + android:layout_height="@dimen/notification_bottom_decor_height" + /> + + <ViewStub android:layout="@layout/notification_guts" android:id="@+id/notification_guts_stub" android:inflatedId="@+id/notification_guts" diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml index 6d3f976..532e1b7 100644 --- a/packages/SystemUI/res/layout/super_status_bar.xml +++ b/packages/SystemUI/res/layout/super_status_bar.xml @@ -22,9 +22,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:focusable="true" - android:fitsSystemWindows="true" - android:descendantFocusability="afterDescendants"> + android:fitsSystemWindows="true"> <com.android.systemui.statusbar.BackDropView android:id="@+id/backdrop" @@ -45,7 +43,8 @@ <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_behind" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:importantForAccessibility="no" /> <include layout="@layout/status_bar" android:layout_width="match_parent" @@ -82,6 +81,7 @@ <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_in_front" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:importantForAccessibility="no" /> </com.android.systemui.statusbar.phone.StatusBarWindowView> diff --git a/packages/SystemUI/res/layout/zen_mode_panel.xml b/packages/SystemUI/res/layout/zen_mode_panel.xml index 27353ff..33c1899 100644 --- a/packages/SystemUI/res/layout/zen_mode_panel.xml +++ b/packages/SystemUI/res/layout/zen_mode_panel.xml @@ -40,6 +40,16 @@ android:clipChildren="false" /> </FrameLayout> + <View + android:id="@+id/zen_embedded_divider" + android:layout_width="match_parent" + android:layout_height="1dp" + android:visibility="gone" + android:layout_marginStart="@dimen/qs_panel_padding" + android:layout_marginEnd="@dimen/qs_panel_padding" + android:layout_marginBottom="@dimen/qs_panel_padding" + android:background="#4dffffff" /> + <RelativeLayout android:id="@+id/zen_subhead" android:layout_width="match_parent" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index ba2c8eb..d234701 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Program Info"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Jou onlangse skerms verskyn hier"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Maak onlangse programme toe"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 skerm in Oorsig"</item> - <item quantity="other" msgid="5523506463832158203">"%d skerms in Oorsig"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d skerms in Oorsig</item> + <item quantity="one">1 skerm in Oorsig</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen kennisgewings"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Voortdurend"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Kennisgewings"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ontsluit"</string> <string name="phone_label" msgid="2320074140205331708">"maak foon oop"</string> <string name="camera_label" msgid="7261107956054836961">"maak kamera oop"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knoppie vir wissel van invoermetode."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Versoenbaarheid-zoem se knoppie."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoem kleiner na groter skerm."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth gekoppel."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Vliegtuigmodus aan."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus afgeskakel."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus aangeskakel."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Moenie steur nie aan, net prioriteit."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Moenie steur nie aan, geen onderbrekings nie."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Moenie steur nie af."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Moenie steur nie is afgeskakel."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Moenie steur nie is aangeskakel."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth af."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aan."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth koppel tans."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiele warmkol aangeskakel."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Uitsaai van skerm gestaak."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Skermhelderheid"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G-data is af"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-data is af"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Sellulêre data is af"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data is af"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Jou toestel het data afgeskakel, want dit het die limiet bereik wat jy gestel het.\n\nAs dit weer aangeskakel word, kan dit tot heffings van jou diensverskaffer af lei."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Skakel data aan"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G-data is laat wag"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data is laat wag"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Sellulêre data is onderbreek"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is onderbreek"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Omdat die gestelde dataperk bereik is, het die toestel datagebruik vir die res van hierdie siklus onderbreek.\n\nAs dit hervat word, kan dit tot heffings deur jou diensverskaffer lei."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Hervat"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Geen internetverbinding nie"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi gekoppel"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Soek vir GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Sluimer"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegtuigmodus"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Moenie steur nie"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Net prioriteit"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Geen onderbrekings nie"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> toestelle)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth af"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk nie"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Geen gestoorde netwerke beskikbaar nie"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Uitsaaiskerm"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Saai uit"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Saai tans uit"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Onbenoemde toestel"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gereed om uit te saai"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Meer instellings"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Klaar"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Gekoppel"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Gekoppel via Wi-Fi-assistent"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Gestoor"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Koppel tans …"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"USB-verbinding"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Warmkol"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"soek"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Kon nie <xliff:g id="APP">%s</xliff:g> begin nie."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Maak alle programme toe"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Verdeel horisontaal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verdeel vertikaal"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Verdeel gepasmaak"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Gelaai"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laai tans"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tot vol"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Sien hulle voordat jy ontsluit"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nee dankie"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Stel op"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Sien alles"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Versteek alles"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skerm is vasgespeld"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Dit hou dit in sig totdat jy dit ontspeld. Raak en hou Terug en Oorsig op dieselfde tyd om te ontspeld."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Versteek <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Dit sal verskyn die volgende keer wanneer jy dit in instellings aanskakel."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Versteek"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil die volumedialoog wees."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Laat toe"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Weier"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is die volumedialoog"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Raak om die oorspronklike terug te stel."</string> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index f4ba6f6..827a8a3 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"የትግበራ መረጃ"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"የቅርብ ጊዜ ማያ ገጾችዎ እዚህ ይታያሉ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"የቅርብ ጊዜ መተግበሪያዎችን ሰርዝ"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ማያ ገጽ በአጠቃላይ እይታ ውስጥ"</item> - <item quantity="other" msgid="5523506463832158203">"%d ማያ ገጾች በአጠቃላይ እይታ ውስጥ"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d ማያ ገጾች በአጠቃላይ እይታ ውስጥ</item> + <item quantity="other">%d ማያ ገጾች በአጠቃላይ እይታ ውስጥ</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ምንም ማሳወቂያዎች የሉም"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"በመካሄድ ላይ ያለ"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ማሳወቂያዎች"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ክፈት"</string> <string name="phone_label" msgid="2320074140205331708">"ስልክ ክፈት"</string> <string name="camera_label" msgid="7261107956054836961">"ካሜራ ክፈት"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"የግቤት ስልት አዝራር ቀይር"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"የተኳኋኝአጉላ አዝራር።"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"አነስተኛውን ማያ ወደ ትልቅ አጉላ።"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ብሉቱዝ ተያይዟል።"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"የአውሮፕላን ሁነታ በርቷል።"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"የአውሮፕላን ሁነታ ጠፍቷል።"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"የአውሮፕላን ሁነታ በርቷል።"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"አትረብሽ በርቷል፣ ቅድሚያ የሚሰጠው ብቻ።"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"አትረብሽ በርቷል፣ ምንም ማቋረጦች የሉም።"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"አትረብሽ ጠፍቷል።"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"አትረብሽ ጠፍቷል።"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"አትረብሽ በርቷል።"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ብሉቱዝ ጠፍቷል።"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ብሉቱዝ በርቷል።"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ብሉቱዝ በመገናኘት ላይ።"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"የተንቀሳቃሽ ስልክ መገናኛ ነጥብ በርቷል።"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ማያ ገጽ መውሰድ ቆሟል።"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ብሩህነት ያሳዩ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2ጂ-3ጂ ውሂብ ጠፍቷል"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4ጂ ውሂብ ጠፍቷል"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"የተንቀሳቃሽ ስልክ ውሂብ ጠፍቷል"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ውሂብ ጠፍቷል"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"መሳሪያዎ እርስዎ ያዘጋጁት ገደብ ላይ ስለደረሰ ውሂብን አጥፍቷል።\n\nመልሰው ማብራት ከአገልግሎት አቅራቢዎ ክፍያዎችን ሊያስከትል ይችላል።"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ውሂብ ያብሩ"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2ጂ-3ጂ ውሂብ ላፍታ ቆሟል"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4ጂ ውሂብ ላፍታ ቆሟል"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"የተንቀሳቃሽ ስልክ ውሂብ ላፍታ ቆሟል"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ውሂብ ላፍታ ቆሟል"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"የእርስዎ የተዋቀረው የውሂብ ገደብ ላይ ስለተደረሰ፣ የዚህን ዑደት አጠቃቀም ለማስታወስ መሣሪያው ላፍታ ቆሟል።\n\nከቆመበት ማስቀጠሉ ከእርስዎ የአገልግሎት አቅራቢ ክፍያን ሊያስጠይቅዎት ይችላል።"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ከቆመበት ቀጥል"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ምንም በይነመረብ ተያያዥ የለም።"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ተያይዟል"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"ለGPS በመፈለግ ላይ"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"የቀን ህልም"</string> <string name="ethernet_label" msgid="7967563676324087464">"ኤተርኔት"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"የአውሮፕላን ሁነታ"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"አትረብሽ"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ቅድሚያ የሚሰጠው ብቻ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ምንም ማቋረጦች የሉም"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ብሉቱዝ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ብሉቱዝ (<xliff:g id="NUMBER">%d</xliff:g> መሣሪያዎች)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ብሉቱዝ ጠፍቷል"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ምንም አውታረ መረብ የለም"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ጠፍቷል"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ምንም የተቀመጡ አውታረ መረቦች አይገኙም"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ማያ ገጽ ውሰድ"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"በመውሰድ ላይ"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ያልተሰየመ መሳሪያ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ለመውሰድ ዝግጁ"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"ተጨማሪ ቅንብሮች"</string> <string name="quick_settings_done" msgid="3402999958839153376">"ተከናውኗል"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"ተገናኝቷል"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"በWi‑Fi ረዳት አማካኝነት ተገናኝቷል"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"ተቀምጧል"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"በማገናኘት ላይ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"በማገናኘት ላይ"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"መገናኛ ነጥብ"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ሁሉንም ማመልከቻዎች አሰናብት"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"አግድም ክፈል"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ቁልቁል ክፈል"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"በብጁ ክፈል"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ባትሪ ሞልቷል"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ኃይል በመሙላት ላይ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> እስኪሞላ ድረስ"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ከመክፈትዎ በፊት ይመልከቷቸው"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"አይ፣ አመሰግናለሁ"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"አዋቅር"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"ሁሉንም ይመልከቱ"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"ሁሉንም ደብቅ"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>። <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"ማያ ገጽ ተሰክቷል"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ይህ እስከሚነቅሉት ድረስ ድረስ በዕይታ ውስጥ እንዲቆይ ያደርገዋል። ለመንቀል በተመሳሳይ ጊዜ ተመለስን እና አጠቃላይ ዕይታን አንድ ላይ ነክተው ይያዙ።"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ይደበቅ?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"በቅንብሮች ውስጥ በሚቀጥለው ጊዜ እንዲበራ በሚያደርጉበት ጊዜ ዳግመኛ ብቅ ይላል።"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ደብቅ"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> የድምጽ መጠን መገናኛው መሆን ይፈልጋል።"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ፍቀድ"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ከልክል"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> የድምጽ መጠን መገናኛው ነው"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"የመጀመሪያውን ወደነበረበት ለመመለስ ይንኩ።"</string> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 67e151e..2bcb2c1 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -25,10 +25,14 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"معلومات التطبيق"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"تظهر شاشاتك المعروضة مؤخرًا هنا"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"إزالة التطبيقات الحديثة"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"شاشة واحدة في النظرة عامة"</item> - <item quantity="other" msgid="5523506463832158203">"%d من الشاشات في النظرة عامة"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="zero"> لا توجد أية شاشات (%d) في النظرة العامة</item> + <item quantity="two">شاشتان (%d) في النظرة العامة</item> + <item quantity="few">%d شاشات في النظرة العامة</item> + <item quantity="many">%d شاشة في النظرة العامة</item> + <item quantity="other">%d من الشاشات في النظرة العامة</item> + <item quantity="one">شاشة واحدة في النظرة العامة</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي اشعارات"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"الإشعارات"</string> @@ -88,7 +92,6 @@ <string name="unlock_label" msgid="8779712358041029439">"إلغاء القفل"</string> <string name="phone_label" msgid="2320074140205331708">"فتح الهاتف"</string> <string name="camera_label" msgid="7261107956054836961">"فتح الكاميرا"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"زر تكبير/تصغير للتوافق."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"استخدام التكبير/التصغير لتحويل شاشة صغيرة إلى شاشة أكبر"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"تم توصيل البلوتوث."</string> @@ -143,7 +146,7 @@ <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"تجوال"</string> <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> - <string name="accessibility_no_sim" msgid="8274017118472455155">"ليست هناك بطاقة SIM."</string> + <string name="accessibility_no_sim" msgid="8274017118472455155">"ليست هناك شريحة SIM."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string> <string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"مستوى البطارية <xliff:g id="NUMBER">%d</xliff:g> في المائة."</string> @@ -177,6 +180,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"تشغيل وضع الطائرة."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"تم إيقاف وضع الطائرة."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"تم تشغيل وضع الطائرة."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"تم تشغيل الرجاء عدم الإزعاج، الأولوية فقط."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"تم تشغيل \"الرجاء عدم الإزعاج\"، ممنوع الإزعاج."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"تم تعطيل \"الرجاء عدم الإزعاج\"."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"تم تعطيل \"الرجاء عدم الإزعاج\"."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"تم تشغيل \"الرجاء عدم الإزعاج\"."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"إيقاف البلوتوث."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"تشغيل البلوتوث."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"جارٍ توصيل البلوتوث."</string> @@ -201,12 +209,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"تم تشغيل نقطة اتصال الجوّال."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"توقف إرسال الشاشة."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"سطوع الشاشة"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2-3 غيغابايت من البيانات المعطلة"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4 غيغابايت من البيانات المعطلة"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"البيانات الخلوية معطلة"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"البيانات معطلة"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"عطل جهازك البيانات نظرًا لبلوغها الحد الذي تم تعيينه.\n\nعلمًا بأن إعادتها قد يؤدي إلى تحمل رسوم من قبل مشغّل شبكة الجوّال."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"تشغيل البيانات"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"بيانات شبكات الجيل الثاني والثالث متوقفة مؤقتًا"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"تم إيقاف بيانات شبكة الجيل الرابع مؤقتًا"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"تم إيقاف بيانات شبكة الجوّال مؤقتًا"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"تم إيقاف البيانات مؤقتًا"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"نظرًا لأنك بلغت الحد الأقصى المحدد للبيانات، فقد أوقف الجهاز استخدام البيانات مؤقتًا في بقية هذه الدورة.\n\nومن الممكن أن يؤدي الاستئناف إلى تحصيل رسوم من قِبل مشغِّل شبكة الجوّال."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"استئناف"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"لا يوجد اتصال إنترنت"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"جارٍ البحث عن GPS"</string> @@ -225,6 +233,9 @@ <string name="start_dreams" msgid="7219575858348719790">"حلم اليقظة"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"وضع الطائرة"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"الرجاء عدم الإزعاج"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"الأولوية فقط"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"عدم الإزعاج"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"بلوتوث"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"بلوتوث (<xliff:g id="NUMBER">%d</xliff:g> من الأجهزة)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"إيقاف البلوتوث"</string> @@ -250,7 +261,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"إيقاف Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"لا تتوفر أية شبكة محفوظة"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"إرسال الشاشة"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"إرسال"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"جارٍ الإرسال"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"جهاز لا يحمل اسمًا"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"جاهز للإرسال"</string> @@ -262,8 +273,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"المزيد من الإعدادات"</string> <string name="quick_settings_done" msgid="3402999958839153376">"تم"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"متصل"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"تم التوصيل عبر مساعد Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"تم الحفظ"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"جارٍ الاتصال..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"النطاق"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"نقطة اتصال"</string> @@ -282,18 +291,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"تعذر بدء <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"تجاهل كل التطبيقات"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسيم رأسي"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"تقسيم مخصص"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"تم الشحن"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"جارٍ الشحن"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> حتى الاكتمال"</string> @@ -368,6 +368,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"الاطلاع عليها قبل إلغاء القفل"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"لا، شكرًا"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"إعداد"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"عرض الكل"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"إخفاء الكل"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"تم تثبيت الشاشة"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"يساعد هذا على استمرار العرض حتى يتم إلغاء التثبيت. ويمكنك لمس \"رجوع\" و\"عرض عام\" مع الاستمرار في وقت واحد لإلغاء التثبيت."</string> @@ -377,4 +379,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"هل تريد إخفاء <xliff:g id="TILE_LABEL">%1$s</xliff:g>؟"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"سيظهر مرة أخرى عند تمكينه في الإعدادات المرة التالية."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"إخفاء"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> أن يكون مربع حوار مستوى الصوت."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"سماح"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"رفض"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> هو مربع حوار مستوى الصوت"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"المس لاستعادة الإعداد الأصلي."</string> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 4d37f4a..a4251be 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информация за приложението"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Скорошните ви екрани се показват тук"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Отхвърляне на скорошните приложения"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 екран в панела за общ преглед"</item> - <item quantity="other" msgid="5523506463832158203">"%d екрана в панела за общ преглед"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d екрана в панела за общ преглед</item> + <item quantity="one">1 екран в панела за общ преглед</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Няма известия"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"В момента"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известия"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"отключване"</string> <string name="phone_label" msgid="2320074140205331708">"отваряне на телефона"</string> <string name="camera_label" msgid="7261107956054836961">"отваряне на камерата"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Бутон за превключване на метода на въвеждане."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Бутон за промяна на мащаба с цел съвместимост."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Промяна на мащаба на екрана от по-малък до по-голям."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth е включен."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Самолетният режим е включен."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Самолетният режим се изключи."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Самолетният режим се включи."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Настройката „Не безпокойте“ е включена – само с приоритет."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Настройката „Не безпокойте“ е включена – без прекъсвания."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Настройката „Не безпокойте“ е изключена."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Настройката „Не безпокойте“ е изключена."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Настройката „Не безпокойте“ е включена."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Функцията за Bluetooth е изключена."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Функцията за Bluetooth е включена."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Установява се връзка през Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилната точка за достъп се включи."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Предаването на съдържанието от екрана спря."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Яркост на екрана"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Данните от 2G – 3G са изключени"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Данните от 4G са изключени"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Мобилните данни са изключени"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Данните са изключени"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Устройството ви изключи данните, защото зададеното от вас ограничение бе достигнато.\n\nПовторното им включване може да доведе до таксуване от оператора ви."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Включване на данните"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Данните от 2G – 3G са поставени на пауза"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Данните от 4G са поставени на пауза"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Мобилните данни са поставени на пауза"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Данните са поставени на пауза"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Тъй като зададеното от вас ограничение за данни бе достигнато, устройството постави преноса им на пауза за остатъка от този цикъл.\n\nВъзобновяването може да доведе до таксуване от оператора ви."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Възобновяване"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Няма връзка с интернет"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: Има връзка"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Търси се GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Мечта"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Самолетен режим"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не безпокойте"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Само с приоритет"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Без прекъсвания"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> устройства)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth е изключен"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма мрежа"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е изключен"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Няма налични запазени мрежи"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Екран за предаване"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Предава се"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Устройство без име"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Готово за предаване"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Още настройки"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Готово"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Установена е връзка"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Установена е връзка чрез помощника за Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Запазено"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Установява се връзка..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Тетъринг"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка за достъп"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Отхвърляне на всички приложения"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хоризонтално разделяне"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Вертикално разделяне"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Персонализирано разделяне"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заредена"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарежда се"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до пълно зареждане"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Вижте известията, преди да отключите"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Няма нужда"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Настройване"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Преглед на всичко"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Скриване на всичко"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Екранът е фиксиран"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Така екранът ще се показва, докато не го освободите. За да направите това, докоснете и задръжте бутона за връщане назад и този за общ преглед едновременно."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Да се скрие ли „<xliff:g id="TILE_LABEL">%1$s</xliff:g>“?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Бързите настройки ще се покажат отново следващия път, когато ги включите от „Настройки“."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Скриване"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> иска да изпълнява ролята на диалоговия прозорец за силата на звука."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Разрешаване"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Отказване"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> изпълнява ролята на диалоговия прозорец за силата на звука"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Докоснете, за да възстановите оригинала."</string> </resources> diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml index 71c78b2..b085767 100644 --- a/packages/SystemUI/res/values-bn-rBD/strings.xml +++ b/packages/SystemUI/res/values-bn-rBD/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"অ্যাপ্লিকেশানের তথ্য"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"আপনার সাম্প্রতিক স্ক্রীনগুলো এখানে দেখা যাবে"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"সাম্প্রতিক অ্যাপ্লিকেশানগুলি খারিজ করুন"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"এক নজরে-এ ১টি স্ক্রীন"</item> - <item quantity="other" msgid="5523506463832158203">"এক নজরে-এ %dটি স্ক্রীন"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">ওভারভিউ-এ %dটি স্ক্রীন</item> + <item quantity="other">ওভারভিউ-এ %dটি স্ক্রীন</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"কোনো বিজ্ঞপ্তি নেই"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"চলতে-থাকা"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"বিজ্ঞপ্তিগুলি"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"আনলক করুন"</string> <string name="phone_label" msgid="2320074140205331708">"ফোন খুলুন"</string> <string name="camera_label" msgid="7261107956054836961">"ক্যামেরা খুলুন"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ইনপুট পদ্ধতির বোতাম পরিবর্তন করুন৷"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"সামঞ্জস্যের জুম বোতাম৷"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ছোট থেকে বৃহৎ স্ক্রীণে জুম করুন৷"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth সংযুক্ত হয়েছে৷"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"বিমান মোড চালু আছে।"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"বিমান মোড বন্ধ হয়েছে।"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"বিমান মোড চালু হয়েছে।"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“বিরক্ত করবেন না” চালু করবেন, শুধুমাত্র অগ্রাধিকার৷"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"“বিরক্ত করবেন না” চালু করবেন, কোন বাধা নয়"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“বিরক্ত করবেন না” বন্ধ৷"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"বিরক্ত করবেন না বন্ধ রয়েছে৷"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"বিরক্ত করবেন না চালু রয়েছে৷"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth বন্ধ আছে।"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth চালু আছে।"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth সংযুক্ত হচ্ছে।"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"মোবাইল হটস্পট চালু হয়েছে।"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"স্ক্রীন কাস্ট করা থেমেছে।"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"প্রদর্শনের উজ্জ্বলতা"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G ডেটা বন্ধ"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G ডেটা বন্ধ"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"সেলুলার ডেটা বন্ধ"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ডেটা বন্ধ"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"আপনার সেট করা ডেটা সীমায় পৌঁছে যাওয়ায় আপনার ডিভাইসটি ডেটা বন্ধ করে দিয়েছে।\n\nএটি চালু করে দিলে আপনাকে পরিষেবা প্রদানকারীর করা চার্জ বহন করতে হতে পারে।"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ডেটা চালু করুন"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ডেটা বিরতি দেওয়া হয়েছে"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ডেটা বিরতি দেওয়া হয়েছে"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"সেলুলার ডেটা বিরতি দেওয়া হয়েছে"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ডেট বিরতি দেওয়া হয়েছে"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"আপনার সেট ডেটার সীমা অবধি পৌঁছনোর কারনে ডিভাইস এই চক্রের অবশিষ্টাংশের জন্য ডেটা ব্যবহারে বিরতি দেওয়া হয়েছে৷ \n\nপুনরায় চালু করা হলে পরিষেবা প্রদানকারীর দ্বারা চার্জের করা হতে পারে৷"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"পুনঃসূচনা করুন"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"কোনো ইন্টারনেট সংযোগ নেই"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi সংযুক্ত হয়েছে"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS এর জন্য অনুসন্ধান করা হচ্ছে"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"স্ক্রিনসেভার"</string> <string name="ethernet_label" msgid="7967563676324087464">"ইথারনেট"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"বিমান মোড"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"বিরক্ত করবেন না"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"শুধুমাত্র অগ্রাধিকার"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"কোনো বাধা নয়"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> টি ডিভাইস)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth বন্ধ"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"কোনো নেটওয়ার্ক নেই"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi বন্ধ"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"কোন সংরক্ষিত নেটওয়ার্ক উপলব্ধ নেই"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"স্ক্রীন কাস্ট করুন"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"কাস্ট করা হচ্ছে"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"নামবিহীন ডিভাইস"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"কাস্ট করার জন্য প্রস্তুত"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"আরো সেটিংস"</string> <string name="quick_settings_done" msgid="3402999958839153376">"সম্পন্ন হয়েছে"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"সংযুক্ত হয়েছে"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi সহায়ক-এর মাধ্যমে সংযুক্ত হয়েছে"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"সংরক্ষিত হয়েছে"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"সংযুক্ত হচ্ছে..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"টেদারিং"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"হটস্পট"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"অনুসন্ধান"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> শুরু করা যায়নি৷"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"সমস্ত অ্যাপ্লিকেশন খারিজ করুন"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"অনুভূমিক স্প্লিট"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"উল্লম্ব স্প্লিট"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"কাস্টম স্প্লিট করুন"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"চার্জ হয়েছে"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"চার্জ হচ্ছে"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"পূর্ণ হতে <xliff:g id="CHARGING_TIME">%s</xliff:g> সময় লাগবে"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"আপনি আনলক করার আগে ওগুলো দেখুন"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"না থাক"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"সেট আপ"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"সবগুলি দেখুন"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"সবগুলি লুকান"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"স্ক্রীন পিন করা হয়েছে"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"এটি আপনার আনপিন না করা পর্যন্ত এটিকে দর্শনে রাখে৷ আনপিন করতে একই সময়ে ফিরুন এবং ওভারভিউ এ স্পর্শ করে ধরে রাখুন৷"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> লুকাবেন?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"আপনি পরের বার সেটিংস-এ এটি চালু করলে এটি উপস্থিত হবে"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"লুকান"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ভলিউম ডায়লগ হতে চায়৷"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"মঞ্জুরি দিন"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"প্রত্যাখ্যান করুন"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> হল ভলিউম ডায়লগ"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"আসলটি পুনঃস্থাপন করতে স্পর্শ করুন৷"</string> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 16d5d10..b260e44 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informació de l\'aplicació"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí es mostren les teves pantalles recents."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Omet les aplicacions recents"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 pantalla a Visió general"</item> - <item quantity="other" msgid="5523506463832158203">"%d pantalles a Visió general"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d pantalles en la visió general</item> + <item quantity="one">1 pantalla en la visió general</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Cap notificació"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continu"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacions"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloqueja"</string> <string name="phone_label" msgid="2320074140205331708">"obre el telèfon"</string> <string name="camera_label" msgid="7261107956054836961">"obre la càmera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'entrada."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botó de zoom de compatibilitat."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Amplia menys com més gran sigui la pantalla."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connectat."</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"El Mode d\'avió està activat."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"S\'ha desactivat el Mode d\'avió."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"S\'ha activat el Mode d\'avió."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"El mode No molesteu està activat (només amb prioritat)."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"El mode No molesteu està activat (cap interrupció)."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"El mode No molesteu està desactivat."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"S\'ha desactivat el mode No molesteu."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"S\'ha activat el mode No molesteu."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"El Bluetooth està desactivat."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"El Bluetooth està activat."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"S\'està connectant el Bluetooth."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"El punt d\'accés mòbil està activat."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"S\'ha aturat l\'emissió de la pantalla."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brillantor de la pantalla"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"L\'ús de dades 2G-3G està desactivat"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"L\'ús de dades 4G està desactivat"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Les dades mòbils estan desactivades"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Les dades estan desactivades"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"S\'han desactivat les dades del dispositiu perquè ha arribat al límit que has definit.\n\nSi les tornes a activar, l\'operador de telefonia mòbil et pot aplicar càrrecs."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activa les dades"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Les dades 2G-3G estan aturades"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Les dades 4G estan aturades"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Les dades mòbils estan aturades"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Les dades estan aturades"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Com que has arribat al límit de dades establert, s\'ha aturat l\'ús de dades del dispositiu per a la resta d\'aquest cicle.\n\nSi el reprens, l\'operador de telefonia mòbil pot aplicar càrrecs."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Reprèn"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No hi ha connexió a Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: connectada"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"S\'està cercant un GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Estalvi de pantalla"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode d\'avió"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molesteu"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Només amb prioritat"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Cap interrupció"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositius)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivat"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectada"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hi ha cap xarxa desada disponible."</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Envia pantalla"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"En emissió"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositiu sense nom"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"A punt per a l\'emissió"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Més opcions"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Fet"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connectat"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connectat mitjançant l\'assistent de Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"S\'ha desat"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"S\'està connectant..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Ancoratge a xarxa"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descarta totes les aplicacions"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisió vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisió personalitzada"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"S\'està carregant"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> per completar la càrrega"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Mostra-les abans de desbloquejar"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Mostra-les totes"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Amaga-les totes"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"La pantalla està fixada"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Continuarà a la visualització fins que n\'anul·lis la fixació. Per fer-ho, toca i mantén premuts els botons Enrere i Visió general a la vegada."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vols amagar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tornarà a mostrar-se la propera vegada que l\'activis a la configuració."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Amaga"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vol passar a ser el diàleg del volum."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permet"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Denega"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> és el diàleg de volum"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toca per restaurar l\'original."</string> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index c949164..f1cbb7e 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informace o aplikaci"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Zde budou zobrazeny vaše poslední obrazovky"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zavřít nové aplikace"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 obrazovka v Přehledu"</item> - <item quantity="other" msgid="5523506463832158203">"Počet obrazovek v Přehledu: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="few">%d obrazovky v Přehledu</item> + <item quantity="many">%d obrazovky v Přehledu</item> + <item quantity="other">%d obrazovek v Přehledu</item> + <item quantity="one">1 obrazovka v Přehledu</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žádná oznámení"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Probíhající"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Oznámení"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"odemknout"</string> <string name="phone_label" msgid="2320074140205331708">"otevřít telefon"</string> <string name="camera_label" msgid="7261107956054836961">"spustit fotoaparát"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačítko přepnutí metody zadávání"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačítko úpravy velikosti z důvodu kompatibility"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zvětšit menší obrázek na větší obrazovku."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Rozhraní Bluetooth je připojeno."</string> @@ -179,6 +180,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Režim Letadlo je zapnutý."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Režim Letadlo je vypnutý."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim Letadlo je zapnutý."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stav Nerušit je zapnutý – pouze prioritní vyrušení."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stav Nerušit je zapnutý – žádná vyrušení."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stav Nerušit je vypnutý."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušit je vypnutý"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Stav Nerušit je zapnutý."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Rozhraní Bluetooth je vypnuto."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Rozhraní Bluetooth je zapnuto."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Probíhá připojování rozhraní Bluetooth."</string> @@ -203,12 +209,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot je zapnutý."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Odesílání obrazovky zastaveno."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Jas displeje"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Data 2G a 3G jsou vypnuta"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Data 4G jsou vypnuta"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobilní data jsou vypnuta"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data jsou vypnuta"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Zařízení datové přenosy vypnulo, protože dosáhlo limitu, který jste nastavili.\n\nJejich opětovné zapnutí může vézt k účtování poplatků operátorem."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Zapnout data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G a 3G jsou pozastavena"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G jsou pozastavena"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobilní data jsou pozastavena"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data jsou pozastavena"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Protože jste dosáhli nastaveného limitu dat, zařízení využití dat pro zbytek tohoto cyklu pozastavilo.\n\nObnovení může vést k poplatkům od operátora."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Pokračovat"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Žádné přip. k internetu"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: připojeno"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhledávání satelitů GPS"</string> @@ -227,6 +233,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Spořič obrazovky"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Režim Letadlo"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušit"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Pouze prioritní"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Žádná vyrušení"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> zařízení)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhraní Bluetooth je vypnuto"</string> @@ -252,7 +261,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žádná síť"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi vypnuta"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nejsou dostupné žádné uložené sítě"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Odesílání obrazovky"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Odesílání"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepojmenované zařízení"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Připraveno k vysílání"</string> @@ -264,8 +274,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Další nastavení"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Hotovo"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Připojeno"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Připojeno pomocí asistenta připojení Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Uloženo"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Připojování..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Sdílení datového připojení"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -284,18 +292,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odstranit všechny aplikace"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vodorovné rozdělení"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikální rozdělení"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Vlastní rozdělení"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabito"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíjení"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do plného nabití"</string> @@ -370,6 +369,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Můžete si je přečíst před odemčením obrazovky."</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, děkuji"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastavit"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Zobrazit vše"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skrýt vše"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je připnuta"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Obsah bude připnut v zobrazení, dokud jej neuvolníte. Chcete-li jej uvolnit, stiskněte a podržte současně tlačítka Zpět a Přehled."</string> @@ -379,4 +380,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Skrýt <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tato položka se znovu zobrazí, až ji v nastavení znovu zapnete."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skrýt"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce být dialogem hlasitosti."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Povolit"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmítnout"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dialog hlasitosti"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Klepnutím obnovíte originál."</string> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 733f0c9..92efc89 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Oplysninger om appen"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Dine seneste skærme vises her"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Luk de seneste apps"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Ét skærmbillede i Oversigt"</item> - <item quantity="other" msgid="5523506463832158203">"%d skærmbilleder i Oversigt"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d skærmbilleder i Oversigt</item> + <item quantity="other">%d skærmbilleder i Oversigt</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen underretninger"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Underretninger"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"lås op"</string> <string name="phone_label" msgid="2320074140205331708">"åbn telefon"</string> <string name="camera_label" msgid="7261107956054836961">"åbn kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tilsluttet."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flytilstand er slået til."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flytilstand er slået fra."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flytilstand er slået til."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Vil ikke forstyrres\" er slået til, kun prioritet."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Vil ikke forstyrres\" er slået til, ingen afbrydelser."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Vil ikke forstyrres\" er slået fra."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Vil ikke forstyrres\" er slået fra."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Vil ikke forstyrres\" er slået til."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth er slået fra."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth er slået til."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Opretter forbindelse til Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilhotspot er slået til."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Casting af din skærm er stoppet."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Skærmens lysstyrke"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G-data er deaktiveret"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-data er deaktiveret"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobildata er deaktiveret"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data er deaktiveret"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Enheden har deaktiveret data, fordi den grænse, du har angivet, er nået.\n\nHvis du aktiverer dataforbrug igen, kan mobilselskabet pålægge gebyrer."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Aktivér data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G-data er sat på pause"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er sat på pause"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobildata er sat på pause"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data er sat på pause"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Eftersom din fastsatte datagrænse blev nået, har enheden sat dataforbruget på pause i den resterende del af cyklussen.\n\nHvis du genaktiverer dataforbruget, kan det medføre gebyrer fra dit mobilselskab."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Genoptag"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen internetforb."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi er forbundet"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Søger efter GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Dagdrøm"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flytilstand"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Vil ikke forstyrres"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kun prioritet"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ingen afbrydelser"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheder)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth slået fra"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Der er ingen tilgængelige gemte netværk"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast skærm"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Caster"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Enhed uden navn"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klar til at caste"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Flere indstillinger"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Udført"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Tilsluttet"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Forbindelse via Wi-Fi-assistent"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Gemt"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Opretter forbindelse…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Netdeling"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> kunne ikke startes."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Luk alle applikationer"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Opdel vandret"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Opdel lodret"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Opdel brugerdefineret"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opladet"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Oplader"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> indtil fuld opladet"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem, før du låser op"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nej tak"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfigurer"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Se alle"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skjul alle"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skærmen er fastgjort"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Dette fastholder den i visningen, indtil du frigør den. Tryk på Tilbage og Oversigt på samme tid, og hold dem nede for at frigøre denne skærm."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vil du skjule <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den vises igen, næste gang du aktiverer den i indstillingerne."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skjul"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ønsker at være dialogboksen for lydstyrke."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillad"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Afvis"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er dialogboksen for lydstyrke"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Tryk for at gendanne originalen."</string> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 9d0b907..1119f1f 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-Info"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Hier sehen Sie Ihre zuletzt geöffneten Apps."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Kürzlich geöffnete Apps schließen"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 Bildschirm in der Übersicht"</item> - <item quantity="other" msgid="5523506463832158203">"%d Bildschirme in der Übersicht"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d Bildschirme in der Übersicht</item> + <item quantity="one">1 Bildschirm in der Übersicht</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Keine Benachrichtigungen"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktuell"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Benachrichtigungen"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"Entsperren"</string> <string name="phone_label" msgid="2320074140205331708">"Telefon öffnen"</string> <string name="camera_label" msgid="7261107956054836961">"Kamera öffnen"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Schaltfläche für Kompatibilitätszoom"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom auf einen größeren Bildschirm"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Mit Bluetooth verbunden"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flugmodus aktiviert"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Der Flugmodus ist deaktiviert."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Der Flugmodus ist aktiviert."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Nicht stören\" an, nur wichtige Unterbrechungen"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Nicht stören\" an, keine Unterbrechungen"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Nicht stören\" aus"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Nicht stören\" deaktiviert"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Nicht stören\" aktiviert"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth deaktiviert"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aktiviert"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Verbindung mit Bluetooth wird hergestellt."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Der mobile Hotspot ist aktiviert."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Die Bildschirmübertragung wurde angehalten."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Helligkeit des Displays"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G/3G-Daten deaktiviert"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-Daten deaktiviert"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobilfunkdaten deaktiviert"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Daten deaktiviert"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Die Datennutzung wurde auf Ihrem Gerät deaktiviert, da das von Ihnen festgelegte Limit erreicht wurde.\n\nWenn Sie die Funktion erneut aktivieren, berechnet Ihr Mobilfunkanbieter möglicherweise Gebühren."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Daten aktivieren"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-/3G-Daten pausiert"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-Daten pausiert"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobilfunkdaten pausiert"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Daten pausiert"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Da Ihr festgelegtes Datenlimit erreicht wurde, hat das Gerät die Datennutzung für den Rest dieses Zeitraums pausiert.\n\nWenn Sie diese fortsetzen, können möglicherweise Kosten bei Ihrem Mobilfunkanbieter entstehen."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Fortsetzen"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht..."</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flugmodus"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nicht stören"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Nur wichtige Unterbrechungen"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Keine Unterbrechungen"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Geräte)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth aus"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Kein Netz"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN aus"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Keine gespeicherten Netzwerke verfügbar"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Bildschirm übertragen"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Wird übertragen"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unbenanntes Gerät"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Startklar"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Weitere Einstellungen"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Fertig"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Verbunden"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Über WLAN-Assistenten verbunden"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Gespeichert"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Verbindung wird hergestellt…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Alle Apps entfernen"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Geteilte Schaltfläche – horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Geteilte Schaltfläche – vertikal"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Geteilte Schaltfläche – benutzerdefiniert"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Aufgeladen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Wird aufgeladen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Voll in <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Vor dem Entsperren anzeigen"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nein danke"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Einrichten"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Alle anzeigen"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Alle ausblenden"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Bildschirm ist fixiert"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Hiermit wird sie angezeigt, bis Sie die Fixierung aufheben. Berühren und halten Sie \"Zurück\" und \"Übersicht\" gleichzeitig, um die Fixierung aufzuheben."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ausblenden?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Sie wird wieder eingeblendet, wenn Sie sie in den Einstellungen erneut aktivieren."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ausblenden"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> will die Lautstärke regeln."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Zulassen"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ablehnen"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> regelt die Lautstärke."</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Zum Wiederherstellen des Originals hier tippen"</string> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index 5e672b3..bc1b7a2 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Πληροφορίες εφαρμογής"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Οι πρόσφατες οθόνες σας εμφανίζονται εδώ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Παράβλεψη πρόσφατων εφαρμογών"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 οθόνη στην Επισκόπηση"</item> - <item quantity="other" msgid="5523506463832158203">"%d οθόνες στην Επισκόπηση"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d οθόνες στην Επισκόπηση</item> + <item quantity="one">1 οθόνη στην Επισκόπηση</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Δεν υπάρχουν ειδοποιήσεις"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Εν εξελίξει"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ειδοποιήσεις"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ξεκλείδωμα"</string> <string name="phone_label" msgid="2320074140205331708">"άνοιγμα τηλεφώνου"</string> <string name="camera_label" msgid="7261107956054836961">"άνοιγμα φωτογραφικής μηχανής"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί εστίασης συμβατότητας."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Ζουμ από μικρότερη σε μεγαλύτερη οθόνη."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Το Bluetooth είναι συνδεδεμένο."</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Ενεργή λειτουργία πτήσης."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Η λειτουργία πτήσης απενεργοποιήθηκε."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ενεργή λειτουργία πτήσης."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, μόνο προτεραιότητας."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε, χωρίς διακοπές."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Η λειτουργία \"Μην ενοχλείτε\" απενεργοποιήθηκε."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Η λειτουργία \"Μην ενοχλείτε\" απενεργοποιήθηκε."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Η λειτουργία \"Μην ενοχλείτε\" ενεργοποιήθηκε."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Ανενεργό Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Ενεργό Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Σύνδεση Bluetooth."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Το σημείο πρόσβασης κινητής συσκευής ενεργοποιήθηκε."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Η μετάδοση της οθόνης διακόπηκε."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Φωτεινότητα οθόνης"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Τα δεδομένα 2G-3G είναι ανενεργά"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Τα δεδομένα 4G είναι ανενεργά"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Τα δεδομένα κινητής τηλεφωνίας είναι ανενεργά"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Τα δεδομένα είναι ανενεργά"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Τα δεδομένα απενεργοποιήθηκαν στη συσκευή σας, επειδή εξαντλήσατε το όριο που ορίσατε.\n\nΗ επανενεργοποίησή τους ενδέχεται να επιφέρει χρεώσεις από την εταιρεία κινητής τηλεφωνίας σας."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Ενεργοποίηση δεδομένων"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Τα δεδομένα 2G-3G τέθηκαν σε παύση"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Τα δεδομένα 4G τέθηκαν σε παύση"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Τα δεδομένα κινητής τηλεφωνίας τέθηκαν σε παύση"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Τα δεδομένα τέθηκαν σε παύση"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Επειδή συμπληρώθηκε το όριο των δεδομένων που ορίστηκε για τη συσκευή σας, η χρήση δεδομένων τέθηκε σε παύση για το υπόλοιπο αυτού του κύκλου.\n\nΗ εκ νέου ενεργοποίησή τους ενδέχεται να επιφέρει χρεώσεις από την εταιρεία κινητής τηλεφωνίας σας."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Συνέχιση"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Χωρ. σύνδ. στο Διαδ."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi συνδεδεμένο"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Αναζήτηση για GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Λειτουργία πτήσης"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Μην ενοχλείτε"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Μόνο προτεραιότητας"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Χωρίς διακοπές"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> συσκευές)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Απενεργοποιημένο Bluetooth"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Κανένα δίκτυο"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ανενεργό"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Δεν υπάρχουν διαθέσιμα αποθηκευμένα δίκτυα"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Οθόνη μετάδοσης"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Μετάδοση"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Ανώνυμη συσκευή"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Έτοιμο για μετάδοση"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Περισσότερες ρυθμίσεις"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Τέλος"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Συνδέθηκε"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Σύνδεση μέσω βοηθού Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Αποθηκεύτηκε"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Σύνδεση…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Πρόσδεση"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Σημείο πρόσβασης Wi-Fi"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Δεν ήταν δυνατή η εκκίνηση της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Παράβλεψη όλων των εφαρμογών"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Οριζόντιος διαχωρισμός"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Κάθετος διαχωρισμός"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Προσαρμοσμένος διαχωρισμός"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Φορτίστηκε"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Φόρτιση"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> για πλήρη φόρτιση"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Εμφάνιση πριν το ξεκλείδωμα"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Όχι"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Ρύθμιση"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Εμφάνιση όλων"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Aπόκρυψη όλων"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Η οθόνη καρφιτσώθηκε"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Με αυτόν τον τρόπο παραμένει σε προβολή έως ότου την ξεκαρφιτσώσετε. Αγγίξτε παρατεταμένα \"Επιστροφή\" και \"Επισκόπηση\" ταυτόχρονα για ξεκαρφίτσωμα."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Απόκρυψη <xliff:g id="TILE_LABEL">%1$s</xliff:g>;"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Θα εμφανιστεί ξανά την επόμενη φορά που θα το ενεργοποιήσετε στις ρυθμίσεις."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Απόκρυψη"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> θέλει να γίνει το παράθυρο διαλόγου ελέγχου έντασης"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Να επιτραπεί"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Απόρριψη"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> αποτελεί το παράθυρο διαλόγου ελέγχου έντασης"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Αγγίξτε για επαναφορά αρχικού."</string> </resources> diff --git a/packages/SystemUI/res/values-en-rAU-land/strings.xml b/packages/SystemUI/res/values-en-rAU-land/strings.xml new file mode 100644 index 0000000..ba773b8 --- /dev/null +++ b/packages/SystemUI/res/values-en-rAU-land/strings.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/** + * Copyright (c) 2010, 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. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="toast_rotation_locked" msgid="7609673011431556092">"Screen is now locked in landscape orientation."</string> +</resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..ee3f826 --- /dev/null +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -0,0 +1,383 @@ +<?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. + */ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="7164937344850004466">"System UI"</string> + <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string> + <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string> + <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string> + <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d screens in Overview</item> + <item quantity="one">1 screen in Overview</item> + </plurals> + <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string> + <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string> + <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> + <string name="battery_low_title" msgid="6456385927409742437">"Battery is low"</string> + <string name="battery_low_percent_format" msgid="2900940511201380775">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining"</string> + <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"<xliff:g id="PERCENTAGE">%s</xliff:g> remaining. Battery saver is on."</string> + <string name="invalid_charger" msgid="4549105996740522523">"USB charging not supported.\nUse only the supplied charger."</string> + <string name="invalid_charger_title" msgid="3515740382572798460">"USB charging not supported."</string> + <string name="invalid_charger_text" msgid="5474997287953892710">"Use only the supplied charger."</string> + <string name="battery_low_why" msgid="4553600287639198111">"Settings"</string> + <string name="battery_saver_confirmation_title" msgid="5299585433050361634">"Turn on battery saver?"</string> + <string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Turn on"</string> + <string name="battery_saver_start_action" msgid="5576697451677486320">"Turn on battery saver"</string> + <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Settings"</string> + <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string> + <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Aeroplane mode"</string> + <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Auto-rotate screen"</string> + <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string> + <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> + <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string> + <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string> + <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string> + <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string> + <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string> + <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string> + <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string> + <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string> + <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string> + <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string> + <string name="label_view" msgid="6304565553218192990">"View"</string> + <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string> + <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string> + <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string> + <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> + <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string> + <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string> + <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string> + <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string> + <string name="screenshot_saving_title" msgid="8242282144535555697">"Saving screenshot…"</string> + <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot is being saved."</string> + <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot captured."</string> + <string name="screenshot_saved_text" msgid="1152839647677558815">"Touch to view your screenshot."</string> + <string name="screenshot_failed_title" msgid="705781116746922771">"Couldn\'t capture screenshot."</string> + <string name="screenshot_failed_text" msgid="1260203058661337274">"Can\'t take screenshot due to limited storage space, or it isn\'t allowed by the app or your organisation."</string> + <string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string> + <string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string> + <string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string> + <string name="installer_cd_button_title" msgid="2312667578562201583">"Install Android File Transfer application for Mac"</string> + <string name="accessibility_back" msgid="567011538994429120">"Back"</string> + <string name="accessibility_home" msgid="8217216074895377641">"Home"</string> + <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string> + <string name="accessibility_recent" msgid="5208608566793607626">"Overview"</string> + <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string> + <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string> + <string name="accessibility_phone_button" msgid="6738112589538563574">"Phone"</string> + <string name="accessibility_unlock_button" msgid="128158454631118828">"Unlock"</string> + <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> + <string name="phone_label" msgid="2320074140205331708">"open phone"</string> + <string name="camera_label" msgid="7261107956054836961">"open camera"</string> + <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string> + <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string> + <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string> + <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth disconnected."</string> + <string name="accessibility_no_battery" msgid="358343022352820946">"No battery."</string> + <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery one bar."</string> + <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery two bars."</string> + <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery three bars."</string> + <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery full."</string> + <string name="accessibility_no_phone" msgid="4894708937052611281">"No phone."</string> + <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Phone one bar."</string> + <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Phone two bars."</string> + <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Phone three bars."</string> + <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Phone signal full."</string> + <string name="accessibility_no_data" msgid="4791966295096867555">"No data."</string> + <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data one bar."</string> + <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data two bars."</string> + <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data three bars."</string> + <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data signal full."</string> + <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi off."</string> + <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi disconnected."</string> + <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wi-Fi one bar."</string> + <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wi-Fi two bars."</string> + <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wi-Fi three bars."</string> + <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wi-Fi signal full."</string> + <string name="accessibility_wifi_name" msgid="7202151365171148501">"Connected to <xliff:g id="WIFI">%s</xliff:g>."</string> + <string name="accessibility_bluetooth_name" msgid="8441517146585531676">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string> + <string name="accessibility_no_wimax" msgid="4329180129727630368">"No WiMAX."</string> + <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX one bar."</string> + <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string> + <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string> + <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string> + <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string> + <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string> + <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string> + <string name="accessibility_one_bar" msgid="1685730113192081895">"One bar."</string> + <string name="accessibility_two_bars" msgid="6437363648385206679">"Two bars."</string> + <string name="accessibility_three_bars" msgid="2648241415119396648">"Three bars."</string> + <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal full."</string> + <string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string> + <string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string> + <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string> + <string name="accessibility_desc_connecting" msgid="3812924520316280149">"Connecting."</string> + <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string> + <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string> + <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string> + <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string> + <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string> + <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string> + <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string> + <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string> + <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string> + <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string> + <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string> + <string name="accessibility_no_sim" msgid="8274017118472455155">"No SIM."</string> + <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string> + <string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string> + <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string> + <string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string> + <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string> + <string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string> + <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string> + <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string> + <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string> + <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string> + <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string> + <!-- no translation found for accessibility_casting (6887382141726543668) --> + <skip /> + <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string> + <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string> + <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string> + <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Starting <xliff:g id="APP">%s</xliff:g>."</string> + <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string> + <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string> + <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string> + <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Lock screen."</string> + <string name="accessibility_desc_settings" msgid="3417884241751434521">"Settings"</string> + <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"Overview."</string> + <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string> + <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wi-Fi turned off."</string> + <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wi-Fi turned on."</string> + <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobile <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string> + <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Aeroplane mode off."</string> + <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Aeroplane mode on."</string> + <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string> + <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'Do not disturb\' turned on."</string> + <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth off."</string> + <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on."</string> + <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth connecting."</string> + <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth connected."</string> + <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth turned off."</string> + <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth turned on."</string> + <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"Location reporting off."</string> + <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"Location reporting on."</string> + <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"Location reporting turned off."</string> + <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"Location reporting turned on."</string> + <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string> + <string name="accessibility_quick_settings_close" msgid="3115847794692516306">"Close panel."</string> + <string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"More time."</string> + <string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"Less time."</string> + <string name="accessibility_quick_settings_flashlight_off" msgid="4936432000069786988">"Torch off."</string> + <string name="accessibility_quick_settings_flashlight_on" msgid="2003479320007841077">"Torch on."</string> + <string name="accessibility_quick_settings_flashlight_changed_off" msgid="3303701786768224304">"Torch turned off."</string> + <string name="accessibility_quick_settings_flashlight_changed_on" msgid="6531793301533894686">"Torch turned on."</string> + <string name="accessibility_quick_settings_color_inversion_changed_off" msgid="4406577213290173911">"Colour inversion turned off."</string> + <string name="accessibility_quick_settings_color_inversion_changed_on" msgid="6897462320184911126">"Colour inversion turned on."</string> + <string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string> + <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string> + <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string> + <string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobile data is paused"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is paused"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Because your set data limit was reached, the device has paused data usage for the remainder of this cycle.\n\nResuming may lead to charges from your operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Resume"</string> + <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string> + <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string> + <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string> + <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string> + <string name="accessibility_location_active" msgid="2427290146138169014">"Location requests active"</string> + <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string> + <string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"Notification settings"</string> + <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> settings"</string> + <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string> + <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string> + <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string> + <string name="accessibility_rotation_lock_off_changed" msgid="8134601071026305153">"Screen will now rotate automatically."</string> + <string name="accessibility_rotation_lock_on_landscape_changed" msgid="3135965553707519743">"Screen is now locked in landscape orientation."</string> + <string name="accessibility_rotation_lock_on_portrait_changed" msgid="8922481981834012126">"Screen is now locked in portrait orientation."</string> + <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string> + <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> + <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> + <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string> + <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> + <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string> + <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string> + <string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"No paired devices available"</string> + <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string> + <string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Auto-rotate"</string> + <string name="quick_settings_rotation_locked_label" msgid="6359205706154282377">"Rotation locked"</string> + <string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"Portrait"</string> + <string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"Landscape"</string> + <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string> + <string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string> + <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string> + <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string> + <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string> + <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Emergency Calls Only"</string> + <string name="quick_settings_settings_label" msgid="5326556592578065401">"Settings"</string> + <string name="quick_settings_time_label" msgid="4635969182239736408">"Time"</string> + <string name="quick_settings_user_label" msgid="5238995632130897840">"Me"</string> + <string name="quick_settings_user_title" msgid="4467690427642392403">"User"</string> + <string name="quick_settings_user_new_user" msgid="9030521362023479778">"New user"</string> + <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> + <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string> + <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> + <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> + <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> + <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> + <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> + <string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"No devices available"</string> + <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string> + <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string> + <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Invert colours"</string> + <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string> + <string name="quick_settings_more_settings" msgid="326112621462813682">"More settings"</string> + <string name="quick_settings_done" msgid="3402999958839153376">"Done"</string> + <string name="quick_settings_connected" msgid="1722253542984847487">"Connected"</string> + <string name="quick_settings_connecting" msgid="47623027419264404">"Connecting..."</string> + <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> + <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> + <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifications"</string> + <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Torch"</string> + <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Mobile data"</string> + <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Data usage"</string> + <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Remaining data"</string> + <string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Over limit"</string> + <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string> + <string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string> + <string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string> + <string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string> + <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string> + <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string> + <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> + <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string> + <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string> + <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> + <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> + <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> + <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Not charging"</string> + <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string> + <string name="description_target_search" msgid="3091587249776033139">"Search"</string> + <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"No interruptions. Not even alarms."</string> + <string name="zen_no_interruptions" msgid="7970973750143632592">"No interruptions"</string> + <string name="zen_important_interruptions" msgid="3477041776609757628">"Priority interruptions only"</string> + <string name="zen_alarm_information_time" msgid="5235772206174372272">"Your next alarm is at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> + <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Your next alarm is <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string> + <string name="zen_alarm_warning" msgid="6873910860111498041">"You won\'t hear your alarm at <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> + <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> + <string name="speed_bump_explanation" msgid="1288875699658819755">"Less urgent notifications below"</string> + <string name="notification_tap_again" msgid="8524949573675922138">"Touch again to open"</string> + <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string> + <string name="phone_hint" msgid="3101468054914424646">"Swipe right for phone"</string> + <string name="camera_hint" msgid="5241441720959174226">"Swipe left for camera"</string> + <string name="interruption_level_none" msgid="3831278883136066646">"None"</string> + <string name="interruption_level_priority" msgid="6517366750688942030">"Priority"</string> + <string name="interruption_level_all" msgid="1330581184930945764">"All"</string> + <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> + <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"Switch user"</string> + <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"Switch user, current user <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string> + <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"Show profile"</string> + <string name="user_add_user" msgid="5110251524486079492">"Add user"</string> + <string name="user_new_user_name" msgid="426540612051178753">"New user"</string> + <string name="guest_nickname" msgid="8059989128963789678">"Guest"</string> + <string name="guest_new_guest" msgid="600537543078847803">"Add guest"</string> + <string name="guest_exit_guest" msgid="7187359342030096885">"Remove guest"</string> + <string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"Remove guest?"</string> + <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"All apps and data in this session will be deleted."</string> + <string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"Remove"</string> + <string name="guest_wipe_session_title" msgid="6419439912885956132">"Welcome back, guest!"</string> + <string name="guest_wipe_session_message" msgid="8476238178270112811">"Do you want to continue your session?"</string> + <string name="guest_wipe_session_wipe" msgid="5065558566939858884">"Start again"</string> + <string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"Yes, continue"</string> + <string name="user_add_user_title" msgid="4553596395824132638">"Add new user?"</string> + <string name="user_add_user_message_short" msgid="2161624834066214559">"When you add a new user, that person needs to set up their space.\n\nAny user can update apps for all other users."</string> + <string name="battery_saver_notification_title" msgid="237918726750955859">"Battery saver is on"</string> + <string name="battery_saver_notification_text" msgid="820318788126672692">"Reduces performance and background data"</string> + <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Turn off battery saver"</string> + <string name="notification_hidden_text" msgid="1135169301897151909">"Contents hidden"</string> + <string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> will start capturing everything that\'s displayed on your screen."</string> + <string name="media_projection_remember_text" msgid="3103510882172746752">"Don\'t show again"</string> + <string name="clear_all_notifications_text" msgid="814192889771462828">"Clear all"</string> + <string name="media_projection_action_text" msgid="8470872969457985954">"Start now"</string> + <string name="empty_shade_text" msgid="708135716272867002">"No notifications"</string> + <string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string> + <string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string> + <string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string> + <string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string> + <string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string> + <string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string> + <string name="disable_vpn" msgid="4435534311510272506">"Disable VPN"</string> + <string name="disconnect_vpn" msgid="1324915059568548655">"Disconnect VPN"</string> + <string name="monitoring_description_device_owned" msgid="7512371572956715493">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_vpn" msgid="7288268682714305659">"You gave \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" permission to set up a VPN connection.\n\nThis app can monitor your device and network activity, including emails, apps and secure websites."</string> + <string name="monitoring_description_legacy_vpn" msgid="4740349017929725435">"You\'re connected to a VPN (\"<xliff:g id="APPLICATION">%1$s</xliff:g>\").\n\nYour VPN service provider can monitor your device and network activity including emails, apps and secure websites."</string> + <string name="monitoring_description_vpn_device_owned" msgid="696121105616356493">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_device_owned" msgid="649791650224064248">"This device is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%2$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="monitoring_description_profile_owned" msgid="2370062794285691713">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_device_and_profile_owned" msgid="8685301493845456293">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator can monitor your device and network activity, including emails, apps and secure websites.\n\nFor more information, contact your administrator."</string> + <string name="monitoring_description_vpn_profile_owned" msgid="847491346263295767">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%2$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_profile_owned" msgid="4095516964132237051">"This profile is managed by:\n<xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%2$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="monitoring_description_vpn_device_and_profile_owned" msgid="9193588924767232909">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you gave \"<xliff:g id="APPLICATION">%3$s</xliff:g>\" permission to set up a VPN connection. This app can monitor network activity too."</string> + <string name="monitoring_description_legacy_vpn_device_and_profile_owned" msgid="6935475023447698473">"This device is managed by:\n<xliff:g id="ORGANIZATION_0">%1$s</xliff:g>\nYour profile is managed by:\n<xliff:g id="ORGANIZATION_1">%2$s</xliff:g>\n\nYour administrator is capable of monitoring your network activity including emails, apps and secure websites. For more information, contact your administrator.\n\nAlso, you\'re connected to a VPN (\"<xliff:g id="APPLICATION">%3$s</xliff:g>\"). Your VPN service provider can monitor network activity too."</string> + <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"Device will stay locked until you manually unlock"</string> + <string name="hidden_notifications_title" msgid="7139628534207443290">"Get notifications faster"</string> + <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string> + <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, thanks"</string> + <string name="hidden_notifications_setup" msgid="41079514801976810">"Setup"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string> + <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> + <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string> + <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string> + <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"This keeps it in view until you unpin. Touch and hold Overview to unpin."</string> + <string name="screen_pinning_positive" msgid="3783985798366751226">"Got it"</string> + <string name="screen_pinning_negative" msgid="3741602308343880268">"No, thanks"</string> + <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> + <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string> + <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Touch to restore the original."</string> +</resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 0d627cf..ee3f826 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 screen in Overview"</item> - <item quantity="other" msgid="5523506463832158203">"%d screens in Overview"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d screens in Overview</item> + <item quantity="one">1 screen in Overview</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> <string name="camera_label" msgid="7261107956054836961">"open camera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Aeroplane mode on."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'Do not disturb\' turned on."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth off."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth connecting."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G data is off"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G data is off"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobile data is off"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data is off"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Your device turned off data because it reached the limit you set.\n\nTurning it back on may lead to charges from your operator."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Turn on data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobile data is paused"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is paused"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Because your set data limit was reached, the device has paused data usage for the remainder of this cycle.\n\nResuming may lead to charges from your operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Resume"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast screen"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"More settings"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Done"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connected"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connected via Wi‑Fi assistant"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Saved"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Connecting..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, thanks"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Setup"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Touch to restore the original."</string> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 0d627cf..ee3f826 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 screen in Overview"</item> - <item quantity="other" msgid="5523506463832158203">"%d screens in Overview"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d screens in Overview</item> + <item quantity="one">1 screen in Overview</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"unlock"</string> <string name="phone_label" msgid="2320074140205331708">"open phone"</string> <string name="camera_label" msgid="7261107956054836961">"open camera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Aeroplane mode on."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Aeroplane mode turned off."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Aeroplane mode turned on."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'Do not disturb\' on, priority only."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'Do not disturb\' on, no interruptions."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'Do not disturb\' off."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'Do not disturb\' turned off."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'Do not disturb\' turned on."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth off."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth connecting."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G data is off"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G data is off"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobile data is off"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data is off"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Your device turned off data because it reached the limit you set.\n\nTurning it back on may lead to charges from your operator."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Turn on data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobile data is paused"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data is paused"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Because your set data limit was reached, the device has paused data usage for the remainder of this cycle.\n\nResuming may lead to charges from your operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Resume"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Do not disturb"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priority only"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"No interruptions"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No saved networks available"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast screen"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Unnamed device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ready to cast"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"More settings"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Done"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connected"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connected via Wi‑Fi assistant"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Saved"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Connecting..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Could not start <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dismiss all applications"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Customised"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Charged"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charging"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> until full"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"See them before you unlock"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, thanks"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Setup"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"See all"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Hide all"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Screen is pinned"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Hide <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"It will reappear the next time you turn it on in settings."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Hide"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wants to be the volume dialogue."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Allow"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Deny"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is the volume dialogue"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Touch to restore the original."</string> </resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index a70ef9a..a605a03 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Las pantallas recientes aparecen aquí."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rechazar aplicaciones recientes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 pantalla en Recientes"</item> - <item quantity="other" msgid="5523506463832158203">"%d pantallas en Recientes"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d pantallas en Recientes</item> + <item quantity="one">1 pantalla en Recientes</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No hay notificaciones"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Continuo"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string> <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo de avión: activado"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avión desactivado"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avión activado"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"No molestar activado (solo prioridad)"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"No molestar activado (sin interrupciones)"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"No molestar desactivado"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"No molestar desactivado"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"No molestar activado"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth desactivado"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth activado"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth conectándose"</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Zona móvil activada"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmisión de pantalla detenida"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de pantalla"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Datos 2G-3G desactivados"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Datos 4G desactivados"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Datos móviles desactivados"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Datos desactivados"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"El dispositivo desactivó los datos porque alcanzó el límite establecido.\n\nSi los vuelves a activar, podrían aplicarse cargos del proveedor."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activar datos"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Datos 2G-3G pausados"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Datos 4G pausados"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Datos móviles pausados"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datos pausados"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Debido que se alcanzó el límite de datos establecido, el dispositivo pausó el uso de datos para el resto de este ciclo.\n\nLa reanudación podría tener como resultado cargos del proveedor."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Reanudar"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sin conexión a Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Activar protector"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioridad"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sin interrupciones"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sin red"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivada"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hay redes guardadas disponibles"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir pantalla"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Transmitiendo"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sin nombre"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para transmitir"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Más configuraciones"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Listo"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Conectado"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Conexión por asistente de Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Guardado/a"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Conectando…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Anclaje a red"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Descartar todas las aplicaciones"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completarse"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todas"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todas"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fija"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Esta función mantiene fija la vista de la pantalla hasta que la desactivas. Mantén presionados los botones Atrás y Recientes al mismo tiempo para anular la fijación."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"¿Ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá a aparecer la próxima vez que se active en la configuración."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere ser el cuadro de diálogo de volumen."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rechazar"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> es el cuadro de diálogo de volumen."</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toca para restaurar el original."</string> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 54926ce..dcffc65 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí aparecerán tus pantallas recientes"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicaciones recientes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 pantalla en Visión general"</item> - <item quantity="other" msgid="5523506463832158203">"%d pantallas en Visión general"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d pantallas en Visión general</item> + <item quantity="one">1 pantalla en Visión general</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No tienes notificaciones"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Entrante"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificaciones"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string> <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avión activado."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo avión desactivado."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo avión activado."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"No molestar activado (solo prioritarias)."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"No molestar activado (sin interrupciones)."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"No molestar desactivado."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"No molestar desactivado."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"No molestar activado."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth desactivado."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth activado."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Conectando Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Punto de acceso móvil activado."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Envío de pantalla detenido."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de la pantalla"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Datos 2G-3G desactivados"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Datos 4G desactivados"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Datos móviles desactivados"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Conexión de datos desactivada"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Se ha desactivado la conexión de datos del dispositivo porque se ha alcanzado el límite establecido.\n\nSi se vuelve a activar, se podrían aplicar cargos del operador."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activar conexión de datos"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Datos 2G-3G pausados"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Datos 4G pausados"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Datos móviles pausados"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datos pausados"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Has alcanzado el límite de datos establecido, por lo que el dispositivo ha pausado el uso de datos para el resto de este ciclo.\n\nSi lo reanudas, el operador puede facturar cargos."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Reanudar"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sin conexión a Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Con conexión Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Salvapantallas"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"No molestar"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo prioritarias"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sin interrupciones"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hay red."</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivado"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"No hay redes guardadas disponibles"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Enviar pantalla"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Enviando"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sin nombre"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para enviar"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Más opciones"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Listo"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Conectado"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Conectado a través de asistente Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Guardado"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Anclaje a red"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No se ha podido iniciar <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignorar todas las aplicaciones"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"División vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"División personalizada"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completarse"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, gracias"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todas"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todas"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Pantalla fijada"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"La pantalla se mantendrá visible hasta que dejes de fijarla. Para ello, mantén pulsados los botones de retroceso e información general."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"¿Ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá a aparecer la próxima vez que actives esta opción en Ajustes."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere ser el cuadro de diálogo de volumen."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rechazar"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> es el cuadro de diálogo de volumen"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toca para restaurar la versión original."</string> </resources> diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml index cb2dd7b..1a74a8f 100644 --- a/packages/SystemUI/res/values-et-rEE/strings.xml +++ b/packages/SystemUI/res/values-et-rEE/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Rakenduse teave"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Teie viimane ekraanikuva ilmub siia"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loobu hiljutistest rakendustest"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ekraan jaotises Ülevaade"</item> - <item quantity="other" msgid="5523506463832158203">"%d ekraanikuva jaotises Ülevaade"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d ekraani jaotises Ülevaade</item> + <item quantity="one">1 ekraan jaotises Ülevaade</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Teatisi pole"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Jätkuv"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Märguanded"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ava lukk"</string> <string name="phone_label" msgid="2320074140205331708">"ava telefon"</string> <string name="camera_label" msgid="7261107956054836961">"ava kaamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Sisestusmeetodi vahetamise nupp."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Sobivussuumi nupp."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Suumi suuremale ekraanile vähem."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth on ühendatud."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lennukirežiim on sees."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lennukirežiim on välja lülitatud."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lennukirežiim on sisse lülitatud."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Funktsioon Mitte segada on sisse lülitatud (ainult prioriteetsed)."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Funktsioon Mitte segada on sisse lülitatud (mitte ühtegi katkestust)."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Funktsioon Mitte segada on välja lülitatud."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Funktsioon Mitte segada on välja lülitatud."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Funktsioon Mitte segada on sisse lülitatud."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth on väljas."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on sees."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetoothi ühendatakse."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiilside leviala on sisse lülitatud."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekraanikuva ülekandmine on peatatud."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ekraani heledus"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G–3G andmeside on väljalülitatud"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G andmeside on väljalülitatud"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mob. andmeside väljalülitatud"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Andmeside on väljalülitatud"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Seade lülitas andmeside välja, sest teie määratud limiit on täis.\n\nKui lülitate andmeside uuesti sisse, siis võivad lisanduda operaatori tasud."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Lülita andmeside sisse"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G andmekasutus on peatatud"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G andmekasutus on peatatud"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobiilse andmeside kasutus on peatatud"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Andmekasutus on peatatud"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Kuna jõudsite andmemahu määratud piirini, peatas seade andmekasutuse ülejäänud tsükliks.\n\nJätkamisel võivad lisanduda operaatoritasud."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Jätka"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Interneti-ühendus puudub"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WiFi on ühendatud"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-i otsimine"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Unistus"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lennurežiim"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Mitte segada"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Ainult prioriteetsed"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Mitte ühtegi katkestust"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> seadet)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth on väljas"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ühtegi salvestatud võrku pole saadaval"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Ülekandeekraan"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Osatäitjad"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nimeta seade"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Valmis ülekandmiseks"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Rohkem seadeid"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Valmis"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Ühendatud"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Ühendatud WiFi-abi kaudu"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Salvestatud"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Ühenduse loomine ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Jagamine"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Leviala"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"otsing"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Rakendust <xliff:g id="APP">%s</xliff:g> ei saanud käivitada."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Loobu kõikidest rakendustest"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horisontaalne poolitamine"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikaalne poolitamine"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Kohandatud poolitamine"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laetud"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laadimine"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Täislaadimiseks kulub <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Näete neid enne avamist"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tänan, ei"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Seadistus"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Kuva kõik"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Peida kõik"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekraan on kinnitatud"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"See hoiab selle kuval, kuni selle vabastate. Vabastamiseks puudutage ning hoidke korraga all nuppe Tagasi ja Ülevaade."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Kas peita <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"See kuvatakse uuesti järgmisel korral, kui selle seadetes sisse lülitate."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Peida"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> tahab olla helitugevuse dialoog."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Luba"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Keela"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> on helitugevuse dialoog"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Originaali taastamiseks puudutage."</string> </resources> diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml index ae02787..c7019d9 100644 --- a/packages/SystemUI/res/values-eu-rES/strings.xml +++ b/packages/SystemUI/res/values-eu-rES/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Aplikazioaren informazioa"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ikusitako azken pantailak erakusten dira hemen"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Baztertu azken aplikazioak"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Pantaila bat dago ikuspegi orokorrean"</item> - <item quantity="other" msgid="5523506463832158203">"%d pantaila daude ikuspegi orokorrean"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d pantaila daude ikuspegi orokorrean</item> + <item quantity="one">Pantaila bat dago ikuspegi orokorrean</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ez dago jakinarazpenik"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Abian"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Jakinarazpenak"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desblokeatu"</string> <string name="phone_label" msgid="2320074140205331708">"ireki telefonoan"</string> <string name="camera_label" msgid="7261107956054836961">"ireki kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Idazketa-metodoa aldatzeko botoia."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoom-bateragarritasunaren botoia."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Handiagotu pantaila txikia."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetootha konektatuta."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Hegaldi modua aktibatuta dago."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hegaldi modua desaktibatu egin da."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hegaldi modua aktibatu egin da."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Ez molestatu\" aukera aktibatuta dago, lehentasunezkoak soilik."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Ez molestatu\" aukera aktibatuta dago, etenaldirik gabe."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Ez molestatu\" aukera desaktibatuta dago."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Ez molestatu\" aukera desaktibatuta dago."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Ez molestatu\" aukera aktibatuta dago."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth konexioa desaktibatuta dago."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth konexioa aktibatuta dago."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth bidez konektatzen ari da."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Konexioa partekatzeko aukera aktibatu egin da."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Pantaila igortzeari utzi zaio."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Bistaratu distira"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G datu-konexioa desaktibatuta dago"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G datu-konexioa desaktibatuta dago"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Datu mugikorrak desaktibatuta daude"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Datu-konexioa desaktibatuta dago"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Gailuak datu-konexioa desaktibatu du, ezarritako mugara iritsi delako.\n\nBerriro aktibatuz gero, operadoreak zerbait kobratuko dizu agian."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Aktibatu datu-konexioa"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G datuen erabilera eten da"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datuen erabilera eten da"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Sare mugikorreko datuen erabilera eten da"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datuen erabilera eten da"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Zehaztuta duzun datuen erabilera-mugara iritsi zarenez, gailuak datuen erabilera eten du zikloa amaitzen den arte.\n\nDatuak erabiltzen jarraitzen baduzu, gastu gehiago ordaindu beharko dizkiozu agian operadoreari."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Jarraitu erabiltzen"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ez duzu Interneteko konexiorik"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi konektatuta"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS seinalearen bila"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Pantaila-babeslea"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Hegaldi modua"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ez molestatu"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Lehentasunezkoak soilik"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Etenaldirik gabe"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetootha (<xliff:g id="NUMBER">%d</xliff:g> gailu)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetootha desaktibatuta"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ez dago sarerik"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi konexioa desaktibatuta"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ez dago gordetako sarerik erabilgarri"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Igorri pantailako edukia"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Igortzen"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Izenik gabeko gailua"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Igortzeko prest"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Ezarpen gehiago"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Eginda"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Konektatuta"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi laguntzailearen bidez konektatuta"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Gordeta"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Konektatzen…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Konexioa partekatzea"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Sare publikoa"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"bilatu"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ezin izan da hasi <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Baztertu aplikazio guztiak"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Banaketa horizontala"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Banaketa bertikala"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Banaketa pertsonalizatua"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kargatuta"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Kargatzen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> falta zaizkio guztiz kargatzeko"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ikusi desblokeatu baino lehen"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ez, eskerrik asko"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfiguratu"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ikusi guztiak"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ezkutatu guztiak"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Pantaila ainguratuta dago"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Horrela, ikusgai mantenduko da aingura kendu arte. Aingura kentzeko, eduki ukituta aldi berean \"Atzera\" eta \"Ikuspegi orokorra\" botoiak."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ezkutatu nahi duzu?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ezarpenetan aktibatzen duzun hurrengoan agertuko da berriro."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ezkutatu"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> bolumenaren leihoa izan nahian ari da."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Baimendu"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ukatu"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> da bolumenaren leihoa"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Ukitu jatorrizkora leheneratzeko"</string> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index becc464..18d8f76 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"اطلاعات برنامه"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"صفحههای اخیر شما اینجا نمایان میشوند"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"رد کردن برنامههای اخیر"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"۱ صفحه در نمای کلی"</item> - <item quantity="other" msgid="5523506463832158203">"%d صفحه در نمای کلی"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d صفحه در نمای کلی</item> + <item quantity="other">%d صفحه در نمای کلی</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"اعلانی موجود نیست"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"در حال انجام"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"اعلانها"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"بازکردن قفل"</string> <string name="phone_label" msgid="2320074140205331708">"باز کردن تلفن"</string> <string name="camera_label" msgid="7261107956054836961">"باز کردن دوربین"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"کلید تغییر روش ورود متن."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"دکمه بزرگنمایی سازگار."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"بزرگنمایی از صفحههای کوچک تا بزرگ."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"بلوتوث متصل است."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"حالت هواپیما روشن است."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"حالت هواپیما خاموش شد."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"حالت هواپیما روشن شد."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"«مزاحم نشوید» روشن است، فقط اولویتدار."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"«مزاحم نشوید» روشن است، وقفه ایجاد نشود."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"«مزاحم نشوید» خاموش است."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"«مزاحم نشوید» خاموش شد."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"«مزاحم نشوید» روشن شد."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"بلوتوث خاموش است."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"بلوتوث روشن است."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"بلوتوث در حال اتصال است."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"نقطه اتصال دستگاه همراه روشن شد."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"فرستادن صفحه نمایش متوقف شد."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"روشنایی نمایشگر"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"داده 2G-3G خاموش است"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"داده 4G خاموش است"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"داده شبکه سلولی خاموش است"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"داده خاموش است"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"دستگاه شما خاموش شد زیرا به حد تنظیم شده توسط شما رسید.\n\nروشن کردن مجدد آن میتواند به هزینههایی از طرف شرکت مخابراتی شما منجر شود."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"روشن کردن داده"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"داده 2G-3G موقتاً متوقف شده است"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"داده 4G موقتاً متوقف شده است"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"داده شبکه همراه موقتاً متوقف شده است"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"داده موقتاً متوقف شده است"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"چون به محدودیت داده تنظیم شده رسیدهاید، دستگاه مصرف داده را برای باقیمانده این دوره موقتاً متوقف کرده است.\n\nاگر ادامه دهید شاید موجب کسر هزینه از طرف شرکت مخابراتی شما شود."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"از سرگیری"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"اتصال اینترنتی وجود ندارد"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل شد"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"جستجو برای GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"رویاپردازی"</string> <string name="ethernet_label" msgid="7967563676324087464">"اترنت"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"حالت هواپیما"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"مزاحم نشوید"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"فقط اولویتدار"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"وقفه ایجاد نشود"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"بلوتوث"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"بلوتوث ( <xliff:g id="NUMBER">%d</xliff:g> دستگاه)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"بلوتوث خاموش"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکهای موجود نیست"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi خاموش است"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"شبکه ذخیره شدهای در دسترس نیست"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"فرستادن صفحهنمایش"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"فرستادن"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"در حال فرستادن"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"دستگاه بدون نام"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"آماده برای فرستادن"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"تنظیمات بیشتر"</string> <string name="quick_settings_done" msgid="3402999958839153376">"انجام شد"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"متصل"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"متصل شده از طریق دستیار Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"ذخیره شده"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"در حال اتصال..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"اتصال به اینترنت با تلفن همراه"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"نقطه اتصال"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"رد کردن همه برنامهها"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسیم افقی"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"تقسیم عمودی"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"سفارشی کردن تقسیم"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"شارژ کامل شد"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"در حال شارژ شدن"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> مانده تا شارژ کامل شود"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"قبل از باز کردن قفل آنها را مشاهده کنید"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"خیر، سپاسگزارم"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"راهاندازی"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"مشاهده همه"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"پنهان کردن همه"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"صفحه نمایش پین شد"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"تا زمانی که پین را بردارید، در نما نگهداشته میشود. برای برداشتن پین، برگشت و نمای کلی را به صورت همزمان لمس کنید و نگهدارید."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> مخفی شود؟"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"دفعه بعد که آن را روشن کنید، در تنظیمات نشان داده میشود."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"پنهان کردن"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> میخواهد کنترلکننده صدا باشد."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"مجاز"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"رد کردن"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> کنترلکننده صدا است"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"برای بازیابی کنترلکننده اصلی، لمس کنید."</string> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 5fbe650..61e591a 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Sovelluksen tiedot"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Äskettäin käytetyt ruudut näkyvät tässä"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Hylkää viimeaikaiset sovellukset"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 näyttö Viimeisimmät-kohdassa"</item> - <item quantity="other" msgid="5523506463832158203">"%d näyttöä Viimeisimmät-kohdassa"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d näyttöä Yleistä-kohdassa</item> + <item quantity="one">1 näyttö Yleistä-kohdassa</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ei ilmoituksia"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Käynnissä olevat"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ilmoitukset"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"avaa lukitus"</string> <string name="phone_label" msgid="2320074140205331708">"avaa puhelin"</string> <string name="camera_label" msgid="7261107956054836961">"avaa kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Syöttötavan vaihtopainike."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuuszoomaus-painike."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoomaa pienemmältä suuremmalle ruudulle."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth yhdistetty."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lentokonetila on päällä."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lentokonetila poistettiin käytöstä."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lentokonetila otettiin käyttöön."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Älä häiritse -tila on päällä, vain tärkeät."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Älä häiritse -tila on päällä, ei keskeytyksiä."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Älä häiritse -tila on pois päältä."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Älä häiritse -tila on pois päältä."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Älä häiritse -tila on päällä."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth on pois päältä."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth on päällä."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetoothia yhdistetään."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiiliyhteyden hotspot otettiin käyttöön."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ruudun lähetys pysäytettiin."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Näytön kirkkaus"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G–3G-tiedonsiirto ei ole käytössä"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-tiedonsiirto ei ole käytössä"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobiilitiedonsiirto ei ole käytössä"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Tiedonsiirto ei ole käytössä"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Laitteesi poisti tiedonsiirron käytöstä, koska se saavutti asettamasi rajan.\n\nOperaattorisi saattaa veloittaa sinulta lisämaksuja, jos otat sen uudelleen käyttöön."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Ota tiedonsiirto käyttöön"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G-tiedonsiirto keskeytettiin"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-tiedonsiirto keskeytettiin"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobiilitiedonsiirto keskeytettiin"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Tiedonsiirto keskeytettiin"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Määrittämäsi tiedonsiirtorajoitus saavutettiin, ja laite keskeytti tiedonsiirron tämän kauden loppuajaksi.\n\nOperaattorisi voi veloittaa sinulta lisämaksun, jos jatkat tiedonsiirtoa."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Jatka"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ei internetyhteyttä"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi yhdistetty"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Haetaan GPS-yhteyttä"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Unelmat"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lentokonetila"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Älä häiritse"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Vain tärkeät"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ei häiriöitä"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> laitetta)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth pois käytöstä"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ei verkkoa"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-yhteys pois käytöstä"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Tallennettuja verkkoja ei ole käytettävissä"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Lähetysnäyttö"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Lähetetään"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nimetön laite"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Valmis lähetystä varten"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Lisäasetukset"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Valmis"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Yhdistetty"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Yhteys muodostettu Wi‑Fi-apurin kautta"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Tallennetut"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Yhdistetään…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Jaettu yhteys"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Sovelluksen <xliff:g id="APP">%s</xliff:g> käynnistäminen epäonnistui."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Hylkää kaikki sovellukset"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vaakasuuntainen jako"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pystysuuntainen jako"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Muokattu jako"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ladattu"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Ladataan"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> kunnes täynnä"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Näytä ennen lukituksen avaamista"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ei kiitos"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Määritä asetukset"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Näytä kaikki"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Piilota kaikki"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Näyttö on kiinnitetty"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Tämä pitää sen näkyvissä, kunnes poistat kiinnityksen. Kosketa Edellinen- ja Viimeisimmät-kohtaa samanaikaisesti pitkään kiinnityksen poistamiseksi."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Piilotetaanko <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Se tulee takaisin näkyviin, kun seuraavan kerran otat sen käyttöön asetuksissa."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Piilota"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> haluaa olla äänenvoimakkuusvalinta."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Salli"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Estä"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> on äänenvoimakkuusvalinta."</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Palauta alkuperäinen koskettamalla."</string> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index daf87ef..3427cfa 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vos écrans récents s\'affichent ici"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 écran dans Aperçu"</item> - <item quantity="other" msgid="5523506463832158203">"%d écrans dans Aperçu"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">Aperçu de %d écran</item> + <item quantity="other">Aperçu de %d écrans</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string> <string name="phone_label" msgid="2320074140205331708">"Ouvrir le téléphone"</string> <string name="camera_label" msgid="7261107956054836961">"Ouvrir l\'appareil photo"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connecté"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode Avion : activé"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Le mode Avion est activé."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Mode « Ne pas déranger » activé, interruptions prioritaires uniquement."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Mode « Ne pas déranger » activé, sans interruption."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Mode « Ne pas déranger » désactivé."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Le mode « Ne pas déranger » a bien été désactivé."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Le mode « Ne pas déranger » a bien été activé."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth désactivé."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth activé."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Connexion Bluetooth en cours..."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Point d\'accès mobile activé."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Diffusion d\'écran arrêtée."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Luminosité de l\'écran"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Données 2G/3G désactivées"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Données 4G désactivées"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Données cellulaire désactivées"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Données désactivées"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Votre appareil a désactivé les données, car il a atteint la limite définie.\n\nSi vous les réactivez, votre fournisseur de services risque de vous facturer des frais supplémentaires."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activer les données"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Données 2G/3G désactivées"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Données 4G désactivées"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Données cellulaires désactivées"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Données désactivées"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Vous avez atteint le quota de données maximal. La consommation des données a donc été interrompue pour la fin de la période de facturation en cours.\n\nSi vous réactivez les données, votre fournisseur de services risque de vous facturer des frais supplémentaires."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Reprendre"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Aucune connexion Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Écran de veille"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode Avion"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priorités seulement"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Aucune interruption"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"BLUETOOTH DÉSACTIVÉ"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Aucun des réseaux enregistrés n\'est disponible"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Diffuser l\'écran"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Diffusion"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Appareil sans nom"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Prêt à diffuser"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Plus de paramètres"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Terminé"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connecté"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connecté à l\'aide de l\'assistant Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Enregistré"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Connexion en cours…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Partage de connexion"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Point d\'accès sans fil"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Supprimer toutes les applications"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargée"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Charge en cours..."</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Chargée dans <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non, merci"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurer"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Tout afficher"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tout masquer"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"L\'écran est épinglé"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Cet écran est épinglé jusqu\'à ce que vous annuliez l\'opération. Pour annuler l\'épinglage, maintenez un doigt simultanément sur « Retour » et « Aperçu »."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Masquer <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Cet élément réapparaîtra la prochaine fois que vous l\'activerez dans les paramètres."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Masquer"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> souhaite être la boîte de dialogue du volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Autoriser"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuser"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> correspond à la boîte de dialogue du volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Touchez pour restaurer l\'original."</string> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 32dac57..393a0f8 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vos écrans récents s\'affichent ici"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 écran dans Aperçu"</item> - <item quantity="other" msgid="5523506463832158203">"%d écrans dans Aperçu"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d écran dans Aperçu</item> + <item quantity="other">%d écrans dans Aperçu</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"déverrouiller"</string> <string name="phone_label" msgid="2320074140205331708">"ouvrir le téléphone"</string> <string name="camera_label" msgid="7261107956054836961">"ouvrir l\'appareil photo"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connecté"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode Avion activé"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Le mode Avion est désactivé."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Le mode Avion est activé."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Mode \"Ne pas déranger\" activé, interruptions prioritaires uniquement"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Mode \"Ne pas déranger\" activé, sans interruption"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Mode \"Ne pas déranger\" désactivé"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Le mode \"Ne pas déranger\" a bien été désactivé."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Le mode \"Ne pas déranger\" a bien été activé."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth désactivé."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth activé."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Connexion Bluetooth en cours..."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Point d\'accès mobile activé."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Diffusion d\'écran interrompue."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Luminosité de l\'affichage"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Données 2G-3G désactivées"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Données 4G désactivées"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Données mobiles désactivées"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Données désactivées"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Votre appareil a désactivé les données, car il a atteint la limite que vous avez définie.\n\nSi vous les réactivez, votre opérateur risque de vous facturer des frais supplémentaires."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activer les données"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Données 2G-3G désactivées"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Données 4G désactivées"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Données mobiles désactivées"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Données désactivées"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Vous avez atteint le quota de données maximal. La consommation des données a donc été interrompue pour la fin de la période de facturation en cours.\n\nSi vous réactivez les données, votre opérateur risque de vous facturer des frais supplémentaires."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Réactiver"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Aucune connexion Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Écran de veille interactif"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode avion"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne pas déranger"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Prioritaires uniquement"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Aucune interruption"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth désactivé"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Aucun réseau enregistré disponible."</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Caster l\'écran"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Diffusion"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Appareil sans nom"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Prêt à caster"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Plus de paramètres"</string> <string name="quick_settings_done" msgid="3402999958839153376">"OK"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connecté"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connecté via l\'assistant Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Enregistré"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Connexion en cours..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Partage de connexion"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Point d\'accès"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Supprimer toutes les applications"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Séparation verticale"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Séparation personnalisée"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Chargé"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"En charge"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Chargé dans <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Afficher les notifications avant de déverrouiller l\'appareil"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non, merci"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurer"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Tout afficher"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tout masquer"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Écran épinglé"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Cet écran est épinglé jusqu\'à annulation de l\'opération. Pour annuler l\'épinglage, appuyez simultanément sur \"Retour\" et \"Aperçu\" de manière prolongée."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Masquer <xliff:g id="TILE_LABEL">%1$s</xliff:g> ?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Cet élément réapparaîtra la prochaine fois que vous l\'activerez dans les paramètres."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Masquer"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> souhaite être la boîte de dialogue du volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Autoriser"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuser"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> correspond à la boîte de dialogue du volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Appuyez pour restaurer l\'interface d\'origine."</string> </resources> diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml index 8b1a3da..c47fc4e 100644 --- a/packages/SystemUI/res/values-gl-rES/strings.xml +++ b/packages/SystemUI/res/values-gl-rES/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información da aplicación"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"As túas pantallas recentes aparecen aquí"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Rexeitar aplicacións recentes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 pantalla en Visión xeral"</item> - <item quantity="other" msgid="5523506463832158203">"%d pantallas en Visión xeral"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d pantallas en visión xeral</item> + <item quantity="one">Unha pantalla en visión xeral</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Non hai notificacións"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En curso"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificacións"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir teléfono"</string> <string name="camera_label" msgid="7261107956054836961">"abrir cámara"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Cambiar o botón do método de entrada."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidade"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilidade co tamaño da pantalla."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avión activado."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Desactivouse o modo avión."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Activouse o modo avión."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Non molestar activado, só prioridade."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Non molestar activado, sen interrupcións."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"A opción Non molestar está desactivada."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Desactivouse a opción Non molestar."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Activouse a opción Non molestar."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth desactivado."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth activado."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth conectando."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Activouse a zona interactiva móbil."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Detívose a emisión en pantalla."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de pantalla"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Os datos 2G-3G están desactivados"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Os datos 4G están desactivados"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Os datos móbiles están desactivados"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Os datos están desactivados"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"O teu dispositivo desactivou os datos porque alcanzou o límite establecido.\n\nActivalos de novo pode supoñer gastos adicionais do teu operador."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activar datos"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Os datos 2G-3G están en pausa"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os datos 4G están en pausa"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Os datos de móbiles están en pausa"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Os datos están en pausa"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Como acadaches o límite de datos definido, o dispositivo puxo en pausa o uso de datos para o resto do ciclo.\n\nSe retomas o uso, poden aplicarse cargos do operador."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Retomar"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sen Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectada"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Protector pantalla"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non molestar"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Só prioridade"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sen interrupcións"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desactivado"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Non hai rede"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi desactivada"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Non hai redes gardadas dispoñibles"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Enviar pantalla"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Emitindo"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sen nome"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Listo para emitir"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Máis opcións"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Feito"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Conectado"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Conectado ao asistente de wifi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Gardado"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Ancoraxe á rede"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona wifi"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Non foi posible iniciar <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Rexeitar todas as aplicacións"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dividir en horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dividir en vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dividir de xeito personalizado"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Cargada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Cargando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> para completar a carga"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Consúltaas antes de desbloquear"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Non grazas"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver todo"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar todo"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"A pantalla está fixada"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"A pantalla manterase visible ata que anules a fixación. Para facelo, mantén premido Atrás e Visión xeral ao mesmo tempo."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Queres ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Volverá aparecer a próxima vez que se active na configuración."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> quere ser o cadro de diálogo de volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Denegar"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é o cadro de diálogo de volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toca para restaurar o orixinal."</string> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 34040d1..516ae5e 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ऐप्स की जानकारी"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"आपकी हाल की स्क्रीन यहां दिखाई देती हैं"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के ऐप्स खारिज करें"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"अवलोकन मेें 1 स्क्रीन"</item> - <item quantity="other" msgid="5523506463832158203">"अवलोकन में %d स्क्रीन"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">अवलोकन में %d स्क्रीन</item> + <item quantity="other">अवलोकन में %d स्क्रीन</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई नोटिफिकेशन नहीं"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ऑनगोइंग"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाएं"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"अनलॉक करें"</string> <string name="phone_label" msgid="2320074140205331708">"फ़ोन खोलें"</string> <string name="camera_label" msgid="7261107956054836961">"कैमरा खोलें"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धति बटन स्विच करें."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"संगतता ज़ूम बटन."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"छोटी से बड़ी स्क्रीन पर ज़ूम करें."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लूटूथ कनेक्ट किया गया."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"हवाई जहाज़ मोड चालू है."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाई जहाज़ मोड को बंद किया गया."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाई जहाज़ मोड को चालू किया गया."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"परेशान ना करें चालू, केवल प्राथमिकता."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"परेशान ना करें चालू है, कोई बाधा नहीं."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"परेशान ना करें बंद."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"परेशान ना करें बंद किया गया."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"परेशान ना करें चालू किया गया."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ब्लूटूथ बंद है."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ब्लूटूथ चालू है."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ब्लूटूथ कनेक्ट हो रहा है."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाइल हॉटस्पॉट को चालू किया गया."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रीन कास्ट करना रुक गया."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"स्क्रीन की स्क्रीन की रोशनी"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G डेटा बंद है"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G डेटा बंद है"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"सेल्युलर डेटा बंद है"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"डेटा बंद है"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"आपके डिवाइस ने डेटा बंद कर दिया है क्योंकि आपके द्वारा सेट की गई सीमा पार हो गई है.\n\nइसे फिर से चालू करने से आपका वाहक शुल्क ले सकता है."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"डेटा चालू करें"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटा रोक दिया गया है"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोक दिया गया है"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"सेल्युलर डेटा रोक दिया गया है"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटा रोक दिया गया है"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"चूंकि आपके निर्धारित डेटा की सीमा, सीमा पर पहुंच गई थी, इसलिए डिवाइस ने इस चक्र के रिमाइंडर के लिए डेटा उपयोग को रोक दिया है.\n\nफिर से शुरू करने से आपके वाहक की ओर से शुल्क लगाया जाता है."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"फिर से शुरू करें"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"कोई इंटरनेट कनेक्शन नहीं"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाई-फ़ाई कनेक्ट किया गया"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS को खोजा जा रहा है"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"स्क्रीनसेवर"</string> <string name="ethernet_label" msgid="7967563676324087464">"ईथरनेट"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"हवाई जहाज़ मोड"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"परेशान ना करें"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"केवल प्राथमिकता"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"कोई मेसज और कॉल को नहीं रोका गया"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लूटूथ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लूटूथ (<xliff:g id="NUMBER">%d</xliff:g> डिवाइस)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लूटूथ बंद"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"कोई नेटवर्क नहीं"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाई-फ़ाई बंद"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"कोई भी सहेजा गया नेटवर्क उपलब्ध नहीं"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रीन कास्ट करें"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"कास्टिंग"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"अनाम डिवाइस"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"कास्ट करने के लिए तैयार"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"और सेटिंग"</string> <string name="quick_settings_done" msgid="3402999958839153376">"पूर्ण"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"कनेक्ट है"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"वाई-फ़ाई सहायक के द्वारा कनेक्ट है"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"सहेजा गया"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट हो रहा है..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदरिंग"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हॉटस्पॉट"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"खोज"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ नहीं किया जा सका."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सभी ऐप्लिकेशन ख़ारिज करें"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज रूप से विभाजित करें"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"लम्बवत रूप से विभाजित करें"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"कस्टम रूप से विभाजित करें"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज हो गई है"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हो रही है"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"पूर्ण होने में <xliff:g id="CHARGING_TIME">%s</xliff:g> शेष"</string> @@ -317,7 +314,7 @@ <string name="interruption_level_none" msgid="3831278883136066646">"कोई नहीं"</string> <string name="interruption_level_priority" msgid="6517366750688942030">"प्राथमिकता"</string> <string name="interruption_level_all" msgid="1330581184930945764">"सभी"</string> - <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूर्ण होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> शेष)"</string> + <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूरा होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> बाकी)"</string> <string name="accessibility_multi_user_switch_switcher" msgid="7305948938141024937">"उपयोगकर्ता स्विच करें"</string> <string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"उपयोगकर्ता स्विच करें, वर्तमान उपयोगकर्ता <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string> <string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"प्रोफ़ाइल दिखाएं"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"आपके द्वारा उन्हें अनलॉक किए जाने से पहले देखें"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नहीं धन्यवाद"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट करें"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"सभी देखें"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"सभी छिपाएं"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन कर दी गई है"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"इससे वह तब तक दृश्य में रहता है जब तक कि आप उसे अनपिन नहीं कर देते. अनपिन करने के लिए वापस जाएं और अवलोकन करें को एक ही समय पर स्पर्श करके रखें."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> को छिपाएं?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"जब आप उसे अगली बार सेटिंग में चालू करेंगे तो वह फिर से दिखाई देगी."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"छिपाएं"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> वॉल्यूम संवाद होना चाहता है."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमति दें"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"अस्वीकार करें"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> वॉल्यूम संवाद है"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"मूल वॉल्यूम को फिर से लाने के लिए स्पर्श करें."</string> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 5fc2f88..f63b1cd 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -25,10 +25,11 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacije o aplikaciji"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ovdje se pojavljuju vaši nedavni zasloni"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odbaci nedavne aplikacije"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 zaslon u Pregledu"</item> - <item quantity="other" msgid="5523506463832158203">"Broj zaslona u Pregledu: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d zaslon u Pregledu</item> + <item quantity="few">%d zaslona u Pregledu</item> + <item quantity="other">%d zaslona u Pregledu</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bez obavijesti"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"U tijeku"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obavijesti"</string> @@ -88,7 +89,6 @@ <string name="unlock_label" msgid="8779712358041029439">"otključavanje"</string> <string name="phone_label" msgid="2320074140205331708">"otvaranje telefona"</string> <string name="camera_label" msgid="7261107956054836961">"otvaranje fotoaparata"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za promjenu načina unosa."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb za kompatibilnost zumiranja."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zumiranje manjeg zaslona na veći."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth povezan."</string> @@ -177,6 +177,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Način rada u zrakoplovu uključen."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način rada u zrakoplovu isključen."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način rada u zrakoplovu uključen."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Ne ometaj\" uključeno, samo prioritetno."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Ne ometaj\" uključeno, bez prekida."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Ne ometaj\" isključeno."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Ne ometaj\" isključeno."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Ne ometaj\" uključeno."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth isključen."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth uključen."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth se povezuje."</string> @@ -201,12 +206,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilna žarišna točka uključena."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Emitiranje zaslona zaustavljeno."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Svjetlina zaslona"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G podaci isključeni"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G podaci isključeni"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobilni podaci isključeni"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Podaci su isključeni"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Uređaj je isključio podatke jer je dosegnuo ograničenje koje ste postavili.\n\nAko ih ponovno uključite, mogući su dodatni troškovi za mobilne usluge."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Uključi podatke"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G – 3G podaci pauzirani"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G podaci pauzirani"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobilni podaci pauzirani"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Podaci su pauzirani"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Budući da je dosegnuto postavljeno ograničenje podataka, uređaj je pauzirao upotrebu podataka za preostali dio ovog ciklusa.\n\nMobilni operater može naplatiti daljnju upotrebu."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Nastavi"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nema internetske veze"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Traženje GPS-a"</string> @@ -225,6 +230,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Sanjarenje"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način rada u zrakoplovu"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne ometaj"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prioritetno"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez prekida"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (broj uređaja: <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth isključen"</string> @@ -250,7 +258,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nema mreže"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi isključen"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Spremljene mreže nisu dostupne"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Emitiranje zaslona"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Emitiranje"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Uređaj bez naziva"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Spreman za emitiranje"</string> @@ -262,8 +271,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Više postavki"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Gotovo"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Povezano"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Povezani putem pomoćnika za Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Spremljeno"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Povezivanje..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Dijeljenje veze"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Žarišna točka"</string> @@ -282,18 +289,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odbaci sve aplikacije"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podijeli vodoravno"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podijeli okomito"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podijeli prilagođeno"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Napunjeno"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Punjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do napunjenosti"</string> @@ -368,6 +366,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Pogledajte ih prije otključavanja"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, hvala"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Postavi"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaži sve"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sakrij sve"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je prikvačen"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Zaslon će tako ostati u prvom planu dok ga ne otkvačite. Istovremeno dodirnite i držite Natrag i Pregled da biste ga otkvačili."</string> @@ -377,4 +377,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite li sakriti pločicu <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ponovo će se pojaviti kada je sljedeći put uključite u postavkama."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sakrij"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi biti dijaloški okvir za upravljanje glasnoćom."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dopusti"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odbij"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> predstavlja dijaloški okvir za upravljanje glasnoćom"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Dodirnite da biste vratili izvorno."</string> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 8b0edbc..621bdb8 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Alkalmazásinformáció"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"A legutóbbi képernyők itt jelennek meg"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Újabb alkalmazások elvetése"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 képernyő Áttekintés alatt"</item> - <item quantity="other" msgid="5523506463832158203">"%d képernyő Áttekintés alatt"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d képernyő áttekintés alatt</item> + <item quantity="one">1 képernyő áttekintés alatt</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nincs értesítés"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Folyamatban van"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Értesítések"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"feloldás"</string> <string name="phone_label" msgid="2320074140205331708">"telefon megnyitása"</string> <string name="camera_label" msgid="7261107956054836961">"kamera megnyitása"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kompatibilitási zoom gomb."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kicsinyítsen a nagyobb képernyőhöz."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth csatlakoztatva."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Repülős üzemmód bekapcsolva."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Repülős üzemmód kikapcsolva."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Repülős üzemmód bekapcsolva."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"A „Ne zavarjanak” mód bekapcsolva. Csak prioritásos."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"A „Ne zavarjanak” mód bekapcsolva. Nincsenek értesítések."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"A „Ne zavarjanak” mód kikapcsolva."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"A „Ne zavarjanak” mód kikapcsolva."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"A „Ne zavarjanak” mód bekapcsolva."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth kikapcsolva."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth bekapcsolva."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth csatlakoztatása folyamatban."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"A mobil hotspot bekapcsolva."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"A képernyő átküldése leállítva."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"A kijelző fényereje"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"A 2G-s és 3G-s adatkapcsolat nem használható"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"A 4G-s adatkapcsolat nem használható"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"A mobiladat-kapcsolat nem használható"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Az adatkapcsolat ki van kapcsolva"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Eszköze leállította az adatkapcsolatot, mert Ön elérte a beállított adatkorlátot.\n\nAz adatkapcsolat újbóli bekapcsolása után szolgáltatója többletköltséget számíthat fel."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Adatkapcsolat engedélyezése"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"A 2G és 3G adatforgalom szünetel."</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"A 4G adatforgalom szünetel"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"A mobilhálózati adatforgalom szünetel"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Az adatforgalom szünetel"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Mivel elérte a beállított adatkorlátot, az eszköz a ciklus fennmaradó részére felfüggesztette az adathasználatot.\n\nHa mégis használja az adatkapcsolatot, akkor szolgáltatója többletköltséget számíthat fel."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Folytatás"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nincs internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi csatlakoztatva"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS keresése"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Álmodozás"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Repülőgép üzemmód"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne zavarjanak"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Csak prioritásos"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ne zavarjon"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> eszköz)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth kikapcsolva"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nincs hálózat"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi kikapcsolva"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nem áll rendelkezésre mentett hálózat"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Képernyőtartalom átküldése"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Átküldés"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Név nélküli eszköz"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Küldésre kész"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"További beállítások"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Kész"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Csatlakoztatva"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Csatlakozva Wi‑Fi-segéddel"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Mentett"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Csatlakozás…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Megosztás"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nem lehet elindítani a következőt: <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Összes alkalmazás elvetése"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Osztott vízszintes"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Osztott függőleges"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Osztott egyéni"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Feltöltve"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Töltés"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> a teljes töltöttségig"</string> @@ -338,7 +335,7 @@ <string name="battery_saver_notification_title" msgid="237918726750955859">"Akkumulátorkímélő mód bekapcsolva"</string> <string name="battery_saver_notification_text" msgid="820318788126672692">"Csökkenti a teljesítményt és a háttéradatok használatát"</string> <string name="battery_saver_notification_action_text" msgid="109158658238110382">"Akkumulátorkímélő mód kikapcsolása"</string> - <string name="notification_hidden_text" msgid="1135169301897151909">"Tartalomjegyzék elrejtve"</string> + <string name="notification_hidden_text" msgid="1135169301897151909">"Tartalom elrejtve"</string> <string name="media_projection_dialog_text" msgid="3071431025448218928">"A(z) <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> alkalmazás rögzíteni fog mindent, ami megjelenik a képernyőn."</string> <string name="media_projection_remember_text" msgid="3103510882172746752">"Ne jelenjen meg többé"</string> <string name="clear_all_notifications_text" msgid="814192889771462828">"Az összes törlése"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Már a képernyőzár feloldása előtt megtekintheti őket"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nem, köszönöm"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Beállítás"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Az összes megjelenítése"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Az összes elrejtése"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"A képernyő rögzítve van"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Megjelenítve tartja addig, amíg Ön fel nem oldja fel a rögzítést. A rögzítés feloldásához tartsa egyszerre lenyomva a Vissza és az Áttekintés lehetőséget."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Elrejti ezt: <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Újból megjelenik majd, amikor ismét engedélyezi a beállítások között."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Elrejtés"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás szeretné kezelni a hangerőt."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Engedélyezés"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Elutasítás"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás kezeli a hangerőt"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Érintse meg az eredeti érték visszaállításához."</string> </resources> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index 2fa89c8..4529415 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Տեղեկություններ ծրագրի մասին"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ձեր վերջին էկրանները տեսանելի են այստեղ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Անտեսել վերջին ծրագրերը"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Համատեսքում ցուցադրված է 1 էկրան:"</item> - <item quantity="other" msgid="5523506463832158203">"Համատեսքում ցուցադրված է %d էկրան"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">Համատեսքում ցուցադրված է %d էկրան</item> + <item quantity="other">Համատեսքում ցուցադրված է %d էկրան</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ծանուցումներ չկան"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ընթացիկ"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ծանուցումներ"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ապակողպել"</string> <string name="phone_label" msgid="2320074140205331708">"բացել հեռախոսը"</string> <string name="camera_label" msgid="7261107956054836961">"բացել ֆոտոխցիկը"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Միացնել մուտքագրման եղանակի կոճակը:"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Համատեղելիության խոշորացման կոճակը:"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Դիտափոխել փոքրից ավելի մեծ էկրան:"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-ը միացված է:"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Ինքնաթիռային ռեժիմը միացված է:"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Ինքնաթիռային ռեժիմն անջատվեց:"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ինքնաթիռային ռեժիմը միացավ:"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Չխանգարելու ընտրանքը միացված է: Ընդհատել միայն կարևոր ծանուցումների դեպքում:"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Չխանգարելու ընտրանքը միացված է: Չընդհատել:"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Չխանգարելու ընտրանքն անջատված է:"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Չխանգարելու ընտրանքն անջատվեց:"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Չխանգարելու ընտրանքը միացվեց:"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth-ն անջատված է:"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth-ը միացված է:"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth-ը միանում է:"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Շարժական կապի WiFi ցրիչը միացավ:"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Էկրանի հեռարձակումն ընդհատվեց:"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ցուցադրել պայծառությունը"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G տվյալների կապն անջատված է"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G տվյալների կապն անջատված է"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Բջջային տվյալներն անջատված են"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Տվյալների կապն անջատված է"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Տվյալների կապը ձեր սարքում անջատվեց, քանի որ դուք հատել եք նշված սահմանաչափը:\n\nԱյն հետ միացնելուց հետո հնարավոր են հավելյալ վճարներ ձեր օպերատորից:"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Միացնել տվյալների կապը"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2Գ-3Գ տվյալների օգտագործումը դադարեցված է"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4Գ տվյալների օգտագործումը դադարեցված է"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Բջջային տվյալների օգտագործումը դադարեցված է"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Տվյալների օգտագործումը դադարեցված է"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Քանի որ ձեր սահմանված տվյալների սահմանաչափը սպառվել է, սարքն այլևս չի օգտագործի տվյալները այս ցիկլի մնացած ընթացքում:\n\nԵթե վերսկսեք, հնարավոր է կիրառվեն գանձումներ ձեր օպերատորի կողմից:"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Վերսկսել"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ինտերնետ կապ չկա"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ը միացված է"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Որոնում է GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Ցերեկային ռեժիմ"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Ինքնաթիռային ռեժիմ"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Չխանգարել"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Միայն կարևոր ծանուցումների դեպքում"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Չընդհատել"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> սարք)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth-ն անջատված է"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ցանց չկա"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-ը անջատված է"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Հասանելի պահված ցանցեր չկան"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Հեռակա էկրան"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Հեռարձակում"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Անանուն սարք"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Պատրաստ է հեռարձակման"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Հավելյալ կարգավորումներ"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Պատրաստ է"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Կապակցված է"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Կապակցված է Wi‑Fi Օգնականի միջոցով"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Պահված է"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Միանում է..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Միացում"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Թեժ կետ"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Հնարավոր չէ գործարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Հեռացնել բոլոր հավելվածները"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Ուղղահայաց տրոհում"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Հատուկ տրոհում"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Լիցքավորված է"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Լիցքավորվում է"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Լրիվ լիցքավորմանը մնաց <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Տեսեք դրանք մինչև ապակողպելը"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ոչ, շնորհակալություն"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Կարգավորել"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Տեսնել բոլորը"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Թաքցնել բոլորը"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Էկրանն ամրացված է"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Էկրանը կմնա տեսադաշտում, մինչև այն ապամրացնեք: Ապամրացնելու համար միաժամանակ հպեք և պահեք Համատեսքի և Հետ կոճակները:"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Թաքցնե՞լ <xliff:g id="TILE_LABEL">%1$s</xliff:g>-ը:"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Այն դարձյալ կհայտնվի, երբ նորից միացնեք կարգավորումներում:"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Թաքցնել"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է երկխոսության հավելվածը դառնալ:"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Թույլատրել"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Մերժել"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ը ձայնի ուժգնության երկխոսության հավելված է"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Դիպչեք՝ սկզբնօրինակը վերականգնելու համար:"</string> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 501b99e..5bf8d13 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -25,13 +25,13 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info apl"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Layar terkini Anda muncul di sini"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Tutup aplikasi terbaru"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 layar dalam Ringkasan"</item> - <item quantity="other" msgid="5523506463832158203">"%d layar dalam Ringkasan"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d layar dalam Ringkasan</item> + <item quantity="one">1 layar dalam Ringkasan</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tidak ada pemberitahuan"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Berkelanjutan"</string> - <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string> + <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifikasi"</string> <string name="battery_low_title" msgid="6456385927409742437">"Baterai lemah"</string> <string name="battery_low_percent_format" msgid="2900940511201380775">"Tersisa <xliff:g id="PERCENTAGE">%s</xliff:g>"</string> <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Tersisa <xliff:g id="PERCENTAGE">%s</xliff:g>. Penghemat baterai aktif."</string> @@ -48,7 +48,7 @@ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Rotasi layar otomatis"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"BUNGKAM"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> - <string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string> + <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifikasi"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tertambat"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Menyiapkan metode masukan"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Keyboard fisik"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string> <string name="phone_label" msgid="2320074140205331708">"buka ponsel"</string> <string name="camera_label" msgid="7261107956054836961">"buka kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tombol perbesar/perkecil kompatibilitas."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perbesar dari layar kecil ke besar."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tersambung."</string> @@ -148,7 +147,7 @@ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode pesawat."</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"Baterai <xliff:g id="NUMBER">%d</xliff:g> persen."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"Setelan sistem."</string> - <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string> + <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifikasi."</string> <string name="accessibility_remove_notification" msgid="3603099514902182350">"Menghapus pemberitahuan."</string> <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS diaktifkan."</string> <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Memperoleh GPS."</string> @@ -161,7 +160,7 @@ <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> disingkirkan."</string> <string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaru telah ditutup."</string> <string name="accessibility_recents_item_launched" msgid="7616039892382525203">"Memulai <xliff:g id="APP">%s</xliff:g>."</string> - <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pemberitahuan disingkirkan."</string> + <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notifikasi disingkirkan."</string> <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bayangan pemberitahuan."</string> <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Setelan cepat."</string> <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"Layar kunci."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mode pesawat aktif."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mode pesawat dinonaktifkan."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mode pesawat diaktifkan."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Status \"Jangan ganggu\" aktif, hanya untuk prioritas."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Status \"Jangan ganggu\" aktif, tanpa gangguan."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Status \"Jangan ganggu\" nonaktif."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Status \"Jangan ganggu\" dinonaktifkan."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Status \"Jangan ganggu\" diaktifkan."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth nonaktif."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aktif."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth menyambung."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspot seluler diaktifkan."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmisi layar berhenti."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Kecerahan tampilan"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Data 2G-3G nonaktif"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Data 4G nonaktif"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Data seluler nonaktif"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data nonaktif"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Perangkat Anda menonaktifkan data karena data mencapai batas yang Anda setel.\n\nMengaktifkan kembali data dapat membuat Anda terkena biaya dari operator."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Aktifkan data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G dijeda"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Data seluler dijeda"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data dijeda"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Karena batas data yang disetel telah tercapai, perangkat telah menjeda penggunaan data selama sisa waktu siklus ini.\n\nMelanjutkan dapat mengakibatkan tagihan dari operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Lanjutkan"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tidak ada sambungan internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tersambung"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Menelusuri GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Lamunan"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode pesawat"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Hanya untuk prioritas"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tanpa gangguan"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Perangkat)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Mati"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Jaringan yang tersimpan tak tersedia"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Layar transmisi"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Transmisi"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Melakukan transmisi"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Perangkat tanpa nama"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Siap melakukan transmisi"</string> @@ -262,12 +269,10 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Setelan lainnya"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Selesai"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Tersambung"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Terhubung melalui Asisten Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Disimpan"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Menyambung..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Menambatkan"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> - <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Pemberitahuan"</string> + <string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifikasi"</string> <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lampu senter"</string> <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Data seluler"</string> <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Penggunaan data"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Tutup semua aplikasi"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Pisahkan Vertikal"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pisahkan Khusus"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Terisi"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengisi daya"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> sampai penuh"</string> @@ -309,7 +305,7 @@ <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Alarm Anda berikutnya hari <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string> <string name="zen_alarm_warning" msgid="6873910860111498041">"Anda tidak akan mendengar alarm pukul <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> - <string name="speed_bump_explanation" msgid="1288875699658819755">"Pemberitahuan kurang darurat di bawah"</string> + <string name="speed_bump_explanation" msgid="1288875699658819755">"Notifikasi kurang darurat di bawah"</string> <string name="notification_tap_again" msgid="8524949573675922138">"Sentuh lagi untuk membuka"</string> <string name="keyguard_unlock" msgid="8043466894212841998">"Gesek ke atas untuk membuka kunci"</string> <string name="phone_hint" msgid="3101468054914424646">"Gesek ke kanan untuk menelepon"</string> @@ -368,13 +364,20 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum membuka kunci"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tidak"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Siapkan"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Lihat semua"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sembunyikan semua"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Layar dipasangi pin"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Kembali dan Ringkasan secara bersamaan untuk melepas pin."</string> <string name="screen_pinning_description_accessible" msgid="8518446209564202557">"Ini akan terus ditampilkan sampai Anda melepas pin. Sentuh dan tahan tombol Ringkasan untuk melepas pin."</string> <string name="screen_pinning_positive" msgid="3783985798366751226">"Mengerti"</string> - <string name="screen_pinning_negative" msgid="3741602308343880268">"Tidak, terima kasih"</string> + <string name="screen_pinning_negative" msgid="3741602308343880268">"Lain kali"</string> <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Sembunyikan <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ini akan muncul kembali saat Anda mengaktifkannya dalam setelan."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sembunyikan"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ingin menjadi dialog volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Izinkan"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tolak"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> adalah dialog volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Sentuh untuk memulihkan aslinya."</string> </resources> diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml index a408204..1ae4566 100644 --- a/packages/SystemUI/res/values-is-rIS/strings.xml +++ b/packages/SystemUI/res/values-is-rIS/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Upplýsingar um forrit"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Nýlegar skjámyndir birtast hér"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Hunsa nýleg forrit"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Ein skjámynd í yfirliti"</item> - <item quantity="other" msgid="5523506463832158203">"%d skjámyndir í yfirliti"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d skjámynd í yfirliti</item> + <item quantity="other">%d skjámyndir í yfirliti</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Engar tilkynningar"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Áframhaldandi"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Tilkynningar"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"taka úr lás"</string> <string name="phone_label" msgid="2320074140205331708">"opna síma"</string> <string name="camera_label" msgid="7261107956054836961">"opna myndavél"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Hnappur til að skipta um innsláttaraðferð."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Hnappur fyrir samhæfisaðdrátt."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aðlaga forrit fyrir lítinn skjá að stærri skjá."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth tengt."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Kveikt á flugstillingu."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Slökkt á flugstillingu."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Kveikt á flugstillingu."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Kveikt á „Ónáðið ekki“, aðeins forgangur."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Kveikt á „Ónáðið ekki“, engar truflanir."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Slökkt á „Ónáðið ekki“."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Slökkt á „Ónáðið ekki“."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Kveikt á „Ónáðið ekki“."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Slökkt á Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Kveikt á Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth tengist."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Kveikt á farsímaaðgangsstað."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Skjáútsendingu hætt."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Birtustig skjás"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Slökkt er á 2G- og 3G-gögnum"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Slökkt er á 4G-gögnum"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Slökkt er á farsímagögnum"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Slökkt er á gagnaflutningi"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Slökkt var á gagnaflutningi í tækinu vegna þess að hámarkinu sem þú valdir var náð.\n\nSímafyrirtækið þitt kann að taka gjald ef þú kveikir á honum aftur."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Kveikja á gagnaflutningi"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Slökkt er á 2G- og 3G-gögnum"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Slökkt er á 4G-gögnum"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Slökkt er á farsímagögnum"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Slökkt er á gagnanotkun"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Þar sem gagnahámarkinu var náð hefur tækið slökkt á gagnanotkun það sem eftir er af þessu tímabili.\n\nEf þú heldur áfram kann það að leiða til kostnaðar frá símafyrirtækinu."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Halda áfram"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Engin nettenging"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tengt"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Leitar að GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Skjávari"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flugstilling"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ónáðið ekki"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Aðeins forgangur"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Engar truflanir"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> tæki)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Slökkt á Bluetooth"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ekkert net"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Slökkt á Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Engin vistuð net til staðar"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Skjáútsending"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Sendir út"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Ónefnt tæki"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tilbúið í útsendingu"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Fleiri stillingar"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Lokið"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Tengt"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Tengt í gegnum Wi-Fi aðstoð"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Vistað"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Tengist..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tjóðrun"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Heitur reitur"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"leita"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Fjarlægja öll forrit"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Lárétt skipting"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Lóðrétt skipting"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Sérsniðin skipting"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Fullhlaðin"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Í hleðslu"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> þar til fullri hleðslu er náð"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Sjáðu þær áður en þú opnar"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nei, takk"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Setja upp"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Sjá allt"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Fela allt"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skjárinn er festur"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Þetta heldur þessu opnu þangað til þú losar. Haltu bakk- og yfirlitshnöppunum inni á sama tíma til að losa."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Fela <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Þetta birtist aftur næst þegar þú kveikir á því í stillingunum."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Fela"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vill vera hljóðstyrksvalmyndin."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Leyfa"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Hafna"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er hljóðstyrksvalmyndin"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Snertu til að færa í upprunalegt horf."</string> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 369e51a..c9ccf05 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informazioni applicazione"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Le tue schermate recenti vengono visualizzate in questa sezione"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignora app recenti"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 schermata in Panoramica"</item> - <item quantity="other" msgid="5523506463832158203">"%d schermate in Panoramica"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d schermate in Panoramica</item> + <item quantity="one">1 schermata in Panoramica</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nessuna notifica"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"In corso"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifiche"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"sblocca"</string> <string name="phone_label" msgid="2320074140205331708">"apri telefono"</string> <string name="camera_label" msgid="7261107956054836961">"apri fotocamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Pulsante per cambiare metodo di immissione."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Pulsante zoom compatibilità."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom inferiore per schermo più grande."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth collegato."</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modalità aereo attiva."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modalità aereo disattivata."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modalità aereo attivata."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Non disturbare\" attivo, solo con priorità."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Non disturbare\" attivo, nessuna interruzione."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Non disturbare\" non attivo."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Non disturbare\" non attivo."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Non disturbare\" attivo."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth non attivo."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth attivo."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Collegamento Bluetooth."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspot mobile attivato."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Trasmissione dello schermo interrotta."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Luminosità dello schermo"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Dati 2G-3G disattivati"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Dati 4G disattivati"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Rete dati disattivata"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Dati disattivati"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Il tuo dispositivo ha disattivato il traffico dati perché hai raggiunto il limite prestabilito.\n\nLa riattivazione potrebbe comportare l\'applicazione di costi aggiuntivi da parte del tuo operatore."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Attiva i dati"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dati 2G-3G sospesi"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dati 4G sospesi"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Dati cellulari sospesi"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Dati sospesi"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Hai raggiunto il tuo limite di dati, pertanto sul dispositivo è stato sospeso l\'utilizzo di dati per la parte rimanente del ciclo.\n\nSe riprendi a utilizzare i dati, l\'operatore potrebbe addebitarti costi."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Riprendi"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nessuna connessione"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connesso"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Ricerca del GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modalità aereo"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Non disturbare"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Solo con priorità"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Nessuna interruzione"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivi)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth spento"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nessuna rete"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi disattivato"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nessuna rete salvata disponibile"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Trasmetti schermo"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"In trasmissione"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo senza nome"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto a trasmettere"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Altre impostazioni"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Fine"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Connesso"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Connesso tramite assistente Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Salvata"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Connessione..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Rimuovi tutte le applicazioni"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisione in verticale"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisione personalizzata"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carica"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"In carica"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> al termine della carica"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Visualizza prima di sbloccare"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"No, grazie"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configura"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Mostra tutto"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Nascondi tutto"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"La schermata è bloccata"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"La schermata rimane visibile finché la sblocchi. Tocca e tieni premuti contemporaneamente Indietro e Panoramica per sbloccare."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Nascondere <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Verranno visualizzate di nuovo quando le riattiverai nelle impostazioni."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Nascondi"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> desidera fungere da finestra di dialogo relativa al volume"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Consenti"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Nega"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> rappresenta la finestra di dialogo relativa al volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Tocca per ripristinare l\'originale."</string> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index bdfdcc3..ff7fc57 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי אפליקציה"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"המסכים האחרונים מופיעים כאן"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"סגור אפליקציות אחרונות"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"מסך אחד ב\'סקירה\'"</item> - <item quantity="other" msgid="5523506463832158203">"%d מסכים ב\'סקירה\'"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="two">%d מסכים ב’סקירה‘</item> + <item quantity="many">%d מסכים ב’סקירה‘</item> + <item quantity="other">%d מסכים ב’סקירה‘</item> + <item quantity="one">מסך אחד ב’סקירה‘</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"התראות"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"בטל את הנעילה"</string> <string name="phone_label" msgid="2320074140205331708">"פתח את הטלפון"</string> <string name="camera_label" msgid="7261107956054836961">"פתח את המצלמה"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"לחצן החלפת שיטת קלט."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"לחצן מרחק מתצוגה של תאימות."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"שנה מרחק מתצוגה של מסך קטן לגדול יותר."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth מחובר."</string> @@ -177,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"מצב טיסה מופעל."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"מצב טיסה נכבה."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"מצב טיסה הופעל."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\'נא לא להפריע\' פועל. הודעות בעדיפות בלבד."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\'נא לא להפריע\' פועל. ללא הפרעות."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\'נא לא להפריע\' כבוי."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\'נא לא להפריע\' כבוי."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\'נא לא להפריע\' פועל."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth כבוי."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth מופעל."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth מתחבר."</string> @@ -201,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"נקודה לשיתוף אינטרנט בנייד מופעלת."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"העברת המסך הופסקה."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"בהירות תצוגה"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"נתונים בחיבור 2G-3G כובו"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"נתונים בחיבור 4G כובו"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"נתונים בחיבור סלולרי כובו"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"חיבור הנתונים כובה"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"המכשיר שלך כיבה את חיבור הנתונים מפני שהוא הגיע למגבלה שהגדרת.\n\nהפעלה מחדש עשויה להוביל לחיובים על ידי הספק."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"הפעל חיבור נתונים"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"השימוש בנתוני 2G-3G מושהה"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"השימוש בנתוני 4G מושהה"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"השימוש בנתונים סלולריים מושהה"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"השימוש בנתונים מושהה"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"מכיוון שהגעת למגבלת הנתונים שהגדרת, המכשיר השהה את השימוש בנתונים עד סוף התקופה.\n\nאם תמשיך, אתה עשוי לקבל חיובים מהספק."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"המשך"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"אין חיבור לאינטרנט"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi מחובר"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"מחפש GPS"</string> @@ -225,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"חלום בהקיץ"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"מצב טיסה"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"נא לא להפריע"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"עדיפות בלבד"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ללא הפרעות"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth מופסק"</string> @@ -250,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"אין רשת"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi כבוי"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"אין רשתות שמורות זמינות"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"העבר מסך"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"מעביר"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"מכשיר ללא שם"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"מוכן להעביר"</string> @@ -262,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"הגדרות נוספות"</string> <string name="quick_settings_done" msgid="3402999958839153376">"בוצע"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"מחובר"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"מחובר באמצעות אסיסטנט ה-Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"נשמר"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"מתחבר..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"שיתוף אינטרנט בין ניידים"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"נקודה לשיתוף אינטרנט"</string> @@ -282,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"סגור את כל האפליקציות"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"פיצול אופקי"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"פיצול אנכי"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"פיצול מותאם אישית"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"טעון"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"טוען"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> עד למילוי"</string> @@ -368,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"צפה בהן לפני שתבטל נעילה"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"לא, תודה"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"הגדר"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"הצג הכל"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"הסתר הכל"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"המסך מוצמד"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"שומר בתצוגה עד לביטול ההצמדה. גע והחזק בו-זמנית ב\'הקודם\' ו\'סקירה\' כדי לבטל הצמדה."</string> @@ -377,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"להסתיר<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"יופיע מחדש בפעם הבאה שתפעיל את האפשרות בהגדרות."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"הסתר"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> מנסה לפעול בתור תיבת הדו-שיח של עוצמת הקול."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"התר"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"דחה"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> הוא תיבת הדו-שיח של עוצמת הקול"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"גע כדי לשחזר את עוצמת הקול המקורית."</string> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 330e55a..ca6aec9 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"アプリ情報"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ここに最近の画面が表示されます"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"最近使ったアプリをクリア"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"[最近]に1個の画面があります"</item> - <item quantity="other" msgid="5523506463832158203">"[最近]に%d個の画面があります"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">[最近]に%d個の画面があります</item> + <item quantity="one">[最近]に1個の画面があります</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"通知なし"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"実行中"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ロック解除"</string> <string name="phone_label" msgid="2320074140205331708">"電話を起動"</string> <string name="camera_label" msgid="7261107956054836961">"カメラを起動"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"互換ズームボタン。"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"小さい画面から大きい画面に拡大。"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetoothに接続済み。"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"機内モードがONです。"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"機内モードをOFFにしました。"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"機内モードをONにしました。"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"[通知を非表示]はONで、重要な通知のみです。"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"[通知を非表示]はONで、サイレントです。"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"[通知を非表示]はOFFです。"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"[通知を非表示]をOFFにしました。"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"[通知を非表示]をONにしました。"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"BluetoothがOFFです。"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"BluetoothがONです。"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetoothに接続しています。"</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"モバイルアクセスポイントをONにしました。"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"画面のキャストが停止しました。"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ディスプレイの明るさ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G~3Gデータが無効になりました"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4Gデータが無効になりました"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"モバイルデータが無効になりました"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"データが無効になりました"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"設定された上限に達したため、端末のデータ接続が無効になりました。\n\n有効に戻すと、携帯通信会社から課金される可能性があります。"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"データ接続を有効にする"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G~3Gデータは一時停止中です"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4Gデータは一時停止中です"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"モバイルデータは一時停止中です"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"データの一時停止"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"設定されたデータの上限に達したため、このサイクルの終了までこの端末でのデータの利用を一時停止しました。\n\n再開すると、携帯通信会社から課金される可能性があります。"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"再開"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"インターネット未接続"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi接続済み"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSで検索中"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"スクリーンセーバー"</string> <string name="ethernet_label" msgid="7967563676324087464">"イーサネット"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"機内モード"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"通知を非表示"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"重要な通知のみ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"サイレント"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth(端末数<xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth OFF"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ネットワークなし"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi OFF"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"保存されているネットワークがありません"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"画面のキャスト"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"キャストしています"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"名前のないデバイス"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"キャスト準備完了"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"詳細設定"</string> <string name="quick_settings_done" msgid="3402999958839153376">"完了"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"接続済み"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fiアシスタント経由で接続"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"保存済み"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"接続しています..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"テザリング"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"アクセスポイント"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>を開始できません。"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"すべてのアプリケーションを消去"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"横に分割"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"縦に分割"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"分割(カスタム)"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"充電が完了しました"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電しています"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"充電完了まで<xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ロックを解除する前にご確認ください"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"キャンセル"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"すべて表示"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"すべて非表示"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"画面が固定されました"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"固定を解除するまで画面が常に表示されるようになります。[戻る]と[最近]を同時に押し続けると固定が解除されます。"</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>を非表示にしますか?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"次回、設定でONにすると再表示されます。"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"非表示"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>が音量ダイアログとして機能します。"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"許可"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"許可しない"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>を音量ダイアログとして使用"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"タップすると元の音量ダイアログが復元されます。"</string> </resources> diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml index 26b4025..100af70 100644 --- a/packages/SystemUI/res/values-ka-rGE/strings.xml +++ b/packages/SystemUI/res/values-ka-rGE/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"აპის შესახებ"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"თქვენი ბოლო ეკრანები აქ გამოჩნდება"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ბოლო აპების გაუქმება"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"ნაჩვენებია 1 ეკრანი"</item> - <item quantity="other" msgid="5523506463832158203">"ნაჩვენებია %d ეკრანი"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d ეკრანი მიმოხილვაში</item> + <item quantity="one">1 ეკრანი მიმოხილვაში</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"შეტყობინებები არ არის."</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"მიმდინარე"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"შეტყობინებები"</string> @@ -80,7 +80,7 @@ <string name="accessibility_back" msgid="567011538994429120">"უკან"</string> <string name="accessibility_home" msgid="8217216074895377641">"საწყისი"</string> <string name="accessibility_menu" msgid="316839303324695949">"მენიუ"</string> - <string name="accessibility_recent" msgid="5208608566793607626">"გადახედვა"</string> + <string name="accessibility_recent" msgid="5208608566793607626">"მიმოხილვა"</string> <string name="accessibility_search_light" msgid="1103867596330271848">"ძიება"</string> <string name="accessibility_camera_button" msgid="8064671582820358152">"კამერა"</string> <string name="accessibility_phone_button" msgid="6738112589538563574">"ტელეფონი"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"განბლოკვა"</string> <string name="phone_label" msgid="2320074140205331708">"ტელეფონის გახსნა"</string> <string name="camera_label" msgid="7261107956054836961">"კამერის გახსნა"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"შეყვანის მეთოდის გადართვის ღილაკი."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"თავსებადი მასშტაბირების ღილაკი."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"შეცვალეთ პატარა ეკრანი უფრო დიდით."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth დაკავშირებულია."</string> @@ -166,7 +165,7 @@ <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"სწრაფი პარამეტრები"</string> <string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ეკრანის დაბლოკვა."</string> <string name="accessibility_desc_settings" msgid="3417884241751434521">"პარამეტრები"</string> - <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"გადახედვა."</string> + <string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"მიმოხილვა"</string> <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"მომხმარებელი: <xliff:g id="USER">%s</xliff:g>."</string> <string name="accessibility_quick_settings_wifi" msgid="5518210213118181692">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string> <string name="accessibility_quick_settings_wifi_changed_off" msgid="8716484460897819400">"Wifi გამორთულია."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"თვითმფრინავის რეჟიმი ჩართულია."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"თვითმფრინავის რეჟიმი გამოირთო."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"თვითმფრინავის რეჟიმი ჩაირთო."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ჩართულია რეჟიმი „არ შემაწუხოთ\", მხოლოდ პრიორიტეტები."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ჩართულია რეჟიმი „არ შემაწუხოთ\", შეწყვეტის გარეშე."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"„არ შემაწუხოთ“ გამორთულია"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"„არ შემაწუხოთ\" რეჟიმი გამორთულია."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"„არ შემაწუხოთ\" რეჟიმი ჩართულია."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth გამორთულია."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth ჩართულია."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"მიმდინარეობს Bluetooth-თან დაკავშირება."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"მობილური ქსელის წერტილი ჩაირთო."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ეკრანის გადაცემა შეჩერებულია."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ეკრანის სიკაშკაშე"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G მონაც. გადაცემა გამორთულია"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G მონაც. გადაცემა გამორთულია"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ფიჭური ინტერნეტი გამორთულია"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"მონაცემთა გადაცემა გამორთულია"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"თქვენმა მოწყობილობამ მონაცემები გამორთო, რადგან თქვენ მიერ დაყენებულ ლიმიტს მიაღწია.\n\nმისი კვლავ გააქტიურებით შესაძლოა დაგეკისროთ გადასახადი თქვენი ოპერატორისგან."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"მონაცემთა ჩართვა"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G მონაცემები შეჩერებულია"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G მონაცემები შეჩერებულია"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ფიჭური მონაცემები შეჩერებულია"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"მონაცემები შეჩერებულია"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"რადგან თქვენი მონაცემების ლიმიტი ამოწურულია, მოწყობილობამ შეაჭერა მონაცემების გამოყენება დარჩენილი ციკლისათვის. \n\n შეჯამაბ შეიძლება გამოიწვიოს თქვენს პროვაიდერთან დამატებითი ხარჯები."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"გაგრძელება"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ინტერნეტ კავშირი არ არის"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi დაკავშირებულია"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-ის ძებნა"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"ეთერნეტი"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"თვითმფრინავის რეჟიმი"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"არ შემაწუხოთ"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"მხოლოდ პრიორიტეტული"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"შეფერხებების გაეშე"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> მოწყობილობა)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth გამორთულია"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ქსელი არ არის"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi გამორთულია"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"შენახული ქსელები მიუწვდომელია"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ეკრანის გადაცემა"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"გადაიცემა"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"უსახელო მოწყობილობა"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"მზად არის სამაუწყებლოდ"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"დამატებითი პარამეტრები"</string> <string name="quick_settings_done" msgid="3402999958839153376">"დასრულდა"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"დაკავშირებულია"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"დაკავშირებული Wi-Fi თანაშემწით"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"დამახსოვრებულია"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"დაკავშირება..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"მოდემის რეჟიმი"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"წვდომის წერტილი"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-ის გამოძახება ვერ მოხერხდა."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ყველა აპლიკაციის გაუქმება"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ჰორიზონტალური გაყოფა"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ვერტიკალური გაყოფა"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ინდივიდუალური გაყობა"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"დატენილია"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"მიმდინარეობს დატენვა"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> სრულად დატენვამდე"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"იხილეთ განბლოკვამდე"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"არა, გმადლობთ"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"დაყენება"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"ყველას ჩვენება"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"ყველას დამალვა"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"ეკრანი ჩამაგრებულია"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ამით ის ხედში დარჩება, სანამ ჩამაგრებას არ გააუქმებთ. ჩამაგრების გასაუქმებლად შეეხეთ და დააყოვნეთ „დაბრუნება“-ზე და „მიმოხილვა“-ზე ერთდროულად."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"დაიმალოს <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ის კვლავ გამოჩნდება, როდესაც პარამეტრებში ჩართავთ"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"დამალვა"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> სურს იყოს ხმოვან დიალოგში."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"უფლების მიცემა"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"უარყოფა"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ხმოვან დიალოგშია"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"ორიგინალის აღდგენისათვის, შეეხეთ."</string> </resources> diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml index 6258a8c..9ed07ca 100644 --- a/packages/SystemUI/res/values-kk-rKZ/strings.xml +++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Қолданба ақпараты"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Мұнда жақындағы экрандар көрсетіледі"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Жуықта қолданылған қолданбаларды қоспау"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"«Шолу» ішінде 1 экран"</item> - <item quantity="other" msgid="5523506463832158203">"«Шолу» ішінде %d экран"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">«Шолу» ішінде %d экран</item> + <item quantity="one">«Шолу» ішінде 1 экран</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Хабарлар жоқ"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ағымдағы"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Хабарлар"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"бекітпесін ашу"</string> <string name="phone_label" msgid="2320074140205331708">"телефонды ашу"</string> <string name="camera_label" msgid="7261107956054836961">"камераны ашу"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Енгізу әдісі түймесін ауыстыру."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Үйлесімділік ұлғайту түймесі."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Үлкендеу экранда кішірейту."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth қосылған."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Ұшақ режимі қосулы."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Ұшақ режимі өшірілді."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Ұшақ режимі қосылды."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Мазаламау режимі қосулы, тек басымдық"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Мазаламау режимі қосулы, үзілістерсіз"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Мазаламау режимі өшірулі"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Мазаламау режимі өшірілді."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Мазаламау режимі қосылды."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth өшірулі."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth қосулы."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth қосылуда."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобильді хотспот қосылды."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Экранды трансляциялау тоқтатылды."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Дисплей жарықтығы"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G деректері өшірулі"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G деректері өшірулі"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Ұялы деректер өшірулі"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Деректер өшірулі"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Құрылғыңыз сіз орнатқан шекке жеткендіктен деректерді өшірді.\n\nОны қайтадан қосу оператордың ақылар алуына әкелуі мүмкін."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Деректерді қосу"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G деректері кідіртілді"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G деректері кідіртілді"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Ұялы деректер кідіртілді"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Деректер кідіртілді"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Орнатылған деректер шегіне жеткендіктен, құрылғы осы циклдың қалған бөлігі бойы деректерді пайдалануды кідіртті.\n\nЖалғастыру оператор ақыларына әкелуі мүмкін."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Жалғастыру"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет байланысы жоқ"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi қосулы"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS қызметін іздеуде"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Қалғу"</string> <string name="ethernet_label" msgid="7967563676324087464">"Этернет"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Ұшақ режимі"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Мазаламау"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Тек басымдық"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Үзулерсіз"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> құрылғылары)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth өшірулі"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Желі жоқ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi өшірулі"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Сақталған желілер қол жетімді емес"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Экранды трансляциялау"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Трансляциялануда"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Атаусыз құрылғы"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Трансляциялауға дайын"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Қосымша параметрлер"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Дайын"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Қосылды"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi көмекшісі арқылы қосылу орындалды"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Сақталды"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Қосылуда…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Тетеринг"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Хот-спот"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"іздеу"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> іске қосу мүмкін болмады."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Барлық қолданбаларды қабылдамау"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Бөлінген көлденең"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Бөлінген тік"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Бөлінген теңшелетін"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Зарядталды"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядталуда"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Толғанға дейін <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Бекітпесін ашу алдында оларды көру"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Жоқ, рақмет"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Реттеу"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Барлығын көру"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Барлығын жасыру"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Экран түйрелді"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Бұл сіз оны босатқанша оны көрсетіп тұрады. Босату үшін «Кері» және «Шолу» түймелерін бір уақытта басып тұрыңыз."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> жасыру керек пе?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ол сіз оны параметрлерде келесі қосқанда қайта пайда болады."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Жасыру"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> көлем диалогтық терезесі болғысы келеді."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Рұқсат беру"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Өшіру"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> — көлем диалогтық терезесі"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Түпнұсқаны қалпына келтіру үшін түртіңіз."</string> </resources> diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml index 71d616f..de48a23 100644 --- a/packages/SystemUI/res/values-km-rKH/strings.xml +++ b/packages/SystemUI/res/values-km-rKH/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ព័ត៌មានកម្មវិធី"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"អេក្រង់បច្ចុប្បន្នរបស់អ្នកបង្ហាញនៅទីនេះ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"បដិសេធកម្មវិធីថ្មីៗ"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"អេក្រង់ 1 ក្នុងទិដ្ឋភាព"</item> - <item quantity="other" msgid="5523506463832158203">"អេក្រង់ %d ក្នុងទិដ្ឋភាព"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">អេក្រង់ %d ក្នុងទិដ្ឋភាព</item> + <item quantity="one">អេក្រង់ 1 ក្នុងទិដ្ឋភាព</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"គ្មានការជូនដំណឹង"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"បន្ត"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ការជូនដំណឹង"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ដោះសោ"</string> <string name="phone_label" msgid="2320074140205331708">"បើកទូរស័ព្ទ"</string> <string name="camera_label" msgid="7261107956054836961">"បើកម៉ាស៊ីនថត"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ប្ដូរប៊ូតុងវិធីសាស្ត្របញ្ចូល។"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ប៊ូតុងពង្រីកត្រូវគ្នា។"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ពង្រីក/បង្រួមអេក្រង់ពីទៅធំ"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"បានតភ្ជាប់ប៊្លូធូស។"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"បើករបៀបជិះយន្តហោះ។"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"បានបិទរបៀបជិះយន្តហោះ។"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"បានបើករបៀបជិះយន្តហោះ។"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"បានបើកមុខងារកុំរំខាន (អាទិភាពប៉ុណ្ណោះ)។"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"បានបើកមុខងារកុំរំខាន សូមកុំរំខាន"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"បានបិទមុខងារកុំរំខាន។"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"បានបិទមុខងារកុំរំខាន។"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"បានបើកមុខងារកុំរំខាន។"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"បិទប៊្លូធូស។"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"បើកប៊្លូធូស។"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ការភ្ជាប់ប៊្លូធូស។"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"បានបើកហតស្ប៉តចល័ត។"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"បានបញ្ឈប់ការចាត់ថ្នាក់អេក្រង់។"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ពន្លឺការបង្ហាញ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"ទិន្នន័យ 2G-3G បានបិទ"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"ទិន្នន័យ 4G បានបិទ"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ទិន្នន័យចល័តបានបិទ"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ទិន្នន័យបានបិទ"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"ឧបករណ៍របស់អ្នកបានបិទទិន្នន័យ ព្រោះវាបានដល់កម្រិតដែលអ្នកបានកំណត់។\n\nបើកវាឡើងវិញអាចគិតលុយពីក្រុមហ៊ុនបញ្ជូនរបស់អ្នក។"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"បើកទិន្នន័យ"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ទិន្នន័យ 2G-3G ត្រូវបានផ្អាក"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ទិន្នន័យ 4G ត្រូវបានផ្អាក"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ទិន្នន័យចល័តត្រូវបានផ្អាក"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ទិន្នន័យត្រូវបានផ្អាក"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ដោយសារទិន្នន័យរបស់អ្នកបានឈានដល់កំណត់ ឧបករណ៍នេះបានផ្អាកការប្រើប្រាស់ទិន្នន័យសម្រាប់ការរំលឹកនៃវគ្គនេះ។\n\nការបន្តប្រើប្រាស់អាចនាំឲ្យមានការគិតប្រាក់ពីក្រុមហ៊ុនផ្តល់សេវាកម្ម។"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"បន្ត"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"គ្មានការតភ្ជាប់អ៊ីនធឺណិត"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"បានភ្ជាប់វ៉ាយហ្វាយ"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"ស្វែងរក GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"ធាតុរក្សាអេក្រង់"</string> <string name="ethernet_label" msgid="7967563676324087464">"អ៊ីសឺរណិត"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"របៀបពេលជិះយន្តហោះ"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"កុំរំខាន"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"អាទិភាពប៉ុណ្ណោះ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"សូមកុំរំខាន"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ប៊្លូធូស"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ប៊្លូធូស (ឧបករណ៍ <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ប៊្លូធូសបានបិទ"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"គ្មានបណ្ដាញ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"វ៉ាយហ្វាយបានបិទ"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"មិនមានបណ្ដាញដែលបានរក្សាទុក"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ខាសអេក្រង់"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"ការចាត់ថ្នាក់"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ឧបករណ៍ដែលមិនមានឈ្មោះ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ត្រៀមរួចរាល់ដើម្បីចាត់ថ្នាក់"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"ការកំណត់ច្រើនទៀត"</string> <string name="quick_settings_done" msgid="3402999958839153376">"រួចរាល់"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"បានភ្ជាប់"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"បានភ្ជាប់តាមរយៈជំនួយការ Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"បានរក្សាទុក"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"កំពុងតភ្ជាប់..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ការភ្ជាប់"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ហតស្ប៉ត"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"មិនអាចចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ទេ។"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"បោះបង់កម្មវិធីទាំងអស់"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"បំបែកផ្តេក"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"បំបែកបញ្ឈរ"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"បំបែកផ្ទាល់ខ្លួន"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"បានបញ្ចូលថ្ម"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"កំពុងបញ្ចូលថ្ម"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> រហូតដល់ពេញ"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ឃើញពួកវាមុនពេលដោះសោ"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ទេ អរគុណ!"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"រៀបចំ"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"មើលទាំងអស់"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"លាក់ទាំងអស់"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"អេក្រង់ត្រូវបានភ្ជាប់"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"រក្សាទុកវាក្នុងទិដ្ឋភាពរហូតដល់អ្នកផ្ដាច់។ ប៉ះ ហើយសង្កត់ថយក្រោយ និងទិដ្ឋភាពនៅពេលតែមួយដើម្បីផ្ដាច់។"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"លាក់ <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"វានឹងបង្ហាញពេលក្រោយ ពេលដែលអ្នកបើកក្នុងការកំណត់។"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"លាក់"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ចង់ក្លាយជាប្រអប់សម្លេង។"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"អនុញ្ញាត"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"បដិសេធ"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> គឺជាប្រអប់សម្លេង"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"ប៉ះដើម្បីស្តារច្បាប់ដើម។"</string> </resources> diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml index b2e2a1a..2687de1 100644 --- a/packages/SystemUI/res/values-kn-rIN/strings.xml +++ b/packages/SystemUI/res/values-kn-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಪರದೆಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ಇತ್ತೀಚಿನ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವಜಾಗೊಳಿಸು"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ 1 ಪರದೆ"</item> - <item quantity="other" msgid="5523506463832158203">"ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item> + <item quantity="other">ಸಮಗ್ರ ನೋಟದಲ್ಲಿರುವ %d ಪರದೆಗಳು</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ಚಾಲ್ತಿಯಲ್ಲಿರುವ"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ಅಧಿಸೂಚನೆಗಳು"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ಅನ್ಲಾಕ್ ಮಾಡು"</string> <string name="phone_label" msgid="2320074140205331708">"ಫೋನ್ ತೆರೆಯಿರಿ"</string> <string name="camera_label" msgid="7261107956054836961">"ಕ್ಯಾಮರಾ ತೆರೆಯಿರಿ"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ಇನ್ಪುಟ್ ವಿಧಾನ ಬದಲಿಸು ಬಟನ್."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ಹೊಂದಾಣಿಕೆಯ ಝೂಮ್ ಬಟನ್."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ಚಿಕ್ಕ ಪರದೆಯಿಂದ ದೊಡ್ಡ ಪರದೆಗೆ ಝೂಮ್ ಮಾಡು."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ಬ್ಲೂಟೂತ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಆನ್ ಮಾಡಲಾಗಿದೆ."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್ ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್, ಆದ್ಯತೆ ಮಾತ್ರ."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಆಗಿದೆ, ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆಫ್ ಆಗಿದೆ."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ತೊಂದರೆ ಮಾಡಬೇಡಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆನ್ ಮಾಡಲಾಗಿದೆ."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ಬ್ಲೂಟೂತ್ ಆಫ್ ಆಗಿದೆ."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ಬ್ಲೂಟೂತ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗುತ್ತಿದೆ."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ಮೊಬೈಲ್ ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಮಾಡಲಾಗಿದೆ."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ಸ್ಕ್ರೀನ್ ಪ್ರಸಾರವನ್ನು ನಿಲ್ಲಿಸಲಾಗಿದೆ."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ಹೊಳಪನ್ನು ಪ್ರದರ್ಶಿಸಿ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G ಡೇಟಾ ಆಫ್ ಆಗಿದೆ"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G ಡೇಟಾ ಆಫ್ ಆಗಿದೆ"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ಆಫ್ ಆಗಿದೆ"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ಡೇಟಾ ಆಫ್ ಆಗಿದೆ"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"ನೀವು ಹೊಂದಿಸಿದ ಮಿತಿಯನ್ನು ತಲುಪಿರುವ ಕಾರಣ ನಿಮ್ಮ ಸಾಧನವು ಡೇಟಾವನ್ನು ಆಫ್ ಮಾಡಿದೆ.\n\nಆನ್ ಮಾಡುವುದರಿಂದ ನಿಮ್ಮ ವಾಹಕದಲ್ಲಿ ಶುಲ್ಕಕ್ಕೆ ಕಾರಣವಾಗಬಹುದು."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ಡೇಟಾ ಆನ್ ಮಾಡಿ"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ಡೇಟಾವನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ಸೆಲ್ಯುಲಾರ್ ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ಏಕೆಂದರೆ ನಿಮ್ಮ ಹೊಂದಾಣಿಕೆ ಡೇಟಾ ಮೀತಿಯನ್ನು ತಲುಪಿದೆ, ಈ ಆವರ್ತನೆಯ ಉಳಿದ ಭಾಗಕ್ಕೆ ಸಾಧನವು ಡೇಟಾ ಬಳಕೆಯನ್ನು ವಿರಾಮಗೊಳಿಸಿದೆ.\n\nಮುಂದುವರೆಯುವಿಕೆಯು ನಿಮ್ಮ ವಾಹಕದ ಶುಲ್ಕಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ಮುಂದುವರಿಸು"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವಿಲ್ಲ"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"ಡೇಡ್ರೀಮ್"</string> <string name="ethernet_label" msgid="7967563676324087464">"ಇಥರ್ನೆಟ್"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ಏರ್ಪ್ಲೇನ್ ಮೋಡ್"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ಆದ್ಯತೆ ಮಾತ್ರ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ಯಾವುದೇ ಅಡಚಣೆಗಳಿಲ್ಲ"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ಬ್ಲೂಟೂತ್"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ಬ್ಲೂಟೂತ್ (<xliff:g id="NUMBER">%d</xliff:g> ಸಾಧನಗಳು)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ಬ್ಲೂಟೂತ್ ಆಫ್"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ನೆಟ್ವರ್ಕ್ ಇಲ್ಲ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ಆಫ್"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ಯಾವುದೇ ಉಳಿಸಲಾದ ನೆಟ್ವರ್ಕ್ಗಳು ಲಭ್ಯವಿಲ್ಲ"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ಬಿತ್ತರದ ಪರದೆ"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ಹೆಸರಿಸದಿರುವ ಸಾಧನ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ಬಿತ್ತರಿಸಲು ಸಿದ್ದವಾಗಿದೆ"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="quick_settings_done" msgid="3402999958839153376">"ಮುಗಿದಿದೆ"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi ಸಹಾಯಕದ ಮೂಲಕ ಸಂಪರ್ಕಿತಗೊಳಿಸಲಾಗಿದೆ"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"ಉಳಿಸಲಾಗಿದೆ"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ಟೆಥರಿಂಗ್"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ಹಾಟ್ಸ್ಪಾಟ್"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ಹುಡುಕಾಟ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ಪ್ರಾರಂಭಿಸಲು ಸಾದ್ಯವಿಲ್ಲ."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವಜಾಗೊಳಿಸಿ"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ಅಡ್ಡಲಾಗಿ ವಿಭಜಿಸಿದ"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ಲಂಬವಾಗಿ ವಿಭಜಿಸಿದ"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ಕಸ್ಟಮ್ ವಿಭಜಿಸಿದ"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ಚಾರ್ಜ್ ಆಗಿದೆ"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ನೀವು ಅನ್ಲಾಕ್ ಮಾಡುವ ಮೊದಲೇ ಅವುಗಳನ್ನು ನೋಡಿ"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ಬೇಡ ಧನ್ಯವಾದಗಳು"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"ಹೊಂದಿಸು"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"ಎಲ್ಲವನ್ನೂ ನೋಡಿ"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"ಎಲ್ಲ ಮರೆಮಾಡಿ"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"ಪರದೆಯನ್ನು ಪಿನ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ನೀವು ಅನ್ಪಿನ್ ಮಾಡುವವರೆಗೆ ಅದನ್ನು ವೀಕ್ಷಣೆಯಲ್ಲಿಡುತ್ತದೆ. ಅನ್ಪಿನ್ ಮಾಡಲು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ ಹಾಗೂ ಅವಲೋಕಿಸಿ."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ಮರೆಮಾಡುವುದೇ?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಅದನ್ನು ಆನ್ ಮಾಡಿದಾಗ ಅದು ಮರುಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ಮರೆಮಾಡಿ"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ವಾಲ್ಯೂಮ್ ಸಂವಾದವಾಗಲು ಬಯಸುತ್ತದೆ."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ಅನುಮತಿಸು"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ನಿರಾಕರಿಸು"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ವಾಲ್ಯೂಮ್ ಸಂವಾದವಾಗಿದೆ"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"ಮೂಲ ಮರುಸ್ಥಾಪಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index a0d614a..993bef4 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"앱 정보"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"여기에 최근 화면이 표시됩니다."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"최근에 사용한 앱 숨기기"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"최근 사용에 화면 1개"</item> - <item quantity="other" msgid="5523506463832158203">"최근 사용에 화면 %d개"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">최근 사용에 화면 %d개 있음</item> + <item quantity="one">최근 사용에 화면 1개 있음</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"알림 없음"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"진행 중"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"알림"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"잠금 해제"</string> <string name="phone_label" msgid="2320074140205331708">"휴대전화 열기"</string> <string name="camera_label" msgid="7261107956054836961">"카메라 열기"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"입력 방법 버튼을 전환합니다."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"호환성 확대/축소 버튼입니다."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"작은 화면을 큰 화면으로 확대합니다."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"블루투스가 연결되었습니다."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"비행기 모드: 사용"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"비행기 모드가 사용 중지되었습니다."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"비행기 모드를 사용합니다."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"알림 일시중지 사용, 중요 알림만 수신"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"알림 일시중지 사용, 방해 금지"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"알림 일시중지 사용 중지"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"알림 일시중지가 사용 중지되었습니다."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"알림 일시중지를 사용합니다."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"블루투스: 사용 안함"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"블루투스: 사용"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"블루투스에 연결 중입니다."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"모바일 핫스팟을 사용합니다."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"화면 전송이 중지되었습니다."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"디스플레이 밝기"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G 데이터 사용 중지됨"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G 데이터 사용 중지됨"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"이동통신 데이터 사용 중지됨"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"데이터 사용 중지됨"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"데이터가 설정 한도에 도달하여 사용 중지되었습니다.\n\n데이터를 다시 사용 설정하면 이동통신사로부터 대금이 청구될 수 있습니다."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"데이터 사용 설정"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 데이터 사용 중지됨"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 데이터 사용 중지됨"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"모바일 데이터 사용 중지됨"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"데이터 사용 중지됨"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"설정된 데이터 한도에 도달했기 때문에 기기에서 사이클의 나머지 기간 동안 데이터 사용을 일시 중지했습니다. \n\n데이터 사용을 재개하면 이동통신사 요금이 청구될 수 있습니다."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"재개"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"인터넷에 연결되지 않음"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 연결됨"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS 검색 중"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"화면 보호기"</string> <string name="ethernet_label" msgid="7967563676324087464">"이더넷"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"비행기 모드"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"알림 일시중지"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"중요 알림만"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"방해 금지"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"블루투스"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"블루투스(<xliff:g id="NUMBER">%d</xliff:g>개의 기기)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"블루투스 사용 안함"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"네트워크가 연결되지 않음"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 꺼짐"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"저장된 네트워크가 없습니다."</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"화면 전송"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"전송 중"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"이름이 없는 기기"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"전송 준비 완료"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"설정 더보기"</string> <string name="quick_settings_done" msgid="3402999958839153376">"완료"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"연결됨"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi 도우미를 통해 연결됨"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"저장됨"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"연결 중..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"테더링"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"핫스팟"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"모든 애플리케이션 닫기"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"수평 분할"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"수직 분할"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"맞춤 분할"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"충전됨"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"충전 중"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"완충까지 <xliff:g id="CHARGING_TIME">%s</xliff:g> 남음"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"잠금 해제하기 전에 알림을 봅니다."</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"사용 안함"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"설정"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"모두 보기"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"모두 숨기기"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"화면 고정됨"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"고정 해제하기 전까지 계속 표시됩니다. 고정 해제하려면 뒤로와 개요를 동시에 길게 터치합니다."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>을(를) 숨기시겠습니까?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"다음번에 설정에서 사용 설정하면 다시 표시됩니다."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"숨기기"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>이(가) 볼륨 대화가 되려고 합니다."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"허용"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"거부"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>은(는) 볼륨 대화입니다."</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"원본을 복원하려면 터치하세요."</string> </resources> diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml index f51814f..25471e5 100644 --- a/packages/SystemUI/res/values-ky-rKG/strings.xml +++ b/packages/SystemUI/res/values-ky-rKG/strings.xml @@ -27,10 +27,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Колдонмо тууралуу"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Акыркы экрандарыңыз бул жерден көрүнөт"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Акыркы колдонмолорду жок кылуу"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 экран Көз жүгүртүүдө"</item> - <item quantity="other" msgid="5523506463832158203">"%d экран Көз жүгүртүүдө"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d экран Көз жүгүртүүдө</item> + <item quantity="one">1 экран Көз жүгүртүүдө</item> + </plurals> <!-- no translation found for status_bar_no_notifications_title (4755261167193833213) --> <skip /> <!-- no translation found for status_bar_ongoing_events_title (1682504513316879202) --> @@ -113,7 +113,6 @@ <string name="unlock_label" msgid="8779712358041029439">"кулпуну ачуу"</string> <string name="phone_label" msgid="2320074140205331708">"телефонду ачуу"</string> <string name="camera_label" msgid="7261107956054836961">"камераны ачуу"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Киргизүү ыкмасын которуу баскычы."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Масштабды сыйыштыруу баскычы."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Кичинекейди чоң экранга масштабдоо."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth байланышта"</string> @@ -202,6 +201,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Учак режими күйүк."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Учак режими өчүрүлдү."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Учак режими күйгүзүлдү."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Тынчымды алба деген күйүк, артыкчылыктуулар гана."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Тынчымды алба деген күйүк, үзгүлтүккө учуратуулар жок."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Тынчымды алба деген өчүк."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Тынчымды алба деген өчүрүлдү."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Тынчымды алба деген күйгүзүлдү."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth өчүк."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth күйүк."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth туташууда."</string> @@ -226,12 +230,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилдик байланыш түйүнү күйгүзүлдү."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Тышкы экранга чыгаруу аракети токтотулду."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Жарыктыгын көрсөтүү"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2Гб-3Гб көлөмдөгү дайындар өчүрүлдү."</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4Гб көлөмдөгү дайындар өчүрүлдү"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Уюктук дайындар тармагы өчүк"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Дайындарды кабыл алуу өчүрүлгөн."</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Белгиленген эң жогорку чекке жеткендиктен, түзмөгүңүз дайындарды кабыл алууну токтотту.\n\nДайындарды кабыл алууну улантам десеңиз, операторго акы төлөп калышыңыз мүмкүн."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Дайындарды алууну иштетүү"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дайындары тындырылды."</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дайындары тындырылды"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Уюлдук дайындар тындырылды"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Дайындар тындырылды"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Киргизиле турган дайындар белгиленген эң жогорку чекке жеткендиктен, ушул мерчимдин калган бөлүгүндө түзмөгүңүздө дайындардын колдонулушу тындырылды.\n\nУлантсаңыз, байланыш операторуңузга акы төлөп калышыңыз мүмкүн."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Улантуу"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет байланыш жок"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi байланышта"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS издөө"</string> @@ -250,6 +254,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Кыялдануу"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Учак тартиби"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Тынчымды алба"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Артыкчылык гана"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Үзгүлтүксүз"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> түзмөк)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth өчүк"</string> @@ -275,7 +282,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Желе жок"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi өчүк"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Сакталган тармактар жок"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Тышкы экранга чыгаруу"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Тышкы экранга чыгарылууда"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Аты жок түзмөк"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Тышкы экранга чыгарууга даяр"</string> @@ -287,8 +295,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Дагы жөндөөлөр"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Аткарылды"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Туташкан"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi жардамчысы аркылуу туташып турат"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Сакталды"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Туташууда…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Тетеринг"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Туташуу чекити"</string> @@ -307,18 +313,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"издөө"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> баштай алган жок."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Бардык колдонмолорду көз жаздымда калтыруу"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Туурасынан бөлүү"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Тигинен бөлүү"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Ыңгайлаштырылган бөлүү"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Кубатталды"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Кубатталууда"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> толгонго чейин"</string> @@ -393,6 +390,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Аларды кулпудан чыгараардан мурун көрүңүз"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Жок, рахмат"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Орнотуу"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Бардыгын көрүү"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Баарын жашыруу"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Экран кадалган"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Бул бошотулмайынча көрүнө берет. Бошотуу үчүн, бир убакта Артка жана Карап чыгууну коё бербей басып туруңуз."</string> @@ -402,4 +401,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> жашырылсынбы?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Бул кийинки жолу жөндөөлөрдөн күйгүзүлгөндө кайра көрүнөт."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Жашыруу"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> үндү катуулатуу диалогу болгусу келет."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Уруксат берүү"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Жок"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> үндү катуулатуу диалогу"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Түпнусканы калыбына келтирүү үчүн тийип коюңуз."</string> </resources> diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml index 01ef31a..6ae0c71 100644 --- a/packages/SystemUI/res/values-lo-rLA/strings.xml +++ b/packages/SystemUI/res/values-lo-rLA/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ຂໍ້ມູນແອັບຯ"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ປິດແອັບຯຫຼ້າສຸດທີ່ໃຊ້"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ໜ້າຈໍຢູ່ໃນພາບຮວມ"</item> - <item quantity="other" msgid="5523506463832158203">"%d ໜ້າຈໍຢູ່ໃນພາບຮວມ"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d ໜ້າຈໍຢູ່ໃນພາບລວມ</item> + <item quantity="one">1 ໜ້າຈໍຢູ່ໃນພາບລວມ</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ບໍ່ມີການແຈ້ງເຕືອນ"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ດຳເນີນຢູ່"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ການແຈ້ງເຕືອນ"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ປົດລັອກ"</string> <string name="phone_label" msgid="2320074140205331708">"ເປີດແປ້ນໂທລະສັບ"</string> <string name="camera_label" msgid="7261107956054836961">"ເປີດກ້ອງ"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ປຸ່ມສະລັບຮູບແບບການປ້ອນຂໍ້ມູນ."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ປຸ່ມຊູມທີ່ໃຊ້ຮ່ວມກັນໄດ້."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ຊູມຈໍນ້ອຍໄປເປັນຈໍຂະຫນາດໃຫຍ່."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ເຊື່ອມຕໍ່ Bluetooth ແລ້ວ."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ເປີດໂໝດຢູ່ໃນຍົນ."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ປິດໂໝດຢູ່ໃນຍົນແລ້ວ."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ຫ້າມລະກວນເປີດຢູ່, ບຸລິມະສິດເທົ່ານັ້ນ."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ຫ້າມລະກວນເປີດຢູ່, ບໍ່ມີການຂັດຈັງຫວະ."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ຫ້າມລົບກວນປິດຢູ່."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ຢ່າລົບກວນປິດແລ້ວ."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"ຢ່າລົບກວນເປີດແລ້ວ."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth ປິດ."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth ເປີດ."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ກຳລັງເຊື່ອມຕໍ່ Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ເປີດຮັອດສະປອດເຄື່ອນທີ່ແລ້ວ."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ຢຸດການສົ່ງພາບໜ້າຈໍແລ້ວ."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ຄວາມແຈ້ງຂອງຈໍ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"ຂໍ້ມູນ 2G-3G ແມ່ນປິດ"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"ຂໍ້ມູນ 4G ແມ່ນປິດ"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ຂໍ້ມູນມືຖືຖືກປິດ"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ຂໍ້ມູນຖືກປິດ"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"ອຸປະກອນຂອງທ່ານປິດການນຳໃຊ້ຂໍ້ມູນເນື່ອງຈາກມັນໃຊ້ຮອດຈຳນວນທີ່ທ່ານກຳນົດໄວ້ແລ້ວ.\n\nການເປີດນຳໃຊ້ຂໍ້ມູນຄືນອາດເຮັດໃຫ້ຜູ່ໃຫ້ບໍລິການຮຽກເກັບເງິນທ່ານເພີ່ມໄດ້."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ເປີດນຳໃຊ້ຂໍ້ມູນ"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ຂໍ້ມູນ 2G-3G ຢຸດຊົ່ວຄາວແລ້ວ"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ຂໍ້ມູນ 4G ຢຸດຊົ່ວຄາວແລ້ວ"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ຂໍ້ມູນເຊວລູລາຢຸດຊົ່ວຄາວແລ້ວ"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ຂໍ້ມູນຢຸດຊົ່ວຄາວແລ້ວ"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ເນື່ອງຈາກວ່າຮອດຂີດຈຳກັດຂໍ້ມູນທີ່ຕັ້ງໄວ້ຂອງທ່ານແລ້ວ, ອຸປະກອນຢຸດການນຳໃຊ້ຂໍ້ມູນສຳລັບສ່ວນທີ່ຍັງເຫຼືອຂອງຮອບວຽນນີ້.\n\nການເລີ່ມຕໍ່ອາດຈະນຳໄປສູ່ການປ່ຽນແປງຈາກຜູ້ໃຫ້ບໍລິການເຄືອຂ່າຍຂອງທ່ານ."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ເລີ່ມຕໍ່"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ເຊື່ອມຕໍ່ Wi--Fi ແລ້ວ"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"ກຳລັງຊອກຫາ GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ໂໝດຢູ່ໃນຍົນ"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ຫ້າມລົບກວນ"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ບຸລິມະສິດເທົ່ານັ້ນ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ບໍ່ມີການລົບກວນ"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ອຸປະກອນ)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth ປິດ"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ບໍ່ມີເຄືອຂ່າຍ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ປິດ"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"ບໍ່ມີເຄືອຂ່າຍທີ່ບັນທຶກໄວ້ທີ່ສາມາດໃຊ້ໄດ້"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ສົ່ງສັນຍານໜ້າຈໍ"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"ຄາສທ໌"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"ກຳລັງສົ່ງສັນຍານ"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ອຸປະກອນບໍ່ມີຊື່"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ພ້ອມສົ່ງສັນຍານແລ້ວ"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"ການຕັ້ງຄ່າເພີ່ມເຕີມ"</string> <string name="quick_settings_done" msgid="3402999958839153376">"ແລ້ວໆ"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"ເຊື່ອມຕໍ່ແລ້ວ"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"ເຊື່ອມຕໍ່ຜ່ານ Wi‑Fi ຕົວຊ່ວຍແລ້ວ"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"ບັນທຶກແລ້ວ"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"ກຳລັງເຊື່ອມຕໍ່..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ການປ່ອນສັນຍານ"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ຮັອດສະປອດ"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"ບໍ່ສາມາດເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ປ່ອຍທຸກແອັບພລິເຄ"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ການແຍກລວງຂວາງ"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ການແຍກລວງຕັ້ງ"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ການແຍກກຳນົດເອງ"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ສາກເຕັມແລ້ວ."</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ກຳລັງສາກໄຟ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ຈຶ່ງຈະເຕັມ"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ເບິ່ງພວກມັນກ່ອນທ່ານຈະປົດລັອກ"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ບໍ່, ຂອບໃຈ"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"ຕັ້ງຄ່າ"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"ເບິ່ງທັງໝົດ"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"ເຊື່ອງທັງຫມົດ"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"ປັກໝຸດໜ້າຈໍແລ້ວ"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ມັນຈະຮັກສາໜ້າຈໍໄວ້ໃນມຸມມອງຂອງທ່ານຈົນກວ່າທ່ານຈະຖອດໝຸດ. ແຕະປຸ່ມ ກັບຄືນ ແລະ ພາບຮວມ ຄ້າງໄວ້ພ້ອມກັນເພື່ອຖອດໝຸດ."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ເຊື່ອງ <xliff:g id="TILE_LABEL">%1$s</xliff:g> ຫຼືບໍ່?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ມັນຈະສະແດງຄືນໃໝ່ເມື່ອທ່ານເປີດນຳໃຊ້ມັນໃນການຕັ້ງຄ່າຄັ້ງຕໍ່ໄປ."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ເຊື່ອງ"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ຕ້ອງການໃຫ້ເປັນໜ້າຕ່າງລະດັບສຽງ."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ອະນຸຍາດ"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ປະຕິເສດ"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ແມ່ນໜ້າຕ່າງລະດັບສຽງ"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"ສໍາຜັດເພື່ອກູ້ຄືນຕົ້ນສະບັບ."</string> </resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 50fdaff..0fc6fbb 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Programos informacija"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Čia rodomi naujausi ekranai"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Atsisakyti naujausių programų"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Ekranų apžvalga: 1"</item> - <item quantity="other" msgid="5523506463832158203">"Ekranų apžvalga: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d ekrano apžvalga</item> + <item quantity="few">%d ekranų apžvalga</item> + <item quantity="many">%d ekrano apžvalga</item> + <item quantity="other">%d ekranų apžvalga</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nėra įspėjimų"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Vykstantys"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pranešimai"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"atrakinti"</string> <string name="phone_label" msgid="2320074140205331708">"atidaryti telefoną"</string> <string name="camera_label" msgid="7261107956054836961">"atidaryti fotoaparatą"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Perjungti įvesties metodo mygtuką."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Suderinamumo priartinimo mygtukas."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Padidinti ekraną."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"„Bluetooth“ prijungtas."</string> @@ -177,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lėktuvo režimas įjungtas."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lėktuvo režimas išjungtas."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lėktuvo režimas įjungtas."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Funkcija „Netrukdyti“ įjungta. Tik prioritetiniai įvykiai."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Funkcija „Netrukdyti“ įjungta. Jokių pertraukčių."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Funkcija „Netrukdyti“ išjungta."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Funkcija „Netrukdyti“ išjungta."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Funkcija „Netrukdyti“ įjungta."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"„Bluetooth“ išjungtas."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"„Bluetooth“ įjungtas."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Prijungiamas „Bluetooth“."</string> @@ -201,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiliojo ryšio viešosios interneto prieigos taškas įjungtas."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekrano perdavimas sustabdytas."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ekrano šviesumas"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G–3G duomenys išjungti"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G duomenys išjungti"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobiliojo ryšio duomenys išjungti"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Duomenys išjungti"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Įrenginys išjungė duomenis, nes buvo pasiektas nustatytas limitas.\n\nVėl juos įjungus gali būti taikomi operatoriaus mokesčiai."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Įjungti duomenis"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G duomenys pristabdyti"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G duomenys pristabdyti"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Korinio ryšio duomenys pristabdyti"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Duomenys pristabdyti"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Kadangi buvo pasiektas nustatytas duomenų limitas, įrenginys pristabdė duomenų naudojimą likusį šio ciklo laikotarpį.\n\nAtnaujinus gali būti taikomi operatoriaus mokesčiai."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Atnaujinti"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nėra interneto ryš."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Prisij. prie „Wi-Fi“"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Ieškoma GPS"</string> @@ -225,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Svajonė"</string> <string name="ethernet_label" msgid="7967563676324087464">"Eternetas"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lėktuvo režimas"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Netrukdyti"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tik prioritetiniai įvykiai"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Jokių pertraukčių"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"„Bluetooth“ (<xliff:g id="NUMBER">%d</xliff:g> įreng.)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"„Bluetooth“ išjungta"</string> @@ -250,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tinklo nėra"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"„Wi-Fi“ išjungta"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nėra pasiekiamų išsaugotų tinklų"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Perdavimo ekranas"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Perduodama"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Įrenginys be pavadinimo"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Paruošta perduoti"</string> @@ -262,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Daugiau nustatymų"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Atlikta"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Prijungtas"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Prisijungta naudojant „Wi‑Fi“ pagelbiklį"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Išsaugota"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Prisijungiama..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Susiejimas"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Viešosios interneto prieigos taškas"</string> @@ -282,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nepavyko paleisti <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Atsisakyti visų programų"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontalus skaidymas"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikalus skaidymas"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tinkintas skaidymas"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Įkrautas"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Kraunamas"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> iki visiško įkrovimo"</string> @@ -368,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Peržiūrėti prieš atrakinant"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, ačiū"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Nustatyti"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Žr. viską"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Slėpti viską"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekranas prisegtas"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Tai bus rodoma, kol atsegsite. Kad atsegtumėte, tuo pačiu metu palieskite ir laikykite „Atgal“ ir „Apžvalga“."</string> @@ -377,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Slėpti „<xliff:g id="TILE_LABEL">%1$s</xliff:g>“?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tai bus vėl parodyta, kai kitą kartą įjungsite tai nustatymuose."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Slėpti"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ nori būti garsumo valdymo dialogo langu."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Leisti"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Atmesti"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“ yra garsumo valdymo dialogo langas"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Palieskite, kad atkurtumėte originalą."</string> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 4d36ab5..54cc36a 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -25,10 +25,11 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Lietotnes informācija"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Jūsu pēdējie ekrāni tiek rādīti šeit."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Nerādīt nesen izmantotās lietotnes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ekrāns sadaļā “Pārskats”"</item> - <item quantity="other" msgid="5523506463832158203">"%d ekrāni sadaļā “Pārskats”"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="zero">%d ekrānu sadaļā Kopsavilkums</item> + <item quantity="one">%d ekrāns sadaļā Kopsavilkums</item> + <item quantity="other">%d ekrāni sadaļā Kopsavilkums</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nav paziņojumu"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Notiekošs"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Paziņojumi"</string> @@ -88,7 +89,6 @@ <string name="unlock_label" msgid="8779712358041029439">"atbloķēt"</string> <string name="phone_label" msgid="2320074140205331708">"atvērt tālruni"</string> <string name="camera_label" msgid="7261107956054836961">"atvērt kameru"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth savienojums ir izveidots."</string> @@ -177,6 +177,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Lidojuma režīms ir ieslēgts."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Lidojuma režīms ir izslēgts."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Lidojuma režīms ir ieslēgts."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Statuss Netraucēt ir ieslēgts, izvēlēts iestatījums Tikai prioritārie."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Statuss Netraucēt ir ieslēgts, izvēlēts iestatījums Bez pārtraukumiem."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Statuss Netraucēt ir izslēgts."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Statuss Netraucēt tika izslēgts."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Statuss Netraucēt tika ieslēgts."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth savienojums ir izslēgts."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth savienojums ir ieslēgts."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Notiek Bluetooth savienojuma izveide."</string> @@ -201,12 +206,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilais tīklājs ir ieslēgts."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekrāna apraidīšana ir apturēta."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ekrāna spilgtums"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G–3G dati ir atslēgti"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G dati ir atslēgti"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobilie dati ir atslēgti"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Dati ir atslēgti"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Jūsu ierīcē tika atslēgta datu lietošana, jo tika sasniegts jūsu noteiktais ierobežojums.\n\nJa atkal ieslēgsiet datu lietošanu, iespējams, jūsu mobilo sakaru operators iekasēs maksu."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Ieslēgt datus"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G datu lietojums ir apturēts"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datu lietojums ir apturēts"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobilo datu lietojums ir apturēts"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Datu lietojums ir apturēts"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Tika sasniegts iestatītais datu lietojuma ierobežojums, tādēļ ierīcē ir apturēts datu lietojums cikla atlikušajā periodā.\n\nJa atsāksiet lietot datus, iespējams, jūsu mobilo sakaru operators iekasēs maksu."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Atsākt"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Nav interneta sav."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Izv. sav. ar Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Notiek GPS meklēšana..."</string> @@ -225,6 +230,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Ekrānsaudzētājs"</string> <string name="ethernet_label" msgid="7967563676324087464">"Tīkls Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lidojuma režīms"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Netraucēt"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tikai prioritārie"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez pārtraukumiem"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ierīce(-es))"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth savienojums ir izslēgts."</string> @@ -250,7 +258,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nav tīkla"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ir izslēgts"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nav pieejams neviens saglabātais tīkls."</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Apraides ekrāns"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Notiek apraide…"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nenosaukta ierīce"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Gatavs apraidei"</string> @@ -262,8 +271,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Vairāk iestatījumu"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Gatavs"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Pievienota"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Izveidots savienojums ar Wi‑Fi palīgu"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Saglabāts"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Notiek savienojuma izveide…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Piesaiste"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tīklājs"</string> @@ -282,18 +289,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Noņemt visas lietojumprogrammas"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontāls dalījums"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikāls dalījums"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Pielāgots dalījums"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulators uzlādēts"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Notiek uzlāde"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> līdz pilnam akumulatoram"</string> @@ -368,6 +366,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Skatiet tos pirms atbloķēšanas."</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nē"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Iestatīt"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Skatīt visus"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Slēpt visus"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekrāns ir piesprausts"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Šādi tas būs redzams līdz brīdim, kad to atspraudīsiet. Lai atspraustu, vienlaikus pieskarieties vienumiem “Atpakaļ” un “Pārskats” un turiet tos nospiestus."</string> @@ -377,4 +377,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vai paslēpt vienumu <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Tas tiks atkārtoti parādīts, kad nākamreiz ieslēgsiet to iestatījumos."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Paslēpt"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> vēlas pārvaldīt skaļuma dialoglodziņu."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Atļaut"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Neatļaut"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ir skaļuma dialoglodziņš"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Pieskarieties, lai atjaunotu sākotnējo."</string> </resources> diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml index a026e6f..2be9c4c 100644 --- a/packages/SystemUI/res/values-mk-rMK/strings.xml +++ b/packages/SystemUI/res/values-mk-rMK/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информации за апликацијата"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Вашите неодамнешни екрани се појавуваат тука"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Отфрли ги скорешните апликации"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 екран во Краток преглед"</item> - <item quantity="other" msgid="5523506463832158203">"%d екрани во Краток преглед"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d екран во Краток преглед</item> + <item quantity="other">%d екрани во Краток преглед</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема известувања"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Во тек"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Известувања"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"отклучи"</string> <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string> <string name="camera_label" msgid="7261107956054836961">"отвори камера"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Копче за префрање метод на внес."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Копче за компатибилност на зум."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Зумот е помал на поголем екран."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth е поврзан."</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Авионскиот режим е вклучен."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Авионскиот режим е исклучен."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Авионскиот режим е вклучен."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"„Не вознемирувај“ е вклучено, само приоритетни."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"„Не вознемирувај“ е вклучено, без прекини."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"„Не вознемирувај“ е исклучено."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"„Не вознемирувај“ е исклучено."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"„Не вознемирувај“ е вклучено."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth е исклучен."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth е вклучен."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth се поврзува."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилната точка на пристап е вклучена."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Емитувањето на екранот запре."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Осветленост на екранот"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Податоците 2G-3G се исклучени"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Податоците 4G се исклучени"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Мобилните податоци се исклучени"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Податоците се исклучени"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Вашиот уред ги исклучи податоците затоа што го достигнаа лимитот што го поставивте.\n\nСо повторно вклучување, операторот може да ви наплати за тоа."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Вклучи податоци"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Податоците 2G-3G се паузирани"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Податоците 4G се паузирани"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Мобилните податоци се паузирани"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Податоците се паузирани"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Поради тоа што го достигнавте поставеното ограничување на податоци, уредот го паузираше користењето податоци до крајот на циклусот.\n\nОператорот може да ви наплати ако продолжите."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Продолжи"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Нема интернет"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Поврзано на Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Се пребарува за ГПС"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Етернет"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим на работа во авион"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не вознемирувај"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Само приоритетно"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Без прекини"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> уреди)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth е исклучен"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мрежа"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е исклучено"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Нема достапни зачувани мрежи"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Емитувај екран"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Емитување"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Неименуван уред"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Подготвено за емитување"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Повеќе поставки"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Готово"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Поврзано"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Поврзано преку помошник за Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Зачувано"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Се поврзува..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Поврзување"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка на пристап"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"пребарај"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не може да се вклучи."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Отфрли ги сите апликации"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Раздели хоризонтално"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Раздели вертикално"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Раздели прилагодено"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Наполнета"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Се полни"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> додека не се наполни"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Видете ги пред да отклучите"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Не, фала"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Постави"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Види ги сите"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сокриј ги сите"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Екранот е прикачен"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ќе се гледа сè додека не го откачите. Допрете и држете Назад и Краток преглед истовремено за откачување."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Сокриј <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ќе се појави повторно следниот пат кога ќе го вклучите во поставки."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сокриј"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> сака да биде дијалог за јачина на звук."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Овозможи"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Одбиј"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> е дијалог за јачина на звук"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Допрете за да го вратите оригиналот."</string> </resources> diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml index d2b2247..c446927 100644 --- a/packages/SystemUI/res/values-ml-rIN/strings.xml +++ b/packages/SystemUI/res/values-ml-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"അപ്ലിക്കേഷൻ വിവരം"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"നിങ്ങളുടെ പുതിയ സ്ക്രീനുകൾ ഇവിടെ ദൃശ്യമാകുന്നു"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"സമീപകാല അപ്ലിക്കേഷനുകൾ നിരസിക്കുക"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"കാഴ്ചയിലെ ഒരു സ്ക്രീൻ"</item> - <item quantity="other" msgid="5523506463832158203">"കാഴ്ചയിലെ %d സ്ക്രീനുകൾ"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">ചുരുക്കവിവരണത്തിലെ %d സ്ക്രീനുകൾ</item> + <item quantity="one">ചുരുക്കവിവരണത്തിലെ ഒരു സ്ക്രീൻ</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"അറിയിപ്പുകൾ ഒന്നുമില്ല"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"നടന്നുകൊണ്ടിരിക്കുന്നവ"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"അറിയിപ്പുകൾ"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"അൺലോക്കുചെയ്യുക"</string> <string name="phone_label" msgid="2320074140205331708">"ഫോൺ തുറക്കുക"</string> <string name="camera_label" msgid="7261107956054836961">"ക്യാമറ തുറക്കുക"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ടൈപ്പുചെയ്യൽ രീതി ബട്ടൺ മാറുക."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"അനുയോജ്യതാ സൂം ബട്ടൺ."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ചെറുതിൽ നിന്ന് വലിയ സ്ക്രീനിലേക്ക് സൂം ചെയ്യുക."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ബ്ലൂടൂത്ത് കണക്റ്റുചെയ്തു."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ഫ്ലൈറ്റ് മോഡ് ഓണാണ്."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ഫ്ലൈറ്റ് മോഡ് ഓഫാക്കി."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ഫ്ലൈറ്റ് മോഡ് ഓണാക്കി."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാണ്, മുൻഗണന മാത്രം."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാണ്, തടസ്സങ്ങളൊന്നുമില്ല."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ശല്ല്യപ്പെടുത്തരുത് എന്നത് ഓഫാണ്."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓഫാക്കി."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"ശല്യപ്പെടുത്തരുത് എന്നത് ഓണാക്കി."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ബ്ലൂടൂത്ത് ഓഫാണ്."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ബ്ലൂടൂത്ത് ഓണാണ്."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ബ്ലൂടൂത്ത് കണക്റ്റുചെയ്യുന്നു."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"മൊബൈൽ ഹോട്ട്സ്പോട്ട് ഓണാക്കി."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"സ്ക്രീൻ കാസ്റ്റുചെയ്യൽ നിർത്തി."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ഡിസ്പ്ലേ തെളിച്ചം"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G ഡാറ്റ ഓഫാണ്"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G ഡാറ്റ ഓഫാണ്"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"സെല്ലുലാർ ഡാറ്റ ഓഫാണ്"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ഡാറ്റ ഓഫാണ്"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"നിങ്ങൾ സജ്ജീകരിച്ചിരിക്കുന്ന പരിധിയിൽ എത്തിച്ചേർന്നിരിക്കുന്നതിനാൽ ഉപകരണം ഡാറ്റ ഓഫുചെയ്തു.\n\nഅത് തിരികെ ഓണാക്കുന്നത്, നിങ്ങളുടെ കാരിയറിൽ നിന്ന് നിരക്കീടാക്കുന്നതിന് ഇടയാക്കാം."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ഡാറ്റ ഓണാക്കുക"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"സെല്ലുലാർ ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"നിങ്ങൾ നേരത്തെ ക്രമീകരിച്ച ഡാറ്റ പരിധിയിലെത്തിയതിനാൽ, ഈ സൈക്കിളിന്റെ അവശേഷിക്കുന്ന ഡാറ്റ ഉപയോഗം, ഉപകരണം താൽക്കാലികമായി നിർത്തി.\n\nപുനരാരംഭിക്കുന്നത്, നിങ്ങളുടെ കാരിയറിൽ നിന്ന് നിരക്കുകൾക്ക് ഇടയാക്കാം."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"പുനരാരംഭിക്കുക"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ഇന്റർനെറ്റ് കണക്ഷൻ ഇല്ല"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi കണക്റ്റുചെയ്തു"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-നായി തിരയുന്നു"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"ഡേഡ്രീം"</string> <string name="ethernet_label" msgid="7967563676324087464">"ഇതർനെറ്റ്"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ഫ്ലൈറ്റ് മോഡ്"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ശല്ല്യപ്പെടുത്തരുത്"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"മുൻഗണന മാത്രം"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"തടസ്സങ്ങളൊന്നുമില്ല"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ബ്ലൂടൂത്ത്"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ബ്ലൂടൂത്ത് (<xliff:g id="NUMBER">%d</xliff:g> ഉപകരണങ്ങൾ)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ബ്ലൂടൂത്ത് ഓഫുചെയ്യുക"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"നെറ്റ്വർക്ക് ഒന്നുമില്ല"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ഓഫുചെയ്യുക"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"സംരംക്ഷിച്ച നെറ്റ്വർക്കുകളൊന്നും ലഭ്യമല്ല"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"കാസ്റ്റ് സ്ക്രീൻ"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"കാസ്റ്റുചെയ്യുന്നു"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"പേരിടാത്ത ഉപകരണം"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"കാസ്റ്റ് ചെയ്യാൻ തയ്യാറാണ്"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"കൂടുതൽ ക്രമീകരണങ്ങൾ"</string> <string name="quick_settings_done" msgid="3402999958839153376">"പൂർത്തിയാക്കി"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"കണക്റ്റുചെയ്തു"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi അസിസ്റ്റന്റ് മുഖേന കണക്റ്റുചെയ്തു"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"സംരക്ഷിച്ചു"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"കണക്റ്റുചെയ്യുന്നു..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ടെതറിംഗ്"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ഹോട്ട്സ്പോട്ട്"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"തിരയുക"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ആരംഭിക്കാനായില്ല."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"എല്ലാ അപ്ലിക്കേഷനുകളും നിരസിക്കുക"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"തിരശ്ചീനമായി വേർതിരിക്കുക"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ലംബമായി വേർതിരിക്കുക"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"ഇഷ്ടാനുസൃതമായി വേർതിരിക്കുക"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ചാർജ്ജുചെയ്തു"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ചാർജ്ജുചെയ്യുന്നു"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"പൂർണ്ണമായും ചാർജ്ജാകുന്നതിന്, <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"അൺലോക്കുചെയ്യുന്നതിന് മുമ്പ് അവ കാണുക"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"വേണ്ട, നന്ദി"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"സജ്ജീകരിക്കുക"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"എല്ലാം കാണുക"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"എല്ലാം മറയ്ക്കുക"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"സ്ക്രീൻ പിൻ ചെയ്തു"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"നിങ്ങൾ അൺപിൻ ചെയ്യുന്നതുവരെ ഇത് കാണുന്ന വിധത്തിൽ നിലനിർത്തുന്നു. അൺപിൻ ചെയ്യാൻ \'മടങ്ങുക\', \'ചുരുക്കവിവരണം\' എന്നിവ ഒരേ സമയം സ്പർശിച്ച് പിടിക്കുക."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> എന്നത് മറയ്ക്കണോ?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"അടുത്ത തവണ നിങ്ങൾ അത് ക്രമീകരണങ്ങളിൽ ഓണാക്കുമ്പോൾ അത് വീണ്ടും ദൃശ്യമാകും."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"മറയ്ക്കുക"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>, വോളിയം ഡയലോഗ് ആകാൻ താൽപ്പര്യപ്പെടുന്നു."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"അനുവദിക്കുക"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"നിരസിക്കുക"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g>, വോളിയം ഡയലോഗാണ്"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"ആദ്യത്തേത് പുനഃസ്ഥാപിക്കാൻ സ്പർശിക്കുക."</string> </resources> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index 4982f10..f7268c2 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -25,10 +25,8 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Апп мэдээлэл"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Таны саяхны дэлгэц энд харагдах болно"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Сүүлийн апп-уудыг хаах"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Тойм дээр 1 дэлгэц"</item> - <item quantity="other" msgid="5523506463832158203">"Тойм дээрх %d дэлгэц"</item> - </plurals> + <!-- String.format failed for translation --> + <!-- no translation found for status_bar_accessibility_recent_apps (9138535907802238759) --> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Мэдэгдэл байхгүй"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Гарсан"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Мэдэгдэл"</string> @@ -88,7 +86,6 @@ <string name="unlock_label" msgid="8779712358041029439">"тайлах"</string> <string name="phone_label" msgid="2320074140205331708">"утас нээх"</string> <string name="camera_label" msgid="7261107956054836961">"камер нээх"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Оруулах аргыг сэлгэх товч."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Тохиромжтой өсгөх товч."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Жижгээс том дэлгэцрүү өсгөх."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Блютүүт холбогдсон."</string> @@ -177,6 +174,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Нислэгийн горим идэвхтэй."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Нислэгийн горимыг унтраасан."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Нислэгийн горимыг асаасан."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Бүү саад болно уу.Зөвхөн чухал зүйлст."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Бүү саад болно уу. Аливаа саад учруулахгүй байна уу."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Бүү саад бол."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Идэвхгүй болгох үйлдэлд бүү саад бол."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Идэвхжүүлэх үйлдэлд бүү саад бол."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Блютүүт идэвхгүй."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Блютүүт идэвхтэй."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Блютүүтийг холбож байна."</string> @@ -201,12 +203,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобайл хотспотыг асаасан."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Дэлгэц дамжуулалт зогссон."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Дэлгэцийн гэрэлтэлт"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G дата идэвхгүй"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G дата идэвхгүй"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Үүрэн дата идэвхгүй"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Дата идэвхгүй"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Таны тогтоосон хязгаарт хүрсэн учир төхөөрөмж датаг унтраасан.\n\nҮүнийг асааснаар таны төлбөр нэмэгдэхэд хүргэж болзошгүй."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Датаг асаах"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дата-г түр зогсоосон байна"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дата-г түр зогсоосон байна"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Гар утасны дата-г түр зогсоосон байна"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Дата-г түр зогсоосон байна"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Таны багц дата эрхийн дээд хэмжээнд хүрсэн байгаа тул төхөөрөмж нь үлдсэн хэсэгт дата хэрэглээг түр зогсоосон байна.\n\nТа үйлдлийг үргэлжлүүлэхийг хүсвэл үйлчилгээ үзүүлж буй үүрэн холбооны газраас нэмж дата эрх авна уу."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Үргэлжлүүлэх"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет холболт байхгүй"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi холбогдсон"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS хайж байна"</string> @@ -225,6 +227,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Этернет"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Нислэгийн горим"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Бүү саад бол"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Зөвхөн чухал зүйлс"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Аливаа саад байхгүй байх"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Блютүүт"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Блютүүт (<xliff:g id="NUMBER">%d</xliff:g> төхөөрөмж)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Блютүүт унтраалттай"</string> @@ -250,7 +255,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Сүлжээгүй"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi унтарсан"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Хадгалагдсан сүлжээ байхгүй"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Дамжуулах дэлгэц"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Дамжуулах"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Дамжуулж байна"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Нэргүй төхөөрөмж"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Дамжуулахад бэлэн"</string> @@ -262,8 +267,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Өөр тохиргоо"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Дууссан"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Холбогдсон"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi-Fi туслагчаар дамжуулан холбогдлоо"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Хадгалагдсан"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Холбогдож байна..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Модем болгох"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Сүлжээний цэг"</string> @@ -282,18 +285,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Бүх програмыг арилгах"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хэвтээ чиглэлд хуваах"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Босоо чиглэлд хуваах"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Хүссэн хэлбэрээр хуваах"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Цэнэглэгдсэн"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Цэнэглэж байна"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"дүүргэхэд <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +362,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Түгжээг тайлахын өмнө үзнэ үү"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Үгүй"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Тохируулах"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Бүгдийг харах"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Бүгдийг нуух"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Дэлгэц эхэнд байрлуулагдсан"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Таныг эхэнд нээхийг болиулах хүртэл харагдана. Хүрээд, Back дээр удаан дараад хаахдаа Overview-ийг дар"</string> @@ -377,4 +373,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>-ийг нуух уу?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Тохируулгын хэсэгт үүнийг асаахад энэ дахин харагдана."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Нуух"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь дууны диалог болохыг хүсч байна."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Зөвшөөрөх"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Татгалзах"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь дууны диалог юм."</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Анхны хувилбарыг эргүүлэн хадгалахыг хүсвэл хүрнэ үү."</string> </resources> diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml index 900890c..6023d49 100644 --- a/packages/SystemUI/res/values-mr-rIN/strings.xml +++ b/packages/SystemUI/res/values-mr-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अॅप माहिती"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"आपल्या अलीकडील स्क्रीन येथे दिसतात"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"अलीकडील अॅप्स डिसमिस करा"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"विहंगावलोकनात 1 स्क्रीन"</item> - <item quantity="other" msgid="5523506463832158203">"विहंगावलोकनात %d स्क्रीन"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">विहंगावलोकनात %d स्क्रीन</item> + <item quantity="other">विहंगावलोकनात %d स्क्रीन</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"सूचना नाहीत"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"सुरु असलेले"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचना"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"अनलॉक करा"</string> <string name="phone_label" msgid="2320074140205331708">"फोन उघडा"</string> <string name="camera_label" msgid="7261107956054836961">"कॅमेरा उघडा"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धत स्विच करा बटण."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"सुसंगतता झूम बटण."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"लहानपासून मोठ्या स्क्रीनवर झूम करा."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब कनेक्ट केले."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"विमान मोड चालू."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"विमान मोड बंद केला."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"विमान मोड चालू केला."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"व्यत्यय आणू नका चालू, केवळ प्राधान्य."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"व्यत्यय आणू नका चालू, कोणताही व्यत्यय नाही."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"व्यत्यय आणू नका बंद."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"व्यत्यय आणू नका बंद करा"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"व्यत्यय आणू नका चालू करा"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ब बंद."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ब चालू."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ब कनेक्ट करत आहे."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाईल हॉटस्पॉट चालू केला."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रीन कास्ट करणे थांबले."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"प्रदर्शन चमक"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G डेटा बंद आहे"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G डेटा बंद आहे"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"सेल्युलर डेटा बंद आहे"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"डेटा बंद आहे"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"डेटाने आपण सेट केलेली मर्यादा गाठल्यामुळे आपल्या डिव्हाइसने तो बंद केला.\n\n तो पुन्हा चालू केल्यास आपल्या वाहकाकडील शुल्क लागू शकेल."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"डेटा चालू करा"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटास विराम दिला आहे"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटास विराम दिला आहे"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"सेल्युलर डेटास विराम दिला आहे"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटास विराम दिला आहे"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"आपली सेट केलेली डेटा मर्यादा गाठल्यामुळे, डिव्हाइसने या चक्राच्या उर्वरित डेटा वापरास विराम दिला आहे.\n\nपुन्हा सुरु करण्यामुळे आपल्या वाहकाकडून शुल्क आकारले जाऊ शकते."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"पुन्हा सुरु करा"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इंटरनेट कनेक्शन नाही"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाय-फाय कनेक्ट केले"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS शोधत आहे"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"डेड्रीम"</string> <string name="ethernet_label" msgid="7967563676324087464">"इथरनेट"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"विमान मोड"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"व्यत्यय आणू नका"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"केवळ प्राधान्य"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"कोणतेही व्यत्यय नाही"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लूटुथ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब (<xliff:g id="NUMBER">%d</xliff:g> डिव्हाइसेस)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब बंद"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क नाही"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाय-फाय बंद"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"कोणतीही जतन केलेली नेटवर्क उपलब्ध नाहीत"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रीन कास्ट करा"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"कास्ट करत आहे"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"निनावी डिव्हाइस"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"कास्ट करण्यास सज्ज"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"अधिक सेटिंग्ज"</string> <string name="quick_settings_done" msgid="3402999958839153376">"पूर्ण झाले"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"कनेक्ट केलेले"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi सहाय्यक द्वारे कनेक्ट केले"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"जतन केलेले"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"कनेक्ट करीत आहे..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदरिंग"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हॉटस्पॉट"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"शोधा"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> प्रारंभ करणे शक्य झाले नाही."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सर्व अनुप्रयोग डिसमिस करा"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"क्षैतिज विभाजित करा"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"अनुलंब विभाजित करा"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"सानुकूल विभाजित करा"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज झाली"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज होत आहे"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> पूर्ण होईपर्यंत"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"आपण अनलॉक करण्यापूर्वी त्यांना पहा"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"नाही धन्यवाद"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"सेट अप"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"सर्व पहा"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"सर्व लपवा"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"स्क्रीन पिन केलेली आहे"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"हे आपण अनपिन करेपर्यंत दृश्यामध्ये ते ठेवते. अनपिन करण्यासाठी एकाच वेळी परत आणि अलीकडील ला स्पर्श करा आणि धरून ठेवा आणि विहंगावलोकन करा."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> लपवायचे?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"आपण सेटिंग्जमध्ये ते पुढील वेळी चालू कराल तेव्हा ते पुन्हा दिसेल."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"लपवा"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> हा व्हॉल्यूम संवाद होऊ इच्छितो."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमती द्या"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"नकार द्या"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> हा व्हॉल्यूम संवाद आहे"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"मूळ पुनर्संचयित करण्यासाठी स्पर्श करा."</string> </resources> diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml index f3c6e32..8579e07 100644 --- a/packages/SystemUI/res/values-ms-rMY/strings.xml +++ b/packages/SystemUI/res/values-ms-rMY/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Skrin terbaru anda terpapar di sini"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Buang aplikasi terbaharu"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 skrin dalam Ikhtisar"</item> - <item quantity="other" msgid="5523506463832158203">"%d skrin dalam Ikhtisar"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d skrin dalam Gambaran Keseluruhan</item> + <item quantity="one">1 skrin dalam Gambaran Keseluruhan</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"buka kunci"</string> <string name="phone_label" msgid="2320074140205331708">"buka telefon"</string> <string name="camera_label" msgid="7261107956054836961">"buka kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth disambungkan."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Mod pesawat dihidupkan."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Mod pesawat dimatikan."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Mod pesawat dihidupkan."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Jangan ganggu dihidupkan, perkara penting sahaja."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Jangan ganggu dihidupkan, tiada gangguan."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Jangan ganggu dimatikan."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Jangan ganggu dimatikan."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Jangan ganggu dihidupkan."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth dimatikan."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth dihidupkan."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth menyambung."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Tempat liputan mudah alih bergerak dihidupkan."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Penghantaran skrin dihentikan."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Kecerahan paparan"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Data 2G-3G dimatikan"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Data 4G dimatikan"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Data selular dimatikan"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data dimatikan"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Peranti anda mematikan data kerana telah mencapai had yang anda tetapkan.\n\nMenghidupkan data semula boleh menyebabkan anda dikenakan caj oleh pembawa anda."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Hidupkan data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G dijeda"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Data selular dijeda"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data dijeda"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Oleh kerana had data tetap anda telah dicapai, peranti telah menjeda penggunaan data bagi baki kitaran ini.\n\nMenyambung semula boleh menyebabkan anda dikenakan bayaran daripada pembawa anda."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Sambung semula"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tiada smbg Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Mencari GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Lamun"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mod kapal terbang"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Jangan ganggu"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Keutamaan sahaja"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tiada gangguan"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Peranti)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Dimatikan"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tiada Rangkaian"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Dimatikan"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Tiada rangkaian disimpan tersedia"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Skrin Cast"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Menghantar"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Peranti tidak bernama"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Bersedia untuk menghantar"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Lagi tetapan"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Selesai"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Disambungkan"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Disambungkan melalui Pembantu Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Disimpan"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Menyambung..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Penambatan"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Tempat liputan"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ketepikan semua aplikasi"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Mendatar Terpisah"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Menegak Terpisah"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tersuai Terpisah"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Sudah dicas"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Mengecas"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Lagi <xliff:g id="CHARGING_TIME">%s</xliff:g> untuk penuh"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Lihat sebelum anda membuka kunci"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Tidak"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Sediakan"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Lihat semua"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Sembunyikan semua"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skrin telah disemat"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ini akan memastikan skrin kelihatan sehingga anda menyahsemat. Sentuh dan tahan Kembali dan Gambaran Keseluruhan pada masa yang sama untuk menyahsemat."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Sembunyikan <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Mesej itu akan terpapar semula pada kali seterusnya anda menghidupkan apl dalam tetapan."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Sembunyikan"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> mahu menjadi dialog kelantangan."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Benarkan"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tolak"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ialah dialog kelantangan"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Sentuh untuk memulihkan yang asal."</string> </resources> diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml index c9db1b1..58e5239 100644 --- a/packages/SystemUI/res/values-my-rMM/strings.xml +++ b/packages/SystemUI/res/values-my-rMM/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"အပ်ပလီကေးရှင်း အချက်အလက်များ"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"သင်၏ မကြာမီက မျက်နှာပြင်များ ဒီမှာ ပေါ်လာကြမည်"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"လတ်တလောအပ်ပလီကေးရှင်းများအား ဖယ်ထုတ်မည်"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"ခြုံကြည့်မှု ထဲက မျက်နှာပြင် ၁ ခု"</item> - <item quantity="other" msgid="5523506463832158203">"ခြုံကြည့်မှု ထဲက မျက်နှာပြင် %d ခု"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">ခြုံကြည့်မှုထဲမှ မျက်နှာပြင် %d ခု</item> + <item quantity="one">ခြုံကြည့်မှုထဲမှ မျက်နှာပြင် 1 ခု</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"အကြောင်းကြားချက်များ မရှိ"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"လက်ရှိအသုံးပြုမှု"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"အကြောင်းကြားချက်များ။"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"သော့ဖွင့်ရန်"</string> <string name="phone_label" msgid="2320074140205331708">"ဖုန်းကို ဖွင့်ရန်"</string> <string name="camera_label" msgid="7261107956054836961">"ကင်မရာ ဖွင့်ရန်"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ထည့်သွင်းခြင်းခလုတ်အား ပြောင်းခြင်း"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"အံ့ဝင်သောချုံ့ချဲ့ခလုတ်"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ဖန်သားပြင်ပေါ်တွင် အသေးမှအကြီးသို့ချဲ့ခြင်း"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ဘလူးတုသ်ချိတ်ဆက်ထားမှု"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"လေယာဉ် မုဒ်ကို ဖွင့်ထား။"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"လေယာဉ် မုဒ်ကို ပိတ်ထားလိုက်ပြီ။"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"လေယာဉ် မုဒ်ကို ဖွင့်ထားလိုက်ပြီ။"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"မနှောင့်ယှက်ပါနှင့် ဖွင့်ထားသည်၊ ဦးစားပေးများသာ။"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"မနှောင့်ယှက်ပါနှင့် ဖွင့်ထားသည်၊ အနှောင့်အယှက်များ မရှိပါ။"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"မနှောင့်ယှက်ပါနှင့် ကိုပိတ်ထားသည်။"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"မနှောင့်ယှက်ပါနှင့် ကိုပိတ်ထားသည်။"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"မနှောင့်ယှက်ပါနှင့်ကို ဖွင့်ထားသည်။"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ဘလူးတုသ် ပိတ်ထား."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ဘလူးတုသ် ဖွင့်ထား။"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ဘလူးတုသ် ချိတ်ဆက်နေ။"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"မိုဘိုင်း ဟော့စပေါ့ ဖွင့်ထား။"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"မျက်နှာပြင် ကာစ်တင် လုပ်မှု ရပ်လိုက်ပြီ။"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"တောက်ပမှုကို ပြရန်"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G ဒေတာ ပိတ်ထား"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G ဒေတာ ပိတ်ထား"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ဆယ်လူလာ ဒေတာကို ပိတ်ထား"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ဒေတာ ပိတ်ထား"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"သင်၏ ကိရိယာသည် သင်က သတ်မှတ်ခဲ့သည့် ကန့်သတ်ချက်ကို ပြည့်မီသွား၍ ပိတ်သွားသည်။ \n\n၎င်းကို ပြန်ပြီး ဖွင့်မှုအတွက် သင်၏ စီမံပေးသူ ထံမှ ငွေတောင်းခံ လာနိုင်ပါသည်။"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ဒေတာ ဖွင့်ပေးရန်"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ဒေတာ ခေတ္တရပ်တန့်သည်"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data ခေတ္တရပ်တန့်သည်"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"cellular data ခေတ္တရပ်တန့်သည်"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ဒေတာ ခေတ္တရပ်တန့်သည်"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"သင့် ဒေတာ အသုံးပြုမှု သတ်မှတ်ထားချက်သို့ ရောက်ရှိသောကြောင့်၊ ဤကာလအတွက် ကျန်ရှိသည့် ဒေတာအသုံးပြုမှုအား စက်ပစ္စည်းမှ ရပ်တန့်ထားသည်။\n\nဆက်လက်သွားပါက သင့်ဖုန်းဝန်ဆောင်မှုမှ သင့်အား ကုန်ကျစရိတ်တောင်းခံလိမ့်မည်။"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ပြန်ဆက်လုပ်ရန်"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"အင်တာနက်မရှိ"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ကြိုးမဲ့ဆက်သွယ်မှု"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSအားရှာဖွေသည်"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"ဒေးဒရင်းမ်"</string> <string name="ethernet_label" msgid="7967563676324087464">"အီသာနက်"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"လေယာဥ်ပျံပေါ်အသုံးပြုသောစနစ်"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"မနှောက်ယှက်ပါနှင့်"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ဦးစားပေးများသာ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ကြားဖြတ်ဝင်မှု ခွင့်မပြုရန်"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ဘလူးတု"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ဘလူးတု (<xliff:g id="NUMBER">%d</xliff:g> စက်များ)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ဘလူးတု ပိတ်ထားရန်"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ကွန်ရက်မရှိပါ"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ဝိုင်ဖိုင်ပိတ်ရန်"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"သိမ်းဆည်းထား ကွန်ရက်များ မရှိ"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ကာစ်တ် မျက်နှာပြင်"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"ကာစ်တင်"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"အမည်မတပ် ကိရိယာ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ကာစ်တ် လုပ်ရန် အသင့် ရှိနေပြီ"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"နောက်ထပ် ဆက်တင်များ"</string> <string name="quick_settings_done" msgid="3402999958839153376">"လုပ်ပြီး"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"ချိတ်ဆက်ထား"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"ကြိုးမဲ့ကူညီသူမှတဆင့် ချိတ်ဆက်ပြီး၏"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"သိမ်းဆည်းပြီး"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"ဆက်သွယ်နေ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"တွဲချီပေးခြင်း"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ဟော့စပေါ့"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ရှာဖွေရန်"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ကို မစနိုင်ပါ။"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"အပလီကေးရှင်းများအားလုံး ဖယ်ထုတ်မည်"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ဒေါင်လိုက်ပိုင်းမည်"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"စိတ်ကြိုက် ပိုင်းမည်"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"အားသွင်းပြီး"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"အားသွင်းနေ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ပြည်သည့် အထိ"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"မဖွင့်ခင် ၎င်းတို့ကို ကြည့်ပါ"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"မလိုအပ်ပါ"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"သတ်မှတ်ရန်"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"အားလုံးကို ကြည့်ရန်"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"အားလုံး ဝှက်ထားရန်"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>။ <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"မျက်နှာပြင် ပင်ထိုးပြီးပါပြီ"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"သင်ပင်ဖြုတ်သည့် တိုင်အောင် ၎င်းအား မြင်ကွင်းတွင် ထားရှိပါမည်။ ပင်ဖြုတ်ရန် အနောက်နှင့် ခြုံငုံကြည့်ခြင်းကို ဖိ၍ နှိပ်ထားနိုင်သည်။"</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> ဝှက်မည်လား?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"နောက်တစ်ကြိမ်သင် ချိန်ညှိချက်များဖွင့်လျှင် ၎င်းပေါ်လာပါမည်။"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ဖျောက်ထားမည်"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည်အသံဒိုင်ယာလော့ခ်ဖြစ်လိုပါသည်။"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ခွင့်ပြုသည်"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ငြင်းပယ်သည်"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> သည် အသံဒိုင်ယာလော့ခ်ဖြစ်သည်"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"မူရင်းအားပြန်လည်သိမ်းဆည်းရန် ထိပါ။"</string> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index b2fbd78..0a67650 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"De sist brukte skjermene dine vises her"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylige apper"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 skjerm i Oversikten"</item> - <item quantity="other" msgid="5523506463832158203">"%d skjermer i Oversikten"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d skjermer i oversikten</item> + <item quantity="one">1 skjerm i oversikten</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen varslinger"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Aktiviteter"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Varsler"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"lås opp"</string> <string name="phone_label" msgid="2320074140205331708">"åpne telefonen"</string> <string name="camera_label" msgid="7261107956054836961">"åpne kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoomknapp for kompatibilitet."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom fra mindre til større skjerm."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth er tilkoblet."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flymodus er på."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flymodus er slått av."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flymodus er slått på."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"«Ikke forstyrr» er på – bare prioritert."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"«Ikke forstyrr» er på – ingen avbrytelser."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"«Ikke forstyrr» er av."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"«Ikke forstyrr» er slått av."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"«Ikke forstyrr» er slått på."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth er av."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth er på."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth kobler til."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil Wi-Fi-sone er slått på."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Skjermcastingen er stoppet."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Lysstyrken på skjermen"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G- og 3G-data er slått av"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-datatrafikk er slått av"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobildatatrafikk er slått av"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Datatrafikk er slått av"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Datatrafikk er slått av på enheten din fordi du har nådd den angitte grensen.\n\nHvis du slår datatrafikken på igjen, kan det føre til belastninger fra operatøren din."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Slå på datatrafikk"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G- og 3G-data er satt på pause"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er satt på pause"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobildata er satt på pause"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data er satt på pause"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Fordi den angitte datagrensen ble nådd, har enheten satt databruk på pause for resten av denne syklusen. \n\nHvis du gjenopptar bruken, kan det føre til avgifter fra operatøren din."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Gjenoppta"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen Internett-forbindelse"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tilkoblet"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Søker etter GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Dagdrøm"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flymodus"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"«Ikke forstyrr»"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Bare prioritet"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Ingen forstyrrelser"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth er slått av"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi er av"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Ingen lagrede nettverk er tilgjengelige"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Cast skjermen"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Casting"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Enhet uten navn"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klar til å caste"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Flere innstillinger"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Ferdig"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Tilkoblet"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Koblet til via en Wi-Fi-assistent"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Lagret"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Kobler til …"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tilknytning"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Wi-Fi-sone"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Avvis alle apper"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Del horisontalt"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Del vertikalt"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Del tilpasset"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Oppladet"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Lader"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Fulladet om <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Se dem før du låser opp"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nei takk"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfigurer"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Se alle"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skjul alle"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skjermen er låst"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"På denne måten blir skjermen synlig frem til du låser den opp. Trykk på og hold inne Tilbake og Oversikt samtidig for å låse opp."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vil du skjule <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den vises igjen neste gang du slår den på i innstillingene."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skjul"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ønsker å være volumdialogen."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillat"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Ikke tillat"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> er volumdialogen"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Trykk for å gå tilbake til den opprinnelige volumdialogen."</string> </resources> diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml index 67a1c30..3d5d213 100644 --- a/packages/SystemUI/res/values-ne-rNP/strings.xml +++ b/packages/SystemUI/res/values-ne-rNP/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अनुप्रयोगको जानकारी"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"तपाईँको हालको स्क्रिन यहाँ प्रकट हुन्छ"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"नयाँ अनुप्रयोगहरू खारेज गर्नुहोस्"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"सारांशमा 1 पर्दा"</item> - <item quantity="other" msgid="5523506463832158203">"सारांशमा %d पर्दाहरू"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other"> अवलोकनमा %d स्क्रिनहरू</item> + <item quantity="one">अवलोकनमा 1 स्क्रिन</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कुनै सूचनाहरू छैन"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"चलिरहेको"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाहरू"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"खोल्नुहोस्"</string> <string name="phone_label" msgid="2320074140205331708">"फोन खोल्नुहोस्"</string> <string name="camera_label" msgid="7261107956054836961">"क्यामेरा खोल्नुहोस्"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट विधि बटन स्विच गर्नुहोस्।"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"मिलाउने जुम बटन।"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"स्क्रिनलाई सानोबाट ठूलो पार्नुहोस्।"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लुटुथ जडान भयो।"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"हवाइजहाज मोड खुला।"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"हवाइजहाज मोड बन्द छ।"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"हवाइजहाज मोड खोलियो।"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"प्राथमिकतालाई मात्र बाधा नपुर्याउनुहोस्।"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"बाधा नपुर्याउँनुहोस्, कुनै पनि अवरोध छैनन्।"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"निष्क्रियलाई बाधा नपुर्याउनुहोस्"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"निष्क्रिय गरिएकालाई अवरोध नपुर्याउनुहोस्।"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"सक्रिय रहेकोलाई अवरोध नपुर्याउनुहोस्।"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ब्लुटुथ बन्द छ।"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ब्लुटुथ खुला छ।"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ब्लुटुथ जोडीदै।"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाइल हटस्पट खुला गरियो।"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रिन कास्टिङ रोकियो।"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"प्रदर्शन चमक"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G डेटा बन्द छ"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G डेटा बन्द छ"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"सेलुलर डेटा बन्द छ"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"डेटा बन्द छ"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"तपाईंले सेट गर्नु भएको सीमा पुगेको हुनाले तपाईंको उपकरणले डेटा बंद गर्यो।\n\n यसलाई फिर्ता गर्दा आफ्नो वाहक बाट शुल्क लिन सक्छ।"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"डेटा खोल्नुहोस्"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटा रोकिएको छ"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोकिएको छ"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"सेल्यूलर डेटा रोकिएको छ"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"डेटा रोकिएको छ"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"तपाईंले सेट गर्नुभएको डेटाको सीमा पुगेकाले, यन्त्रले यस चक्रको बाँकी भागका लागि डेटा प्रयोग रोकेको छ।\n\nपुन: सुरू गर्दा तपाईंको क्यारियरले शुल्कहरू लिन सक्छ।"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"पुनः सुरु गर्नुहोस्"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इन्टरनेट जडान छैन"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाइफाइ जडित"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSको लागि खोजी गर्दै"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"दिवासपना"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"हवाइजहाज मोड"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"बाधा नपुर्याउँनुहोस्"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"प्राथमिकता मात्र"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"कुनै अवरोधहरू छैन"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लुटुथ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लुटुथ (<xliff:g id="NUMBER">%d</xliff:g> उपकरणहरू)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लुटुथ बन्द"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क छैन"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाइफाइ बन्द"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"उपलब्ध सञ्जाल सुरक्षित गरिएन"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"स्क्रिन प्रसारण गर्नुहोस्"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"प्रसारण गर्दै"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"बेनाम उपकरण"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"प्रसारण गर्न तयार"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"थप सेटिङहरू"</string> <string name="quick_settings_done" msgid="3402999958839153376">"भयो"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"जोडिएको"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi-Fi सहायक द्वारा जोडिएको"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"सुरक्षित गरियो"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"जडान हुँदै..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"टेदर गर्दै"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"हटस्पट"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"खोजी गर्नुहोस्"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"सुरु गर्न सकिएन <xliff:g id="APP">%s</xliff:g>।"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"सबै अनुप्रयोगहरू खारेज गर्नुहोस्"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"तेर्सो रूपमा विभाजन गर्नुहोस्"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"ठाडो रूपमा विभाजन गर्नुहोस्"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"अनुकूलन विभाजन गर्नुहोस्"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"चार्ज भयो"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"चार्ज हुँदै"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> पूर्ण नभएसम्म"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"तपाईँले अनलक गर्नअघि तिनीहरूलाई हेर्नुहोस्"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"धन्यवाद पर्दैन"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"सेटअप गर्नुहोस्"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"सबै हेर्नुहोस्"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"सबै लुकाउनुहोस्"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"पर्दा राखेका छ"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"तपाईं अनपिन सम्म यो दृश्य मा राख्छ। छुनुहोस् र अनपिन फिर्ता र सिंहावलोकन नै समय मा पकड।"</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"लुकाउनुहुन्छ <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"यो तपाईं सेटिङ् मा यो बारी अर्को समय देखापर्नेछ।"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"लुकाउनुहोस्"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> भोल्यूम संवाद बन्न चाहन्छ।"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"अनुमति दिनुहोस्"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"अस्वीकार गर्नुहोस्"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> भोल्यूम संवाद हो"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"मूल पुनर्स्थापना गर्न छुनुहोस्।"</string> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 2c2d6ef..16d4eea 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-info"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Uw recente schermen worden hier weergegeven"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Recente apps negeren"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 scherm in Overzicht"</item> - <item quantity="other" msgid="5523506463832158203">"%d schermen in Overzicht"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d schermen in Overzicht</item> + <item quantity="one">1 scherm in Overzicht</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Geen meldingen"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Actief"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meldingen"</string> @@ -44,7 +44,7 @@ <string name="battery_saver_start_action" msgid="5576697451677486320">"Accubesparing inschakelen"</string> <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Instellingen"</string> <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wifi"</string> - <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Vliegmodus"</string> + <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Vliegtuigmodus"</string> <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Scherm automatisch draaien"</string> <string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMPEN"</string> <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ontgrendelen"</string> <string name="phone_label" msgid="2320074140205331708">"telefoon openen"</string> <string name="camera_label" msgid="7261107956054836961">"camera openen"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knop voor compatibiliteitszoom."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kleiner scherm uitzoomen naar groter scherm."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-verbinding ingesteld."</string> @@ -145,7 +144,7 @@ <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wifi"</string> <string name="accessibility_no_sim" msgid="8274017118472455155">"Geen simkaart."</string> <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tethering."</string> - <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegmodus."</string> + <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string> <string name="accessibility_battery_level" msgid="7451474187113371965">"Accu: <xliff:g id="NUMBER">%d</xliff:g> procent."</string> <string name="accessibility_settings_button" msgid="799583911231893380">"Systeeminstellingen."</string> <string name="accessibility_notifications_button" msgid="4498000369779421892">"Meldingen."</string> @@ -173,10 +172,15 @@ <string name="accessibility_quick_settings_wifi_changed_on" msgid="6440117170789528622">"Wifi ingeschakeld."</string> <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobiel <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string> <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Accu: <xliff:g id="STATE">%s</xliff:g>."</string> - <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Vliegmodus uit."</string> - <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Vliegmodus aan."</string> - <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegmodus uitgeschakeld."</string> - <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegmodus ingeschakeld."</string> + <string name="accessibility_quick_settings_airplane_off" msgid="7786329360056634412">"Vliegtuigmodus uit."</string> + <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Vliegtuigmodus aan."</string> + <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Vliegtuigmodus uitgeschakeld."</string> + <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Vliegtuigmodus ingeschakeld."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Niet storen aan, alleen prioriteit."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Niet storen aan, geen onderbrekingen."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Niet storen uit."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Niet storen uitgeschakeld."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Niet storen ingeschakeld."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth uit."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth aan."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth-verbinding wordt gemaakt."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiele hotspot ingeschakeld."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Casten van scherm gestopt."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Helderheid van het scherm"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G/3G-data zijn uitgeschakeld"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-data zijn uitgeschakeld"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobiele data zijn uitgeschakeld"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Gegevens zijn uitgeschakeld"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Uw apparaat heeft gegevens uitgeschakeld omdat de ingestelde limiet is bereikt.\n\nAls u gegevens weer inschakelt, kan uw provider kosten in rekening brengen."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Gegevens inschakelen"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G/3G-data zijn onderbroken"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data zijn onderbroken"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobiele gegevens zijn onderbroken"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Gegevens zijn onderbroken"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Omdat de ingestelde gegevenslimiet is bereikt, heeft het apparaat het gegevensverbruik onderbroken voor de rest van deze cyclus.\n\nAls u het gegevensverbruik hervat, kan uw provider kosten in rekening brengen."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Hervatten"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Geen internetverbinding"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Verbonden via wifi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Zoeken naar GPS"</string> @@ -224,7 +228,10 @@ <string name="dessert_case" msgid="1295161776223959221">"Dessertshowcase"</string> <string name="start_dreams" msgid="7219575858348719790">"Dagdroom"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> - <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegmodus"</string> + <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegtuigmodus"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Niet storen"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Alleen prioriteit"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Geen onderbrekingen"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> apparaten)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth uit"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi uit"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Geen opgeslagen netwerken beschikbaar"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Scherm casten"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Casten"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Naamloos apparaat"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Klaar om te casten"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Meer instellingen"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Gereed"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Verbonden"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Verbonden via wifi-assistent"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Opgeslagen"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Verbinding maken…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"zoeken"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Kan <xliff:g id="APP">%s</xliff:g> niet starten."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Alle apps sluiten"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontaal splitsen"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Verticaal splitsen"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Aangepast splitsen"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Opgeladen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Opladen"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tot volledig opgeladen"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Weergeven voordat u ontgrendelt"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nee, bedankt"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configureren"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Alles weergeven"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Alles verbergen"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Scherm is vastgezet"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Het scherm blijft zichtbaar totdat u het u losmaakt. Houd \'Terug\' en \'Overzicht\' tegelijkertijd aangeraakt om het los te maken."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> verbergen?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Deze wordt opnieuw weergegeven zodra u de instelling weer inschakelt."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Verbergen"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil het volumedialoogvenster zijn."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Toestaan"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Afwijzen"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> is het volumedialoogvenster"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Tik hierop om het origineel te herstellen."</string> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index e2ef340..3b9efe7 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informacje o aplikacji"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Tutaj pojawią się ostatnie ekrany"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ukryj ostatnie aplikacje"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ekran w widoku przeglądu"</item> - <item quantity="other" msgid="5523506463832158203">"Ekrany w widoku przeglądu: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="few">%d ekrany w widoku przeglądu</item> + <item quantity="many">%d ekranów w widoku przeglądu</item> + <item quantity="other">%d ekranu w widoku przeglądu</item> + <item quantity="one">1 ekran w widoku przeglądu</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Brak powiadomień"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Bieżące"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Powiadomienia"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"odblokuj"</string> <string name="phone_label" msgid="2320074140205331708">"otwórz telefon"</string> <string name="camera_label" msgid="7261107956054836961">"otwórz aparat"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Przycisk powiększenia na potrzeby zgodności."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran do większego."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth połączony."</string> @@ -177,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Tryb samolotowy jest włączony."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Tryb samolotowy został wyłączony."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Tryb samolotowy został włączony."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Nie przeszkadzać (włączone, tylko priorytetowe)."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Nie przeszkadzać (włączone, bez przeszkadzania)."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Nie przeszkadzać (wyłączone)."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Nieprzeszkadzanie wyłączone."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Nieprzeszkadzanie włączone."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth wyłączony."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth włączony."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Nawiązywanie połączenia Bluetooth."</string> @@ -201,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilny hotspot został włączony."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Zatrzymano przesyłanie ekranu."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Jasność wyświetlacza"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Połączenie danych 2G-3G wyłączone"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Połączenie danych 4G wyłączone"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Komórkowe połączenie danych jest wyłączone"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Połączenie danych jest wyłączone"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Połączenie danych na Twoim urządzeniu zostało wyłączone, ponieważ osiągnęło ustalony limit.\n\nJeśli włączysz je ponownie, operator może naliczyć opłaty."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Włącz połączenie danych"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Transmisja danych 2G-3G została wstrzymana"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Transmisja danych 4G została wstrzymana"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Komórkowa transmisja danych została wstrzymana"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Transmisja danych została wstrzymana"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Ponieważ został osiągnięty ustawiony przez Ciebie limit danych, urządzenie wstrzymało użycie danych na pozostałą część tego cyklu.\n\nWznowienie może spowodować naliczenie opłat przez operatora."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Wznów"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Brak internetu"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string> @@ -225,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Wygaszacz ekranu"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Tryb samolotowy"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nie przeszkadzać"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Tylko priorytetowe"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Bez przeszkadzania"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (urządzenia: <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth wył."</string> @@ -250,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Brak sieci"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi wyłączone"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Brak dostępnych zapisanych sieci"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Przesyłaj ekran"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Przesyłam"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Urządzenie bez nazwy"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Wszystko gotowe do przesyłania"</string> @@ -262,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Więcej ustawień"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Gotowe"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Połączono"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Połączono przez Asystenta Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Zapisano"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Łączę..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Powiązanie"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Punkt dostępu"</string> @@ -282,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Zamknij wszystkie aplikacje"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podziel poziomo"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Podziel pionowo"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Podziel niestandardowo"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Naładowana"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Ładowanie"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do pełnego naładowania"</string> @@ -368,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobacz powiadomienia, jeszcze zanim odblokujesz ekran"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nie, dziękuję"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Skonfiguruj"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaż wszystkie"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ukrywaj wszystkie"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran jest przypięty"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ekran będzie widoczny, dopóki go nie odepniesz. Aby to zrobić, kliknij i przytrzymaj jednocześnie Wstecz i Przegląd."</string> @@ -377,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ukryć <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Pojawi się ponownie, gdy następnym włączysz go w ustawieniach."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ukryj"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce sterować głośnością."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Zezwól"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmów"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> steruje głośnością"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Dotknij, by przywrócić pierwotną."</string> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index df1192d..03ca5ee 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações da aplicação"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Os ecrãs recentes aparecem aqui"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicações recentes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ecrã na Visão geral"</item> - <item quantity="other" msgid="5523506463832158203">"%d ecrãs na Visão geral"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d ecrãs na Vista geral</item> + <item quantity="one">1 ecrã na Vista geral</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em curso"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir telemóvel"</string> <string name="camera_label" msgid="7261107956054836961">"abrir câmara"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alternar botão de método de introdução."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão zoom de compatibilidade."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom menor para ecrã maior."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ligado."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo de avião ligado."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modo de avião desligado."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modo de avião ligado."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Não incomodar ligado, apenas prioridade."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Não incomodar ligado, sem interrupções."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Não incomodar desligado."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Não incomodar desligado."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Não incomodar ligado."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth desligado."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth ligado."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"A ligar o Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Zona Wi-Fi móvel ligada."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmissão do ecrã interrompida."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brilho do visor"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Dados 2G-3G desligados"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Dados 4G desligados"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Dados de rede móvel desligados"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Dados desligados"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"O dispositivo desligou os dados porque atingiu o limite definido.\n\nVoltar a ligá-los pode resultar em cobranças por parte do operador."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Ligar dados"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dados 2G-3G em pausa"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dados 4G em pausa"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Dados de redes móveis em pausa"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Dados em pausa"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Uma vez que foi atingido o limite de dados definido, foi interrompida a utilização de dados no seu dispositivo durante o tempo restante deste ciclo.\n\nSe retomar a utilização, o seu operador pode efetuar cobranças."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Retomar"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sem ligação internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ligado"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"A procurar GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo de avião"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não incomodar"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Apenas prioridade"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sem interrupções"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desat."</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem Rede"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Desligado"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Sem redes guardadas disponíveis"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir ecrã"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Transmissão"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto para transmitir"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Mais definições"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Concluído"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Ligado"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Ligado através do Assistente de Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Guardado(a)"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"A ligar..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Associação"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar o <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ignorar todas as aplicações"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"A carregar"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> até ficar completa"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ver antes de desbloquear"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver tudo"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar tudo"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"O ecrã está fixado"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Será mantido na vista até soltar. Toque sem soltar em Anterior e Vista geral em simultâneo para soltar."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Pretende ocultar <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Reaparecerá da próxima vez que a funcionalidade for ativada nas definições."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> pretende ser a caixa de diálogo do volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Recusar"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é a caixa de diálogo do volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toque para restaurar o original."</string> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 770cabe..5a68f7d 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informações do app"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Suas telas recentes aparecem aqui"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dispensar apps recentes"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 tela em \"Visão geral\""</item> - <item quantity="other" msgid="5523506463832158203">"%d telas em \"Visão geral\""</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d telas em \"Visão geral\"</item> + <item quantity="other">%d telas em \"Visão geral\"</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Sem notificações"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Em andamento"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificações"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"desbloquear"</string> <string name="phone_label" msgid="2320074140205331708">"abrir telefone"</string> <string name="camera_label" msgid="7261107956054836961">"abrir câmera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão de zoom da compatibilidade."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aumentar a tela com zoom."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth conectado."</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modo avião ativado."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"O modo avião foi desativado."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"O modo avião foi ativado."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"\"Não perturbe\" ativado, somente prioridade."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"\"Não perturbe\" ativado, sem interrupções."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Não perturbe\" desativado."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Não perturbe\" desativado."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Não perturbe\" ativado."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth desativado."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth ativado."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Conectando Bluetooth."</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"O ponto de acesso móvel foi ativado."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"A transmissão de tela foi interrompida."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Brilho da tela"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Os dados 2G-3G foram desativados"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Os dados 4G foram desativados"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Os dados da rede celular foram desativados"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Os dados foram desativados"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"O dispositivo desativou os dados porque o limite definido foi atingido.\n\nAtivá-los novamente poderá resultar em cobranças de sua operadora."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Ativar dados"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Os dados 2G e 3G foram pausados"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os dados 4G foram pausados"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Os dados da rede celular foram pausados"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Os dados foram pausados"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Como seu limite de dados definido foi atingido, o dispositivo pausou o uso de dados para o restante deste ciclo.\n\nA retomada pode gerar cobranças por parte da sua operadora."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Retomar"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Sem conexão à Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avião"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Não perturbe"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Só prioridade"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Sem interrupções"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispositivos)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth desativado"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem rede"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Não há redes salvas disponíveis"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Transmitir tela"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Transmitindo"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispositivo sem nome"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pronto para transmitir"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Mais configurações"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Concluído"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Conectado"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Conectado via assistente de Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Salvo"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Conectando..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Ponto de acesso"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Não foi possível iniciar <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Dispensar todos os apps"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisão horizontal"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divisão vertical"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divisão personalizada"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Carregada"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Carregando"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> até concluir"</string> @@ -314,8 +311,8 @@ <string name="speed_bump_explanation" msgid="1288875699658819755">"Notificações menos urgentes abaixo"</string> <string name="notification_tap_again" msgid="8524949573675922138">"Toque novamente para abrir"</string> <string name="keyguard_unlock" msgid="8043466894212841998">"Deslize para cima para desbloquear"</string> - <string name="phone_hint" msgid="3101468054914424646">"Deslize para a direita para usar o telefone"</string> - <string name="camera_hint" msgid="5241441720959174226">"Deslize para a esquerda para usar a câmera"</string> + <string name="phone_hint" msgid="3101468054914424646">"Deslize à direita p/ usar o telefone"</string> + <string name="camera_hint" msgid="5241441720959174226">"Deslize à esquerda p/ usar a câmera"</string> <string name="interruption_level_none" msgid="3831278883136066646">"Nenhum"</string> <string name="interruption_level_priority" msgid="6517366750688942030">"Prioridade"</string> <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Veja-as antes de desbloquear"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Não, obrigado"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Configurar"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Ver tudo"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ocultar tudo"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"A tela está fixada"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ela é mantida à vista até que seja liberada. Toque em \"Voltar\" e \"Visão Geral\" e mantenha essas opções pressionadas ao mesmo tempo para liberar."</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Esconder <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ela reaparecerá na próxima vez que você ativá-la nas configurações."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ocultar"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> deseja ser a caixa de diálogo referente ao volume."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permitir"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Negar"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> é a caixa de diálogo referente ao volume"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Toque para restaurar o original."</string> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index cd3a1c0..5887c79 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -22,13 +22,14 @@ <string name="app_label" msgid="7164937344850004466">"UI sistem"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ștergeţi"</string> <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi din listă"</string> - <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informaţii despre aplicaţie"</string> + <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informaţii despre aplicație"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ecranele dvs. recente apar aici"</string> - <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunţaţi la aplicaţiile recente"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 ecran în Vizualizare generală"</item> - <item quantity="other" msgid="5523506463832158203">"%d ecrane în Vizualizare generală"</item> - </plurals> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunţaţi la aplicațiile recente"</string> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="few">%d ecrane în Recente</item> + <item quantity="other">%d de ecrane în Recente</item> + <item quantity="one">Un ecran în Recente</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Nicio notificare"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"În desfăşurare"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notificări"</string> @@ -52,8 +53,8 @@ <string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string> <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Setaţi metode introducere text"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Tastatură fizică"</string> - <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permiteţi aplicaţiei <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze dispozitivul USB?"</string> - <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permiteţi aplicaţiei <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze accesoriul USB?"</string> + <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permiteţi aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze dispozitivul USB?"</string> + <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permiteţi aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze accesoriul USB?"</string> <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Deschideţi <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui dispozitiv USB?"</string> <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Deschideţi <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui accesoriu USB?"</string> <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aplic. instal. nu funcţ. cu acest acces. USB. Aflaţi despre acest accesoriu la <xliff:g id="URL">%1$s</xliff:g>"</string> @@ -88,7 +89,6 @@ <string name="unlock_label" msgid="8779712358041029439">"deblocați"</string> <string name="phone_label" msgid="2320074140205331708">"deschideți telefonul"</string> <string name="camera_label" msgid="7261107956054836961">"deschideți camera foto"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Buton pentru comutarea metodei de introducere."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Buton zoom pentru compatibilitate."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceţi zoom de la o imagine mai mică la una mai mare."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Conectat prin Bluetooth."</string> @@ -177,6 +177,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Modul Avion este activat."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Modul Avion este dezactivat."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Modul Avion este activat."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Setarea „Nu deranja” este activată – numai prioritare."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Setarea „Nu deranja” este activată – fără întreruperi."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Setarea „Nu deranja” este dezactivată."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Setarea „Nu deranja” a fost dezactivată."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Setarea „Nu deranja” a fost activată."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Conexiunea prin Bluetooth este dezactivată."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Conexiunea prin Bluetooth este activată."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Se conectează prin Bluetooth."</string> @@ -201,12 +206,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspotul mobil este activat."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmiterea ecranului a fost oprită."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Luminozitatea ecranului"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Datele 2G-3G sunt dezactivate"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Datele 4G sunt dezactivate"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Datele mobile sunt dezactivate"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Datele sunt dezactivate"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Dispozitivul dvs. a dezactivat conexiunea de date deoarece s-a atins limita pe care ați setat-o.\n\nReactivarea conexiunii poate genera aplicarea de taxe de către operator."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Activați datele"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Conexiunea de date 2G – 3G este întreruptă"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Conexiunea de date 4G este întreruptă"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Conexiunea de date mobile este întreruptă"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Conexiunea de date este întreruptă"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Deoarece limita setată pentru date a fost atinsă, dispozitivul a întrerupt utilizarea datelor pentru restul acestui ciclu.\n\nReluarea utilizării de date poate genera aplicarea de taxe de către operator."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Reluați"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Fără conex. internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectat"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Se caută GPS"</string> @@ -225,6 +230,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mod Avion"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nu deranja"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Numai cu prioritate"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Fără întreruperi"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> dispozitive)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth dezactivat"</string> @@ -250,7 +258,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nicio reţea"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi deconectat"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nicio rețea salvată disponibilă"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Proiectați ecranul"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Se proiectează"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Dispozitiv nedenumit"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pregătit pentru proiecție"</string> @@ -262,8 +271,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Mai multe setări"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Terminat"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Conectat"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Conexiune realizată printr-un asistent Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Salvat"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Se conectează..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +289,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"căutare"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Închideți toate aplicațiile"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Divizare pe verticală"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Divizare personalizată"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"S-a încărcat"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Se încarcă"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> până la încărcare completă"</string> @@ -368,6 +366,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Doresc să se afișeze înainte de deblocare"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nu, mulț."</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Config."</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Afișați toate"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ascundeți toate"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ecranul este fixat"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ecranul este afișat până anulați fixarea. Apăsați lung pe Înapoi și pe Vizualizare generală simultan pentru a anula fixarea."</string> @@ -377,4 +377,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ascundeți <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Va reapărea la următoarea activare în setări."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ascundeți"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> dorește să afișeze caseta de dialog pentru volum."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Permiteți"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Refuzați"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> afișează caseta de dialog pentru volum"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Atingeți pentru a reveni la setarea inițială."</string> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 7f5d352..23e8b3a 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"О приложении"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Здесь будут показаны недавние приложения."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыть недавние приложения"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"В обзоре 1 экран."</item> - <item quantity="other" msgid="5523506463832158203">"Экранов в обзоре: %d."</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">Показан %d экран</item> + <item quantity="few">Показано %d экрана</item> + <item quantity="many">Показано %d экранов</item> + <item quantity="other">Показано %d экранов</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нет уведомлений"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текущие"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Уведомления"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"Разблокировать."</string> <string name="phone_label" msgid="2320074140205331708">"Открыть телефон."</string> <string name="camera_label" msgid="7261107956054836961">"Открыть камеру."</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабирования (режим совместимости)"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Уменьшение изображения для увеличения свободного места на экране."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-соединение установлено."</string> @@ -179,6 +180,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Режим полета включен."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим полета отключен."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим полета включен."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не беспокоить\" включен. Будут показаны только важные оповещения."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Включен режим \"Не беспокоить\". Все оповещения отключены."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Режим \"Не беспокоить\" выключен."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Режим \"Не беспокоить\" выключен."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Режим \"Не беспокоить\" включен."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Модуль Bluetooth отключен."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Модуль Bluetooth включен."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth-соединение устанавливается."</string> @@ -203,12 +209,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Точка доступа включена."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Трансляция прекращена."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Яркость экрана"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Передача данных 2G/3G отключена"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Передача данных 4G отключена"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Передача мобильных данных отключена"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Передача данных отключена"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Передача данных отключена, поскольку достигнут установленный вами лимит.\n\nВы можете снова включить ее, однако за переданные данные оператор может взимать дополнительную плату."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Включить передачу данных"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Передача данных 2G и 3G приостановлена"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передача данных 4G приостановлена"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Передача мобильных данных приостановлена"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Передача данных приостановлена"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Передача данных выключена до конца цикла, поскольку достигнут установленный вами лимит.\n\nЕсли вы возобновите ее, оператор может взимать плату за дополнительный расход трафика."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Возобновить"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Нет интернет-подключения"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi подключено"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Поиск GPS"</string> @@ -227,6 +233,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Заставка"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим полета"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не беспокоить"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Только важные"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Без оповещений"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выкл."</string> @@ -252,7 +261,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi выкл."</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Нет доступных сохраненных сетей"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Передать изображение экрана"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Передача изображения"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Безымянное устройство"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Готово к передаче"</string> @@ -264,8 +274,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Настройки"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Готово"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Подключено"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Установлено подключение через Ассистента Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Сохранено"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Соединение..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Режим модема"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка доступа"</string> @@ -284,18 +292,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\""</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Закрыть все приложения"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Разделить по горизонтали"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Разделить по вертикали"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Разделить по-другому"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Батарея заряжена"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Зарядка батареи"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> до полной зарядки"</string> @@ -313,8 +312,8 @@ <string name="keyguard_more_overflow_text" msgid="9195222469041601365">"+<xliff:g id="NUMBER_OF_NOTIFICATIONS">%d</xliff:g>"</string> <string name="speed_bump_explanation" msgid="1288875699658819755">"Показать менее важные оповещения"</string> <string name="notification_tap_again" msgid="8524949573675922138">"Нажмите ещё раз, чтобы открыть"</string> - <string name="keyguard_unlock" msgid="8043466894212841998">"Для разблокировки проведите пальцем по экрану"</string> - <string name="phone_hint" msgid="3101468054914424646">"Чтобы открыть приложение \"Телефон\", пролистните вправо"</string> + <string name="keyguard_unlock" msgid="8043466894212841998">"Проведите вверх, чтобы разблокировать"</string> + <string name="phone_hint" msgid="3101468054914424646">"Чтобы позвонить, пролистните вправо"</string> <string name="camera_hint" msgid="5241441720959174226">"Чтобы включить камеру, пролистните влево"</string> <string name="interruption_level_none" msgid="3831278883136066646">"Не беспокоить"</string> <string name="interruption_level_priority" msgid="6517366750688942030">"Важные"</string> @@ -370,6 +369,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Просматривайте уведомления на заблокированном экране."</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Закрыть"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Настроить"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Показать все"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Скрыть все"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>."</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Блокировка в приложении включена"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Это приложение останется активным, пока вы не отмените блокировку, одновременно нажав кнопки \"Назад\" и \"Обзор\"."</string> @@ -379,4 +380,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Скрыть параметр \"<xliff:g id="TILE_LABEL">%1$s</xliff:g>\"?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Этот параметр появится в следующий раз, когда вы включите его."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Скрыть"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"Назначить приложение <xliff:g id="APP_NAME">%1$s</xliff:g> регулятором громкости?"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Да"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Нет"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"Приложение <xliff:g id="APP_NAME">%1$s</xliff:g> назначено регулятором громкости"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Нажмите, чтобы восстановить приложение по умолчанию."</string> </resources> diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml index 5bd1f8d..ef864de 100644 --- a/packages/SystemUI/res/values-si-rLK/strings.xml +++ b/packages/SystemUI/res/values-si-rLK/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"යෙදුම් තොරතුරු"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"මෙහි ඔබගේ මෑතක තිර පෙන්නුම් කරයි"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"මෑත යෙදුම් ඉවතලන්න"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"දළ විශ්ලේෂණය තුළ 1 තීරයයි"</item> - <item quantity="other" msgid="5523506463832158203">"දළ විශ්ලේෂණය තුළ තීරයෙන් %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">විශ්ලේෂණය තුළ තිර %d යි</item> + <item quantity="other">විශ්ලේෂණය තුළ තිර %d</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"දැනුම්දීම් නැත"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"දැනට පවතින"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"දැනුම්දීම්"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"අඟුල අරින්න"</string> <string name="phone_label" msgid="2320074140205331708">"දුරකථනය විවෘත කරන්න"</string> <string name="camera_label" msgid="7261107956054836961">"කැමරාව විවෘත කරන්න"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ආදාන ක්රමය මාරු කිරීමේ බොත්තම."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ගැළපෙන විශාලන බොත්තම."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"විශාල තිරය වෙත කුඩාව විශාලනය කරන්න."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"බ්ලූටූත් සම්බන්ධිතයි."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"අහස්යානා ආකාරය සක්රීයයි."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"අහස්යානා අකාරය අක්රියයි."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"අහස්යානා ආකාරය සක්රීයයි."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"බාධා නොකරන්න ක්රියාත්මකයි, ප්රමුඛතා පමණි."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"බාධා නොකරන්න ක්රියාත්මකයි, බාධා කිරීම් නැත."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"බාධා නොකරන්න ක්රියා විරහිතයි."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"බාධා නොකරන්න ක්රියා විරහිත කරන ලදි."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"බාධා නොකරන්න ක්රියාත්මක කරන ලදි"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"බ්ලූටූත් අක්රියයි."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"බ්ලූටූත් සක්රියයි."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"බ්ලූටූත් සම්බන්ධවෙමින්."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ජංගම හොට්ස්පොටය සක්රිය කරන ලදි."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"තිරය විකාශය කිරීම නැවත් වන ලදි."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"දීප්තිය දර්ශනය කරන්න"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G දත්ත අක්රියයි"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G දත්ත අක්රියයි"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"සෙලියුලර් දත්ත අක්රියයි"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"දත්ත අක්රියයි"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"ඔබ සකසන ලද දත්ත සීමාවට එය ළඟාවී ඇති නිසා ඔබගේ උපාංගයේ දත්ත අක්රිය කර ඇත.\n\nඑය නැවත සක්රිය කිරීමෙන් ඔබගේ වාහකය ඇතැම් විට අය කර ගැනීමට හේතු වේ."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"දත්ත සක්රිය කරන්න"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G දත්ත විරාම කර ඇත"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G දත්ත විරාම කර ඇත"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"සෙලියුලර් දත්ත විරාම කර ඇත"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"දත්ත විරාම කර ඇත"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ඔබ සකසා ඇති දත්ත සීමාවට ළඟා වූ නිසා, උපාංගය මගින් මෙම චක්රයේ ඉතිරිය සඳහා දත්ත භාවිතය විරාම කර ඇත. \n\nනැවත පටන් ගැනීමෙන් ඔබගේ වාහකයෙන් අය කිරීම් වලට පොළඹවනු ඇත."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"නැවත පටන්ගන්න"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"අන්තර්ජාල සම්බන්ධතාවයක් නැත"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi සම්බන්ධිතයි"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS සඳහා සොයමින්"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"දවල් හීනය"</string> <string name="ethernet_label" msgid="7967563676324087464">"ඊතර නෙට්"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"අහස්යානා ආකාරය"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"බාධා නොකරන්න"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ප්රමුඛතාව පමණයි"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"බාධා කිරීම් නැත"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"බ්ලූටූත්"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"බ්ලූටූත් (උපාංග <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"බ්ලූටූත් අක්රියයි"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ජාලයක් නැත"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi අක්රියයි"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"තිබෙන ජාල සුරැකුවේ නැත"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"රංගන තිරය"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"Cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"කාස්ට් කිරීම"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"නම් නොකළ උපාංගය"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"කාස්ට් කිරීමට සුදානම්"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"තව සැකසීම්"</string> <string name="quick_settings_done" msgid="3402999958839153376">"නිමයි"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"සම්බන්ධිත"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi සහායක හරහා සම්බන්ධ කරන ලදි"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"සුරකින ලදි"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"සම්බන්ධ වෙමින්..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"ටෙදරින්"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"හොට්ස්පොට්"</string> @@ -282,18 +287,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"සෙවීම"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කළ නොහැක."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"සියලුම යෙදුම් අස් කරන්න"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"තිරස්ව වෙන් කරන්න"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"සිරස්ව වෙන් කරන්න"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"අභිමත ලෙස වෙන් කරන්න"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"අරෝපිතයි"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ආරෝපණය වෙමින්"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> සම්පූර්ණ වන තෙක්"</string> @@ -368,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ඔබ අඟුළු හැරීමට කලින් ඒවා බලන්න"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"එපා ස්තූතියි"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"සකසන්න"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"සියල්ල බලන්න"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"සියල්ල සඟවන්න"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"තීරය අමුණන ලදි"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ඔබ ගලවන තෙක් එය දර්ශනය තුළ මෙය තබයි. ගැලවීමට ආපසු සහ දළ විශ්ලේෂණය එකම වේලාවක ස්පර්ෂ කර අල්ලා සිටින්න."</string> @@ -377,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> සඟවන්නද?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"ඊළඟ අවස්ථාවේ සැකසීම් තුළ ඔබ එය සක්රිය කළ විට එය නැවත දිසිවේ."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"සඟවන්න"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> හට ධාරිතා සංවාදය වීමට අවශ්යයි"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"ඉඩ දෙන්න"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ප්රතික්ෂේප කරන්න"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ධාරිතා සංවාදයයි"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"මුල් තත්ත්වය නැවත ප්රතිසාධනය කිරීමට ස්පර්ශ කරන්න."</string> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 5183dab..4fc086d 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informácie o aplikácii"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vaše nedávne obrazovky sa zobrazia tu."</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zatvoriť nedávne aplikácie"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Počet obrazoviek v Prehľade: 1"</item> - <item quantity="other" msgid="5523506463832158203">"Počet obrazoviek v Prehľade: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="few">%d obrazovky v Prehľade</item> + <item quantity="many">%d obrazovky v Prehľade</item> + <item quantity="other">%d obrazoviek v Prehľade</item> + <item quantity="one">1 obrazovka v Prehľade</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Žiadne upozornenia"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Prebiehajúce"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Upozornenia"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"odomknúť"</string> <string name="phone_label" msgid="2320074140205331708">"otvoriť telefón"</string> <string name="camera_label" msgid="7261107956054836961">"spustiť fotoaparát"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačidlo prepnutia metódy vstupu."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačidlo úpravy veľkosti z dôvodu kompatibility."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zväčšiť menší obrázok na väčšiu obrazovku."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth pripojené."</string> @@ -179,6 +180,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Režim v lietadle je zapnutý."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Režim v lietadle je vypnutý."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Režim v lietadle je zapnutý."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stav Nerušiť je zapnutý, iba prioritné."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stav Nerušiť je zapnutý, žiadne prerušenia."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stav Nerušiť je vypnutý."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stav Nerušiť je vypnutý."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Stav Nerušiť je zapnutý."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Rozhranie Bluetooth je vypnuté."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Rozhranie Bluetooth je zapnuté."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Rozhranie Bluetooth sa pripája."</string> @@ -203,12 +209,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilný hotspot je zapnutý."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Prenášanie bolo zastavené."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Jas displeja"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"dáta 2G–3G sú vypnuté"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"dáta 4G sú vypnuté"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobilné dáta sú vypnuté"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Dáta sú vypnuté"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Zariadenie vyplo dáta, pretože dosiahlo limit, ktorý ste nastavili.\n\nAk ich znova zapnete, môže to viesť k účtovaniu poplatkov operátora."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Zapnúť dáta"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dátové prenosy 2G a 3G sú pozastavené"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dátové prenosy 4G sú pozastavené"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobilné dáta sú pozastavené"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Dáta sú pozastavené"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Keďže ste dosiahli nastavený limit pre mobilné dáta, na zariadení bola pre zvyšok tohto cyklu pozastavená spotreba dát.\n\nJej opätovné spustenie môže mať za následok účtovanie poplatkov vaším operátorom."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Znova spustiť"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Bez prip. na Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: pripojené"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhľadávanie satelitov GPS"</string> @@ -227,6 +233,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Šetrič obrazovky"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Režim v lietadle"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Nerušiť"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Iba prioritné"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Žiadne prerušenia"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Rozhranie Bluetooth (počet zariadení: <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Rozhranie Bluetooth je vypnuté"</string> @@ -252,7 +261,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žiadna sieť"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi-Fi je vypnutá"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Nie sú k dispozícii žiadne uložené siete"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Prenos obrazovky"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Prenáša sa"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nepomenované zariadenie"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pripravené na prenášanie"</string> @@ -264,8 +274,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Ďalšie nastavenia"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Hotovo"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Pripojené"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Pripojené pomocou Asistenta Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Uložené"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Pripája sa..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Zdieľanie dátového pripojenia"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -284,18 +292,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Odmietnuť všetky aplikácie"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Rozdeliť zvislé"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Rozdeliť vlastné"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Nabitá"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Nabíja sa"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Úplné nabitie o <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -370,6 +369,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Zobraziť pred odomknutím"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nie, vďaka"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastaviť"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Zobraziť všetko"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skryť všetko"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Obrazovka je pripnutá"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Obsah bude pripnutý v zobrazení, dokým ho neuvoľníte. Ak ho chcete uvoľniť, stlačte a podržte súčasne tlačidlá Späť a Prehľad."</string> @@ -379,4 +380,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Skryť <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Táto položka sa znova zobrazí, keď ju v nastaveniach opätovne zapnete."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skryť"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> chce byť dialógom hlasitosti"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Povoliť"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Odmietnuť"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je dialóg hlasitosti"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Klepnutím obnovíte originál."</string> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 2afb65b..f20596b 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Podatki o aplikaciji"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Vaši nedavni zasloni so prikazani tu"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zapre nedavne aplikacije"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"En zaslon v Pregledu"</item> - <item quantity="other" msgid="5523506463832158203">"Št. zaslonov v Pregledu: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d zaslon v pregledu</item> + <item quantity="two">%d zaslona v pregledu</item> + <item quantity="few">%d zasloni v pregledu</item> + <item quantity="other">%d zaslonov v pregledu</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ni obvestil"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Trenutno"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Obvestila"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"odkleni"</string> <string name="phone_label" msgid="2320074140205331708">"odpri telefon"</string> <string name="camera_label" msgid="7261107956054836961">"odpri fotoaparat"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklop načina vnosa."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb povečave za združljivost."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Povečava manjšega na večji zaslon."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Povezava Bluetooth vzpostavljena."</string> @@ -177,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Način za letalo je vklopljen."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Način za letalo je izklopljen."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Način za letalo je vklopljen."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Način »ne moti« je vklopljen, samo prednostno."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Način »ne moti« je vklopljen, ni prekinitev."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Način »ne moti« je izklopljen."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Način »ne moti« je izklopljen."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Način »ne moti« je vklopljen."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth je izklopljen."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth je vklopljen."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Povezava Bluetooth se vzpostavlja."</string> @@ -201,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilna dostopna točka je vklopljena."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Predvajanje zaslona je ustavljeno."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Svetlost zaslona"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Prenos podatkov v omrežjih 2G/3G je izklopljen"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Prenos podatkov v omrežjih 4G je izklopljen"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Prenos podatkov v mobilnih omrežjih je izklopljen"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Prenos podatkov je izklopljen"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Naprava je izklopila prenos podatkov, ker je bila dosežena omejitev, ki ste jo nastavili.\n\nČe prenos spet vklopite, vam bo operater morda zaračunal stroške."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Vklopi prenos podatkov"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Prenos podatkov v omrežju 2G/3G je zaustavljen"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Prenos podatkov v omrežju 4G je zaustavljen"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Prenos mobilnih podatkov je zaustavljen"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Prenos podatkov je zaustavljen"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Dosegli ste nastavljeno omejitev količine prenesenih podatkov, zato je naprava zaustavila porabo podatkov za preostanek cikla.\n\nČe nadaljujete s porabo, boste morda morali plačati stroške operaterju."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Nadaljuj"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ni internetne povez."</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Iskanje GPS-a"</string> @@ -225,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Sanjarjenje"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način za letalo"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ne moti"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Samo prednostno"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Brez prekinitev"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (št. naprav: <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth izklopljen"</string> @@ -250,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ni omrežja"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi izklopljen"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Na voljo ni nobeno shranjeno omrežje"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Zaslon za predvajanje"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Predvajanje"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Neimenovana naprava"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Pripravljeno za predvajanje"</string> @@ -262,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Več nastavitev"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Končano"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Povezava je vzpostavljena"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Povezava vzpostavljena prek pomočnika za Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Shranjeno"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Vzpostavljanje povezave ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Internet prek mobilne naprave"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Dostopna točka"</string> @@ -282,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"iskanje"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacije <xliff:g id="APP">%s</xliff:g> ni bilo mogoče zagnati."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Opusti vse aplikacije"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Razdeli vodoravno"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Razdeli navpično"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Razdeli po meri"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Akumulator napolnjen"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Polnjenje"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> do napolnjenosti"</string> @@ -368,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Oglejte si jih pred odklepanjem"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ne, hvala"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Nastavitev"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Pokaži vse"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Skrij vse"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Zaslon je pripet"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"S tem ostane zaslon v pogledu, dokler ga ne odpnete. Hkrati pridržite tipko za nazaj in tipko za pregled, če ga želite odpeti."</string> @@ -377,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Želite skriti <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Znova se bo pojavila, ko jo naslednjič vklopite v nastavitvah."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Skrij"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi biti pogovorno okno glede prostornine."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Dovoli"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Zavrni"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> je pogovorno okno glede prostornine"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Dotaknite se, če želite obnoviti izvirnik."</string> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index d7ab3a6..74b44f4 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -25,10 +25,11 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Информације о апликацији"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Недавни екрани се појављују овде"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Одбаци недавне апликације"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 екран у Прегледу"</item> - <item quantity="other" msgid="5523506463832158203">"%d екрана у Прегледу"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d екран у Прегледу</item> + <item quantity="few">%d екрана у Прегледу</item> + <item quantity="other">%d екрана у Прегледу</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Нема обавештења"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Текуће"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Обавештења"</string> @@ -88,7 +89,6 @@ <string name="unlock_label" msgid="8779712358041029439">"откључај"</string> <string name="phone_label" msgid="2320074140205331708">"отвори телефон"</string> <string name="camera_label" msgid="7261107956054836961">"отвори камеру"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Дугме Промени метод уноса."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Дугме Зум компатибилности."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Зумирање са мањег на већи екран."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth је прикључен."</string> @@ -177,6 +177,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Режим рада у авиону је укључен."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим рада у авиону је искључен."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим рада у авиону је укључен."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Подешавање Не узнемиравај је укључено, само приоритетни прекиди."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Подешавање Не узнемиравај је укључено, без прекида."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Подешавање Не узнемиравај је искључено."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Подешавање Не узнемиравај је искључено."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Подешавање Не узнемиравај је укључено."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth је искључен."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth је укључен."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth се повезује."</string> @@ -201,12 +206,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилни хотспот је укључен."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Пребацивање екрана је заустављено."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Осветљеност екрана"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G–3G подаци су искључени"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G подаци су искључени"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Мобилни пренос података је искључен"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Пренос података је искључен"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Уређај је искључио пренос података јер је достигао ограничење које сте поставили.\n\nАко га поново укључите, можда ће вам мобилни оператер наплатити трошкове."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Укључи пренос података"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G подаци су паузирани"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G подаци су паузирани"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Мобилни подаци су паузирани"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Подаци су паузирани"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Због тога што сте достигли подешено ограничење за податке, уређај је паузирао коришћење података током остатка овог циклуса.\n\nАко наставите, мобилни оператер може да вам наплати додатне трошкове."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Настави"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Нема интернет везе"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi је повезан"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Тражи се GPS"</string> @@ -225,6 +230,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Сањарење"</string> <string name="ethernet_label" msgid="7967563676324087464">"Етернет"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим рада у авиону"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не узнемиравај"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Само приоритетни прекиди"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Без прекида"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> уређаја)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth искључен"</string> @@ -250,7 +258,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мреже"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi је искључен"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Није доступна ниједна сачувана мрежа"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Пребацивање екрана"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Пребацивање"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Неименовани уређај"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Спремно за пребацивање"</string> @@ -262,8 +271,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Још подешавања"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Готово"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Повезан"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Повезано преко Wi‑Fi помоћника"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Сачувано"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Повезује се..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Повезивање"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Хотспот"</string> @@ -282,18 +289,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Одбаци све апликације"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Подели хоризонтално"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Подели вертикално"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Прилагођено дељење"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Напуњена је"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Пуњење"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> док се не напуни"</string> @@ -368,6 +366,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Прегледајте их пре откључавања"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Не, хвала"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Подеси"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Прикажи све"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сакриј све"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Екран је закачен"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"На овај начин ово остаје приказано док га не откачите. Истовремено додирните и задржите Назад и Преглед да бисте га откачили."</string> @@ -377,4 +377,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Желите ли да сакријете <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ово ће се поново појавити када га следећи пут будете укључили у подешавањима."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сакриј"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> жели да буде дијалог за јачину звука."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дозволи"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Одбиј"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> је дијалог за јачину звука"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Додирните да бисте вратили оригинал."</string> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index f293649..de4b84c 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Dina senaste skärmar visas här"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvisa nya appar"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"En skärm i Översikten"</item> - <item quantity="other" msgid="5523506463832158203">"%d skärmar i Översikten"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d skärmar i översikten</item> + <item quantity="one">En skärm i översikten</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Inga aviseringar"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Pågående"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Meddelanden"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"lås upp"</string> <string name="phone_label" msgid="2320074140205331708">"öppna mobilen"</string> <string name="camera_label" msgid="7261107956054836961">"öppna kameran"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knapp för byte av inmatningsmetod."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knapp för kompatibilitetszoom."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zooma mindre skärm till större."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ansluten."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Flygplansläge på."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Flygplansläget har inaktiverats."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Flygplansläget har aktiverats."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Stör ej har aktiverats. Endast prioriterade."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Stör ej har aktiverats. Inga avbrott."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Stör ej av."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Stör ej har inaktiverats."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Stör ej har aktiverats."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth av."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth på."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Ansluter Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Den mobila trådlösa surfzonen har aktiverats."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Castningen av skärmen har stoppats."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Skärmens ljusstyrka"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-/3G-data har inaktiverats"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G-data har inaktiverats"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobildata har inaktiverats"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data har inaktiverats"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Data har stängts av på enheten eftersom den angivna gränsen har uppnåtts.\n\nOm du aktiverar den igen kan avgifter från operatören tillkomma."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Aktivera uppgifter"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G- och 3G-data har pausats"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data har pausats"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobildata har pausats"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Dataanvändningen har pausats"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Eftersom du har nått den angivna datagränsen har dataanvändningen pausats under resten av perioden.\n\nOm du återupptar dataanvändningen kan avgifter från operatören tillkomma."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Återuppta"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ingen anslutning"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ansluten"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Sökning efter GPS pågår"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Dagdröm"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flygplansläge"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Stör ej"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Endast prioriterade"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Inga avbrott"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth av"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi av"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Inga sparade nätverk tillgängliga"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Casta skärmen"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Castar"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Namnlös enhet"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Redo att casta"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Fler inställningar"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Klart"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Ansluten"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Ansluten via Wi-Fi-assistent"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Sparad"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Ansluter ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Internetdelning"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Trådlös surfzon"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ta bort alla appar"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dela vertikalt"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Dela anpassad"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Laddat"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Laddar"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> tills batteriet är fulladdat"</string> @@ -304,7 +301,7 @@ <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string> <string name="zen_no_interruptions_with_warning" msgid="4396898053735625287">"Inga avbrott. Inte ens alarm."</string> <string name="zen_no_interruptions" msgid="7970973750143632592">"Inga avbrott"</string> - <string name="zen_important_interruptions" msgid="3477041776609757628">"Endast prioriterade avbrott"</string> + <string name="zen_important_interruptions" msgid="3477041776609757628">"Endast prioriterade samtal och aviseringar"</string> <string name="zen_alarm_information_time" msgid="5235772206174372272">"Nästa alarm är kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> <string name="zen_alarm_information_day_time" msgid="8422733576255047893">"Nästa alarm är <xliff:g id="ALARM_DAY_AND_TIME">%s</xliff:g>"</string> <string name="zen_alarm_warning" msgid="6873910860111498041">"Alarmet kommer inte att höras kl. <xliff:g id="ALARM_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Visa dem innan du låser upp"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Nej tack"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Konfig."</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Visa alla"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Dölj alla"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skärmen har fästs"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Detta visar skärmen tills du lossar den. Tryck länge på bakåtknappen och Översikt samtidigt om du vill lossa skärmen."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Vill du dölja <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Den visas på nytt nästa gång du aktiverar den i inställningarna."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Dölj"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> försöker överta funktionen som volymkontroll."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Tillåt"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Neka"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> används som volymkontroll"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Tryck här om du vill återställa den ursprungliga appen."</string> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index d7621e9..c6c4ff0 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Taarifa za programu-matumizi"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Skrini zako za hivi majuzi huonekana hapa"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ondosha programu za hivi karibuni"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Skrini 1 katika Muhtasari"</item> - <item quantity="other" msgid="5523506463832158203">"Skrini %d katika Muhtasari"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">Skrini %d katika Muhtasari</item> + <item quantity="one">Skrini 1 katika Muhtasari</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Hakuna arifa"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Inaendelea"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Arifa"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"fungua"</string> <string name="phone_label" msgid="2320074140205331708">"fungua simu"</string> <string name="camera_label" msgid="7261107956054836961">"fungua kamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Swichi kitufe cha mbinu ingizi."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kichupo cha kukuza kwa utangamanifu"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kuza kidogo kwa skrini kubwa."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth imeunganishwa."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Hali ya ndegeni imewashwa."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Hali ya ndegeni imezimwa."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Hali ya ndegeni imewashwa."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Kipengee cha usinisumbue kimewashwa, kipaumbele pekee."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Kipengee cha usinisumbue kimewashwa, hakuna kukatizwa."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Kipengee cha usinisumbue kimezimwa."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Kipengee cha usinisumbue kimezimwa."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Kipengee cha usinisumbue kimewashwa."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth imezimwa."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth imewashwa."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth inaunganishwa."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mtandao-hewa unaoweza kuhamishika umewashwa."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Utumaji wa skrini umesitishwa."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ung\'aavu wa skrini"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Data ya 2G-3G imezimwa"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Data ya 4G imezimwa"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Data ya simu ya mkononi imezimwa"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Data imezimwa"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Kifaa chako kilizima data kwa sababu kilifikia kikomo ulichoweka.\n\nKuwasha data tena kunaweza kusababisha matozo kutoka kwa mtoa huduma wako."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Washa matumizi ya data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data ya 2G-3G imesitishwa"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data ya 4G imesitishwa"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Data ya simu ya mkononi imesitishwa"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Data imesitishwa"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Kwa sababu ulifikia kiwango cha juu cha data kilichowekwa, kifaa kimesitisha matumizi ya data katika awamu hii iliyosalia.\n\n Kuendelea kunaweza kusababisha malipo kwa mtoa huduma wako."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Endelea"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Hakuna muunganisho wa mtandao"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Mtandao-hewa umeunganishwa"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Inatafuta GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Hali Tulivu"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Hali ya ndege"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Usinisumbue"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Kipaumbele tu"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Hakuna kukatizwa"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (Vifaa <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Imezimwa"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Hakuna Mtandao"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Imezimwa"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Hakuna mitandao iliyohifadhiwa inayopatikana"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Tuma skrini"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Inatuma"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Kifaa hakina jina"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tayari kutuma"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Mipangilio zaidi"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Nimemaliza"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Imeunganishwa"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Imeunganishwa kupitia Kisaidizi cha Wi-Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Kilichohifadhiwa"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Inaunganisha..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Kusambaza mtandao"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Mtandao-hewa"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Haikuweza kuanzisha <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Ondoa programu zote"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Gawanya Wima"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Maalum Iliyogawanywa"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Betri imejaa"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Inachaji"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Imebakisha <xliff:g id="CHARGING_TIME">%s</xliff:g> ijae"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Zitazame kabla hujafungua"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hapana, asante"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Sanidi"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Angalia zote"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ficha zote"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Skrini imebandikwa"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Hii itaendelea kuonyesha hadi ubandue. Gusa na ushikilie Nyuma na Muhtasari kwa wakati mmoja ili ubandue."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ungependa kuficha <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Itaonekana tena wakati mwingine utakapoiwasha katika mipangilio."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ficha"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> inataka kuwa mazungumzo ya sauti."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Ruhusu"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Kataa"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ni mazungumzo ya sauti"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Gusa ili urejeshe ya awali."</string> </resources> diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml index d861522..c9da1b8 100644 --- a/packages/SystemUI/res/values-ta-rIN/strings.xml +++ b/packages/SystemUI/res/values-ta-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"பயன்பாட்டுத் தகவல்"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"சமீபத்திய திரைகள் இங்கு தோன்றும்"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"சமீபத்திய பயன்பாடுகளை நிராகரி"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"மேலோட்டப் பார்வையில் 1 திரை"</item> - <item quantity="other" msgid="5523506463832158203">"மேலோட்டப் பார்வையில் %d திரைகள்"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">மேலோட்டப் பார்வையில் %d திரைகள்</item> + <item quantity="one">மேலோட்டப் பார்வையில் 1 திரை</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"அறிவிப்புகள் இல்லை"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"செயலில் இருக்கும்"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"அறிவிப்புகள்"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"திற"</string> <string name="phone_label" msgid="2320074140205331708">"ஃபோனைத் திற"</string> <string name="camera_label" msgid="7261107956054836961">"கேமராவைத் திற"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"உள்ளீட்டு முறையை மாற்றும் பொத்தான்."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"பொருந்துமாறு அளவை மாற்றும் பொத்தான்."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"சிறியதிலிருந்து பெரிய திரைக்கு அளவை மாற்றும்."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"புளூடூத் இணைக்கப்பட்டது."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"விமானப் பயன்முறை இயக்கத்தில்."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"விமானப் பயன்முறை முடக்கப்பட்டது."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"விமானப் பயன்முறை இயக்கப்பட்டது."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, முதன்மை மட்டும்."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது, குறுக்கீடுகள் இல்லை."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"தொந்தரவு செய்ய வேண்டாம் என்பது முடக்கப்பட்டது."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"தொந்தரவு செய்ய வேண்டாம் என்பது இயக்கப்பட்டது."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"புளூடூத் முடக்கத்தில்."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"புளூடூத் இயக்கத்தில்."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"புளூடூத் இணைக்கப்படுகிறது."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"மொபைல் ஹாட்ஸ்பாட் இயக்கப்பட்டது."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"திரையை அனுப்புதல் நிறுத்தப்பட்டது."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"திரை பிரகாசம்"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G தரவு முடக்கப்பட்டது"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G தரவு முடக்கப்பட்டது"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"செல்லுலார் தரவு முடக்கப்பட்டது"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"தரவு இணைப்பு முடக்கப்பட்டது"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"அமைத்த வரம்பை மீறிவிட்டதால், சாதனம் தரவு இணைப்பை முடக்கியது.\n\nஇதை மீண்டும் இயக்கினால், மொபைல் நிறுவனம் விதிக்கும் கட்டணங்கள் பொருந்தலாம்."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"தரவு இணைப்பை இயக்கு"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G டேட்டா இடைநிறுத்தப்பட்டது"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G டேட்டா இடைநிறுத்தப்பட்டது"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"செல்லுலார் தரவு இடைநிறுத்தப்பட்டது"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"தரவு இடைநிறுத்தப்பட்டது"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"அமைக்கப்பட்ட தரவின் வரம்பை அடைந்துவிட்டதால், இந்தச் சுழற்சியின் மீதமுள்ள நாட்களுக்கான தரவுப் பயன்பாட்டைச் சாதனம் இடைநிறுத்தியுள்ளது.\n\nமீண்டும் தொடங்குவது, மொபைல் நிறுவனக் கட்டணங்களுக்கு உட்படுத்தலாம்."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"மீண்டும் தொடங்கு"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"இணைய இணைப்பு இல்லை"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"வைஃபை இணைக்கப்பட்டது"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS ஐத் தேடுகிறது"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"பகல்கனா"</string> <string name="ethernet_label" msgid="7967563676324087464">"ஈதர்நெட்"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"விமானப் பயன்முறை"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"தொந்தரவு செய்ய வேண்டாம்"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"முதன்மை மட்டும்"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"குறுக்கீடுகள் வேண்டாம்"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"புளூடூத்"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"புளூடூத் (<xliff:g id="NUMBER">%d</xliff:g> சாதனங்கள்)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"புளூடூத் ஐ முடக்கு"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"நெட்வொர்க் இல்லை"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"வைஃபையை முடக்கு"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"சேமித்த நெட்வொர்க்குகள் இல்லை"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"திரையை அனுப்பு"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"அனுப்புகிறது"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"பெயரிடப்படாத சாதனம்"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"அனுப்பத் தயார்"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"அமைப்பில் மாற்று"</string> <string name="quick_settings_done" msgid="3402999958839153376">"முடிந்தது"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"இணைக்கப்பட்டது"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"வைஃபை அசிஸ்டண்ட் மூலம் இணைக்கப்பட்டது"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"சேமிக்கப்பட்டது"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"இணைக்கிறது..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"டெதெரிங்"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ஹாட்ஸ்பாட்"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"தேடு"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ஐத் தொடங்க முடியவில்லை."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"எல்லா பயன்பாடுகளையும் விலக்கு"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"கிடைமட்டமாகப் பிரி"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"செங்குத்தாகப் பிரி"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"தனிவிருப்பத்தில் பிரி"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"சார்ஜ் செய்யப்பட்டது"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"சார்ஜாகிறது"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"முழுவதும் சார்ஜாக <xliff:g id="CHARGING_TIME">%s</xliff:g> ஆகும்"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"திறக்கும் முன் அவற்றைப் பார்க்கவும்"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"வேண்டாம்"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"அமை"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"எல்லாம் காட்டு"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"எல்லாம் மறை"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"திரை பொருத்தப்பட்டது"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"பொருத்தியதை விலக்கும்வரை இதைக் காட்சியில் வைக்கும். விலக்க, பின் மற்றும் மேலோட்டப் பார்வையை ஒரே நேரத்தில் தொட்டுப் பிடிக்கவும்."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>ஐ மறைக்கவா?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"அடுத்த முறை அமைப்புகளில் மீண்டும் இயக்கும்போது, இது மீண்டும் தோன்றும்."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"மறை"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g>, ஒலியளவு செய்தியாகச் செயல்பட விரும்புகிறது."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"அனுமதி"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"நிராகரி"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"ஒலியளவு செய்தி: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"அசலை மீட்டமைக்கத் தொடவும்."</string> </resources> diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml index 10b3214..62c377e 100644 --- a/packages/SystemUI/res/values-te-rIN/strings.xml +++ b/packages/SystemUI/res/values-te-rIN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"అనువర్తన సమాచారం"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"మీ ఇటీవలి స్క్రీన్లు ఇక్కడ కనిపిస్తాయి"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ఇటీవలి అనువర్తనాలను తీసివేయండి"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"అవలోకనంలో 1 స్క్రీన్ ఉంది"</item> - <item quantity="other" msgid="5523506463832158203">"అవలోకనంలో %d స్క్రీన్లు ఉన్నాయి"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">స్థూలదృష్టిలో %d స్క్రీన్లు ఉన్నాయి</item> + <item quantity="one">స్థూలదృష్టిలో 1 స్క్రీన్ ఉంది</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"నోటిఫికేషన్లు లేవు"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"కొనసాగుతున్నవి"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"నోటిఫికేషన్లు"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"అన్లాక్ చేయి"</string> <string name="phone_label" msgid="2320074140205331708">"ఫోన్ను తెరువు"</string> <string name="camera_label" msgid="7261107956054836961">"కెమెరాను తెరువు"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ఇన్పుట్ పద్ధతి మార్చే బటన్."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"అనుకూలత జూమ్ బటన్."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"చిన్న స్క్రీన్ నుండి పెద్దదానికి జూమ్ చేయండి."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"బ్లూటూత్ కనెక్ట్ చేయబడింది."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ఎయిర్ప్లైన్ మోడ్ ఆన్లో ఉంది."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ఎయిర్ప్లైన్ మోడ్ ఆఫ్ చేయబడింది."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ఎయిర్ప్లైన్ మోడ్ ఆన్ చేయబడింది."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"అంతరాయం కలిగించవద్దు ఆన్లో ఉంది, ప్రాధాన్యత మాత్రమే."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"అంతరాయం కలిగించవద్దు ఆన్లో ఉంది, అంతరాయాలు ఉండవు."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"అంతరాయం కలిగించవద్దు ఆఫ్లో ఉంది."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"అంతరాయం కలిగించవద్దు ఆఫ్ చేయబడింది."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"అంతరాయం కలిగించవద్దు ఆన్ చేయబడింది."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"బ్లూటూత్ ఆఫ్లో ఉంది."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"బ్లూటూత్ ఆన్లో ఉంది."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"బ్లూటూత్ కనెక్ట్ అవుతోంది."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"మొబైల్ హాట్స్పాట్ ఆన్ చేయబడింది."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"స్క్రీన్ ప్రసారం ఆపివేయబడింది."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ప్రదర్శన ప్రకాశం"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G డేటా ఆఫ్లో ఉంది"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G డేటా ఆఫ్లో ఉంది"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"సెల్యూలార్ డేటా ఆఫ్లో ఉంది"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"డేటా ఆఫ్లో ఉంది"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"మీ పరికరం మీరు సెట్ చేసిన పరిమితిని చేరుకున్నందున డేటాను ఆఫ్ చేసింది.\n\nదీన్ని తిరిగి ఆన్ చేయడం వలన మీ క్యారియర్ను బట్టి ఛార్జీలు పడవచ్చు."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"డేటాను ఆన్ చేయి"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G డేటా పాజ్ చేయబడింది"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G డేటా పాజ్ చేయబడింది"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"సెల్యులార్ డేటా పాజ్ చేయబడింది"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"డేటా పాజ్ చేయబడింది"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"మీ సెట్ చేయబడిన డేటా పరిమితిని చేరుకున్నందున పరికరం ఈ సైకిల్లో మిగిలిన భాగానికి డేటా వినియోగాన్ని పాజ్ చేసింది.\n\nపునఃప్రారంభించడం వలన మీ క్యారియర్ ఛార్జీలు విధించవచ్చు."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"పునఃప్రారంభించు"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ఇంటర్నెట్ కనెక్షన్ లేదు"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi కనెక్ట్ చేయబడింది"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS కోసం శోధిస్తోంది"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"డేడ్రీమ్"</string> <string name="ethernet_label" msgid="7967563676324087464">"ఈథర్నెట్"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ఎయిర్ప్లేన్ మోడ్"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"అంతరాయం కలిగించవద్దు"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"ప్రాధాన్యత మాత్రమే"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"అంతరాయాలు ఉండవు"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"బ్లూటూత్"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"బ్లూటూత్ (<xliff:g id="NUMBER">%d</xliff:g> పరికరాలు)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"బ్లూటూత్ ఆఫ్లో ఉంది"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"నెట్వర్క్ లేదు"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ఆఫ్లో ఉంది"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"సేవ్ చేసిన నెట్వర్క్లు ఏవీ అందుబాటులో లేవు"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ప్రసార స్క్రీన్"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"ప్రసారం చేస్తోంది"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"పేరులేని పరికరం"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ప్రసారం చేయడానికి సిద్ధంగా ఉంది"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"మరిన్ని సెట్టింగ్లు"</string> <string name="quick_settings_done" msgid="3402999958839153376">"పూర్తయింది"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"కనెక్ట్ చేయబడినది"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi సహాయకం ద్వారా కనెక్ట్ చేయబడింది"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"సేవ్ చేయబడింది"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"కనెక్ట్ అవుతోంది..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"టీథరింగ్"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"హాట్స్పాట్"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"శోధించు"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ని ప్రారంభించడం సాధ్యపడలేదు."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"అన్ని అనువర్తనాలను తీసివేయి"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"సమతలంగా విభజించు"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"లంబంగా విభజించు"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"అనుకూలంగా విభజించు"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ఛార్జ్ చేయబడింది"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"ఛార్జ్ అవుతోంది"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"పూర్తిగా నిండటానికి <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"వీటిని మీరు అన్లాక్ చేయకముందే చూడండి"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"వద్దు, ధన్యవాదాలు"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"సెటప్ చేయి"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"అన్నీ చూడండి"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"అన్నీ దాచిపెట్టు"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"స్క్రీన్ పిన్ చేయబడింది"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"ఇది మీరు అన్పిన్ చేసే వరకు దీన్ని వీక్షణలో ఉంచుతుంది. అన్పిన్ చేయడానికి వెనుకకు మరియు స్థూలదృష్టిని ఒకేసారి తాకి, ఉంచండి."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g>ని దాచాలా?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"మీరు సెట్టింగ్ల్లో దీన్ని ఆన్ చేసిన తదుపరిసారి ఇది కనిపిస్తుంది."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"దాచు"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> అనేది వాల్యూమ్ డైలాగ్గా ఉండాలనుకుంటోంది."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"అనుమతించు"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"తిరస్కరించు"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> అనేది వాల్యూమ్ డైలాగ్"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"అసలుదాన్ని పునరుద్ధరించడానికి తాకండి."</string> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 1bc9585..6ef2791 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ข้อมูลแอปพลิเคชัน"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"หน้าจอล่าสุดของคุณแสดงที่นี่"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ปิดแอปพลิเคชันล่าสุด"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 หน้าจอในภาพรวม"</item> - <item quantity="other" msgid="5523506463832158203">"%d หน้าจอในภาพรวม"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d หน้าจอในภาพรวม</item> + <item quantity="one">1 หน้าจอในภาพรวม</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ไม่มีการแจ้งเตือน"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ดำเนินอยู่"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"การแจ้งเตือน"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"ปลดล็อก"</string> <string name="phone_label" msgid="2320074140205331708">"เปิดโทรศัพท์"</string> <string name="camera_label" msgid="7261107956054836961">"เปิดกล้อง"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ปุ่มซูมที่ใช้งานร่วมกันได้"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ซูมหน้าจอให้มีขนาดใหญ่ขึ้น"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"เชื่อมต่อบลูทูธแล้ว"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"โหมดบนเครื่องบินเปิดอยู่"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ปิดโหมดบนเครื่องบินแล้ว"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"เปิดโหมดบนเครื่องบินแล้ว"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"การห้ามรบกวนเปิดอยู่ เฉพาะเรื่องสำคัญเท่านั้น"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"การห้ามรบกวนเปิดอยู่ ห้ามรบกวน"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"การห้ามรบกวนปิดอยู่"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ปิดการห้ามรบกวนแล้ว"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"เปิดการห้ามรบกวนแล้ว"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"บลูทูธปิดอยู่"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"บลูทูธเปิดอยู่"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"กำลังเชื่อมต่อบลูทูธ"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"เปิดฮอตสปอตเคลื่อนที่แล้ว"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"หยุดการส่งหน้าจอแล้ว"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ความสว่างของหน้าจอ"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"ข้อมูล 2G-3G ปิดอยู่"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"ข้อมูล 4G ปิดอยู่"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"ข้อมูลมือถือปิดอยู่"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ข้อมูลปิดอยู่"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"อุปกรณ์ของคุณปิดการใช้ข้อมูลเนื่องจากถึงขีดจำกัดที่คุณตั้งค่าไว้\n\nผู้ให้บริการอาจเรียกเก็บเงินหากเปิดใช้อีกครั้ง"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"เปิดใช้ข้อมูล"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"หยุดการใช้ข้อมูล 2G-3G ชั่วคราวแล้ว"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"หยุดการใช้ข้อมูล 4G ชั่วคราวแล้ว"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"หยุดการใช้ข้อมูลมือถือชั่วคราวแล้ว"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"หยุดการใช้ข้อมูลชั่วคราวแล้ว"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"เนื่องจากใช้งานข้อมูลถึงขีดจำกัดที่กำหนดไว้แล้ว อุปกรณ์จึงหยุดการใช้งานข้อมูลไว้ชั่วคราวตลอดระยะเวลาที่เหลือของรอบนี้\n\nการทำให้กลับมาทำงานอีกครั้งอาจทำให้เกิดค่าใช้จ่ายจากผู้ให้บริการ"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ทำต่อ"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ไม่มีอินเทอร์เน็ต"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"เชื่อมต่อ WiFi แล้ว"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"กำลังค้นหา GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"เดย์ดรีม"</string> <string name="ethernet_label" msgid="7967563676324087464">"อีเทอร์เน็ต"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"โหมดใช้บนเครื่องบิน"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ห้ามรบกวน"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"เฉพาะเรื่องสำคัญ"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"ไม่มีการรบกวน"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"บลูทูธ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"บลูทูธ (<xliff:g id="NUMBER">%d</xliff:g> อุปกรณ์)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ปิดบลูทูธ"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ไม่มีเครือข่าย"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ปิด WiFi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"เครือข่ายที่บันทึกไว้ทั้งหมดไม่พร้อมใช้งาน"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"ส่งหน้าจอ"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"กำลังส่ง"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"อุปกรณ์ที่ไม่มีชื่อ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"พร้อมที่จะส่ง"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"การตั้งค่าเพิ่มเติม"</string> <string name="quick_settings_done" msgid="3402999958839153376">"เสร็จสิ้น"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"เชื่อมต่อ"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"เชื่อมต่อผ่านตัวช่วย Wi-Fi อยู่"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"ที่บันทึกไว้"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"กำลังเชื่อมต่อ..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"การปล่อยสัญญาณ"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ฮอตสปอต"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"ไม่สามารถเริ่มใช้ <xliff:g id="APP">%s</xliff:g>"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"ปิดแอปพลิเคชันทั้งหมด"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"แยกในแนวนอน"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"แยกในแนวตั้ง"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"แยกแบบกำหนดเอง"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"ชาร์จแล้ว"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"กำลังชาร์จ"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"อีก <xliff:g id="CHARGING_TIME">%s</xliff:g> จึงจะเต็ม"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"ดูก่อนปลดล็อก"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"ไม่เป็นไร"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"ตั้งค่า"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"ดูทั้งหมด"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"ซ่อนทั้งหมด"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g> <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"ตรึงหน้าจอแล้ว"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"การดำเนินการนี้จะเปิดหน้าจอนี้ไว้เสมอจนกว่าคุณจะเลิกตรึง แตะ \"กลับ\" และ \"ภาพรวม\" พร้อมกันค้างไว้เพื่อเลิกตรึง"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"ซ่อน <xliff:g id="TILE_LABEL">%1$s</xliff:g> ไหม"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"จะปรากฏอีกครั้งเมื่อคุณเปิดใช้ในการตั้งค่าครั้งถัดไป"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"ซ่อน"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ต้องการเป็่นช่องโต้ตอบระดับเสียง"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"อนุญาต"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"ปฏิเสธ"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> เป็นช่องโต้ตอบระดับเสียง"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"แตะเพื่อคืนค่าดั้งเดิม"</string> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index cee541e..f60a85a 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Impormasyon ng app"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Lumalabas dito ang iyong kamakailang screen"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Huwag pansinin ang kamakailang apps"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 screen sa Overview"</item> - <item quantity="other" msgid="5523506463832158203">"%d (na) screen sa Overview"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d screen sa Pangkalahatang-ideya</item> + <item quantity="other">%d na screen sa Pangkalahatang-ideya</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Walang mga notification"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Nagpapatuloy"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Mga Notification"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"i-unlock"</string> <string name="phone_label" msgid="2320074140205331708">"buksan ang telepono"</string> <string name="camera_label" msgid="7261107956054836961">"buksan ang camera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button na pamamaraan ng pag-input."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng pagiging tugma."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Mag-zoom nang mas maliit sa mas malaking screen."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Nakakonekta ang Bluetooth."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Naka-on ang Airplane mode."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Na-off ang Airplane mode."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Na-on ang Airplane mode."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Naka-on ang huwag istorbohin, priyoridad lang."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Naka-on ang huwag istorbohin, walang mga paggambala."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Naka-off ang huwag istorbohin."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Na-off na ang huwag istorbohin"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Na-on na ang huwag istorbohin."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Naka-off ang Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Naka-on ang Bluetooth."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Kumokonekta ang Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Na-on ang mobile hotspot."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Itinigil ang pagka-cast sa screen."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Liwanag ng display"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Naka-off ang 2G-3G data"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Naka-off ang 4G data"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Naka-off ang cellular data"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Naka-off ang data"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Ini-off ng device mo ang data dahil naabot na nito ang limitasyong iyong itinakda.\n\nAng muling pag-o-on dito ay maaaring humantong sa mga singiling magmumula sa iyong carrier."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"I-on ang data"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Naka-pause ang 2G-3G data"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Naka-pause ang 4G data"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Naka-pause ang cellular data"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Naka-pause ang data"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Dahil naabot ang iyong nakatakdang limitasyon sa data, na-pause ng device ang paggamit ng data para sa nalalabing bahagi ng cycle na ito.\n\nMaaaring makakuha ng mga singilin mula sa iyong carrier ang pagpapatuloy."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Ipagpatuloy"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Walang koneksyon sa Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Naghahanap ng GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Airplane mode"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Huwag istorbohin"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Priyoridad lang"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Walang mga paggambala"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> (na) Device)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Naka-off ang Bluetooth"</string> @@ -250,7 +257,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Naka-off ang Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Walang available na naka-save na mga network"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"I-cast ang screen"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"I-cast"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Nagka-cast"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Walang pangalang device"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Handang mag-cast"</string> @@ -262,8 +269,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Marami pang setting"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Tapos na"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Nakakonekta"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Nakakonekta sa pamamagitan ng Wi‑Fi assistant"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Na-save"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Kumokonekta..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Nagte-tether"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,9 +287,6 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Hindi masimulan <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"I-dismiss ang lahat ng application"</string> - <string name="recents_multistack_add_stack" msgid="5044995965068125420">"+"</string> - <string name="recents_multistack_remove_stack" msgid="3014058144068028841">"-"</string> - <string name="recents_multistack_resize_stack" msgid="5511174284568497822">"[]"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Split Vertical"</string> <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Split Custom"</string> @@ -362,6 +364,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Tingnan ang mga ito bago ka mag-unlock"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hindi"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"I-set up"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Tingnan lahat"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Itago lahat"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Naka-pin ang screen"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Pinapanatili nitong nasa view ito hanggang sa mag-unpin ka. Pindutin nang matagal ang Bumalik at Pangkalahatang-ideya nang sabay upang mag-unpin."</string> @@ -371,4 +375,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Itago ang <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Lalabas itong muli sa susunod na pagkakataon na i-on mo ito sa mga setting."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Itago"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"Gusto ng <xliff:g id="APP_NAME">%1$s</xliff:g> na maging volume dialog."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Payagan"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Tanggihan"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"Ang <xliff:g id="APP_NAME">%1$s</xliff:g> ang volume dialog"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Pindutin upang ibalik ang orihinal."</string> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 21f1472..df07342 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Uygulama bilgileri"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Son ekranlarınız burada görünür"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son uygulamaları kapat"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Genel Bakış\'ta 1 ekran"</item> - <item quantity="other" msgid="5523506463832158203">"Genel Bakış\'ta %d ekran"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">Genel Bakış\'ta %d ekran</item> + <item quantity="one">Genel Bakış\'ta 1 ekran</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildirim yok"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sürüyor"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirimler"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"kilidi aç"</string> <string name="phone_label" msgid="2320074140205331708">"telefonu aç"</string> <string name="camera_label" msgid="7261107956054836961">"kamerayı aç"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk zum düğmesi."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha büyük ekrana daha küçük yakınlaştır."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth bağlandı."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Uçak modu açık."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Uçak modu kapatıldı."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Uçak modu açıldı."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Rahatsız etmeyin ayarı açık, yalnızca öncelikliler."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Rahatsız etmeyin ayarı açık, kesme yok."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"\"Rahatsız etmeyin\" ayarı kapalı."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"\"Rahatsız etmeyin\" ayarı kapalı."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"\"Rahatsız etmeyin\" ayarı açık."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth kapalı."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth açık."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth bağlanıyor."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil hotspot açıldı."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekran yayını durduruldu."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ekran parlaklığı"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G veri kullanımı kapalı"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G veri kullanımı kapalı"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Hücresel veri kapalı"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Veri kullanımı kapalı"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Ayarladığınız sınıra erişildiğinden cihazınız veri kullanımını kapattı.\n\nVeri kullanımını tekrar açmanız operatörünüzün ek ödemeler almasına neden olabilir."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Veri kullanımını aç"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G veri kullanımı duraklatıldı"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G veri kullanımı duraklatıldı"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Hücresel veri kullanımı duraklatıldı"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Veri kullanımı duraklatıldı"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Ayarlanmış olan veri sınırınıza ulaşıldığından, bu dönemin kalan süresi için cihazda veri kullanımı duraklatıldı.\n\nVeri kullanımını devam ettirmek, operatörünüzün sizden ödeme almasına neden olabilir."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Devam ettir"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"İnternet bağlantısı yok"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Kablosuz bağlandı"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS aranıyor"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Hafif uyku"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Uçak modu"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Rahatsız etmeyin"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Yalnızca öncelikliler"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Kesme yok"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Cihaz)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Kapalı"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ağ yok"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Kablosuz Kapalı"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Kullanılabilir kaydedilmiş ağ yok"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Ekranı yayınla"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Yayınlanıyor"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Adsız cihaz"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Yayın için hazır"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Diğer ayarlar"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Bitti"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Bağlı"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Kablosuz bağlantı yardımcısıyla bağlandı"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Kayıtlı"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Bağlanılıyor..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Tethering"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Tüm uygulamaları kapat"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Dikey Ayırma"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Özel Ayırma"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Ödeme alındı"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Şarj oluyor"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"Tam şarj olmasına <xliff:g id="CHARGING_TIME">%s</xliff:g> kaldı"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Kilidi açmadan bildirimleri görün"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Hayır, teşekkürler"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Kur"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Tümünü göster"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Tümünü gizle"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran sabitlendi"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Böylece siz sabitlemesini kaldırana kadar görüntülenmeye devam eder. Sabitlemeyi kaldırmak için Geri ve Genel Bakış öğesine aynı anda dokunun ve basılı tutun."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> gizlensin mi?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Ayarlardan etkinleştirdiğiniz bir sonraki sefer tekrar görünür."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Gizle"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ses denetimi iletişim kutusu olmak istiyor."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"İzin ver"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Reddet"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ses denetimi iletişim kutusu olarak ayarlandı"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Orijinali geri yüklemek için dokunun."</string> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 0909eaa..879bbbc 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -25,10 +25,12 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Про додаток"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ваші останні екрани відображаються тут"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Відхилити останні програми"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"Показано 1 екран"</item> - <item quantity="other" msgid="5523506463832158203">"Показано екранів: %d"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">На панелі огляду %d екран</item> + <item quantity="few">На панелі огляду %d екрани</item> + <item quantity="many">На панелі огляду %d екранів</item> + <item quantity="other">На панелі огляду %d екрана</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Немає сповіщень"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Поточні"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Сповіщення"</string> @@ -88,7 +90,6 @@ <string name="unlock_label" msgid="8779712358041029439">"розблокувати"</string> <string name="phone_label" msgid="2320074140205331708">"відкрити телефон"</string> <string name="camera_label" msgid="7261107956054836961">"відкрити камеру"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка перемикання методу введення."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабування сумісності."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Збільшення екрана."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth під’єднано."</string> @@ -177,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Режим польоту ввімк."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Режим польоту вимкнено."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Режим польоту ввімкнено."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Режим \"Не турбувати\" ввімкнено, лише пріоритетні."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Режим \"Не турбувати\" ввімкнено, без сповіщень."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Режим \"Не турбувати\" вимкнено."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Режим \"Не турбувати\" вимкнено."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Режим \"Не турбувати\" ввімкнено."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth вимк."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth увімк."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Під’єднання Bluetooth."</string> @@ -201,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобільну точку доступу ввімкнено."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Трансляцію екрана зупинено."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Яскравість дисплея"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Дані 2G–3G вимкнено"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Дані 4G вимкнено"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Мобільні дані вимкнено"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Дані вимкнено"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Пристрій вимкнув передавання даних, оскільки перевищено встановлений вами ліміт.\n\nЯкщо передавання даних знову ввімкнути, оператор може стягувати додаткову плату."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Увімкнути дані"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Передавання даних 2G–3G призупинено"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передавання даних 4G призупинено"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Передавання мобільних даних призупинено"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Передавання даних призупинено"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Пристрій призупинив передавання даних до кінця цього циклу, оскільки ваш ліміт перевищено.\n\nЯкщо ви відновите передавання даних, оператор може стягувати додаткову плату."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Відновити"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Немає з’єднання"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi під’єднано"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Виконується пошук GPS-сигналу"</string> @@ -225,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Заставка"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим польоту"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Не турбувати"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Лише пріоритетні"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Без сповіщень"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (пристроїв: <xliff:g id="NUMBER">%d</xliff:g>)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth вимкнено"</string> @@ -250,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Немає мережі"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi вимкнено"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Немає збережених мереж"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Транслювати екран"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Трансляція"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Пристрій без назви"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Можна транслювати"</string> @@ -262,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Більше налаштувань"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Готово"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Під’єднано"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Під’єднано через Диспетчер Wi-Fi-з’єднання"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Збережено"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"З’єднання…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Режим модема"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Точка доступу"</string> @@ -282,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Не вдалося запустити <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Закрити всі додатки"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Розділити горизонтально"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Розділити вертикально"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Розділити (власний варіант)"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Заряджено"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Заряджається"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"До повного зарядження <xliff:g id="CHARGING_TIME">%s</xliff:g>"</string> @@ -368,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Переглядайте сповіщення, перш ніж розблокувати екран"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ні, дякую"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Налаштув."</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Показати всі"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Сховати всі"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Екран закріплено"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Закріпить екран, щоб ви могли постійно його бачити, доки не відкріпите. Щоб відкріпити, одночасно натисніть і втримуйте кнопки \"Назад\" і \"Огляд\"."</string> @@ -377,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Сховати <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"З’явиться знову, коли ви ввімкнете його в налаштуваннях."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Сховати"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"Призначити додаток <xliff:g id="APP_NAME">%1$s</xliff:g> регулятором гучності?"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дозволити"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Відхилити"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> призначено регулятором гучності"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Торкніться, щоб відновити оригінал."</string> </resources> diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml index 1b29477..25cdd2d 100644 --- a/packages/SystemUI/res/values-ur-rPK/strings.xml +++ b/packages/SystemUI/res/values-ur-rPK/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ایپ کی معلومات"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"آپ کی حالیہ اسکرینز یہاں ظاہر ہوتی ہیں"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"حالیہ ایپس برخاست کریں"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"مجموعی جائزہ میں 1 اسکرین"</item> - <item quantity="other" msgid="5523506463832158203">"مجموعی جائزہ میں %d اسکرینز"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">عمومی جائزہ میں %d اسکرینز</item> + <item quantity="one">عمومی جائزہ میں 1 اسکرین</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"کوئی اطلاعات نہیں ہیں"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"جاری"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"اطلاعات"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"غیر مقفل کریں"</string> <string name="phone_label" msgid="2320074140205331708">"فون کھولیں"</string> <string name="camera_label" msgid="7261107956054836961">"کیمرا کھولیں"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"اندراج کا طریقہ سوئچ کرنے کا بٹن۔"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"مطابقت پذیری زوم بٹن۔"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"چھوٹی سے بڑی اسکرین پر زوم کریں۔"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"بلوٹوتھ مربوط ہے۔"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"ہوائی جہاز وضع آن ہے۔"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"ہوائی جہاز وضع کو آف کر دیا گیا۔"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"ہوائی جہاز وضع کو آن کر دیا گیا۔"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"ڈسٹرب نہ کریں آن ہے، صرف ترجیحی۔"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"ڈسٹرب نہ کریں آن ہے، کوئی مداخلتیں نہیں۔"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"ڈسٹرب نہ کریں آف ہے۔"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"ڈسٹرب نہ کریں کو آف کر دیا گیا۔"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"ڈسٹرب نہ کریں کو آن کر دیا گیا۔"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"بلوٹوتھ آف ہے۔"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"بلوٹوتھ آن ہے۔"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"بلوٹوتھ منسلک ہو رہا ہے۔"</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"موبائل ہاٹ اسپاٹ کو آن کر دیا گیا۔"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"اسکرین کو کاسٹ کرنا بند کر دیا۔"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"ڈسپلے کی چمک"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G ڈیٹا آف ہے"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G ڈیٹا آف ہے"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"سیلولر ڈیٹا آف ہے"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"ڈیٹا آف ہے"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"آپ کے آلہ نے ڈیٹا کو آف کر دیا کیونکہ یہ آپ کی متعینہ حد کو پہنچ گیا۔\n\nاسے دوبارہ آن کرنے سے آپ کے کیریئر کی جانب سے چارجز عائد ہو سکتے ہیں۔"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"ڈیٹا آن کریں"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ڈیٹا موقوف کر دیا گیا"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ڈیٹا موقوف کر دیا گیا"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"سیلولر ڈیٹا موقوف کر دیا گیا"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ڈیٹا موقوف کر دیا گیا"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"چونکہ آپ کی سیٹ کردہ ڈیٹا کی حد تک پہنچ گیا، لہذا آلہ نے اس سائیکل کے بقیہ حصے کیلئے ڈیٹا کے استعمال کو موقوف کر دیا ہے۔\n\nدوبارہ شروع کرنے سے آپ کے کیریئر سے چارجز لگ سکتے ہیں۔"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"دوبارہ شروع کریں"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"کوئی انٹرنیٹ کنکشن نہیں"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi مربوط ہے"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS کی تلاش کر رہا ہے"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"ایتھرنیٹ"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ہوائی جہاز طرز"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"ڈسٹرب نہ کریں"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"صرف ترجیحی"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"کوئی مداخلتیں نہیں"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"بلوٹوتھ"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"بلوٹوتھ (<xliff:g id="NUMBER">%d</xliff:g> آلات)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"بلوٹوتھ آف ہے"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"کوئی نیٹ ورک نہیں ہے"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi آف ہے"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"کوئی محفوظ کردہ نیٹ ورکس دستیاب نہیں ہیں"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"کاسٹ اسکرین"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"کاسٹنگ"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"بغیر نام والا آلہ"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"کاسٹ کرنے کیلئے تیار"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"مزید ترتیبات"</string> <string name="quick_settings_done" msgid="3402999958839153376">"ہو گیا"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"مربوط"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi اسسٹنٹ کے ذریعے منسلک ہے"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"محفوظ کردہ"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"مربوط ہو رہا ہے…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"مربوط کرنا"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ہاٹ اسپاٹ"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"تلاش کریں"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"سبھی ایپلیکیشنز کو برخاست کریں"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"بلحاظ افقی الگ کریں"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"بلحاظ عمودی الگ کریں"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"بلحاظ حسب ضرورت الگ کریں"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"چارج ہوگئی"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"چارج ہو رہی ہے"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> مکمل ہونے تک"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"غیر مقفل کرنے سے پہلے انہیں دیکھیں"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"نہیں شکریہ"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"ترتیب دیں"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"سبھی دیکھیں"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"سبھی چھپائیں"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>۔ <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"اسکرین پن کردہ ہے"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"یہ اس کو اس وقت تک منظر میں رکھتا ہے جب تک آپ اس سے پن نہیں ہٹا دیتے۔ پن ہٹانے کیلئے واپس اور عمومی جائزہ کو ایک ساتھ ٹچ کریں اور پکڑ کر رکھیں۔"</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> کو چھپائیں؟"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"اگلی بار جب آپ اسے ترتیبات میں آن کریں گے تو یہ ظاہر ہوگی۔"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"چھپائیں"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> والیوم ڈائلاگ بننا چاہتی ہے۔"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"اجازت دیں"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"مسترد کریں"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> والیوم ڈائلاگ ہے"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"اصل کو بحال کرنے کیلئے ٹچ کریں۔"</string> </resources> diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml index 15c84cb..7d7df5f 100644 --- a/packages/SystemUI/res/values-uz-rUZ/strings.xml +++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ilova xaqida"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Yaqinda ish-gan ilovalar bu yerda ko‘rinadi"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"So‘nggi dasturlarni tozalash"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"“Umumiy nazar” oynasida 1 ta ekran bor"</item> - <item quantity="other" msgid="5523506463832158203">"“Umumiy nazar” oynasida %d ta ekran bor"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">Umumiy ma’lumot bo‘limida %d ta ekran bor</item> + <item quantity="one">Umumiy ma’lumot bo‘limida 1 ta ekran bor</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Eslatmalar - yo‘q"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Joriy"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Eslatmalar"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"qulfdan chiqarish"</string> <string name="phone_label" msgid="2320074140205331708">"telefonni ochish"</string> <string name="camera_label" msgid="7261107956054836961">"kamerani ochish"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Kiritish uslubi tugmasini almashtirish."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kattalashtirish tugmasi mosligi."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kattaroq ekran uchun kichikroqni kattalashtirish."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ulandi."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Parvoz rejimi yoqilgan."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Parvoz rejimi o‘chirildi."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Parvoz rejimi yoqildi."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"“Bezovta qilinmasin” funksiyasi yoqilgan, faqat muhim bildirishnomalar ko‘rsatiladi."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"“Bezovta qilinmasin” funksiyasi yoqilgan, bezovta qilinmaydi."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“Bezovta qilinmasin” funksiyasi o‘chirilgan."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"“Bezovta qilinmasin” funksiyasi o‘chirildi."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"“Bezovta qilinmasin” funksiyasi yoqildi."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth o‘chirilgan."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth yoqilgan."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth ulanmoqda."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil ulanish nuqtasi yoqildi."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekranni translatsiya qilish to‘xtadi."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Ekran yorqinligi"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G/3G internet o‘chirib qo‘yildi"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G internet o‘chirib qo‘yildi"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Mobil internet o‘chirib qo‘yildi"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Internet o‘chirib qo‘yildi"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Siz o‘rnatgan chegaraga yetib kelgani tufayli qurilmangizda internet o‘chirib qo‘yildi.\n\nUni qayta yoqishingiz mumkin, biroq buning uchun aloqa operatoringiz qo‘shimcha haq olishi mumkin."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Internetni yoqish"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G internet to‘xtatib qo‘yildi"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G internet to‘xtatib qo‘yildi"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Mobil internetdan foydalanish to‘xtatib qo‘yildi"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Internetdan foydalanish to‘xtatib qo‘yildi"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Siz o‘rnatgan mobil internet chekloviga yetgani bois joriy hisob-kitob davrining qolgan muddati uchun mobil internetdan foydalanish vaqtinchalik to‘xtatib qo‘yildi.\n\nAgar internetdan foydalanishni davom ettirsangiz, buning uchun uyali aloqa operatoringiz ortiqcha haq talab qilishi mumkin."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Davom etish"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Internetga ulanmagan"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ulandi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS qidirilmoqda"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Tush kurish"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Parvoz rejimi"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Bezovta qilinmasin"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Faqat muhimlari"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Tanaffuslarsiz"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>ta qurilma)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth o‘chirilgan"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tarmoq mavjud emas"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chirilgan"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Saqlangan tarmoqlar mavjud emas"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Ekranni translatsiya qilish"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Translatsiya qilinmoqda"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Nomsiz qurilma"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Tarqatish uchun tayyor"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Boshqa sozlamalar"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Tayyor"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Ulangan"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Wi‑Fi yordamchisi orqali ulangan"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Saqlandi"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Ulanmoqda…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Modem rejimi"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Ulanish nuqtasi"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"qidirish"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"“<xliff:g id="APP">%s</xliff:g>” ilovasini ishga tushirib bo‘lmadi."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Barcha ilovalarni olib tashlash"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Vertikal yo‘nalishda bo‘lish"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Boshqa usulda bo‘lish"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Batareya quvvati to‘ldi"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Quvvat olmoqda"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>da to‘ladi"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ularni qulfdan chiqarishdan oldin ko‘ring"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Yo‘q, kerak emas"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Sozlash"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Barchasini ko‘rsatish"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Barchasini yashirish"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Ekran qadaldi"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Ekran yechilmaguncha u qadalgan holatda qoladi. Uni yechish uchun “Orqaga” va “Umumiy nazar” tugmalarini bir vaqtda bosing va ushlab turing."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"<xliff:g id="TILE_LABEL">%1$s</xliff:g> berkitilsinmi?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Keyingi safar sozlamalardan yoqilgan paydo bo‘ladi."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Berkitish"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> ovoz balandligini boshqarmoqchi."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Ruxsat berish"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Rad etish"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> ovoz balandligini boshqaradi"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Aslini tiklash uchun bosing."</string> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 20a19a3..14b8e1e 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Thông tin về ứng dụng"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Màn hình gần đây của bạn sẽ xuất hiện tại đây"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loại bỏ các ứng dụng gần đây"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 màn hình trong Tổng quan"</item> - <item quantity="other" msgid="5523506463832158203">"%d màn hình trong Tổng quan"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">%d màn hình trong Tổng quan</item> + <item quantity="one">1 màn hình trong Tổng quan</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Không có thông báo nào"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Đang diễn ra"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Thông báo"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"mở khóa"</string> <string name="phone_label" msgid="2320074140205331708">"mở điện thoại"</string> <string name="camera_label" msgid="7261107956054836961">"mở máy ảnh"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Nút thu phóng khả năng tương thích."</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Thu phóng màn hình lớn hơn hoặc nhỏ hơn."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Đã kết nối bluetooth."</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Chế độ trên máy bay bật."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Đã tắt chế độ trên máy bay."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Đã bật chế độ trên máy bay."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Bật tính năng không làm phiền, chỉ ưu tiên."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Bật tính năng không làm phiền, không có gián đoạn."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Tắt tính năng không làm phiền."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Đã tắt tính năng không làm phiền."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Đã bật tính năng không làm phiền."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth tắt."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth bật."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Đang kết nối Bluetooth."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Đã bật điểm phát sóng di động."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Đã ngừng truyền màn hình."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Độ sáng màn hình"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Dữ liệu 2G-3G bị tắt"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Dữ liệu 4G bị tắt"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Dữ liệu di động bị tắt"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Dữ liệu bị tắt"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Thiết bị của bạn đã tắt dữ liệu do đã đạt đến giới hạn bạn đã đặt.\n\nViệc bật lại dữ liệu có thể dẫn tới các khoản phí từ nhà cung cấp dịch vụ của bạn."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Bật dữ liệu"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Đã tạm dừng dữ liệu 2G-3G"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Đã tạm dừng dữ liệu 4G"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Đã tạm dừng dữ liệu di động"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Đã tạm dừng dữ liệu"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Vì bạn đã đạt tới giới hạn dữ liệu thiết lập nên thiết bị đã tạm dừng sử dụng dữ liệu cho phần còn lại của chu kỳ này.\n\nTiếp tục có thể dẫn tới nhà cung cấp dịch vụ của bạn sẽ tính phí."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Tiếp tục"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ko có k.nối Internet"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Đang tìm kiếm GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Chế độ ngủ"</string> <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Chế độ trên máy bay"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Không làm phiền"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Chỉ ưu tiên"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Không có gián đoạn nào"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> thiết bị)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Đã tắt Bluetooth"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Không có mạng nào"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Tắt Wi-Fi"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Không có mạng nào được lưu"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Màn hình truyền"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Đang truyền"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Thiết bị không có tên"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Sẵn sàng truyền"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Cài đặt khác"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Xong"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Đã kết nối"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Được kết nối qua trình hỗ trợ Wi‑Fi"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Đã lưu"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Đang kết nối..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Đang dùng làm điểm truy cập Internet"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Điểm phát sóng"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"tìm kiếm"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Không thể khởi động <xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Bỏ qua tất cả các ứng dụng"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Phân tách ngang"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Phân tách dọc"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Tùy chỉnh phân tách"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Đã sạc"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Đang sạc"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> cho đến khi đầy"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Xem thông báo trước khi bạn mở khóa"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Ko, cảm ơn"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Thiết lập"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Xem tất cả"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Ẩn tất cả"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Màn hình được ghim"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Thao tác này sẽ duy trì hiển thị màn hình cho đến khi bạn bỏ ghim. Chạm và giữ nút Quay lại và Tổng quan cùng một lúc để bỏ ghim."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Ẩn <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Thông báo này sẽ xuất hiện lại vào lần tiếp theo bạn bật thông báo trong cài đặt."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Ẩn"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> muốn trở thành hộp thoại khối lượng."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Cho phép"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Từ chối"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> là hộp thoại khối lượng"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Chạm để khôi phục bản gốc."</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 0c5c57b..43dd4f1 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"应用信息"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近浏览过的屏幕会显示在此处"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"关闭最近运行的应用"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"概览中有 1 个屏幕"</item> - <item quantity="other" msgid="5523506463832158203">"概览中有 %d 个屏幕"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">概览中有 %d 个屏幕</item> + <item quantity="one">概览中有 1 个屏幕</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"无通知"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"正在进行的"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"解锁"</string> <string name="phone_label" msgid="2320074140205331708">"打开电话"</string> <string name="camera_label" msgid="7261107956054836961">"打开相机"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"输入法切换按钮。"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"兼容性缩放按钮。"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"将小屏幕的图片放大在较大屏幕上显示。"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"蓝牙已连接。"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飞行模式开启。"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飞行模式已关闭。"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飞行模式已开启。"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"勿扰模式已开启,仅限优先打扰。"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"勿扰模式已开启,禁止打扰。"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"勿扰模式关闭。"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已关闭勿扰模式。"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"已开启勿扰模式。"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"蓝牙关闭。"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"蓝牙开启。"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"蓝牙连接中。"</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"移动热点已开启。"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"屏幕投射已停止。"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"屏幕亮度"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G数据网络已关闭"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G数据网络已关闭"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"移动数据网络已关闭"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"数据网络已关闭"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"由于数据流量已达到您所设置的上限,因此您的设备已关闭数据网络。\n\n如果重新开启数据网络,那么您的运营商可能会向您收取相应费用。"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"开启数据网络"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 数据网络已暂停使用"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 数据网络已暂停使用"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"移动数据网络已暂停使用"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"数据网络已暂停使用"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"由于使用的数据流量已达到您所设置的上限,因此您的设备已暂停在此周期的剩余时间内使用数据流量。\n\n如果恢复数据流量使用,您的运营商可能会向您收取相应费用。"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢复"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"未连接互联网"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"已连接到WLAN网络"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜索GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"互动屏保"</string> <string name="ethernet_label" msgid="7967563676324087464">"有线网络"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飞行模式"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"勿扰"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"仅限优先打扰"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"禁止打扰"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"蓝牙"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"蓝牙(<xliff:g id="NUMBER">%d</xliff:g> 台设备)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"蓝牙:关闭"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"无网络"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN:关闭"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"没有可用的已保存网络"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"投射屏幕"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"正在投射"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名设备"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"已准备好投射"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"更多设置"</string> <string name="quick_settings_done" msgid="3402999958839153376">"完成"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"已连接"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"已连接(通过 WLAN 助手)"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"已保存"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"正在连接…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"网络共享"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"热点"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"关闭所有应用"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自定义分割"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"充电完成"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"正在充电"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"还需<xliff:g id="CHARGING_TIME">%s</xliff:g>充满"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"无需解锁即可查看通知"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"设置"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"查看全部"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隐藏"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>(<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>)"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"已固定屏幕"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"这将会固定显示此屏幕,直到您取消固定为止。触摸并同时按住“返回”和“概览”即可取消固定屏幕。"</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"要隐藏“<xliff:g id="TILE_LABEL">%1$s</xliff:g>”吗?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"下次在设置中将其开启后,此快捷设置条目将会重新显示。"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隐藏"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”请求用作音量控制对话框。"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允许"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒绝"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"“<xliff:g id="APP_NAME">%1$s</xliff:g>”已用作音量控制对话框"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"触摸即可恢复原始设置。"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 6e6cc1e..6636693 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近的螢幕顯示在這裡"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"概覽中有 1 個畫面"</item> - <item quantity="other" msgid="5523506463832158203">"概覽中有 %d 個畫面"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">概覽中有 %d 個畫面</item> + <item quantity="one">概覽中有 1 個畫面</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"無通知"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"持續進行"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"解鎖"</string> <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string> <string name="camera_label" msgid="7261107956054836961">"開啟相機"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"藍牙連線已建立。"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飛行模式已開啟。"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛行模式已關閉。"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛行模式已開啟。"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"開啟「請勿騷擾」,僅限優先。"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"開啟「請勿騷擾」,不允許干擾。"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"「請勿騷擾」關閉"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已關閉「請勿騷擾」。"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"已開啟「請勿騷擾」。"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"藍牙已關閉。"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"藍牙已開啟。"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"正在建立藍牙連線。"</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"流動熱點已開啟。"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"已停止投放螢幕。"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"顯示光暗度"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G 數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G 數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"流動數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"數據連線已關閉"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"數據流量已達到您所設定的上限,因此裝置關閉了數據連線。\n\n若重新開啟數據連線,流動網絡供應商可能會向您收費。"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"開啟數據連線"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"已暫停流動數據"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"已暫停使用數據"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"由於您已達到設定的數據用量上限,裝置已暫停使用數據,直到週期結束。\n\n如恢復使用數據,流動網絡供應商可能會向您收取費用。"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢復"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有互聯網連線"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜尋 GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string> <string name="ethernet_label" msgid="7967563676324087464">"以太網"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飛行模式"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"請勿騷擾"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"僅限優先"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"不允許干擾"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"藍牙"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 部裝置)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"藍牙關閉"</string> @@ -252,7 +259,7 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網絡"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 關閉"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"找不到已儲存的網絡"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"放送螢幕"</string> + <string name="quick_settings_cast_title" msgid="7709016546426454729">"投放"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"正在放送"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名的裝置"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"放送準備完成"</string> @@ -264,8 +271,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"更多設定"</string> <string name="quick_settings_done" msgid="3402999958839153376">"完成"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"已連線"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"已透過 Wi-Fi 小幫手連線"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"已儲存"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"正在連線…"</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"網絡共享"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"熱點"</string> @@ -284,18 +289,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"關閉所有應用程式"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"已完成充電"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>後完成充電"</string> @@ -370,6 +366,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了,謝謝"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"顯示全部"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隱藏"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"在您取消固定前,它會保持在檢視狀態。輕觸並同時按住 [返回] 和 [概覽],即可取消固定。"</string> @@ -379,4 +377,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"隱藏 <xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"下一次您在設定開啟它時,它將再次出現。"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隱藏"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」想成為音量對話框。"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允許"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒絕"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」為音量對話框"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"輕觸即可復原。"</string> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 5329977..5505db4 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"您最近的螢幕會顯示在這裡"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"總覽中有 1 個畫面"</item> - <item quantity="other" msgid="5523506463832158203">"總覽中有 %d 個畫面"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="other">總覽中有 %d 個畫面</item> + <item quantity="one">總覽中有 1 個畫面</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"沒有通知"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"進行中"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"解除鎖定"</string> <string name="phone_label" msgid="2320074140205331708">"開啟電話"</string> <string name="camera_label" msgid="7261107956054836961">"開啟攝影機"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"藍牙連線已建立。"</string> @@ -179,6 +178,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"飛航模式已開啟。"</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"飛航模式已關閉。"</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"飛航模式已開啟。"</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"「零打擾」設定為開啟,只會顯示優先通知。"</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"「零打擾」設定為開啟,不接受任何干擾。"</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"「零打擾」設定為關閉。"</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"已停用「零打擾」設定。"</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"已啟用「零打擾」設定。"</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"藍牙已關閉。"</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"藍牙已開啟。"</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"正在建立藍牙連線。"</string> @@ -203,12 +207,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"可攜式無線基地台已開啟。"</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"已停止投放螢幕。"</string> <string name="accessibility_brightness" msgid="8003681285547803095">"螢幕亮度"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"2G-3G 數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"4G 數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"行動數據連線已關閉"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"數據連線已關閉"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"數據流量已達您所設定的上限,因此裝置關閉了數據連線。\n\n如果重新開啟數據連線,行動通訊業者可能會向您收費。"</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"開啟數據連線"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據連線"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據連線"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"已暫停行動數據連線"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"已暫停數據連線"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"由於數據用量已達設定上限,裝置在這個週期的剩餘時間將暫停使用數據連線。\n\n如果恢復使用,行動通訊業者可能會向您收取額外的連線費用。"</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"恢復連線"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有網際網路連線"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜尋 GPS"</string> @@ -227,6 +231,9 @@ <string name="start_dreams" msgid="7219575858348719790">"休眠模式"</string> <string name="ethernet_label" msgid="7967563676324087464">"乙太網路"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飛航模式"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"零打擾"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"僅顯示優先通知"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"無干擾"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"藍牙"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 個裝置)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"關閉藍牙"</string> @@ -252,7 +259,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網路"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 已關閉"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"找不到已儲存的網路"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"投放螢幕"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"投放"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"未命名的裝置"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"可以開始投放了"</string> @@ -264,8 +272,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"更多設定"</string> <string name="quick_settings_done" msgid="3402999958839153376">"完成"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"已連線"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"已透過 Wi‑Fi 小幫手連線"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"已儲存"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"連線中..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"網路共用"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"無線基地台"</string> @@ -284,18 +290,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"關閉所有應用程式"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"垂直分割"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"自訂分割"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"已充飽"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"充電中"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g>後充飽"</string> @@ -370,6 +367,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"解鎖前顯示"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"不用了,謝謝"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"設定"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"全部顯示"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"全部隱藏"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>。<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"螢幕已固定"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"這會讓目前的螢幕畫面保持顯示狀態,直到取消固定為止。同時按住返回按鈕和總覽按鈕即可取消固定。"</string> @@ -379,4 +378,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"隱藏<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"只要在設定頁面中重新啟用,就能再次看到快捷設定選項。"</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"隱藏"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」要求成為預設的音量控制對話方塊。"</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"允許"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"拒絕"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」現在是預設的音量控制對話方塊。"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"輕觸這裡即可恢復原始設定。"</string> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 2a7adb5..a020f21 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -25,10 +25,10 @@ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ulwazi lwensiza"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Izikrini zakho zakamuva zivela lapha"</string> <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Susa izinhlelo zokusebenza zakamumva"</string> - <plurals name="status_bar_accessibility_recent_apps"> - <item quantity="one" msgid="3969335317929254918">"1 isikrini esiku-Buka konke"</item> - <item quantity="other" msgid="5523506463832158203">"%d wezikrini eziku-Buka konke"</item> - </plurals> + <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> + <item quantity="one">%d izikrini eziku-Buka konke</item> + <item quantity="other">%d izikrini eziku-Buka konke</item> + </plurals> <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Azikho izaziso"</string> <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Okuqhubekayo"</string> <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Izaziso"</string> @@ -88,7 +88,6 @@ <string name="unlock_label" msgid="8779712358041029439">"vula"</string> <string name="phone_label" msgid="2320074140205331708">"vula ifoni"</string> <string name="camera_label" msgid="7261107956054836961">"vula ikhamera"</string> - <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vula indlela yokungena yenkinobho"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Inkinobho evumelekile yokusondeza"</string> <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Sondeza kancane esikrinini esikhudlwana"</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth ixhunyiwe"</string> @@ -177,6 +176,11 @@ <string name="accessibility_quick_settings_airplane_on" msgid="6406141469157599296">"Imodi yendiza ivuliwe."</string> <string name="accessibility_quick_settings_airplane_changed_off" msgid="66846307818850664">"Imodi yendiza ivaliwe."</string> <string name="accessibility_quick_settings_airplane_changed_on" msgid="8983005603505087728">"Imodi yendiza ivuliwe."</string> + <string name="accessibility_quick_settings_dnd_priority_on" msgid="1448402297221249355">"Ukungaphazamisi kuvuliwe, okubalulekile kuphela."</string> + <string name="accessibility_quick_settings_dnd_none_on" msgid="5910777408232088752">"Ungaphazamisi, akukho ukuphazamiseka."</string> + <string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"Ukungaphazamisi kuvaliwe."</string> + <string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Ukungaphazamisi kuvaliwe."</string> + <string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Ukungaphazamisi kuvuliwe."</string> <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"I-Bluetooth ivaliwe."</string> <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"I-Bluetooth ivuliwe."</string> <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"I-Bluetooth iyaxhuma."</string> @@ -201,12 +205,12 @@ <string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"I-hotspot ivuliwe."</string> <string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ukusakaza kwesikrini kumisiwe."</string> <string name="accessibility_brightness" msgid="8003681285547803095">"Bonisa ukukhanya"</string> - <string name="data_usage_disabled_dialog_3g_title" msgid="2626865386971800302">"Idatha ye-2G-3G ivaliwe"</string> - <string name="data_usage_disabled_dialog_4g_title" msgid="4629078114195977196">"Idatha ye-4G ivaliwe"</string> - <string name="data_usage_disabled_dialog_mobile_title" msgid="5793456071535876132">"Idatha yeselula ivaliwe"</string> - <string name="data_usage_disabled_dialog_title" msgid="8723412000355709802">"Idatha ivaliwe"</string> - <string name="data_usage_disabled_dialog" msgid="6468718338038876604">"Idivayisi yakho ivale idatha ngoba ifinyelele umkhawulo owubekile.\n\nUkuyivula futhi kungaholela ezindlekweni kusuka kunkampani yakho yenethiwekhi."</string> - <string name="data_usage_disabled_dialog_enable" msgid="5538068036107372895">"Vula idatha"</string> + <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G idatha imisiwe"</string> + <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G idatha imisiwe"</string> + <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"Idatha yeselula imisiwe"</string> + <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"Idatha imisiwe"</string> + <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"Ngoba umkhawulo wakho wedatha osethiwe ufinyelelwe, idivayisi imise kancane ukusetshenziswa kwedatha ngesikhumbuzi salo mjikelezo.\n\nUkuqhuba futhi kungaholela kuzindleko kusuka kwinkampani yakho yenethiwekhi."</string> + <string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"Qalisa kabusha"</string> <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Alukho uxhumano lwe-Inthanethi"</string> <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"I-Wi-Fi ixhunyiwe"</string> <string name="gps_notification_searching_text" msgid="8574247005642736060">"Isesha i-GPS"</string> @@ -225,6 +229,9 @@ <string name="start_dreams" msgid="7219575858348719790">"Ukuphupha emini"</string> <string name="ethernet_label" msgid="7967563676324087464">"I-Ethernet"</string> <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Isimo sendiza"</string> + <string name="quick_settings_dnd_label" msgid="8735855737575028208">"Ungaphazamisi"</string> + <string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Okubalulekile kuphela"</string> + <string name="quick_settings_dnd_none_label" msgid="7309935569360609114">"Azikho iziphazamiso"</string> <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"I-Bluetooth"</string> <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"I-Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> amadivayisi)"</string> <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"I-Bluetooth ivaliwe"</string> @@ -250,7 +257,8 @@ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string> <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="2831702993995222755">"Awekho amanethiwekhi alondoloziwe atholakalayo"</string> - <string name="quick_settings_cast_title" msgid="1893629685050355115">"Isikrini sabadlali"</string> + <!-- no translation found for quick_settings_cast_title (7709016546426454729) --> + <skip /> <string name="quick_settings_casting" msgid="6601710681033353316">"Ukusakaza"</string> <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"Idivayisi engenalo igama"</string> <string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"Ilungele ukusakaza"</string> @@ -262,8 +270,6 @@ <string name="quick_settings_more_settings" msgid="326112621462813682">"Izilungiselelo eziningi"</string> <string name="quick_settings_done" msgid="3402999958839153376">"Kwenziwe"</string> <string name="quick_settings_connected" msgid="1722253542984847487">"Ixhunyiwe"</string> - <string name="quick_settings_connected_via_wfa" msgid="1587051627194895715">"Ixhunywe ngomsizi we-Wi-FI"</string> - <string name="quick_settings_saved" msgid="4758747300943481411">"Ilondoloziwe"</string> <string name="quick_settings_connecting" msgid="47623027419264404">"Iyaxhuma..."</string> <string name="quick_settings_tethering_label" msgid="7153452060448575549">"Ukusebenzisa njengemodemu"</string> <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"I-Hotspot"</string> @@ -282,18 +288,9 @@ <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ayikwazanga ukuqala i-<xliff:g id="APP">%s</xliff:g>."</string> <string name="recents_dismiss_all_message" msgid="8495275386693095768">"Cashisa zonke izinhlelo zokusebenza"</string> - <!-- no translation found for recents_multistack_add_stack (5044995965068125420) --> - <skip /> - <!-- no translation found for recents_multistack_remove_stack (3014058144068028841) --> - <skip /> - <!-- no translation found for recents_multistack_resize_stack (5511174284568497822) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_horizontal (8848514474543427332) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_vertical (9075292233696180813) --> - <skip /> - <!-- no translation found for recents_multistack_add_stack_dialog_split_custom (4177837597513701943) --> - <skip /> + <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Hlukanisa okuvundlile"</string> + <string name="recents_multistack_add_stack_dialog_split_vertical" msgid="9075292233696180813">"Hlukanisa okumile"</string> + <string name="recents_multistack_add_stack_dialog_split_custom" msgid="4177837597513701943">"Hlukanisa kwezifiso"</string> <string name="expanded_header_battery_charged" msgid="5945855970267657951">"Kushajiwe"</string> <string name="expanded_header_battery_charging" msgid="205623198487189724">"Iyashaja"</string> <string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ize igcwale"</string> @@ -368,6 +365,8 @@ <string name="hidden_notifications_text" msgid="2326409389088668981">"Ibone ngaphambi kokuthi uyivule"</string> <string name="hidden_notifications_cancel" msgid="3690709735122344913">"Cha ngiyabonga"</string> <string name="hidden_notifications_setup" msgid="41079514801976810">"Lungisa"</string> + <string name="notification_expand_button_text" msgid="1037425494153780718">"Buka konke"</string> + <string name="notification_collapse_button_text" msgid="6883253262134328057">"Fihla wonke"</string> <string name="zen_mode_and_condition" msgid="4462471036429759903">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> <string name="screen_pinning_title" msgid="3273740381976175811">"Isikrini siphiniwe"</string> <string name="screen_pinning_description" msgid="1346522416878235405">"Lokhu kukugcina kubukeka uze ususe ukuphina. Thinta futhi ubambe u-Emuva no-Ukubuka konke ngesikhathi esisodwa ukuze ususe ukuphina."</string> @@ -377,4 +376,9 @@ <string name="quick_settings_reset_confirmation_title" msgid="748792586749897883">"Fihla i-<xliff:g id="TILE_LABEL">%1$s</xliff:g>?"</string> <string name="quick_settings_reset_confirmation_message" msgid="2235970126803317374">"Izovela ngesikhathi esilandelayo uma uvule lesi silungiselelo."</string> <string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Fihla"</string> + <string name="volumeui_prompt_message" msgid="918680947433389110">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ifuna ukuba yingxoxo yevolumu."</string> + <string name="volumeui_prompt_allow" msgid="7954396902482228786">"Vumela"</string> + <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Phika"</string> + <string name="volumeui_notification_title" msgid="4906770126345910955">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> yingxoxo yevolumu"</string> + <string name="volumeui_notification_text" msgid="1826889705095768656">"Thinta ukuze ubuyisele kokwangempela."</string> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 4c0cea8..d4aeab6 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -42,7 +42,8 @@ <color name="qs_tile_divider">#29ffffff</color><!-- 16% white --> <color name="qs_tile_text">#B3FFFFFF</color><!-- 70% white --> <color name="qs_subhead">#99FFFFFF</color><!-- 60% white --> - <color name="qs_detail_empty">#24B0BEC5</color><!-- 14% blue grey 200--> + <color name="qs_detail_empty">#24B0BEC5</color><!-- 14% blue grey 200 --> + <color name="qs_detail_button">#FFB0BEC5</color><!-- 100% blue grey 200 --> <color name="qs_detail_transition">#66FFFFFF</color> <color name="qs_detail_progress_track">#99009688</color><!-- 60% deep teal 500 --> <color name="data_usage_secondary">#99FFFFFF</color><!-- 60% white --> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 2659009..2e9e9f7 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -118,7 +118,7 @@ <!-- The default tiles to display in QuickSettings --> <string name="quick_settings_tiles_default" translatable="false"> - wifi,bt,inversion,cell,airplane,rotation,flashlight,location,cast,hotspot + wifi,bt,inversion,dnd,cell,airplane,rotation,flashlight,location,cast,hotspot </string> <!-- The tiles to display in QuickSettings --> @@ -146,6 +146,9 @@ before the app can interrupt again. --> <integer name="heads_up_default_snooze_length_ms">60000</integer> + <!-- Minimum display time for a heads up notification, in milliseconds. --> + <integer name="heads_up_notification_minimum_time">3000</integer> + <!-- milliseconds before the heads up notification accepts touches. --> <integer name="heads_up_sensitivity_delay">700</integer> @@ -241,10 +244,10 @@ <bool name="doze_pulse_on_notifications">true</bool> <!-- Doze: when to pulse after a buzzworthy notification arrives --> - <string name="doze_pulse_schedule" translatable="false">1s,10s,30s,60s,120s</string> + <string name="doze_pulse_schedule" translatable="false">1s,10s,30s,60s</string> <!-- Doze: maximum number of times the notification pulse schedule can be reset --> - <integer name="doze_pulse_schedule_resets">3</integer> + <integer name="doze_pulse_schedule_resets">2</integer> <!-- Doze: duration to avoid false pickup gestures triggered by notification vibrations --> <integer name="doze_pickup_vibration_threshold">2000</integer> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 95a4009..c24cd64 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -376,6 +376,18 @@ <!-- radius of the corners of the material rounded rect background but negative--> <dimen name="notification_material_rounded_rect_radius_negative">-2dp</dimen> + <!-- height of the bottom decor below the notification if present (eg. an expand action) --> + <dimen name="notification_bottom_decor_height">48dp</dimen> + + <!-- The padding between notification children --> + <dimen name="notification_children_padding">2dp</dimen> + + <!-- The height of the divider between the notfication children --> + <dimen name="notification_children_divider_height">1dp</dimen> + + <!-- The vertical distance from which the notification appear when children are expanded --> + <dimen name="notification_appear_distance">140dp</dimen> + <!-- end margin for multi user switch in expanded quick settings --> <dimen name="multi_user_switch_expanded_margin">8dp</dimen> diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index aa53a3e..3fc75d2 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -40,6 +40,7 @@ <item type="id" name="notification_power"/> <item type="id" name="notification_screenshot"/> <item type="id" name="notification_hidden"/> + <item type="id" name="notification_volumeui"/> <!-- Whether the icon is from a notification for which targetSdk < L --> <item type="id" name="icon_is_pre_L"/> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 6afca8a..b696787 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -216,9 +216,11 @@ <string name="phone_label">open phone</string> <!-- Click action label for accessibility for the phone button. [CHAR LIMIT=NONE] --> <string name="camera_label">open camera</string> + <!-- Caption for "Recents resize" developer debug feature. [CHAR LIMIT=NONE] --> + <string name="recents_caption_resize">Select new task layout</string> + <!-- Button name for "Cancel". [CHAR LIMIT=NONE] --> + <string name="cancel">Cancel</string> - <!-- Content description of the switch input method button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> - <string name="accessibility_ime_switch_button">Switch input method button.</string> <!-- Content description of the compatibility zoom button for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_compatibility_zoom_button">Compatibility zoom button.</string> @@ -432,6 +434,16 @@ <string name="accessibility_quick_settings_airplane_changed_off">Airplane mode turned off.</string> <!-- Announcement made when the airplane mode changes to on (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_quick_settings_airplane_changed_on">Airplane mode turned on.</string> + <!-- Content description of the do not disturb tile in quick settings when on in priority (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_quick_settings_dnd_priority_on">Do not disturb on, priority only.</string> + <!-- Content description of the do not disturb tile in quick settings when on in none (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_quick_settings_dnd_none_on">Do not disturb on, no interruptions.</string> + <!-- Content description of the do not disturb tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_quick_settings_dnd_off">Do not disturb off.</string> + <!-- Announcement made when do not disturb changes to off (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_quick_settings_dnd_changed_off">Do not disturb turned off.</string> + <!-- Announcement made when do not disturb changes to on (not shown on the screen). [CHAR LIMIT=NONE] --> + <string name="accessibility_quick_settings_dnd_changed_on">Do not disturb turned on.</string> <!-- Content description of the bluetooth tile in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_quick_settings_bluetooth_off">Bluetooth off.</string> <!-- Content description of the bluetooth tile in quick settings when on (not shown on the screen). [CHAR LIMIT=NONE] --> @@ -483,17 +495,17 @@ <string name="accessibility_brightness">Display brightness</string> <!-- Title of dialog shown when 2G-3G data usage has exceeded limit and has been disabled. [CHAR LIMIT=48] --> - <string name="data_usage_disabled_dialog_3g_title">2G-3G data is off</string> + <string name="data_usage_disabled_dialog_3g_title">2G-3G data is paused</string> <!-- Title of dialog shown when 4G data usage has exceeded limit and has been disabled. [CHAR LIMIT=48] --> - <string name="data_usage_disabled_dialog_4g_title">4G data is off</string> + <string name="data_usage_disabled_dialog_4g_title">4G data is paused</string> <!-- Title of dialog shown when mobile data usage has exceeded limit and has been disabled. [CHAR LIMIT=48] --> - <string name="data_usage_disabled_dialog_mobile_title">Cellular data is off</string> + <string name="data_usage_disabled_dialog_mobile_title">Cellular data is paused</string> <!-- Title of dialog shown when data usage has exceeded limit and has been disabled. [CHAR LIMIT=48] --> - <string name="data_usage_disabled_dialog_title">Data is off</string> + <string name="data_usage_disabled_dialog_title">Data is paused</string> <!-- Body of dialog shown when data usage has exceeded limit and has been disabled. [CHAR LIMIT=NONE] --> - <string name="data_usage_disabled_dialog">Your device turned off data because it reached the limit you set.\n\nTurning it back on may lead to charges from your carrier.</string> + <string name="data_usage_disabled_dialog">Because your set data limit was reached, the device has paused data usage for the remainder of this cycle.\n\nResuming may lead to charges from your carrier.</string> <!-- Dialog button indicating that data connection should be re-enabled. [CHAR LIMIT=28] --> - <string name="data_usage_disabled_dialog_enable">Turn on data</string> + <string name="data_usage_disabled_dialog_enable">Resume</string> <!-- Text to display underneath the graphical signal strength meter when no connection is available. [CHAR LIMIT=20] --> @@ -556,6 +568,12 @@ <!-- QuickSettings: Airplane mode [CHAR LIMIT=NONE] --> <string name="quick_settings_airplane_mode_label">Airplane mode</string> + <!-- QuickSettings: Do not disturb [CHAR LIMIT=NONE] --> + <string name="quick_settings_dnd_label">Do not disturb</string> + <!-- QuickSettings: Do not disturb - Priority only [CHAR LIMIT=NONE] --> + <string name="quick_settings_dnd_priority_label">Priority only</string> + <!-- QuickSettings: Do not disturb - No interruptions [CHAR LIMIT=NONE] --> + <string name="quick_settings_dnd_none_label">No interruptions</string> <!-- QuickSettings: Bluetooth [CHAR LIMIT=NONE] --> <string name="quick_settings_bluetooth_label">Bluetooth</string> <!-- QuickSettings: Bluetooth (Multiple) [CHAR LIMIT=NONE] --> @@ -607,7 +625,7 @@ <!-- QuickSettings: Wifi detail panel, text when there are no items [CHAR LIMIT=NONE] --> <string name="quick_settings_wifi_detail_empty_text">No saved networks available</string> <!-- QuickSettings: Cast title [CHAR LIMIT=NONE] --> - <string name="quick_settings_cast_title">Cast screen</string> + <string name="quick_settings_cast_title">Cast</string> <!-- QuickSettings: Cast detail panel, status text when casting [CHAR LIMIT=NONE] --> <string name="quick_settings_casting">Casting</string> <!-- QuickSettings: Cast detail panel, default device name [CHAR LIMIT=NONE] --> @@ -668,12 +686,6 @@ <!-- Recents: Dismiss all button. [CHAR LIMIT=NONE] --> <string name="recents_dismiss_all_message">Dismiss all applications</string> - <!-- Recents: MultiStack add stack button. [CHAR LIMIT=NONE] --> - <string name="recents_multistack_add_stack">+</string> - <!-- Recents: MultiStack remove stack button. [CHAR LIMIT=NONE] --> - <string name="recents_multistack_remove_stack">-</string> - <!-- Recents: MultiStack resize stack button. [CHAR LIMIT=NONE] --> - <string name="recents_multistack_resize_stack">[]</string> <!-- Recents: MultiStack add stack split horizontal radio button. [CHAR LIMIT=NONE] --> <string name="recents_multistack_add_stack_dialog_split_horizontal">Split Horizontal</string> <!-- Recents: MultiStack add stack split vertical radio button. [CHAR LIMIT=NONE] --> @@ -910,6 +922,12 @@ <!-- continue action for notification educating the user about enabling notifications on the lockscreen. [CHAR LIMIT=20] --> <string name="hidden_notifications_setup">Set up</string> + <!-- Text for the button to expand the notifications to show notification children [CHAR LIMIT=20] --> + <string name="notification_expand_button_text">See all</string> + + <!-- Text for the button to expand the notifications to hide notification children [CHAR LIMIT=20] --> + <string name="notification_collapse_button_text">Hide all</string> + <!-- Accessibility string for current zen mode and selected exit condition. A template that simply concatenates existing mode string and the current condition description. [CHAR LIMIT=20] --> <string name="zen_mode_and_condition"><xliff:g id="zen_mode" example="Priority interruptions only">%1$s</xliff:g>. <xliff:g id="exit_condition" example="For one hour">%2$s</xliff:g></string> @@ -932,4 +950,19 @@ <!-- Hide quick settings tile confirmation button --> <string name="quick_settings_reset_confirmation_button">Hide</string> + + <!-- VolumeUI activation dialog: warning message --> + <string name="volumeui_prompt_message"><xliff:g id="app_name" example="Volume Prototype 1">%1$s</xliff:g> wants to be the volume dialog.</string> + + <!-- VolumeUI activation dialog: allow button label --> + <string name="volumeui_prompt_allow">Allow</string> + + <!-- VolumeUI activation dialog: deny button label --> + <string name="volumeui_prompt_deny">Deny</string> + + <!-- VolumeUI restoration notification: title --> + <string name="volumeui_notification_title"><xliff:g id="app_name" example="Volume Prototype 1">%1$s</xliff:g> is the volume dialog</string> + + <!-- VolumeUI restoration notification: text --> + <string name="volumeui_notification_text">Touch to restore the original.</string> </resources> diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index bf19b8d..07fcb82 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -145,6 +145,7 @@ <style name="TextAppearance.QS.DetailButton"> <item name="android:textSize">@dimen/qs_detail_button_text_size</item> + <item name="android:textColor">@color/qs_detail_button</item> <item name="android:textAllCaps">true</item> <item name="android:fontFamily">sans-serif-medium</item> <item name="android:gravity">center</item> @@ -210,6 +211,11 @@ <item name="android:colorControlActivated">@color/system_accent_color</item> </style> + <style name="systemui_theme_light" parent="@android:style/Theme.DeviceDefault.Light"> + <item name="android:colorPrimary">@color/system_primary_color</item> + <item name="android:colorControlActivated">@color/system_accent_color</item> + </style> + <style name="Theme.SystemUI.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog"> <item name="android:colorPrimary">@color/system_primary_color</item> <item name="android:colorControlActivated">@color/system_accent_color</item> diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index f2f087f..2e95498 100755 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -24,7 +24,6 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; @@ -194,7 +193,7 @@ public class BatteryMeterView extends View implements DemoMode, TypedArray atts = context.obtainStyledAttributes(attrs, R.styleable.BatteryMeterView, defStyle, 0); final int frameColor = atts.getColor(R.styleable.BatteryMeterView_frameColor, - res.getColor(R.color.batterymeter_frame_color)); + context.getColor(R.color.batterymeter_frame_color)); TypedArray levels = res.obtainTypedArray(R.array.batterymeter_color_levels); TypedArray colors = res.obtainTypedArray(R.array.batterymeter_color_values); @@ -241,10 +240,10 @@ public class BatteryMeterView extends View implements DemoMode, mWarningTextPaint.setTypeface(font); mWarningTextPaint.setTextAlign(Paint.Align.CENTER); - mChargeColor = getResources().getColor(R.color.batterymeter_charge_color); + mChargeColor = context.getColor(R.color.batterymeter_charge_color); mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - mBoltPaint.setColor(res.getColor(R.color.batterymeter_bolt_color)); + mBoltPaint.setColor(context.getColor(R.color.batterymeter_bolt_color)); mBoltPoints = loadBoltPoints(res); } diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java index d42ac61..bc7f745 100644 --- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java @@ -22,7 +22,6 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.media.AudioAttributes; -import android.media.AudioManager; import android.os.Vibrator; import android.util.Log; import android.view.Gravity; @@ -147,14 +146,14 @@ public class ExpandHelper implements Gefingerpoken { } public void setHeight(float h) { if (DEBUG_SCALE) Log.v(TAG, "SetHeight: setting to " + h); - mView.setActualHeight((int) h); + mView.setContentHeight((int) h); mCurrentHeight = h; } public float getHeight() { - return mView.getActualHeight(); + return mView.getContentHeight(); } public int getNaturalHeight(int maximum) { - return Math.min(maximum, mView.getMaxHeight()); + return Math.min(maximum, mView.getMaxContentHeight()); } } @@ -387,7 +386,8 @@ public class ExpandHelper implements Gefingerpoken { } private boolean isFullyExpanded(ExpandableView underFocus) { - return underFocus.getIntrinsicHeight() == underFocus.getMaxHeight(); + return underFocus.areChildrenExpanded() || underFocus.getIntrinsicHeight() + - underFocus.getBottomDecorHeight() == underFocus.getMaxContentHeight(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 7c725b3..6888d0e 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -21,10 +21,8 @@ import static javax.microedition.khronos.egl.EGL10.*; import android.app.ActivityManager; import android.app.WallpaperManager; -import android.content.BroadcastReceiver; import android.content.ComponentCallbacks2; import android.content.Context; -import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java index d8fb6da..f33e2b8 100644 --- a/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java +++ b/packages/SystemUI/src/com/android/systemui/SearchPanelCircleView.java @@ -132,8 +132,8 @@ public class SearchPanelCircleView extends FrameLayout { mDisappearInterpolator = AnimationUtils.loadInterpolator(mContext, android.R.interpolator.fast_out_linear_in); mBackgroundPaint.setAntiAlias(true); - mBackgroundPaint.setColor(getResources().getColor(R.color.search_panel_circle_color)); - mRipplePaint.setColor(getResources().getColor(R.color.search_panel_ripple_color)); + mBackgroundPaint.setColor(context.getColor(R.color.search_panel_circle_color)); + mRipplePaint.setColor(context.getColor(R.color.search_panel_ripple_color)); mRipplePaint.setAntiAlias(true); } diff --git a/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java b/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java index 2ff8f8a..eddf2b1 100644 --- a/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java @@ -26,8 +26,6 @@ import android.view.View; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; -import com.android.systemui.statusbar.phone.NotificationPanelView; - /** * Helper to invert the colors of views and fade between the states. */ diff --git a/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java index b9f8106..50221d3 100644 --- a/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java +++ b/packages/SystemUI/src/com/android/systemui/egg/LLandActivity.java @@ -18,7 +18,6 @@ package com.android.systemui.egg; import android.app.Activity; import android.os.Bundle; -import android.util.Log; import android.widget.TextView; import com.android.systemui.R; diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index f3d214f..49bdfda 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -172,7 +172,7 @@ public class KeyguardViewMediator extends SystemUI { private static final String KEYGUARD_ANALYTICS_SETTING = "keyguard_analytics"; /** The stream type that the lock sounds are tied to. */ - private int mMasterStreamType; + private int mUiSoundsStreamType; private AlarmManager mAlarmManager; private AudioManager mAudioManager; @@ -439,6 +439,8 @@ public class KeyguardViewMediator extends SystemUI { public void onFingerprintRecognized(int userId) { if (mStatusBarKeyguardViewManager.isBouncerShowing()) { mViewMediatorCallback.keyguardDone(true); + } else { + mStatusBarKeyguardViewManager.animateCollapsePanels(); } }; @@ -634,7 +636,7 @@ public class KeyguardViewMediator extends SystemUI { doKeyguardLocked(null); } } - KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurndOff(why); + KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOff(why); } private void doKeyguardLaterLocked() { @@ -1242,10 +1244,10 @@ public class KeyguardViewMediator extends SystemUI { if (mAudioManager == null) { mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); if (mAudioManager == null) return; - mMasterStreamType = mAudioManager.getMasterStreamType(); + mUiSoundsStreamType = mAudioManager.getUiSoundsStreamType(); } // If the stream is muted, don't play the sound - if (mAudioManager.isStreamMute(mMasterStreamType)) return; + if (mAudioManager.isStreamMute(mUiSoundsStreamType)) return; mLockSoundStreamId = mLockSounds.play(soundId, mLockSoundVolume, mLockSoundVolume, 1/*priortiy*/, 0/*loop*/, 1.0f/*rate*/); @@ -1300,6 +1302,8 @@ public class KeyguardViewMediator extends SystemUI { @Override public void run() { try { + mStatusBarKeyguardViewManager.keyguardGoingAway(); + // Don't actually hide the Keyguard at the moment, wait for window // manager until it tells us it's safe to do so with // startKeyguardExitAnimation. diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java index 25bab17..88d0997 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaProjectionPermissionActivity.java @@ -18,8 +18,6 @@ package com.android.systemui.media; import android.app.Activity; import android.app.AlertDialog; -import android.app.PendingIntent; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -32,16 +30,10 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Log; -import android.view.LayoutInflater; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.CompoundButton; -import android.widget.TextView; - -import com.android.internal.app.AlertActivity; -import com.android.internal.app.AlertController; import com.android.systemui.R; -import com.android.systemui.statusbar.phone.SystemUIDialog; public class MediaProjectionPermissionActivity extends Activity implements DialogInterface.OnClickListener, CheckBox.OnCheckedChangeListener, @@ -114,7 +106,9 @@ public class MediaProjectionPermissionActivity extends Activity @Override protected void onDestroy() { super.onDestroy(); - mDialog.dismiss(); + if (mDialog != null) { + mDialog.dismiss(); + } } @Override @@ -128,7 +122,9 @@ public class MediaProjectionPermissionActivity extends Activity Log.e(TAG, "Error granting projection permission", e); setResult(RESULT_CANCELED); } finally { - mDialog.dismiss(); + if (mDialog != null) { + mDialog.dismiss(); + } finish(); } } diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java index 63dd17f..af1f795 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerNotificationWarnings.java @@ -159,7 +159,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { .setContentText(mContext.getString(R.string.invalid_charger_text)) .setPriority(Notification.PRIORITY_MAX) .setVisibility(Notification.VISIBILITY_PUBLIC) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.system_notification_accent_color)); final Notification n = nb.build(); if (n.headsUpContentView != null) { @@ -183,7 +183,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { .setDeleteIntent(pendingBroadcast(ACTION_DISMISSED_WARNING)) .setPriority(Notification.PRIORITY_MAX) .setVisibility(Notification.VISIBILITY_PUBLIC) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.battery_saver_mode_color)); if (hasBatterySettings()) { nb.setContentIntent(pendingBroadcast(ACTION_SHOW_BATTERY_SETTINGS)); @@ -214,7 +214,7 @@ public class PowerNotificationWarnings implements PowerUI.WarningsUI { .setOngoing(true) .setShowWhen(false) .setVisibility(Notification.VISIBILITY_PUBLIC) - .setColor(mContext.getResources().getColor( + .setColor(mContext.getColor( com.android.internal.R.color.battery_saver_mode_color)); addStopSaverAction(nb); if (hasSaverSettings()) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java index d55ceaa..aff5d2b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java +++ b/packages/SystemUI/src/com/android/systemui/qs/DataUsageGraph.java @@ -44,10 +44,10 @@ public class DataUsageGraph extends View { public DataUsageGraph(Context context, AttributeSet attrs) { super(context, attrs); final Resources res = context.getResources(); - mTrackColor = res.getColor(R.color.data_usage_graph_track); - mUsageColor = res.getColor(R.color.system_accent_color); - mOverlimitColor = res.getColor(R.color.system_warning_color); - mWarningColor = res.getColor(R.color.data_usage_graph_warning); + mTrackColor = context.getColor(R.color.data_usage_graph_track); + mUsageColor = context.getColor(R.color.system_accent_color); + mOverlimitColor = context.getColor(R.color.system_warning_color); + mWarningColor = context.getColor(R.color.data_usage_graph_warning); mMarkerWidth = res.getDimensionPixelSize(R.dimen.data_usage_graph_marker_width); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java index a0b6e82..0ab644a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java @@ -18,12 +18,10 @@ package com.android.systemui.qs; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; -import android.content.res.Configuration; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 4dacacf..f4fd6a2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -26,7 +26,6 @@ import android.content.res.Resources; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -253,12 +252,6 @@ public class QSPanel extends ViewGroup { @Override public void onStateChanged(QSTile.State state) { int visibility = state.visible ? VISIBLE : GONE; - if (state.visible && !mGridContentVisible) { - - // We don't want to show it if the content is hidden, - // then we just set it to invisible, to ensure that it gets visible again - visibility = INVISIBLE; - } setTileVisibility(r.tileView, visibility); r.tileView.onStateChanged(state); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java index 16ae6b4..ec83ca7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java @@ -88,7 +88,7 @@ public class QSTileView extends ViewGroup { addView(mIcon); mDivider = new View(mContext); - mDivider.setBackgroundColor(res.getColor(R.color.qs_tile_divider)); + mDivider.setBackgroundColor(context.getColor(R.color.qs_tile_divider)); final int dh = res.getDimensionPixelSize(R.dimen.qs_tile_divider_height); mDivider.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dh)); addView(mDivider); @@ -138,8 +138,8 @@ public class QSTileView extends ViewGroup { mDualLabel = new QSDualTileLabel(mContext); mDualLabel.setId(android.R.id.title); mDualLabel.setBackgroundResource(R.drawable.btn_borderless_rect); - mDualLabel.setFirstLineCaret(res.getDrawable(R.drawable.qs_dual_tile_caret)); - mDualLabel.setTextColor(res.getColor(R.color.qs_tile_text)); + mDualLabel.setFirstLineCaret(mContext.getDrawable(R.drawable.qs_dual_tile_caret)); + mDualLabel.setTextColor(mContext.getColor(R.color.qs_tile_text)); mDualLabel.setPadding(0, mDualTileVerticalPaddingPx, 0, mDualTileVerticalPaddingPx); mDualLabel.setTypeface(CONDENSED); mDualLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX, @@ -157,7 +157,7 @@ public class QSTileView extends ViewGroup { } else { mLabel = new TextView(mContext); mLabel.setId(android.R.id.title); - mLabel.setTextColor(res.getColor(R.color.qs_tile_text)); + mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text)); mLabel.setGravity(Gravity.CENTER_HORIZONTAL); mLabel.setMinLines(2); mLabel.setPadding(0, 0, 0, 0); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index c15566f..b42b5f6 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -16,6 +16,8 @@ package com.android.systemui.qs.tiles; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; import android.content.Context; import android.content.Intent; import android.provider.Settings; @@ -23,13 +25,14 @@ import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; +import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.systemui.R; import com.android.systemui.qs.QSDetailItems; import com.android.systemui.qs.QSDetailItems.Item; import com.android.systemui.qs.QSTile; import com.android.systemui.statusbar.policy.BluetoothController; -import com.android.systemui.statusbar.policy.BluetoothController.PairedDevice; +import java.util.Collection; import java.util.Set; /** Quick settings tile: Bluetooth **/ @@ -143,7 +146,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { refreshState(); } @Override - public void onBluetoothPairedDevicesChanged() { + public void onBluetoothDevicesChanged() { mUiHandler.post(new Runnable() { @Override public void run() { @@ -199,19 +202,21 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { private void updateItems() { if (mItems == null) return; Item[] items = null; - final Set<PairedDevice> devices = mController.getPairedDevices(); + final Collection<CachedBluetoothDevice> devices = mController.getDevices(); if (devices != null) { - items = new Item[devices.size()]; + items = new Item[getBondedCount(devices)]; int i = 0; - for (PairedDevice device : devices) { + for (CachedBluetoothDevice device : devices) { + if (device.getBondState() == BluetoothDevice.BOND_NONE) continue; final Item item = new Item(); item.icon = R.drawable.ic_qs_bluetooth_on; - item.line1 = device.name; - if (device.state == PairedDevice.STATE_CONNECTED) { + item.line1 = device.getName(); + int state = device.getMaxConnectionState(); + if (state == BluetoothProfile.STATE_CONNECTED) { item.icon = R.drawable.ic_qs_bluetooth_connected; item.line2 = mContext.getString(R.string.quick_settings_connected); item.canDisconnect = true; - } else if (device.state == PairedDevice.STATE_CONNECTING) { + } else if (state == BluetoothProfile.STATE_CONNECTING) { item.icon = R.drawable.ic_qs_bluetooth_connecting; item.line2 = mContext.getString(R.string.quick_settings_connecting); } @@ -222,11 +227,22 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { mItems.setItems(items); } + private int getBondedCount(Collection<CachedBluetoothDevice> devices) { + int ct = 0; + for (CachedBluetoothDevice device : devices) { + if (device.getBondState() != BluetoothDevice.BOND_NONE) { + ct++; + } + } + return ct; + } + @Override public void onDetailItemClick(Item item) { if (item == null || item.tag == null) return; - final PairedDevice device = (PairedDevice) item.tag; - if (device != null && device.state == PairedDevice.STATE_DISCONNECTED) { + final CachedBluetoothDevice device = (CachedBluetoothDevice) item.tag; + if (device != null && device.getMaxConnectionState() + == BluetoothProfile.STATE_DISCONNECTED) { mController.connect(device); } } @@ -234,7 +250,7 @@ public class BluetoothTile extends QSTile<QSTile.BooleanState> { @Override public void onDetailItemDisconnect(Item item) { if (item == null || item.tag == null) return; - final PairedDevice device = (PairedDevice) item.tag; + final CachedBluetoothDevice device = (CachedBluetoothDevice) item.tag; if (device != null) { mController.disconnect(device); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java index eb816b7..d0ae383 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataUsageDetailView.java @@ -96,7 +96,7 @@ public class DataUsageDetailView extends LinearLayout { title.setText(titleId); final TextView usage = (TextView) findViewById(R.id.usage_text); usage.setText(formatBytes(bytes)); - usage.setTextColor(res.getColor(usageColor)); + usage.setTextColor(mContext.getColor(usageColor)); final DataUsageGraph graph = (DataUsageGraph) findViewById(R.id.usage_graph); graph.setLevels(info.limitLevel, info.warningLevel, info.usageLevel); final TextView carrier = (TextView) findViewById(R.id.usage_carrier_text); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java new file mode 100644 index 0000000..79600f5 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.qs.tiles; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.provider.Settings; +import android.provider.Settings.Global; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnAttachStateChangeListener; +import android.view.ViewGroup; + +import com.android.systemui.R; +import com.android.systemui.qs.QSTile; +import com.android.systemui.statusbar.policy.ZenModeController; +import com.android.systemui.volume.ZenModePanel; + +/** Quick settings tile: Do not disturb **/ +public class DndTile extends QSTile<QSTile.BooleanState> { + private static final Intent ZEN_SETTINGS = new Intent(Settings.ACTION_ZEN_MODE_SETTINGS); + + private static final String ACTION_SET_VISIBLE = "com.android.systemui.dndtile.SET_VISIBLE"; + private static final String EXTRA_VISIBLE = "visible"; + private static final String PREF_KEY_VISIBLE = "DndTileVisible"; + + private final ZenModeController mController; + private final DndDetailAdapter mDetailAdapter; + + private boolean mListening; + private boolean mVisible; + private boolean mShowingDetail; + + public DndTile(Host host) { + super(host); + mController = host.getZenModeController(); + mDetailAdapter = new DndDetailAdapter(); + mVisible = getSharedPrefs(mContext).getBoolean(PREF_KEY_VISIBLE, false); + mContext.registerReceiver(mReceiver, new IntentFilter(ACTION_SET_VISIBLE)); + } + + public static void setVisible(Context context, boolean visible) { + context.sendBroadcast(new Intent(DndTile.ACTION_SET_VISIBLE) + .putExtra(DndTile.EXTRA_VISIBLE, visible)); + } + + public static boolean isVisible(Context context) { + return getSharedPrefs(context).getBoolean(PREF_KEY_VISIBLE, false); + } + + @Override + public DetailAdapter getDetailAdapter() { + return mDetailAdapter; + } + + @Override + protected BooleanState newTileState() { + return new BooleanState(); + } + + @Override + public void handleClick() { + if (mState.value) { + mController.setZen(Global.ZEN_MODE_OFF); + } else { + mController.setZen(Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); + showDetail(true); + } + } + + @Override + protected void handleUpdateState(BooleanState state, Object arg) { + final int zen = arg instanceof Integer ? (Integer) arg : mController.getZen(); + state.value = zen != Global.ZEN_MODE_OFF; + state.visible = mVisible; + switch (zen) { + case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS: + state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_on); + state.label = mContext.getString(R.string.quick_settings_dnd_priority_label); + state.contentDescription = mContext.getString( + R.string.accessibility_quick_settings_dnd_priority_on); + break; + case Global.ZEN_MODE_NO_INTERRUPTIONS: + state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_on); + state.label = mContext.getString(R.string.quick_settings_dnd_none_label); + state.contentDescription = mContext.getString( + R.string.accessibility_quick_settings_dnd_none_on); + break; + default: + state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_off); + state.label = mContext.getString(R.string.quick_settings_dnd_label); + state.contentDescription = mContext.getString( + R.string.accessibility_quick_settings_dnd_off); + break; + } + if (mShowingDetail && !state.value) { + showDetail(false); + } + } + + @Override + protected String composeChangeAnnouncement() { + if (mState.value) { + return mContext.getString(R.string.accessibility_quick_settings_dnd_changed_on); + } else { + return mContext.getString(R.string.accessibility_quick_settings_dnd_changed_off); + } + } + + @Override + public void setListening(boolean listening) { + if (mListening == listening) return; + mListening = listening; + if (mListening) { + mController.addCallback(mZenCallback); + } else { + mController.removeCallback(mZenCallback); + } + } + + private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() { + public void onZenChanged(int zen) { + refreshState(zen); + } + }; + + private static SharedPreferences getSharedPrefs(Context context) { + return context.getSharedPreferences(context.getPackageName(), 0); + } + + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mVisible = intent.getBooleanExtra(EXTRA_VISIBLE, false); + getSharedPrefs(mContext).edit().putBoolean(PREF_KEY_VISIBLE, mVisible).commit(); + refreshState(); + } + }; + + private final class DndDetailAdapter implements DetailAdapter, OnAttachStateChangeListener { + + @Override + public int getTitle() { + return R.string.quick_settings_dnd_label; + } + + @Override + public Boolean getToggleState() { + return mState.value; + } + + @Override + public Intent getSettingsIntent() { + return ZEN_SETTINGS; + } + + @Override + public void setToggleState(boolean state) { + if (!state) { + mController.setZen(Global.ZEN_MODE_OFF); + showDetail(false); + } + } + + @Override + public View createDetailView(Context context, View convertView, ViewGroup parent) { + final ZenModePanel zmp = convertView != null ? (ZenModePanel) convertView + : (ZenModePanel) LayoutInflater.from(context).inflate( + R.layout.zen_mode_panel, parent, false); + if (convertView == null) { + zmp.init(mController); + zmp.setEmbedded(true); + zmp.addOnAttachStateChangeListener(this); + } + return zmp; + } + + @Override + public void onViewAttachedToWindow(View v) { + mShowingDetail = true; + } + + @Override + public void onViewDetachedFromWindow(View v) { + mShowingDetail = false; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java index 5c1a317..cb78deb 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java @@ -17,7 +17,6 @@ package com.android.systemui.qs.tiles; import android.app.ActivityManager; -import android.os.SystemClock; import com.android.systemui.R; import com.android.systemui.qs.QSTile; @@ -27,16 +26,11 @@ import com.android.systemui.statusbar.policy.FlashlightController; public class FlashlightTile extends QSTile<QSTile.BooleanState> implements FlashlightController.FlashlightListener { - /** Grace period for which we consider the flashlight - * still available because it was recently on. */ - private static final long RECENTLY_ON_DURATION_MILLIS = 500; - private final AnimationIcon mEnable = new AnimationIcon(R.drawable.ic_signal_flashlight_enable_animation); private final AnimationIcon mDisable = new AnimationIcon(R.drawable.ic_signal_flashlight_disable_animation); private final FlashlightController mFlashlightController; - private long mWasLastOn; public FlashlightTile(Host host) { super(host); @@ -69,33 +63,17 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements return; } boolean newState = !mState.value; - mFlashlightController.setFlashlight(newState); refreshState(newState ? UserBoolean.USER_TRUE : UserBoolean.USER_FALSE); + mFlashlightController.setFlashlight(newState); } @Override protected void handleUpdateState(BooleanState state, Object arg) { - if (state.value) { - mWasLastOn = SystemClock.uptimeMillis(); - } - + state.visible = mFlashlightController.isAvailable(); + state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label); if (arg instanceof UserBoolean) { state.value = ((UserBoolean) arg).value; } - - if (!state.value && mWasLastOn != 0) { - if (SystemClock.uptimeMillis() > mWasLastOn + RECENTLY_ON_DURATION_MILLIS) { - mWasLastOn = 0; - } else { - mHandler.removeCallbacks(mRecentlyOnTimeout); - mHandler.postAtTime(mRecentlyOnTimeout, mWasLastOn + RECENTLY_ON_DURATION_MILLIS); - } - } - - // Always show the tile when the flashlight is or was recently on. This is needed because - // the camera is not available while it is being used for the flashlight. - state.visible = mWasLastOn != 0 || mFlashlightController.isAvailable(); - state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label); final AnimationIcon icon = state.value ? mEnable : mDisable; icon.setAllowAnimation(arg instanceof UserBoolean && ((UserBoolean) arg).userInitiated); state.icon = icon; @@ -115,8 +93,8 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements } @Override - public void onFlashlightOff() { - refreshState(UserBoolean.BACKGROUND_FALSE); + public void onFlashlightChanged(boolean enabled) { + refreshState(enabled ? UserBoolean.BACKGROUND_TRUE : UserBoolean.BACKGROUND_FALSE); } @Override @@ -128,11 +106,4 @@ public class FlashlightTile extends QSTile<QSTile.BooleanState> implements public void onFlashlightAvailabilityChanged(boolean available) { refreshState(); } - - private Runnable mRecentlyOnTimeout = new Runnable() { - @Override - public void run() { - refreshState(); - } - }; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java index c55cbcc..21c5c96 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java @@ -28,7 +28,6 @@ import android.graphics.Bitmap; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index 9dd82fc..2d1fab0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -42,6 +42,7 @@ import android.view.View; import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.SystemUI; +import com.android.systemui.SystemUIApplication; import com.android.systemui.recents.misc.Console; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.model.RecentsTaskLoadPlan; @@ -53,6 +54,7 @@ import com.android.systemui.recents.views.TaskStackView; import com.android.systemui.recents.views.TaskStackViewLayoutAlgorithm; import com.android.systemui.recents.views.TaskViewHeader; import com.android.systemui.recents.views.TaskViewTransform; +import com.android.systemui.statusbar.phone.PhoneStatusBar; import java.util.ArrayList; import java.util.concurrent.atomic.AtomicBoolean; @@ -79,6 +81,8 @@ public class Recents extends SystemUI // Owner proxy events final public static String ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER = "action_notify_recents_visibility_change"; + final public static String ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER = + "action_screen_pinning_request"; final public static String ACTION_START_ENTER_ANIMATION = "action_start_enter_animation"; final public static String ACTION_TOGGLE_RECENTS_ACTIVITY = "action_toggle_recents_activity"; @@ -148,6 +152,9 @@ public class Recents extends SystemUI case ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER: visibilityChanged(intent.getBooleanExtra(EXTRA_RECENTS_VISIBILITY, false)); break; + case ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER: + onStartScreenPinning(context); + break; } } } @@ -234,6 +241,7 @@ public class Recents extends SystemUI mProxyBroadcastReceiver = new RecentsOwnerEventProxyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Recents.ACTION_PROXY_NOTIFY_RECENTS_VISIBLITY_TO_OWNER); + filter.addAction(Recents.ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER); mContext.registerReceiverAsUser(mProxyBroadcastReceiver, UserHandle.CURRENT, filter, null, mHandler); } @@ -377,7 +385,7 @@ public class Recents extends SystemUI } // Return early if there are no tasks in the focused stack - if (focusedStack.getTaskCount() == 0) return; + if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = mSystemServicesProxy.getTopMostTask(); // Return early if there is no running task (can't determine affiliated tasks in this case) @@ -801,6 +809,27 @@ public class Recents extends SystemUI } } + /** Notifies the status bar to trigger screen pinning. */ + @ProxyFromAnyToPrimaryUser + public static void startScreenPinning(Context context, SystemServicesProxy ssp) { + if (ssp.isForegroundUserOwner()) { + onStartScreenPinning(context); + } else { + Intent intent = createLocalBroadcastIntent(context, + ACTION_PROXY_SCREEN_PINNING_REQUEST_TO_OWNER); + context.sendBroadcastAsUser(intent, UserHandle.OWNER); + } + } + static void onStartScreenPinning(Context context) { + // For the primary user, the context for the SystemUI component is the SystemUIApplication + SystemUIApplication app = (SystemUIApplication) + getInstanceAndStartIfNeeded(context).mContext; + PhoneStatusBar statusBar = app.getComponent(PhoneStatusBar.class); + if (statusBar != null) { + statusBar.showScreenPinningRequest(false); + } + } + /** * Returns the preloaded load plan and invalidates it. */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index b1ac733..f014f09 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -18,7 +18,6 @@ package com.android.systemui.recents; import android.app.Activity; import android.app.ActivityOptions; -import android.app.Dialog; import android.app.SearchManager; import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetManager; @@ -75,8 +74,8 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView View mEmptyView; DebugOverlayView mDebugOverlay; - // MultiStack debug - RecentsMultiStackDialog mMultiStackDebugDialog; + // Resize task debug + RecentsResizeTaskDialog mResizeTaskDebugDialog; // Search AppWidget RecentsAppWidgetHost mAppWidgetHost; @@ -86,8 +85,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Runnables to finish the Recents activity FinishRecentsRunnable mFinishLaunchHomeRunnable; - private PhoneStatusBar mStatusBar; - /** * A common Runnable to finish Recents either by calling finish() (with a custom animation) or * launching Home with some ActivityOptions. Generally we always launch home when we exit @@ -193,8 +190,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView } // Start loading tasks according to the load plan - ArrayList<TaskStack> stacks = plan.getAllTaskStacks(); - if (stacks.size() == 0) { + if (!plan.hasTasks()) { loader.preloadTasks(plan, mConfig.launchedFromHome); } RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options(); @@ -203,11 +199,11 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView loadOpts.numVisibleTaskThumbnails = mConfig.launchedNumVisibleThumbnails; loader.loadTasks(this, plan, loadOpts); - boolean hasTasks = plan.hasTasks(); - if (hasTasks) { + ArrayList<TaskStack> stacks = plan.getAllTaskStacks(); + mConfig.launchedWithNoRecentTasks = !plan.hasTasks(); + if (!mConfig.launchedWithNoRecentTasks) { mRecentsView.setTaskStacks(stacks); } - mConfig.launchedWithNoRecentTasks = !hasTasks; // Create the home intent runnable Intent homeIntent = new Intent(Intent.ACTION_MAIN, null); @@ -383,8 +379,6 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView mEmptyViewStub = (ViewStub) findViewById(R.id.empty_view_stub); mDebugOverlayStub = (ViewStub) findViewById(R.id.debug_overlay_stub); mScrimViews = new SystemBarScrimViews(this, mConfig); - mStatusBar = ((SystemUIApplication) getApplication()) - .getComponent(PhoneStatusBar.class); inflateDebugOverlay(); // Bind the search app widget when we first start up @@ -594,37 +588,18 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView } - /**** RecentsMultiStackDialog ****/ + /**** RecentsResizeTaskDialog ****/ - private RecentsMultiStackDialog getMultiStackDebugDialog() { - if (mMultiStackDebugDialog == null) { - mMultiStackDebugDialog = new RecentsMultiStackDialog(getFragmentManager()); + private RecentsResizeTaskDialog getResizeTaskDebugDialog() { + if (mResizeTaskDebugDialog == null) { + mResizeTaskDebugDialog = new RecentsResizeTaskDialog(getFragmentManager(), this); } - return mMultiStackDebugDialog; - } - - @Override - public void onMultiStackAddStack() { - RecentsMultiStackDialog dialog = getMultiStackDebugDialog(); - dialog.showAddStackDialog(); + return mResizeTaskDebugDialog; } @Override - public void onMultiStackResizeStack() { - RecentsMultiStackDialog dialog = getMultiStackDebugDialog(); - dialog.showResizeStackDialog(); - } - - @Override - public void onMultiStackRemoveStack() { - RecentsMultiStackDialog dialog = getMultiStackDebugDialog(); - dialog.showRemoveStackDialog(); - } - - @Override - public void onMultiStackMoveTask(Task t) { - RecentsMultiStackDialog dialog = getMultiStackDebugDialog(); - dialog.showMoveTaskDialog(t); + public void onTaskResize(Task t) { + getResizeTaskDebugDialog().showResizeTaskDialog(t, mRecentsView); } /**** RecentsView.RecentsViewCallbacks Implementation ****/ @@ -652,9 +627,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView @Override public void onScreenPinningRequest() { - if (mStatusBar != null) { - mStatusBar.showScreenPinningRequest(false); - } + RecentsTaskLoader loader = RecentsTaskLoader.getInstance(); + SystemServicesProxy ssp = loader.getSystemServicesProxy(); + Recents.startScreenPinning(this, ssp); } /**** RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks Implementation ****/ diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java index 1736c77..abeb2b0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java @@ -248,14 +248,11 @@ public class RecentsConfiguration { taskViewThumbnailAlpha = res.getFloat(R.dimen.recents_task_view_thumbnail_alpha); // Task bar colors - taskBarViewDefaultBackgroundColor = - res.getColor(R.color.recents_task_bar_default_background_color, null); - taskBarViewLightTextColor = - res.getColor(R.color.recents_task_bar_light_text_color, null); - taskBarViewDarkTextColor = - res.getColor(R.color.recents_task_bar_dark_text_color, null); - taskBarViewHighlightColor = - res.getColor(R.color.recents_task_bar_highlight_color, null); + taskBarViewDefaultBackgroundColor = context.getColor( + R.color.recents_task_bar_default_background_color); + taskBarViewLightTextColor = context.getColor(R.color.recents_task_bar_light_text_color); + taskBarViewDarkTextColor = context.getColor(R.color.recents_task_bar_dark_text_color); + taskBarViewHighlightColor = context.getColor(R.color.recents_task_bar_highlight_color); taskBarViewAffiliationColorMinAlpha = res.getFloat( R.dimen.recents_task_affiliation_color_min_alpha_percentage); @@ -295,7 +292,7 @@ public class RecentsConfiguration { Settings.Global.DEVELOPMENT_SETTINGS_ENABLED) != 0; lockToAppEnabled = ssp.getSystemSetting(context, Settings.System.LOCK_TO_APP_ENABLED) != 0; - multiStackEnabled = "1".equals(ssp.getSystemProperty("overview.enableMultiStack")); + multiStackEnabled = "true".equals(ssp.getSystemProperty("persist.sys.debug.multi_window")); } /** Called when the configuration has changed, and we want to reset any configuration specific diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java deleted file mode 100644 index fdf9d39..0000000 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsMultiStackDialog.java +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.recents; - -import android.app.ActivityManager; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.app.FragmentManager; -import android.content.ComponentName; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.ActivityInfo; -import android.content.pm.ResolveInfo; -import android.graphics.Rect; -import android.os.Bundle; -import android.util.MutableInt; -import android.util.SparseArray; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.EditText; -import android.widget.Toast; -import com.android.systemui.R; -import com.android.systemui.recents.misc.SystemServicesProxy; -import com.android.systemui.recents.model.RecentsTaskLoader; -import com.android.systemui.recents.model.Task; - -import java.util.List; - -/** - * A helper for the dialogs that show when multistack debugging is on. - */ -public class RecentsMultiStackDialog extends DialogFragment { - - static final String TAG = "RecentsMultiStackDialog"; - - public static final int ADD_STACK_DIALOG = 0; - public static final int ADD_STACK_PICK_APP_DIALOG = 1; - public static final int REMOVE_STACK_DIALOG = 2; - public static final int RESIZE_STACK_DIALOG = 3; - public static final int RESIZE_STACK_PICK_STACK_DIALOG = 4; - public static final int MOVE_TASK_DIALOG = 5; - - FragmentManager mFragmentManager; - int mCurrentDialogType; - MutableInt mTargetStackIndex = new MutableInt(0); - Task mTaskToMove; - SparseArray<ActivityManager.StackInfo> mStacks; - List<ResolveInfo> mLauncherActivities; - Rect mAddStackRect; - Intent mAddStackIntent; - - View mAddStackDialogContent; - - public RecentsMultiStackDialog() {} - - public RecentsMultiStackDialog(FragmentManager mgr) { - mFragmentManager = mgr; - } - - /** Shows the add-stack dialog. */ - void showAddStackDialog() { - mCurrentDialogType = ADD_STACK_DIALOG; - show(mFragmentManager, TAG); - } - - /** Creates a new add-stack dialog. */ - private void createAddStackDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - builder.setTitle("Add Stack - Enter new dimensions"); - mAddStackDialogContent = - inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false); - Rect windowRect = ssp.getWindowRect(); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_left, windowRect.left); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_top, windowRect.top); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_right, windowRect.right); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_bottom, windowRect.bottom); - builder.setView(mAddStackDialogContent); - builder.setPositiveButton("Add Stack", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - int left = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_left); - int top = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_top); - int right = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_right); - int bottom = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_bottom); - if (bottom <= top || right <= left) { - Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show(); - dismiss(); - return; - } - - // Prompt the user for the app to start - dismiss(); - mCurrentDialogType = ADD_STACK_PICK_APP_DIALOG; - mAddStackRect = new Rect(left, top, right, bottom); - show(mFragmentManager, TAG); - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dismiss(); - } - }); - } - - /** Creates a new add-stack pick-app dialog. */ - private void createAddStackPickAppDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - mLauncherActivities = ssp.getLauncherApps(); - mAddStackIntent = null; - int activityCount = mLauncherActivities.size(); - CharSequence[] activityNames = new CharSequence[activityCount]; - for (int i = 0; i < activityCount; i++) { - activityNames[i] = ssp.getActivityLabel(mLauncherActivities.get(i).activityInfo); - } - builder.setTitle("Add Stack - Pick starting app"); - builder.setSingleChoiceItems(activityNames, -1, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ActivityInfo ai = mLauncherActivities.get(which).activityInfo; - mAddStackIntent = new Intent(Intent.ACTION_MAIN); - mAddStackIntent.addCategory(Intent.CATEGORY_LAUNCHER); - mAddStackIntent.setComponent(new ComponentName(ai.packageName, ai.name)); - } - }); - builder.setPositiveButton("Add Stack", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Display 0 = default display - ssp.createNewStack(0, mAddStackRect, mAddStackIntent); - } - }); - builder.setNegativeButton("Skip", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Display 0 = default display - ssp.createNewStack(0, mAddStackRect, null); - } - }); - } - - /** Shows the resize-stack dialog. */ - void showResizeStackDialog() { - mCurrentDialogType = RESIZE_STACK_PICK_STACK_DIALOG; - show(mFragmentManager, TAG); - } - - /** Creates a new resize-stack pick-stack dialog. */ - private void createResizeStackPickStackDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - mStacks = ssp.getAllStackInfos(); - mTargetStackIndex.value = -1; - CharSequence[] stackNames = getAllStacksDescriptions(mStacks, -1, null); - builder.setTitle("Resize Stack - Pick stack"); - builder.setSingleChoiceItems(stackNames, mTargetStackIndex.value, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - mTargetStackIndex.value = which; - } - }); - builder.setPositiveButton("Resize Stack", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mTargetStackIndex.value != -1) { - // Prompt the user for the new dimensions - dismiss(); - mCurrentDialogType = RESIZE_STACK_DIALOG; - show(mFragmentManager, TAG); - } - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dismiss(); - } - }); - } - - /** Creates a new resize-stack dialog. */ - private void createResizeStackDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - builder.setTitle("Resize Stack - Enter new dimensions"); - final ActivityManager.StackInfo stack = mStacks.valueAt(mTargetStackIndex.value); - mAddStackDialogContent = - inflater.inflate(R.layout.recents_multistack_stack_size_dialog, null, false); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_left, stack.bounds.left); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_top, stack.bounds.top); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_right, stack.bounds.right); - setDimensionInEditText(mAddStackDialogContent, R.id.inset_bottom, stack.bounds.bottom); - builder.setView(mAddStackDialogContent); - builder.setPositiveButton("Resize Stack", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - int left = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_left); - int top = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_top); - int right = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_right); - int bottom = getDimensionFromEditText(mAddStackDialogContent, R.id.inset_bottom); - if (bottom <= top || right <= left) { - Toast.makeText(context, "Invalid dimensions", Toast.LENGTH_SHORT).show(); - dismiss(); - return; - } - ssp.resizeStack(stack.stackId, new Rect(left, top, right, bottom)); - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dismiss(); - } - }); - } - - /** Shows the remove-stack dialog. */ - void showRemoveStackDialog() { - mCurrentDialogType = REMOVE_STACK_DIALOG; - show(mFragmentManager, TAG); - } - - /** Shows the move-task dialog. */ - void showMoveTaskDialog(Task task) { - mCurrentDialogType = MOVE_TASK_DIALOG; - mTaskToMove = task; - show(mFragmentManager, TAG); - } - - /** Creates a new move-stack dialog. */ - private void createMoveTaskDialog(final Context context, LayoutInflater inflater, - AlertDialog.Builder builder, final SystemServicesProxy ssp) { - mStacks = ssp.getAllStackInfos(); - mTargetStackIndex.value = -1; - CharSequence[] stackNames = getAllStacksDescriptions(mStacks, mTaskToMove.key.stackId, - mTargetStackIndex); - builder.setTitle("Move Task to Stack"); - builder.setSingleChoiceItems(stackNames, mTargetStackIndex.value, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - mTargetStackIndex.value = which; - } - }); - builder.setPositiveButton("Move Task", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mTargetStackIndex.value != -1) { - ActivityManager.StackInfo toStack = mStacks.valueAt(mTargetStackIndex.value); - if (toStack.stackId != mTaskToMove.key.stackId) { - ssp.moveTaskToStack(mTaskToMove.key.id, toStack.stackId, true); - mTaskToMove.setStackId(toStack.stackId); - } - } - } - }); - builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dismiss(); - } - }); - } - - /** Helper to get an integer value from an edit text. */ - private int getDimensionFromEditText(View container, int id) { - String text = ((EditText) container.findViewById(id)).getText().toString(); - if (text.trim().length() != 0) { - return Integer.parseInt(text.trim()); - } - return 0; - } - - /** Helper to set an integer value to an edit text. */ - private void setDimensionInEditText(View container, int id, int value) { - ((EditText) container.findViewById(id)).setText("" + value); - } - - /** Gets a list of all the stacks. */ - private CharSequence[] getAllStacksDescriptions(SparseArray<ActivityManager.StackInfo> stacks, - int targetStackId, MutableInt indexOfTargetStackId) { - int stackCount = stacks.size(); - CharSequence[] stackNames = new CharSequence[stackCount]; - for (int i = 0; i < stackCount; i++) { - ActivityManager.StackInfo stack = stacks.valueAt(i); - Rect b = stack.bounds; - String desc = "Stack " + stack.stackId + " / " + - "" + (stack.taskIds.length > 0 ? stack.taskIds.length : "No") + " tasks\n" + - "(" + b.left + ", " + b.top + ")-(" + b.right + ", " + b.bottom + ")\n"; - stackNames[i] = desc; - if (targetStackId != -1 && stack.stackId == targetStackId) { - indexOfTargetStackId.value = i; - } - } - return stackNames; - } - - @Override - public Dialog onCreateDialog(Bundle args) { - final Context context = this.getActivity(); - final SystemServicesProxy ssp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); - LayoutInflater inflater = getActivity().getLayoutInflater(); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - switch(mCurrentDialogType) { - case ADD_STACK_DIALOG: - createAddStackDialog(context, inflater, builder, ssp); - break; - case ADD_STACK_PICK_APP_DIALOG: - createAddStackPickAppDialog(context, inflater, builder, ssp); - break; - case MOVE_TASK_DIALOG: - createMoveTaskDialog(context, inflater, builder, ssp); - break; - case RESIZE_STACK_PICK_STACK_DIALOG: - createResizeStackPickStackDialog(context, inflater, builder, ssp); - break; - case RESIZE_STACK_DIALOG: - createResizeStackDialog(context, inflater, builder, ssp); - break; - } - return builder.create(); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java new file mode 100644 index 0000000..7c11894 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.recents; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.FragmentManager; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Rect; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import com.android.systemui.R; +import com.android.systemui.recents.misc.SystemServicesProxy; +import com.android.systemui.recents.model.RecentsTaskLoader; +import com.android.systemui.recents.model.Task; +import com.android.systemui.recents.RecentsActivity; +import com.android.systemui.recents.views.RecentsView; + +/** + * A helper for the dialogs that show when task debugging is on. + */ +public class RecentsResizeTaskDialog extends DialogFragment { + + static final String TAG = "RecentsResizeTaskDialog"; + + // The various window arrangements we can handle. + private static final int PLACE_LEFT = 1; + private static final int PLACE_RIGHT = 2; + private static final int PLACE_TOP = 3; + private static final int PLACE_BOTTOM = 4; + private static final int PLACE_FULL = 5; + + // The task we want to resize. + private Task mTaskToResize; + private Task mNextTaskToResize; + private FragmentManager mFragmentManager; + private View mResizeTaskDialogContent; + private RecentsActivity mRecentsActivity; + private RecentsView mRecentsView; + private SystemServicesProxy mSsp; + + public RecentsResizeTaskDialog(FragmentManager mgr, RecentsActivity activity) { + mFragmentManager = mgr; + mRecentsActivity = activity; + mSsp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); + } + + /** Shows the resize-task dialog. */ + void showResizeTaskDialog(Task mainTask, RecentsView rv) { + mTaskToResize = mainTask; + mRecentsView = rv; + mNextTaskToResize = mRecentsView.getNextTaskOrTopTask(mainTask); + + show(mFragmentManager, TAG); + } + + /** Creates a new resize-task dialog. */ + private void createResizeTaskDialog(final Context context, LayoutInflater inflater, + AlertDialog.Builder builder) { + builder.setTitle(R.string.recents_caption_resize); + mResizeTaskDialogContent = + inflater.inflate(R.layout.recents_task_resize_dialog, null, false); + + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_left)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_LEFT); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_right)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_RIGHT); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_top)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_TOP); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_bottom)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_BOTTOM); + } + }); + ((Button)mResizeTaskDialogContent.findViewById(R.id.place_full)).setOnClickListener( + new View.OnClickListener() { + public void onClick(View v) { + placeTasks(PLACE_FULL); + } + }); + + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dismiss(); + } + }); + + builder.setView(mResizeTaskDialogContent); + } + + /** Helper function to place window(s) on the display according to an arrangement request. */ + private void placeTasks(int arrangement) { + Rect focusedBounds = mSsp.getWindowRect(); + Rect otherBounds = new Rect(focusedBounds); + + switch (arrangement) { + case PLACE_LEFT: + focusedBounds.right = focusedBounds.centerX(); + otherBounds.left = focusedBounds.right; + break; + case PLACE_RIGHT: + otherBounds.right = otherBounds.centerX(); + focusedBounds.left = otherBounds.right; + break; + case PLACE_TOP: + focusedBounds.bottom = focusedBounds.centerY(); + otherBounds.top = focusedBounds.bottom; + break; + case PLACE_BOTTOM: + otherBounds.bottom = otherBounds.centerY(); + focusedBounds.top = otherBounds.bottom; + break; + case PLACE_FULL: + // Null the rectangle to avoid the other task to show up. + otherBounds = new Rect(); + break; + } + + // Resize all other tasks to go to the other side. + if (mNextTaskToResize != null && !otherBounds.isEmpty()) { + mSsp.resizeTask(mNextTaskToResize.key.id, otherBounds); + } + mSsp.resizeTask(mTaskToResize.key.id, focusedBounds); + + // Get rid of the dialog. + dismiss(); + mRecentsActivity.dismissRecentsToHomeRaw(false); + + // Show tasks - beginning with the other first so that the focus ends on the selected one. + // TODO: Remove this once issue b/19893373 is resolved. + if (mNextTaskToResize != null && !otherBounds.isEmpty()) { + mRecentsView.launchTask(mNextTaskToResize); + } + mRecentsView.launchTask(mTaskToResize); + } + + @Override + public Dialog onCreateDialog(Bundle args) { + final Context context = this.getActivity(); + LayoutInflater inflater = getActivity().getLayoutInflater(); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + createResizeTaskDialog(context, inflater, builder); + return builder.create(); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java index 502862e..cbf5c05 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java @@ -144,7 +144,7 @@ public class ScreenPinningRequest implements View.OnClickListener { boolean isLandscape = isLandscapePhone(mContext); inflateView(isLandscape); - int bgColor = mContext.getResources().getColor( + int bgColor = mContext.getColor( R.color.screen_pinning_request_window_bg); if (ActivityManager.isHighEndGfx()) { mLayout.setAlpha(0f); diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index 72040fe..d60df9c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -233,23 +233,6 @@ public class SystemServicesProxy { return null; } - /** Returns a list of all the launcher apps sorted by name. */ - public List<ResolveInfo> getLauncherApps() { - if (mPm == null) return new ArrayList<ResolveInfo>(); - - final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); - mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - List<ResolveInfo> activities = mPm.queryIntentActivities(mainIntent, 0 /* flags */); - Collections.sort(activities, new Comparator<ResolveInfo>() { - @Override - public int compare(ResolveInfo o1, ResolveInfo o2) { - return getActivityLabel(o1.activityInfo).compareTo( - getActivityLabel(o2.activityInfo)); - } - }); - return activities; - } - /** Returns whether the recents is currently running */ public boolean isRecentsTopMost(ActivityManager.RunningTaskInfo topTask, AtomicBoolean isHomeTopMost) { @@ -272,27 +255,20 @@ public class SystemServicesProxy { return false; } - /** Create a new stack. */ - public void createNewStack(int displayId, Rect bounds, Intent activity) { - try { - IActivityContainer container = mIam.createStackOnDisplay(displayId); - if (container != null) { - // Resize the stack - resizeStack(container.getStackId(), bounds); - // Start the new activity on that stack - container.startActivity(activity); - } - } catch (RemoteException e) { - e.printStackTrace(); - } + /** Get the bounds of a stack / task. */ + public Rect getTaskBounds(int stackId) { + ActivityManager.StackInfo info = getAllStackInfos().get(stackId); + if (info != null) + return info.bounds; + return new Rect(); } - /** Resizes a stack. */ - public void resizeStack(int stackId, Rect bounds) { + /** Resize a given task. */ + public void resizeTask(int taskId, Rect bounds) { if (mIam == null) return; try { - mIam.resizeStack(stackId, bounds); + mIam.resizeTask(taskId, bounds); } catch (RemoteException e) { e.printStackTrace(); } @@ -406,18 +382,6 @@ public class SystemServicesProxy { } } - /** Moves a task to another stack. */ - public void moveTaskToStack(int taskId, int stackId, boolean toTop) { - if (mIam == null) return; - if (Constants.DebugFlags.App.EnableSystemServicesProxy) return; - - try { - mIam.moveTaskToStack(taskId, stackId, toTop); - } catch (RemoteException e) { - e.printStackTrace(); - } - } - /** Removes the task */ public void removeTask(int taskId) { if (mAm == null) return; diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java index 925d17e..84544ff 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/Utilities.java @@ -33,7 +33,7 @@ public class Utilities { private static Method sPropertyMethod; static { try { - Class<?> c = Class.forName("android.view.GLES20Canvas"); + Class<?> c = Class.forName("android.view.DisplayListCanvas"); sPropertyMethod = c.getDeclaredMethod("setProperty", String.class, String.class); if (!sPropertyMethod.isAccessible()) sPropertyMethod.setAccessible(true); } catch (ClassNotFoundException e) { diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java index 788e473..5d98dda 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java @@ -156,6 +156,7 @@ public class RecentsTaskLoadPlan { if (!mConfig.multiStackEnabled || Constants.DebugFlags.App.EnableMultiStackToSingleStack) { + firstStackId = 0; ArrayList<Task> stackTasks = stacksTasks.get(firstStackId); if (stackTasks == null) { stackTasks = new ArrayList<Task>(); diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java index 887aaba..3192fe6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java @@ -33,7 +33,6 @@ import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; import com.android.systemui.recents.misc.SystemServicesProxy; -import java.util.Collection; import java.util.concurrent.ConcurrentLinkedQueue; diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java index 72f9001..509ad1b 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/FakeShadowDrawable.java @@ -159,9 +159,9 @@ class FakeShadowDrawable extends Drawable { } @Override - public void setColorFilter(ColorFilter cf) { - mCornerShadowPaint.setColorFilter(cf); - mEdgeShadowPaint.setColorFilter(cf); + public void setColorFilter(ColorFilter colorFilter) { + mCornerShadowPaint.setColorFilter(colorFilter); + mEdgeShadowPaint.setColorFilter(colorFilter); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index ea4c4ba..abed7a5 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -42,7 +42,6 @@ import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskStack; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -60,17 +59,12 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV public void onExitToHomeAnimationTriggered(); public void onScreenPinningRequest(); - public void onMultiStackAddStack(); - public void onMultiStackResizeStack(); - public void onMultiStackRemoveStack(); - public void onMultiStackMoveTask(Task t); + public void onTaskResize(Task t); } RecentsConfiguration mConfig; LayoutInflater mInflater; DebugOverlayView mDebugOverlay; - ViewStub mMultiStackDebugStub; - View mMultiStackDebugView; RecentsViewLayoutAlgorithm mLayoutAlgorithm; ArrayList<TaskStack> mStacks; @@ -97,28 +91,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV mLayoutAlgorithm = new RecentsViewLayoutAlgorithm(mConfig); } - @Override - protected void onFinishInflate() { - if (!mConfig.multiStackEnabled) return; - - mMultiStackDebugStub = (ViewStub) findViewById(R.id.multistack_debug_view_stub); - if (mMultiStackDebugView == null) { - mMultiStackDebugView = mMultiStackDebugStub.inflate(); - mMultiStackDebugView.findViewById(R.id.add_stack).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mCb.onMultiStackAddStack(); - } - }); - mMultiStackDebugView.findViewById(R.id.resize_stack).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - mCb.onMultiStackResizeStack(); - } - }); - } - } - /** Sets the callbacks */ public void setCallbacks(RecentsViewCallbacks cb) { mCb = cb; @@ -168,11 +140,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV } } - // Bring the debug view to the front - if (mMultiStackDebugView != null) { - mMultiStackDebugView.bringToFront(); - } - // Trigger a new layout requestLayout(); } @@ -182,6 +149,31 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV return mTaskStackViews; } + /** Gets the next task in the stack - or if the last - the top task */ + public Task getNextTaskOrTopTask(Task taskToSearch) { + Task returnTask = null; + boolean found = false; + List<TaskStackView> stackViews = getTaskStackViews(); + int stackCount = stackViews.size(); + for (int i = stackCount - 1; i >= 0; --i) { + TaskStack stack = stackViews.get(i).getStack(); + ArrayList<Task> taskList = stack.getTasks(); + // Iterate the stack views and try and find the focused task + for (int j = taskList.size() - 1; j >= 0; --j) { + Task task = taskList.get(j); + // Return the next task in the line. + if (found) + return task; + // Remember the first possible task as the top task. + if (returnTask == null) + returnTask = task; + if (task == taskToSearch) + found = true; + } + } + return returnTask; + } + /** Launches the focused task from the first stack if possible */ public boolean launchFocusedTask() { // Get the first stack view @@ -205,6 +197,28 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV return false; } + /** Launches a given task. */ + public boolean launchTask(Task task) { + // Get the first stack view + List<TaskStackView> stackViews = getTaskStackViews(); + int stackCount = stackViews.size(); + for (int i = 0; i < stackCount; i++) { + TaskStackView stackView = stackViews.get(i); + TaskStack stack = stackView.getStack(); + // Iterate the stack views and try and find the given task. + List<TaskView> taskViews = stackView.getTaskViews(); + int taskViewCount = taskViews.size(); + for (int j = 0; j < taskViewCount; j++) { + TaskView tv = taskViews.get(j); + if (tv.getTask() == task) { + onTaskViewClicked(stackView, tv, stack, task, false); + return true; + } + } + } + return false; + } + /** Launches the task that Recents was launched from, if possible */ public boolean launchPreviousTask() { // Get the first stack view @@ -331,11 +345,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV } } - // Measure the multistack debug view - if (mMultiStackDebugView != null) { - mMultiStackDebugView.measure(width, height); - } - setMeasuredDimension(width, height); } @@ -364,18 +373,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV top + stackView.getMeasuredHeight()); } } - - // Layout the multistack debug view - if (mMultiStackDebugView != null) { - Rect taskStackBounds = new Rect(); - mConfig.getAvailableTaskStackBounds(getMeasuredWidth(), getMeasuredHeight(), - mConfig.systemInsets.top, mConfig.systemInsets.right, taskStackBounds); - mMultiStackDebugView.layout(left, - taskStackBounds.bottom - mConfig.systemInsets.bottom - - mMultiStackDebugView.getMeasuredHeight(), - left + mMultiStackDebugView.getMeasuredWidth(), - taskStackBounds.bottom - mConfig.systemInsets.bottom); - } } @Override @@ -639,9 +636,9 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV } @Override - public void onMultiStackMoveTask(Task t) { + public void onTaskResize(Task t) { if (mCb != null) { - mCb.onMultiStackMoveTask(t); + mCb.onTaskResize(t); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index 2318319..e81a1d0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -61,7 +61,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal public void onTaskStackFilterTriggered(); public void onTaskStackUnfilterTriggered(); - public void onMultiStackMoveTask(Task t); + public void onTaskResize(Task t); } RecentsConfiguration mConfig; @@ -879,7 +879,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Start the focus animation when alt-tabbing if (mConfig.launchedWithAltTab && !mConfig.launchedHasConfigurationChanged) { - TaskView tv = taskViews.get(mFocusedTaskIndex); + TaskView tv = getChildViewForTask(mStack.getTasks().get(mFocusedTaskIndex)); if (tv != null) { tv.setFocusedTask(true); } @@ -1339,9 +1339,9 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } @Override - public void onMultiStackMoveTask(TaskView tv) { + public void onTaskResize(TaskView tv) { if (mCb != null) { - mCb.onMultiStackMoveTask(tv.getTask()); + mCb.onTaskResize(tv.getTask()); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java index 6cdddc5..509560eb 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -24,6 +24,7 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.ViewParent; import com.android.systemui.recents.Constants; +import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsConfiguration; import java.util.List; @@ -53,6 +54,8 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { int mScrollTouchSlop; // The page touch slop is used to calculate when we start swiping float mPagingTouchSlop; + // Used to calculate when a tap is outside a task view rectangle. + final int mWindowTouchSlop; SwipeHelper mSwipeHelper; boolean mInterceptedBySwipeHelper; @@ -64,6 +67,7 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); mScrollTouchSlop = configuration.getScaledTouchSlop(); mPagingTouchSlop = configuration.getScaledPagingTouchSlop(); + mWindowTouchSlop = configuration.getScaledWindowTouchSlop(); mSv = sv; mScroller = scroller; mConfig = config; @@ -314,6 +318,9 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { } else if (mScroller.isScrollOutOfBounds()) { // Animate the scroll back into bounds mScroller.animateBoundScroll(); + } else if (mActiveTaskView == null) { + // This tap didn't start on a task. + maybeHideRecentsFromBackgroundTap((int) ev.getX(), (int) ev.getY()); } mActivePointerId = INACTIVE_POINTER_ID; @@ -351,6 +358,34 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { return true; } + /** Hides recents if the up event at (x, y) is a tap on the background area. */ + void maybeHideRecentsFromBackgroundTap(int x, int y) { + // Ignore the up event if it's too far from its start position. The user might have been + // trying to scroll or swipe. + int dx = Math.abs(mInitialMotionX - x); + int dy = Math.abs(mInitialMotionY - y); + if (dx > mScrollTouchSlop || dy > mScrollTouchSlop) { + return; + } + + // Shift the tap position toward the center of the task stack and check to see if it would + // have hit a view. The user might have tried to tap on a task and missed slightly. + int shiftedX = x; + if (x > mSv.getTouchableRegion().centerX()) { + shiftedX -= mWindowTouchSlop; + } else { + shiftedX += mWindowTouchSlop; + } + if (findViewAtPoint(shiftedX, y) != null) { + return; + } + + // The user intentionally tapped on the background, which is like a tap on the "desktop". + // Hide recents and transition to the launcher. + Recents recents = Recents.getInstanceAndStartIfNeeded(mSv.getContext()); + recents.hideRecents(false /* altTab */, true /* homeKey */); + } + /** Handles generic motion events */ public boolean onGenericMotionEvent(MotionEvent ev) { if ((ev.getSource() & InputDevice.SOURCE_CLASS_POINTER) == diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 098f2f9..682775b 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -46,7 +46,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, public void onTaskViewClipStateChanged(TaskView tv); public void onTaskViewFocusChanged(TaskView tv, boolean focused); - public void onMultiStackMoveTask(TaskView tv); + public void onTaskResize(TaskView tv); } RecentsConfiguration mConfig; @@ -732,7 +732,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, dismissTask(); } else if (v == mHeaderView.mMoveTaskButton) { if (mCb != null) { - mCb.onMultiStackMoveTask(tv); + mCb.onTaskResize(tv); } } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java index b827acc..42399a3 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java @@ -24,20 +24,18 @@ import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.ColorStateList; -import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.RippleDrawable; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffXfermode; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.RippleDrawable; +import android.graphics.Rect; import android.util.AttributeSet; -import android.view.MotionEvent; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.FrameLayout; @@ -46,7 +44,9 @@ import android.widget.TextView; import com.android.systemui.R; import com.android.systemui.recents.Constants; import com.android.systemui.recents.RecentsConfiguration; +import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.recents.misc.Utilities; +import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; @@ -54,6 +54,7 @@ import com.android.systemui.recents.model.Task; public class TaskViewHeader extends FrameLayout { RecentsConfiguration mConfig; + private SystemServicesProxy mSsp; // Header views ImageView mMoveTaskButton; @@ -94,6 +95,7 @@ public class TaskViewHeader extends FrameLayout { public TaskViewHeader(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mConfig = RecentsConfiguration.getInstance(); + mSsp = RecentsTaskLoader.getInstance().getSystemServicesProxy(); setWillNotDraw(false); setClipToOutline(true); setOutlineProvider(new ViewOutlineProvider() { @@ -104,11 +106,10 @@ public class TaskViewHeader extends FrameLayout { }); // Load the dismiss resources - Resources res = context.getResources(); - mLightDismissDrawable = res.getDrawable(R.drawable.recents_dismiss_light); - mDarkDismissDrawable = res.getDrawable(R.drawable.recents_dismiss_dark); + mLightDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_light); + mDarkDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_dark); mDismissContentDescription = - res.getString(R.string.accessibility_recents_item_will_be_dismissed); + context.getString(R.string.accessibility_recents_item_will_be_dismissed); // Configure the highlight paint if (sHighlightPaint == null) { @@ -128,9 +129,6 @@ public class TaskViewHeader extends FrameLayout { mActivityDescription = (TextView) findViewById(R.id.activity_description); mDismissButton = (ImageView) findViewById(R.id.dismiss_task); mMoveTaskButton = (ImageView) findViewById(R.id.move_task); - if (mConfig.multiStackEnabled) { - mMoveTaskButton.setVisibility(View.VISIBLE); - } // Hide the backgrounds if they are ripple drawables if (!Constants.DebugFlags.App.EnableTaskFiltering) { @@ -213,6 +211,32 @@ public class TaskViewHeader extends FrameLayout { mLightDismissDrawable : mDarkDismissDrawable); mDismissButton.setContentDescription(String.format(mDismissContentDescription, t.activityLabel)); + mMoveTaskButton.setVisibility((mConfig.multiStackEnabled) ? View.VISIBLE : View.INVISIBLE); + } + + /** Updates the resize task bar button. */ + void updateResizeTaskBarIcon(Task t) { + Rect display = mSsp.getWindowRect(); + Rect taskRect = mSsp.getTaskBounds(t.key.stackId); + int resId = R.drawable.star; + if (display.equals(taskRect)) { + resId = R.drawable.vector_drawable_place_fullscreen; + } else { + boolean top = display.top == taskRect.top; + boolean bottom = display.bottom == taskRect.bottom; + boolean left = display.left == taskRect.left; + boolean right = display.right == taskRect.right; + if (top && bottom && left) { + resId = R.drawable.vector_drawable_place_left; + } else if (top && bottom && right) { + resId = R.drawable.vector_drawable_place_right; + } else if (top && left && right) { + resId = R.drawable.vector_drawable_place_top; + } else if (bottom && left && right) { + resId = R.drawable.vector_drawable_place_bottom; + } + } + mMoveTaskButton.setImageResource(resId); } /** Unbinds the bar view from the task */ @@ -283,23 +307,26 @@ public class TaskViewHeader extends FrameLayout { } if (focused) { + int currentColor = mBackgroundColor; int secondaryColor = getSecondaryColor(mCurrentPrimaryColor, mCurrentPrimaryColorIsDark); int[][] states = new int[][] { + new int[] {}, new int[] { android.R.attr.state_enabled }, new int[] { android.R.attr.state_pressed } }; int[] newStates = new int[]{ + 0, android.R.attr.state_enabled, android.R.attr.state_pressed }; int[] colors = new int[] { + currentColor, secondaryColor, secondaryColor }; mBackground.setColor(new ColorStateList(states, colors)); mBackground.setState(newStates); // Pulse the background color - int currentColor = mBackgroundColor; int lightPrimaryColor = getSecondaryColor(mCurrentPrimaryColor, mCurrentPrimaryColorIsDark); ValueAnimator backgroundColor = ValueAnimator.ofObject(new ArgbEvaluator(), currentColor, lightPrimaryColor); @@ -326,7 +353,7 @@ public class TaskViewHeader extends FrameLayout { mFocusAnimator = new AnimatorSet(); mFocusAnimator.playTogether(backgroundColor, translation); - mFocusAnimator.setStartDelay(750); + mFocusAnimator.setStartDelay(150); mFocusAnimator.setDuration(750); mFocusAnimator.start(); } else { diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java index 42c0f9f..a55e026 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java @@ -21,7 +21,6 @@ import android.graphics.Rect; import android.view.View; import android.view.ViewPropertyAnimator; import android.view.animation.Interpolator; -import com.android.systemui.recents.Constants; /* The transform state for a task view */ @@ -133,6 +132,8 @@ public class TaskViewTransform { /** Reset the transform on a view. */ public static void reset(View v) { + // Cancel any running animations + v.animate().cancel(); v.setTranslationX(0f); v.setTranslationY(0f); v.setTranslationZ(0f); diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java index 1b71668..9d349ab 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java +++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java @@ -724,7 +724,7 @@ class GlobalScreenshot { .setVisibility(Notification.VISIBILITY_PUBLIC) // ok to show outside lockscreen .setCategory(Notification.CATEGORY_ERROR) .setAutoCancel(true) - .setColor(context.getResources().getColor( + .setColor(context.getColor( com.android.internal.R.color.system_notification_accent_color)); Notification n = new Notification.BigTextStyle(b) diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java index a1704ff..74267a5 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java +++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java @@ -17,11 +17,7 @@ package com.android.systemui.settings; import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.res.Resources; import android.os.Bundle; -import android.os.Handler; import android.view.Gravity; import android.view.KeyEvent; import android.view.Window; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java index e021cd4..c0b3a9b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java @@ -94,7 +94,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView = new PathInterpolator(0, 0, 0.5f, 1); private final int mTintedRippleColor; private final int mLowPriorityRippleColor; - private final int mNormalRippleColor; + protected final int mNormalRippleColor; private boolean mDimmed; private boolean mDark; @@ -115,7 +115,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView private OnActivatedListener mOnActivatedListener; private final Interpolator mLinearOutSlowInInterpolator; - private final Interpolator mFastOutSlowInInterpolator; + protected final Interpolator mFastOutSlowInInterpolator; private final Interpolator mSlowOutFastInInterpolator; private final Interpolator mSlowOutLinearInInterpolator; private final Interpolator mLinearInterpolator; @@ -154,15 +154,15 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView mAppearAnimationFilter = new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_ATOP); mRoundedRectCornerRadius = getResources().getDimensionPixelSize( R.dimen.notification_material_rounded_rect_radius); - mLegacyColor = getResources().getColor(R.color.notification_legacy_background_color); - mNormalColor = getResources().getColor(R.color.notification_material_background_color); - mLowPriorityColor = getResources().getColor( + mLegacyColor = context.getColor(R.color.notification_legacy_background_color); + mNormalColor = context.getColor(R.color.notification_material_background_color); + mLowPriorityColor = context.getColor( R.color.notification_material_background_low_priority_color); - mTintedRippleColor = context.getResources().getColor( + mTintedRippleColor = context.getColor( R.color.notification_ripple_tinted_color); - mLowPriorityRippleColor = context.getResources().getColor( + mLowPriorityRippleColor = context.getColor( R.color.notification_ripple_color_low_priority); - mNormalRippleColor = context.getResources().getColor( + mNormalRippleColor = context.getColor( R.color.notification_ripple_untinted_color); } @@ -678,7 +678,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView } } - private int getRippleColor() { + protected int getRippleColor() { if (mBgTint != 0) { return mTintedRippleColor; } else if (mShowingLegacyBackground) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedButton.java new file mode 100644 index 0000000..87c12c2 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedButton.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.Button; + +/** + * A Button which doesn't have overlapping drawing commands + */ +public class AlphaOptimizedButton extends Button { + public AlphaOptimizedButton(Context context) { + super(context); + } + + public AlphaOptimizedButton(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AlphaOptimizedButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public AlphaOptimizedButton(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + public boolean hasOverlappingRendering() { + return false; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedFrameLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedFrameLayout.java index a835c0e..359272e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedFrameLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedFrameLayout.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar; import android.content.Context; import android.util.AttributeSet; import android.widget.FrameLayout; -import android.widget.LinearLayout; /** * A frame layout which does not have overlapping renderings commands and therefore does not need a diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedImageView.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedImageView.java index 094161d..858c118 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedImageView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlphaOptimizedImageView.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar; import android.content.Context; import android.util.AttributeSet; -import android.view.View; import android.widget.ImageView; /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index a0ea25f..55bdcac 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -24,6 +24,7 @@ import android.app.ActivityManagerNative; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; +import android.app.RemoteInput; import android.app.TaskStackBuilder; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; @@ -49,6 +50,7 @@ import android.os.Message; import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -59,6 +61,7 @@ import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.StatusBarNotification; import android.text.TextUtils; import android.util.Log; +import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.view.Display; @@ -70,7 +73,6 @@ import android.view.ViewAnimationUtils; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewParent; -import android.view.ViewStub; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityManager; @@ -94,9 +96,11 @@ import com.android.systemui.SystemUI; import com.android.systemui.recents.Recents; import com.android.systemui.statusbar.NotificationData.Entry; import com.android.systemui.statusbar.phone.NavigationBarView; +import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.HeadsUpNotificationView; import com.android.systemui.statusbar.policy.PreviewInflater; +import com.android.systemui.statusbar.policy.RemoteInputView; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import java.util.ArrayList; @@ -116,6 +120,11 @@ public abstract class BaseStatusBar extends SystemUI implements // STOPSHIP disable once we resolve b/18102199 private static final boolean NOTIFICATION_CLICK_DEBUG = true; + public static final boolean ENABLE_REMOTE_INPUT = + Build.IS_DEBUGGABLE && SystemProperties.getBoolean("debug.enable_remote_input", false); + public static final boolean ENABLE_CHILD_NOTIFICATIONS = Build.IS_DEBUGGABLE + && SystemProperties.getBoolean("debug.child_notifs", false); + protected static final int MSG_SHOW_RECENT_APPS = 1019; protected static final int MSG_HIDE_RECENT_APPS = 1020; protected static final int MSG_TOGGLE_RECENTS_APPS = 1021; @@ -127,7 +136,6 @@ public abstract class BaseStatusBar extends SystemUI implements protected static final int MSG_SHOW_HEADS_UP = 1028; protected static final int MSG_HIDE_HEADS_UP = 1029; protected static final int MSG_ESCALATE_HEADS_UP = 1030; - protected static final int MSG_DECAY_HEADS_UP = 1031; protected static final boolean ENABLE_HEADS_UP = true; // scores above this threshold should be displayed in heads up mode. @@ -150,6 +158,8 @@ public abstract class BaseStatusBar extends SystemUI implements protected NotificationData mNotificationData; protected NotificationStackScrollLayout mStackScroller; + protected NotificationGroupManager mGroupManager = new NotificationGroupManager(); + // for heads up notifications protected HeadsUpNotificationView mHeadsUpNotificationView; protected int mHeadsUpNotificationDecay; @@ -410,7 +420,7 @@ public abstract class BaseStatusBar extends SystemUI implements @Override public void run() { for (StatusBarNotification sbn : notifications) { - addNotification(sbn, currentRanking); + addNotification(sbn, currentRanking, null /* oldEntry */); } } }); @@ -420,61 +430,69 @@ public abstract class BaseStatusBar extends SystemUI implements public void onNotificationPosted(final StatusBarNotification sbn, final RankingMap rankingMap) { if (DEBUG) Log.d(TAG, "onNotificationPosted: " + sbn); - mHandler.post(new Runnable() { - @Override - public void run() { - Notification n = sbn.getNotification(); - boolean isUpdate = mNotificationData.get(sbn.getKey()) != null - || isHeadsUp(sbn.getKey()); - - // Ignore children of notifications that have a summary, since we're not - // going to show them anyway. This is true also when the summary is canceled, - // because children are automatically canceled by NoMan in that case. - if (n.isGroupChild() && - mNotificationData.isGroupWithSummary(sbn.getGroupKey())) { - if (DEBUG) { - Log.d(TAG, "Ignoring group child due to existing summary: " + sbn); - } + if (sbn != null) { + mHandler.post(new Runnable() { + @Override + public void run() { + processForRemoteInput(sbn.getNotification()); + Notification n = sbn.getNotification(); + boolean isUpdate = mNotificationData.get(sbn.getKey()) != null + || isHeadsUp(sbn.getKey()); + + // In case we don't allow child notifications, we ignore children of + // notifications that have a summary, since we're not going to show them + // anyway. This is true also when the summary is canceled, + // because children are automatically canceled by NoMan in that case. + if (!ENABLE_CHILD_NOTIFICATIONS + && mGroupManager.isChildInGroupWithSummary(sbn)) { + if (DEBUG) { + Log.d(TAG, "Ignoring group child due to existing summary: " + sbn); + } - // Remove existing notification to avoid stale data. + // Remove existing notification to avoid stale data. + if (isUpdate) { + removeNotification(sbn.getKey(), rankingMap); + } else { + mNotificationData.updateRanking(rankingMap); + } + return; + } if (isUpdate) { - removeNotification(sbn.getKey(), rankingMap); + updateNotification(sbn, rankingMap); } else { - mNotificationData.updateRanking(rankingMap); + addNotification(sbn, rankingMap, null /* oldEntry */); } - return; } - if (isUpdate) { - updateNotification(sbn, rankingMap); - } else { - addNotification(sbn, rankingMap); - } - } - }); + }); + } } @Override - public void onNotificationRemoved(final StatusBarNotification sbn, + public void onNotificationRemoved(StatusBarNotification sbn, final RankingMap rankingMap) { if (DEBUG) Log.d(TAG, "onNotificationRemoved: " + sbn); - mHandler.post(new Runnable() { - @Override - public void run() { - removeNotification(sbn.getKey(), rankingMap); - } - }); + if (sbn != null) { + final String key = sbn.getKey(); + mHandler.post(new Runnable() { + @Override + public void run() { + removeNotification(key, rankingMap); + } + }); + } } @Override public void onNotificationRankingUpdate(final RankingMap rankingMap) { if (DEBUG) Log.d(TAG, "onRankingUpdate"); + if (rankingMap != null) { mHandler.post(new Runnable() { @Override public void run() { updateNotificationRanking(rankingMap); } }); - } + } } }; @@ -643,7 +661,7 @@ public abstract class BaseStatusBar extends SystemUI implements .setContentText(mContext.getString(R.string.hidden_notifications_text)) .setPriority(Notification.PRIORITY_HIGH) .setOngoing(true) - .setColor(res.getColor(colorRes)) + .setColor(mContext.getColor(colorRes)) .setContentIntent(setupIntent) .addAction(R.drawable.ic_close, mContext.getString(R.string.hidden_notifications_cancel), @@ -694,6 +712,11 @@ public abstract class BaseStatusBar extends SystemUI implements return null; } + @Override + public NotificationGroupManager getGroupManager() { + return mGroupManager; + } + /** * Takes the necessary steps to prepare the status bar for starting an activity, then starts it. * @param action A dismiss action that is called if it's safe to start the activity. @@ -766,7 +789,7 @@ public abstract class BaseStatusBar extends SystemUI implements final int color = sbn.getNotification().color; if (isMediaNotification(entry)) { entry.row.setTintColor(color == Notification.COLOR_DEFAULT - ? mContext.getResources().getColor( + ? mContext.getColor( R.color.notification_material_background_media_default_color) : color); } @@ -826,16 +849,13 @@ public abstract class BaseStatusBar extends SystemUI implements }, false /* afterKeyguardGone */); } - private void inflateGuts(ExpandableNotificationRow row) { - ViewStub stub = (ViewStub) row.findViewById(R.id.notification_guts_stub); - if (stub != null) { - stub.inflate(); - } + private void bindGuts(ExpandableNotificationRow row) { + row.inflateGuts(); final StatusBarNotification sbn = row.getStatusBarNotification(); PackageManager pmUser = getPackageManagerForUser( sbn.getUser().getIdentifier()); row.setTag(sbn.getPackageName()); - final View guts = row.findViewById(R.id.notification_guts); + final View guts = row.getGuts(); final String pkg = sbn.getPackageName(); String appname = pkg; Drawable pkgicon = null; @@ -913,11 +933,11 @@ public abstract class BaseStatusBar extends SystemUI implements return false; } - inflateGuts((ExpandableNotificationRow) v); + ExpandableNotificationRow row = (ExpandableNotificationRow) v; + bindGuts(row); // Assume we are a status_bar_notification_row - final NotificationGuts guts = (NotificationGuts) v.findViewById( - R.id.notification_guts); + final NotificationGuts guts = row.getGuts(); if (guts == null) { // This view has no guts. Examples are the more card or the dismiss all view return false; @@ -1153,7 +1173,7 @@ public abstract class BaseStatusBar extends SystemUI implements // Do nothing } - public abstract void resetHeadsUpDecayTimer(); + public abstract void scheduleHeadsUpDecay(long delay); public abstract void scheduleHeadsUpOpen(); @@ -1182,14 +1202,15 @@ public abstract class BaseStatusBar extends SystemUI implements } if (mUsersAllowingPrivateNotifications.indexOfKey(userHandle) < 0) { - final boolean allowed = 0 != Settings.Secure.getIntForUser( + final boolean allowedByUser = 0 != Settings.Secure.getIntForUser( mContext.getContentResolver(), Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0, userHandle); final int dpmFlags = mDevicePolicyManager.getKeyguardDisabledFeatures(null /* admin */, userHandle); final boolean allowedByDpm = (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS) == 0; - mUsersAllowingPrivateNotifications.append(userHandle, allowed && allowedByDpm); + final boolean allowed = allowedByUser && allowedByDpm; + mUsersAllowingPrivateNotifications.append(userHandle, allowed); return allowed; } @@ -1277,12 +1298,12 @@ public abstract class BaseStatusBar extends SystemUI implements protected void workAroundBadLayerDrawableOpacity(View v) { } - private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) { + protected boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) { return inflateViews(entry, parent, false); } protected boolean inflateViewsForHeadsUp(NotificationData.Entry entry, ViewGroup parent) { - return inflateViews(entry, parent, true); + return inflateViews(entry, parent, true); } private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent, boolean isHeadsUp) { @@ -1323,6 +1344,7 @@ public abstract class BaseStatusBar extends SystemUI implements hasUserChangedExpansion = row.hasUserChangedExpansion(); userExpanded = row.isUserExpanded(); userLocked = row.isUserLocked(); + entry.row.setHeadsUp(isHeadsUp); entry.reset(); if (hasUserChangedExpansion) { row.setUserExpanded(userExpanded); @@ -1334,6 +1356,7 @@ public abstract class BaseStatusBar extends SystemUI implements row = (ExpandableNotificationRow) inflater.inflate(R.layout.status_bar_notification_row, parent, false); row.setExpansionLogger(this, entry.notification.getKey()); + row.setGroupManager(mGroupManager); } workAroundBadLayerDrawableOpacity(row); @@ -1350,11 +1373,13 @@ public abstract class BaseStatusBar extends SystemUI implements (NotificationContentView) row.findViewById(R.id.expandedPublic); row.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + if (ENABLE_REMOTE_INPUT) { + row.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); + } PendingIntent contentIntent = sbn.getNotification().contentIntent; if (contentIntent != null) { - final View.OnClickListener listener = makeClicker(contentIntent, sbn.getKey(), - isHeadsUp); + final View.OnClickListener listener = makeClicker(contentIntent, sbn.getKey()); row.setOnClickListener(listener); } else { row.setOnClickListener(null); @@ -1512,23 +1537,114 @@ public abstract class BaseStatusBar extends SystemUI implements } row.setUserLocked(userLocked); row.setStatusBarNotification(entry.notification); + applyRemoteInput(entry); return true; } - public NotificationClicker makeClicker(PendingIntent intent, String notificationKey, - boolean forHun) { - return new NotificationClicker(intent, notificationKey, forHun); + /** + * Adds RemoteInput actions from the WearableExtender; to be removed once more apps support this + * via first-class API. + * + * TODO: Remove once enough apps specify remote inputs on their own. + */ + private void processForRemoteInput(Notification n) { + if (!ENABLE_REMOTE_INPUT) return; + + if (n.extras != null && n.extras.containsKey("android.wearable.EXTENSIONS") && + (n.actions == null || n.actions.length == 0)) { + Notification.Action viableAction = null; + Notification.WearableExtender we = new Notification.WearableExtender(n); + + List<Notification.Action> actions = we.getActions(); + final int numActions = actions.size(); + + for (int i = 0; i < numActions; i++) { + Notification.Action action = actions.get(i); + RemoteInput[] remoteInputs = action.getRemoteInputs(); + for (RemoteInput ri : action.getRemoteInputs()) { + if (ri.getAllowFreeFormInput()) { + viableAction = action; + break; + } + } + if (viableAction != null) { + break; + } + } + + if (viableAction != null) { + Notification stripped = n.clone(); + Notification.Builder.stripForDelivery(stripped); + stripped.actions = new Notification.Action[] { viableAction }; + stripped.extras.putBoolean("android.rebuild.contentView", true); + stripped.contentView = null; + stripped.extras.putBoolean("android.rebuild.bigView", true); + stripped.bigContentView = null; + + // Don't create the HUN input view for now because input doesn't work there yet. + // TODO: Enable once HUNs can take remote input correctly. + if (false) { + stripped.extras.putBoolean("android.rebuild.hudView", true); + stripped.headsUpContentView = null; + } + + Notification rebuilt = Notification.Builder.rebuild(mContext, stripped); + + n.actions = rebuilt.actions; + n.bigContentView = rebuilt.bigContentView; + n.headsUpContentView = rebuilt.headsUpContentView; + n.publicVersion = rebuilt.publicVersion; + } + } + } + + private void applyRemoteInput(final Entry entry) { + if (!ENABLE_REMOTE_INPUT) return; + + RemoteInput remoteInput = null; + + // See if the notification has exactly one action and this action allows free-form input + // TODO: relax restrictions once we support more than one remote input action. + Notification.Action[] actions = entry.notification.getNotification().actions; + if (actions != null && actions.length == 1) { + if (actions[0].getRemoteInputs() != null) { + for (RemoteInput ri : actions[0].getRemoteInputs()) { + if (ri.getAllowFreeFormInput()) { + remoteInput = ri; + break; + } + } + } + } + + // See if we have somewhere to put that remote input + ViewGroup actionContainer = null; + if (remoteInput != null && entry.expandedBig != null) { + View actionContainerCandidate = entry.expandedBig + .findViewById(com.android.internal.R.id.actions); + if (actionContainerCandidate instanceof ViewGroup) { + actionContainer = (ViewGroup) actionContainerCandidate; + } + } + + if (actionContainer != null) { + actionContainer.removeAllViews(); + actionContainer.addView( + RemoteInputView.inflate(mContext, actionContainer, actions[0], remoteInput)); + } + } + + public NotificationClicker makeClicker(PendingIntent intent, String notificationKey) { + return new NotificationClicker(intent, notificationKey); } protected class NotificationClicker implements View.OnClickListener { private PendingIntent mIntent; private final String mNotificationKey; - private boolean mIsHeadsUp; - public NotificationClicker(PendingIntent intent, String notificationKey, boolean forHun) { + public NotificationClicker(PendingIntent intent, String notificationKey) { mIntent = intent; mNotificationKey = notificationKey; - mIsHeadsUp = forHun; } public void onClick(final View v) { @@ -1541,12 +1657,12 @@ public abstract class BaseStatusBar extends SystemUI implements mCurrentUserId); dismissKeyguardThenExecute(new OnDismissAction() { public boolean onDismiss() { - if (mIsHeadsUp) { + if (mNotificationKey.equals(mHeadsUpNotificationView.getKey())) { // Release the HUN notification to the shade. // // In most cases, when FLAG_AUTO_CANCEL is set, the notification will // become canceled shortly by NoMan, but we can't assume that. - mHeadsUpNotificationView.releaseAndClose(); + mHeadsUpNotificationView.releaseImmediately(); } new Thread() { @Override @@ -1685,6 +1801,21 @@ public abstract class BaseStatusBar extends SystemUI implements if (DEBUG) { Log.d(TAG, "createNotificationViews(notification=" + sbn); } + final StatusBarIconView iconView = createIcon(sbn); + if (iconView == null) { + return null; + } + + // Construct the expanded view. + NotificationData.Entry entry = new NotificationData.Entry(sbn, iconView); + if (!inflateViews(entry, mStackScroller)) { + handleNotificationError(sbn, "Couldn't expand RemoteViews for: " + sbn); + return null; + } + return entry; + } + + protected StatusBarIconView createIcon(StatusBarNotification sbn) { // Construct the icon. Notification n = sbn.getNotification(); final StatusBarIconView iconView = new StatusBarIconView(mContext, @@ -1701,13 +1832,7 @@ public abstract class BaseStatusBar extends SystemUI implements handleNotificationError(sbn, "Couldn't create icon: " + ic); return null; } - // Construct the expanded view. - NotificationData.Entry entry = new NotificationData.Entry(sbn, iconView); - if (!inflateViews(entry, mStackScroller)) { - handleNotificationError(sbn, "Couldn't expand RemoteViews for: " + sbn); - return null; - } - return entry; + return iconView; } protected void addNotificationViews(Entry entry, RankingMap ranking) { @@ -1747,22 +1872,25 @@ public abstract class BaseStatusBar extends SystemUI implements entry.row.setSystemExpanded(top); } } + boolean isInvisibleChild = !mGroupManager.isVisible(entry.notification); boolean showOnKeyguard = shouldShowOnKeyguard(entry.notification); if ((isLockscreenPublicMode() && !mShowLockscreenNotifications) || (onKeyguard && (visibleNotifications >= maxKeyguardNotifications - || !showOnKeyguard))) { + || !showOnKeyguard || isInvisibleChild))) { entry.row.setVisibility(View.GONE); - if (onKeyguard && showOnKeyguard) { + if (onKeyguard && showOnKeyguard && !isInvisibleChild) { mKeyguardIconOverflowContainer.getIconsView().addNotification(entry); } } else { boolean wasGone = entry.row.getVisibility() == View.GONE; entry.row.setVisibility(View.VISIBLE); - if (wasGone) { - // notify the scroller of a child addition - mStackScroller.generateAddAnimation(entry.row, true /* fromMoreCard */); + if (!isInvisibleChild) { + if (wasGone) { + // notify the scroller of a child addition + mStackScroller.generateAddAnimation(entry.row, true /* fromMoreCard */); + } + visibleNotifications++; } - visibleNotifications++; } } @@ -1810,7 +1938,7 @@ public abstract class BaseStatusBar extends SystemUI implements protected abstract boolean shouldDisableNavbarGestures(); public abstract void addNotification(StatusBarNotification notification, - RankingMap ranking); + RankingMap ranking, Entry oldEntry); protected abstract void updateNotificationRanking(RankingMap ranking); public abstract void removeNotification(String key, RankingMap ranking); @@ -1893,12 +2021,13 @@ public abstract class BaseStatusBar extends SystemUI implements && oldPublicContentView.getLayoutId() == publicContentView.getLayoutId()); final boolean shouldInterrupt = shouldInterrupt(notification); - final boolean alertAgain = alertAgain(oldEntry, n); + final boolean alertAgain = shouldInterrupt && alertAgain(oldEntry, n); boolean updateSuccessful = false; if (contentsUnchanged && bigContentsUnchanged && headsUpContentsUnchanged && publicUnchanged) { if (DEBUG) Log.d(TAG, "reusing notification for key: " + key); oldEntry.notification = notification; + mGroupManager.onEntryUpdated(oldEntry, oldNotification); try { if (oldEntry.icon != null) { // Update the icon @@ -1916,20 +2045,20 @@ public abstract class BaseStatusBar extends SystemUI implements } if (wasHeadsUp) { - if (shouldInterrupt) { - updateHeadsUpViews(oldEntry, notification); - if (alertAgain) { - resetHeadsUpDecayTimer(); - } - } else { + // Release may hang on to the views for a bit, so we should always update them. + updateHeadsUpViews(oldEntry, notification); + mHeadsUpNotificationView.updateNotification(oldEntry, alertAgain); + if (!shouldInterrupt) { // we updated the notification above, so release to build a new shade entry - mHeadsUpNotificationView.releaseAndClose(); + mHeadsUpNotificationView.release(); return; } } else { if (shouldInterrupt && alertAgain) { + mStackScroller.setRemoveAnimationEnabled(false); removeNotificationViews(key, ranking); - addNotification(notification, ranking); //this will pop the headsup + mStackScroller.setRemoveAnimationEnabled(true); + addNotification(notification, ranking, oldEntry); //this will pop the headsup } else { updateNotificationViews(oldEntry, notification); } @@ -1946,33 +2075,32 @@ public abstract class BaseStatusBar extends SystemUI implements if (!updateSuccessful) { if (DEBUG) Log.d(TAG, "not reusing notification for key: " + key); if (wasHeadsUp) { - if (shouldInterrupt) { - if (DEBUG) Log.d(TAG, "rebuilding heads up for key: " + key); - Entry newEntry = new Entry(notification, null); - ViewGroup holder = mHeadsUpNotificationView.getHolder(); - if (inflateViewsForHeadsUp(newEntry, holder)) { - mHeadsUpNotificationView.showNotification(newEntry); - if (alertAgain) { - resetHeadsUpDecayTimer(); - } - } else { - Log.w(TAG, "Couldn't create new updated headsup for package " - + contentView.getPackage()); - } + if (DEBUG) Log.d(TAG, "rebuilding heads up for key: " + key); + ViewGroup holder = mHeadsUpNotificationView.getHolder(); + if (inflateViewsForHeadsUp(oldEntry, holder)) { + mHeadsUpNotificationView.updateNotification(oldEntry, alertAgain); } else { + Log.w(TAG, "Couldn't create new updated headsup for package " + + contentView.getPackage()); + } + if (!shouldInterrupt) { if (DEBUG) Log.d(TAG, "releasing heads up for key: " + key); oldEntry.notification = notification; - mHeadsUpNotificationView.releaseAndClose(); + mGroupManager.onEntryUpdated(oldEntry, oldNotification); + mHeadsUpNotificationView.release(); return; } } else { if (shouldInterrupt && alertAgain) { if (DEBUG) Log.d(TAG, "reposting to invoke heads up for key: " + key); + mStackScroller.setRemoveAnimationEnabled(false); removeNotificationViews(key, ranking); - addNotification(notification, ranking); //this will pop the headsup + mStackScroller.setRemoveAnimationEnabled(true); + addNotification(notification, ranking, oldEntry); //this will pop the headsup } else { if (DEBUG) Log.d(TAG, "rebuilding update in place for key: " + key); oldEntry.notification = notification; + mGroupManager.onEntryUpdated(oldEntry, oldNotification); final StatusBarIcon ic = new StatusBarIcon(notification.getPackageName(), notification.getUser(), n.icon, @@ -2032,8 +2160,7 @@ public abstract class BaseStatusBar extends SystemUI implements // update the contentIntent final PendingIntent contentIntent = notification.getNotification().contentIntent; if (contentIntent != null) { - final View.OnClickListener listener = makeClicker(contentIntent, notification.getKey(), - isHeadsUp); + final View.OnClickListener listener = makeClicker(contentIntent, notification.getKey()); entry.row.setOnClickListener(listener); } else { entry.row.setOnClickListener(null); @@ -2041,6 +2168,8 @@ public abstract class BaseStatusBar extends SystemUI implements entry.row.setStatusBarNotification(notification); entry.row.notifyContentUpdated(); entry.row.resetHeight(); + + applyRemoteInput(entry); } protected void notifyHeadsUpScreenOn(boolean screenOn) { @@ -2155,6 +2284,14 @@ public abstract class BaseStatusBar extends SystemUI implements } public boolean isKeyguardSecure() { + if (mStatusBarKeyguardViewManager == null) { + // startKeyguard() hasn't been called yet, so we don't know. + // Make sure anything that needs to know isKeyguardSecure() checks and re-checks this + // value onVisibilityChanged(). + Slog.w(TAG, "isKeyguardSecure() called before startKeyguard(), returning false", + new Throwable()); + return false; + } return mStatusBarKeyguardViewManager.isSecure(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 0b1b883..8f88e73 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -19,6 +19,7 @@ package com.android.systemui.statusbar; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.util.Pair; import com.android.internal.statusbar.IStatusBar; import com.android.internal.statusbar.StatusBarIcon; @@ -57,6 +58,9 @@ public class CommandQueue extends IStatusBar.Stub { private static final int MSG_NOTIFICATION_LIGHT_OFF = 16 << MSG_SHIFT; private static final int MSG_NOTIFICATION_LIGHT_PULSE = 17 << MSG_SHIFT; private static final int MSG_SHOW_SCREEN_PIN_REQUEST = 18 << MSG_SHIFT; + private static final int MSG_APP_TRANSITION_PENDING = 19 << MSG_SHIFT; + private static final int MSG_APP_TRANSITION_CANCELLED = 20 << MSG_SHIFT; + private static final int MSG_APP_TRANSITION_STARTING = 21 << MSG_SHIFT; public static final int FLAG_EXCLUDE_NONE = 0; public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; @@ -99,6 +103,9 @@ public class CommandQueue extends IStatusBar.Stub { public void notificationLightOff(); public void notificationLightPulse(int argb, int onMillis, int offMillis); public void showScreenPinningRequest(); + public void appTransitionPending(); + public void appTransitionCancelled(); + public void appTransitionStarting(long startTime, long duration); } public CommandQueue(Callbacks callbacks, StatusBarIconList list) { @@ -246,6 +253,28 @@ public class CommandQueue extends IStatusBar.Stub { } } + public void appTransitionPending() { + synchronized (mList) { + mHandler.removeMessages(MSG_APP_TRANSITION_PENDING); + mHandler.sendEmptyMessage(MSG_APP_TRANSITION_PENDING); + } + } + + public void appTransitionCancelled() { + synchronized (mList) { + mHandler.removeMessages(MSG_APP_TRANSITION_PENDING); + mHandler.sendEmptyMessage(MSG_APP_TRANSITION_PENDING); + } + } + + public void appTransitionStarting(long startTime, long duration) { + synchronized (mList) { + mHandler.removeMessages(MSG_APP_TRANSITION_STARTING); + mHandler.obtainMessage(MSG_APP_TRANSITION_STARTING, Pair.create(startTime, duration)) + .sendToTarget(); + } + } + private final class H extends Handler { public void handleMessage(Message msg) { final int what = msg.what & MSG_MASK; @@ -328,6 +357,16 @@ public class CommandQueue extends IStatusBar.Stub { case MSG_SHOW_SCREEN_PIN_REQUEST: mCallbacks.showScreenPinningRequest(); break; + case MSG_APP_TRANSITION_PENDING: + mCallbacks.appTransitionPending(); + break; + case MSG_APP_TRANSITION_CANCELLED: + mCallbacks.appTransitionCancelled(); + break; + case MSG_APP_TRANSITION_STARTING: + Pair<Long, Long> data = (Pair<Long, Long>) msg.obj; + mCallbacks.appTransitionStarting(data.first, data.second); + break; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java index f2a5673..00665f4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DismissViewButton.java @@ -21,12 +21,9 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; -import android.os.SystemClock; import android.util.AttributeSet; -import android.view.Choreographer; import android.view.View; import android.view.ViewGroup; -import android.view.ViewRootImpl; import android.widget.Button; import com.android.systemui.R; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java index c9f0260..15a092c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java @@ -162,20 +162,20 @@ public class DragDownHelper implements Gefingerpoken { ? RUBBERBAND_FACTOR_EXPANDABLE : RUBBERBAND_FACTOR_STATIC; float rubberband = heightDelta * rubberbandFactor; - if (expandable && (rubberband + child.getMinHeight()) > child.getMaxHeight()) { - float overshoot = (rubberband + child.getMinHeight()) - child.getMaxHeight(); + if (expandable && (rubberband + child.getMinHeight()) > child.getMaxContentHeight()) { + float overshoot = (rubberband + child.getMinHeight()) - child.getMaxContentHeight(); overshoot *= (1 - RUBBERBAND_FACTOR_STATIC); rubberband -= overshoot; } - child.setActualHeight((int) (child.getMinHeight() + rubberband)); + child.setContentHeight((int) (child.getMinHeight() + rubberband)); } private void cancelExpansion(final ExpandableView child) { - if (child.getActualHeight() == child.getMinHeight()) { + if (child.getContentHeight() == child.getMinHeight()) { return; } - ObjectAnimator anim = ObjectAnimator.ofInt(child, "actualHeight", - child.getActualHeight(), child.getMinHeight()); + ObjectAnimator anim = ObjectAnimator.ofInt(child, "contentHeight", + child.getContentHeight(), child.getMinHeight()); anim.setInterpolator(mInterpolator); anim.setDuration(SPRING_BACK_ANIMATION_LENGTH_MS); anim.addListener(new AnimatorListenerAdapter() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java index 0825aa3..5db0699 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/EmptyShadeView.java @@ -20,11 +20,9 @@ import android.content.Context; import android.content.res.Configuration; import android.util.AttributeSet; import android.view.View; -import android.view.animation.Interpolator; import android.widget.TextView; import com.android.systemui.R; -import com.android.systemui.statusbar.phone.PhoneStatusBar; public class EmptyShadeView extends StackScrollerDecorView { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index a52d0f6..06a174e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -16,9 +16,13 @@ package com.android.systemui.statusbar; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; import android.content.Context; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.service.notification.StatusBarNotification; import android.util.AttributeSet; @@ -26,12 +30,25 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewStub; import android.view.accessibility.AccessibilityEvent; +import android.view.animation.LinearInterpolator; import android.widget.ImageView; + import com.android.systemui.R; +import com.android.systemui.statusbar.phone.NotificationGroupManager; +import com.android.systemui.statusbar.phone.PhoneStatusBar; +import com.android.systemui.statusbar.stack.NotificationChildrenContainer; +import com.android.systemui.statusbar.stack.StackScrollState; +import com.android.systemui.statusbar.stack.StackStateAnimator; +import com.android.systemui.statusbar.stack.StackViewState; + +import java.util.List; public class ExpandableNotificationRow extends ActivatableNotificationView { + + private static final int DEFAULT_DIVIDER_ALPHA = 0x29; + private static final int COLORED_DIVIDER_ALPHA = 0x7B; + private final LinearInterpolator mLinearInterpolator = new LinearInterpolator(); private int mRowMinHeight; - private int mRowMaxHeight; /** Does this row contain layouts that can adapt to row expansion */ private boolean mExpandable; @@ -70,6 +87,27 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { private StatusBarNotification mStatusBarNotification; private boolean mIsHeadsUp; + private View mExpandButton; + private View mExpandButtonDivider; + private ViewStub mExpandButtonStub; + private ViewStub mChildrenContainerStub; + private NotificationGroupManager mGroupManager; + private View mExpandButtonContainer; + private boolean mChildrenExpanded; + private NotificationChildrenContainer mChildrenContainer; + private ValueAnimator mChildExpandAnimator; + private float mChildrenExpandProgress; + private float mExpandButtonStart; + private ViewStub mGutsStub; + private boolean mHasExpandAction; + private boolean mIsSystemChildExpanded; + private OnClickListener mExpandClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + mGroupManager.setGroupExpanded(mStatusBarNotification, + !mChildrenExpanded); + } + }; public void setIconAnimationRunning(boolean running) { setIconAnimationRunning(running, mPublicLayout); @@ -119,6 +157,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { public void setStatusBarNotification(StatusBarNotification statusBarNotification) { mStatusBarNotification = statusBarNotification; updateVetoButton(); + updateExpandButton(); } public StatusBarNotification getStatusBarNotification() { @@ -129,6 +168,101 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mIsHeadsUp = isHeadsUp; } + public void setGroupManager(NotificationGroupManager groupManager) { + mGroupManager = groupManager; + } + + public void addChildNotification(ExpandableNotificationRow row) { + addChildNotification(row, -1); + } + + /** + * Add a child notification to this view. + * + * @param row the row to add + * @param childIndex the index to add it at, if -1 it will be added at the end + */ + public void addChildNotification(ExpandableNotificationRow row, int childIndex) { + if (mChildrenContainer == null) { + mChildrenContainerStub.inflate(); + } + mChildrenContainer.addNotification(row, childIndex); + } + + public void removeChildNotification(ExpandableNotificationRow row) { + if (mChildrenContainer != null) { + mChildrenContainer.removeNotification(row); + } + } + + @Override + public boolean areChildrenExpanded() { + return mChildrenExpanded; + } + + public List<ExpandableNotificationRow> getNotificationChildren() { + return mChildrenContainer == null ? null : mChildrenContainer.getNotificationChildren(); + } + + /** + * Apply the order given in the list to the children. + * + * @param childOrder the new list order + * @return whether the list order has changed + */ + public boolean applyChildOrder(List<ExpandableNotificationRow> childOrder) { + return mChildrenContainer != null && mChildrenContainer.applyChildOrder(childOrder); + } + + public void getChildrenStates(StackScrollState resultState) { + if (mChildrenExpanded) { + StackViewState parentState = resultState.getViewStateForView(this); + mChildrenContainer.getState(resultState, parentState); + } + } + + public void applyChildrenState(StackScrollState state) { + if (mChildrenExpanded) { + mChildrenContainer.applyState(state); + } + } + + public void prepareExpansionChanged(StackScrollState state) { + if (mChildrenExpanded) { + mChildrenContainer.prepareExpansionChanged(state); + } + } + + public void startChildAnimation(StackScrollState finalState, + StackStateAnimator stateAnimator, boolean withDelays, long delay, long duration) { + if (mChildrenExpanded) { + mChildrenContainer.startAnimationToState(finalState, stateAnimator, withDelays, delay, + duration); + } + } + + public ExpandableNotificationRow getViewAtPosition(float y) { + if (!mChildrenExpanded) { + return this; + } else { + ExpandableNotificationRow view = mChildrenContainer.getViewAtPosition(y); + return view == null ? this : view; + } + } + + public NotificationGuts getGuts() { + return mGuts; + } + + protected int calculateContentHeightFromActualHeight(int actualHeight) { + int realActualHeight = actualHeight; + if (hasBottomDecor()) { + realActualHeight -= getBottomDecorHeight(); + } + realActualHeight = Math.max(getMinHeight(), realActualHeight); + return realActualHeight; + } + public interface ExpansionLogger { public void logNotificationExpansion(String key, boolean userAction, boolean expanded); } @@ -145,7 +279,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { super.reset(); mRowMinHeight = 0; final boolean wasExpanded = isExpanded(); - mRowMaxHeight = 0; + mMaxViewHeight = 0; mExpandable = false; mHasUserChangedExpansion = false; mUserLocked = false; @@ -180,18 +314,94 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { super.onFinishInflate(); mPublicLayout = (NotificationContentView) findViewById(R.id.expandedPublic); mPrivateLayout = (NotificationContentView) findViewById(R.id.expanded); - ViewStub gutsStub = (ViewStub) findViewById(R.id.notification_guts_stub); - gutsStub.setOnInflateListener(new ViewStub.OnInflateListener() { + mGutsStub = (ViewStub) findViewById(R.id.notification_guts_stub); + mGutsStub.setOnInflateListener(new ViewStub.OnInflateListener() { @Override public void onInflate(ViewStub stub, View inflated) { mGuts = (NotificationGuts) inflated; mGuts.setClipTopAmount(getClipTopAmount()); mGuts.setActualHeight(getActualHeight()); + mGutsStub = null; + } + }); + mExpandButtonStub = (ViewStub) findViewById(R.id.more_button_stub); + mExpandButtonStub.setOnInflateListener(new ViewStub.OnInflateListener() { + + @Override + public void onInflate(ViewStub stub, View inflated) { + mExpandButtonContainer = inflated; + mExpandButton = inflated.findViewById(R.id.notification_expand_button); + mExpandButtonDivider = inflated.findViewById(R.id.notification_expand_divider); + mExpandButtonContainer.setOnClickListener(mExpandClickListener); + } + }); + mChildrenContainerStub = (ViewStub) findViewById(R.id.child_container_stub); + mChildrenContainerStub.setOnInflateListener(new ViewStub.OnInflateListener() { + + @Override + public void onInflate(ViewStub stub, View inflated) { + mChildrenContainer = (NotificationChildrenContainer) inflated; + mChildrenContainer.setCollapseClickListener(mExpandClickListener); + updateChildrenVisibility(false); } }); mVetoButton = findViewById(R.id.veto); } + public void inflateGuts() { + if (mGuts == null) { + mGutsStub.inflate(); + } + } + + private void updateChildrenVisibility(boolean animated) { + if (mChildrenContainer == null) { + return; + } + if (mChildExpandAnimator != null) { + mChildExpandAnimator.cancel(); + } + float targetProgress = mChildrenExpanded ? 1.0f : 0.0f; + if (animated) { + if (mChildrenExpanded) { + mChildrenContainer.setVisibility(VISIBLE); + } + mExpandButtonStart = mExpandButtonContainer.getTranslationY(); + mChildExpandAnimator = ValueAnimator.ofFloat(mChildrenExpandProgress, targetProgress); + mChildExpandAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + setChildrenExpandProgress((float) animation.getAnimatedValue()); + } + }); + mChildExpandAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mChildExpandAnimator = null; + if (!mChildrenExpanded) { + mChildrenContainer.setVisibility(INVISIBLE); + } + } + }); + mChildExpandAnimator.setInterpolator(mLinearInterpolator); + mChildExpandAnimator.setDuration( + StackStateAnimator.ANIMATION_DURATION_EXPAND_CLICKED); + mChildExpandAnimator.start(); + } else { + setChildrenExpandProgress(targetProgress); + mChildrenContainer.setVisibility(mChildrenExpanded ? VISIBLE : INVISIBLE); + } + } + + private void setChildrenExpandProgress(float progress) { + mChildrenExpandProgress = progress; + updateExpandButtonAppearance(); + NotificationContentView showingLayout = getShowingLayout(); + float alpha = 1.0f - mChildrenExpandProgress; + alpha = PhoneStatusBar.ALPHA_OUT.getInterpolation(alpha); + showingLayout.setAlpha(alpha); + } + @Override public boolean onRequestSendAccessibilityEventInternal(View child, AccessibilityEvent event) { if (super.onRequestSendAccessibilityEventInternal(child, event)) { @@ -217,7 +427,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { public void setHeightRange(int rowMinHeight, int rowMaxHeight) { mRowMinHeight = rowMinHeight; - mRowMaxHeight = rowMaxHeight; + mMaxViewHeight = rowMaxHeight; } public boolean isExpandable() { @@ -281,7 +491,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { if (expand != mIsSystemExpanded) { final boolean wasExpanded = isExpanded(); mIsSystemExpanded = expand; - notifyHeightChanged(); + notifyHeightChanged(false /* needsAnimation */); logExpansionEvent(false, wasExpanded); } } @@ -295,7 +505,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mExpansionDisabled = expansionDisabled; logExpansionEvent(false, wasExpanded); if (wasExpanded != isExpanded()) { - notifyHeightChanged(); + notifyHeightChanged(false /* needsAnimation */); } } } @@ -313,9 +523,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { public void applyExpansionToLayout() { boolean expand = isExpanded(); if (expand && mExpandable) { - setActualHeight(mMaxExpandHeight); + setContentHeight(mMaxExpandHeight); } else { - setActualHeight(mRowMinHeight); + setContentHeight(mRowMinHeight); } } @@ -325,12 +535,26 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { return getActualHeight(); } boolean inExpansionState = isExpanded(); - if (!inExpansionState) { - // not expanded, so we return the collapsed size - return mRowMinHeight; + int maxContentHeight; + if ((!inExpansionState && !mChildrenExpanded) || mShowingPublicForIntrinsicHeight) { + maxContentHeight = mRowMinHeight; + } else if (mChildrenExpanded) { + maxContentHeight = mChildrenContainer.getIntrinsicHeight(); + } else { + maxContentHeight = getMaxExpandHeight(); } + return maxContentHeight + getBottomDecorHeight(); + } + + @Override + protected boolean hasBottomDecor() { + return BaseStatusBar.ENABLE_CHILD_NOTIFICATIONS + && !mIsHeadsUp && mGroupManager.hasGroupChildren(mStatusBarNotification); + } - return mShowingPublicForIntrinsicHeight ? mRowMinHeight : getMaxExpandHeight(); + @Override + protected boolean canHaveBottomDecor() { + return BaseStatusBar.ENABLE_CHILD_NOTIFICATIONS && !mIsHeadsUp; } /** @@ -343,7 +567,16 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { */ private boolean isExpanded() { return !mExpansionDisabled - && (!hasUserChangedExpansion() && isSystemExpanded() || isUserExpanded()); + && (!hasUserChangedExpansion() && (isSystemExpanded() || isSystemChildExpanded()) + || isUserExpanded()); + } + + private boolean isSystemChildExpanded() { + return mIsSystemChildExpanded; + } + + public void setSystemChildExpanded(boolean expanded) { + mIsSystemChildExpanded = expanded; } @Override @@ -357,11 +590,20 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mWasReset = false; } + @Override + protected boolean isChildInvisible(View child) { + + // We don't want to layout the ChildrenContainer if this is a heads-up view, otherwise the + // view will get too high and the shadows will be off. + boolean isInvisibleChildContainer = child == mChildrenContainer && mIsHeadsUp; + return super.isChildInvisible(child) || isInvisibleChildContainer; + } + private void updateMaxExpandHeight() { int intrinsicBefore = getIntrinsicHeight(); mMaxExpandHeight = mPrivateLayout.getMaxHeight(); if (intrinsicBefore != getIntrinsicHeight()) { - notifyHeightChanged(); + notifyHeightChanged(false /* needsAnimation */); } } @@ -428,8 +670,127 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { mVetoButton.setVisibility(isClearable() && !mShowingPublic ? View.VISIBLE : View.GONE); } + public void setChildrenExpanded(boolean expanded, boolean animate) { + mChildrenExpanded = expanded; + updateChildrenVisibility(animate); + } + + public void updateExpandButton() { + boolean hasExpand = hasBottomDecor(); + if (hasExpand != mHasExpandAction) { + if (hasExpand) { + if (mExpandButtonContainer == null) { + mExpandButtonStub.inflate(); + } + mExpandButtonContainer.setVisibility(View.VISIBLE); + updateExpandButtonAppearance(); + updateExpandButtonColor(); + } else if (mExpandButtonContainer != null) { + mExpandButtonContainer.setVisibility(View.GONE); + } + notifyHeightChanged(true /* needsAnimation */); + } + mHasExpandAction = hasExpand; + } + + private void updateExpandButtonAppearance() { + if (mExpandButtonContainer == null) { + return; + } + float expandButtonAlpha = 0.0f; + float expandButtonTranslation = 0.0f; + float containerTranslation = 0.0f; + int minHeight = getMinHeight(); + if (!mChildrenExpanded || mChildExpandAnimator != null) { + int expandActionHeight = getBottomDecorHeight(); + int translationY = getActualHeight() - expandActionHeight; + if (translationY > minHeight) { + containerTranslation = translationY; + expandButtonAlpha = 1.0f; + expandButtonTranslation = 0.0f; + } else { + containerTranslation = minHeight; + float progress = expandActionHeight != 0 + ? (minHeight - translationY) / (float) expandActionHeight + : 1.0f; + expandButtonTranslation = -progress * expandActionHeight * 0.7f; + float alphaProgress = Math.min(progress / 0.7f, 1.0f); + alphaProgress = PhoneStatusBar.ALPHA_OUT.getInterpolation(alphaProgress); + expandButtonAlpha = 1.0f - alphaProgress; + } + } + if (mChildExpandAnimator != null || mChildrenExpanded) { + expandButtonAlpha = (1.0f - mChildrenExpandProgress) + * expandButtonAlpha; + expandButtonTranslation = (1.0f - mChildrenExpandProgress) + * expandButtonTranslation; + float newTranslation = -getBottomDecorHeight(); + + // We don't want to take the actual height of the view as this is already + // interpolated by a custom interpolator leading to a confusing animation. We want + // to have a stable end value to interpolate in between + float collapsedHeight = !mChildrenExpanded + ? Math.max(StackStateAnimator.getFinalActualHeight(this) + - getBottomDecorHeight(), minHeight) + : mExpandButtonStart; + float translationProgress = mFastOutSlowInInterpolator.getInterpolation( + mChildrenExpandProgress); + containerTranslation = (1.0f - translationProgress) * collapsedHeight + + translationProgress * newTranslation; + } + mExpandButton.setAlpha(expandButtonAlpha); + mExpandButtonDivider.setAlpha(expandButtonAlpha); + mExpandButton.setTranslationY(expandButtonTranslation); + mExpandButtonContainer.setTranslationY(containerTranslation); + NotificationContentView showingLayout = getShowingLayout(); + float layoutTranslation = + mExpandButtonContainer.getTranslationY() - showingLayout.getContentHeight(); + layoutTranslation = Math.min(layoutTranslation, 0); + if (!mChildrenExpanded && mChildExpandAnimator == null) { + // Needed for the DragDownHelper in order not to jump there, as the position + // can be negative for a short time. + layoutTranslation = 0; + } + showingLayout.setTranslationY(layoutTranslation); + if (mChildrenContainer != null) { + mChildrenContainer.setTranslationY( + mExpandButtonContainer.getTranslationY() + getBottomDecorHeight()); + } + } + + private void updateExpandButtonColor() { + // TODO: This needs some more baking, currently only the divider is colored according to + // the tint, but legacy black doesn't work yet perfectly for the button etc. + int color = getRippleColor(); + if (color == mNormalRippleColor) { + color = 0; + } + if (mExpandButtonDivider != null) { + applyTint(mExpandButtonDivider, color); + } + if (mChildrenContainer != null) { + mChildrenContainer.setTintColor(color); + } + } + + public static void applyTint(View v, int color) { + int alpha; + if (color != 0) { + alpha = COLORED_DIVIDER_ALPHA; + } else { + color = 0xff000000; + alpha = DEFAULT_DIVIDER_ALPHA; + } + if (v.getBackground() instanceof ColorDrawable) { + ColorDrawable background = (ColorDrawable) v.getBackground(); + background.mutate(); + background.setColor(color); + background.setAlpha(alpha); + } + } + public int getMaxExpandHeight() { - return mShowingPublicForIntrinsicHeight ? mRowMinHeight : mMaxExpandHeight; + return mMaxExpandHeight; } @Override @@ -440,17 +801,19 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { @Override public void setActualHeight(int height, boolean notifyListeners) { - mPrivateLayout.setActualHeight(height); - mPublicLayout.setActualHeight(height); + super.setActualHeight(height, notifyListeners); + int contentHeight = calculateContentHeightFromActualHeight(height); + mPrivateLayout.setContentHeight(contentHeight); + mPublicLayout.setContentHeight(contentHeight); if (mGuts != null) { mGuts.setActualHeight(height); } invalidate(); - super.setActualHeight(height, notifyListeners); + updateExpandButtonAppearance(); } @Override - public int getMaxHeight() { + public int getMaxContentHeight() { NotificationContentView showingLayout = getShowingLayout(); return showingLayout.getMaxHeight(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java index ebc663c..7ae0d6d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java @@ -33,24 +33,32 @@ import java.util.ArrayList; */ public abstract class ExpandableView extends FrameLayout { - private final int mMaxNotificationHeight; - - private OnHeightChangedListener mOnHeightChangedListener; + private final int mBottomDecorHeight; + protected OnHeightChangedListener mOnHeightChangedListener; + protected int mMaxViewHeight; private int mActualHeight; protected int mClipTopAmount; private boolean mActualHeightInitialized; private boolean mDark; private ArrayList<View> mMatchParentViews = new ArrayList<View>(); + private int mClipTopOptimization; + private static Rect mClipRect = new Rect(); public ExpandableView(Context context, AttributeSet attrs) { super(context, attrs); - mMaxNotificationHeight = getResources().getDimensionPixelSize( + mMaxViewHeight = getResources().getDimensionPixelSize( R.dimen.notification_max_height); + mBottomDecorHeight = resolveBottomDecorHeight(); + } + + protected int resolveBottomDecorHeight() { + return getResources().getDimensionPixelSize( + R.dimen.notification_bottom_decor_height); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int ownMaxHeight = mMaxNotificationHeight; + int ownMaxHeight = mMaxViewHeight; int heightMode = MeasureSpec.getMode(heightMeasureSpec); boolean hasFixedHeight = heightMode == MeasureSpec.EXACTLY; boolean isHeightLimited = heightMode == MeasureSpec.AT_MOST; @@ -63,6 +71,9 @@ public abstract class ExpandableView extends FrameLayout { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View child = getChildAt(i); + if (child.getVisibility() == GONE || isChildInvisible(child)) { + continue; + } int childHeightSpec = newHeightSpec; ViewGroup.LayoutParams layoutParams = child.getLayoutParams(); if (layoutParams.height != ViewGroup.LayoutParams.MATCH_PARENT) { @@ -81,7 +92,8 @@ public abstract class ExpandableView extends FrameLayout { mMatchParentViews.add(child); } } - int ownHeight = hasFixedHeight ? ownMaxHeight : maxChildHeight; + int ownHeight = hasFixedHeight ? ownMaxHeight : + isHeightLimited ? Math.min(ownMaxHeight, maxChildHeight) : maxChildHeight; newHeightSpec = MeasureSpec.makeMeasureSpec(ownHeight, MeasureSpec.EXACTLY); for (View child : mMatchParentViews) { child.measure(getChildMeasureSpec( @@ -90,6 +102,10 @@ public abstract class ExpandableView extends FrameLayout { } mMatchParentViews.clear(); int width = MeasureSpec.getSize(widthMeasureSpec); + if (canHaveBottomDecor()) { + // We always account for the expandAction as well. + ownHeight += mBottomDecorHeight; + } setMeasuredDimension(width, ownHeight); } @@ -99,7 +115,7 @@ public abstract class ExpandableView extends FrameLayout { if (!mActualHeightInitialized && mActualHeight == 0) { int initialHeight = getInitialHeight(); if (initialHeight != 0) { - setActualHeight(initialHeight); + setContentHeight(initialHeight); } } } @@ -140,13 +156,14 @@ public abstract class ExpandableView extends FrameLayout { public void setActualHeight(int actualHeight, boolean notifyListeners) { mActualHeightInitialized = true; mActualHeight = actualHeight; + updateClipping(); if (notifyListeners) { - notifyHeightChanged(); + notifyHeightChanged(false /* needsAnimation */); } } - public void setActualHeight(int actualHeight) { - setActualHeight(actualHeight, true); + public void setContentHeight(int contentHeight) { + setActualHeight(contentHeight + getBottomDecorHeight(), true); } /** @@ -159,14 +176,39 @@ public abstract class ExpandableView extends FrameLayout { } /** + * This view may have a bottom decor which will be placed below the content. If it has one, this + * view will be layouted higher than just the content by {@link #mBottomDecorHeight}. + * @return the height of the decor if it currently has one + */ + public int getBottomDecorHeight() { + return hasBottomDecor() ? mBottomDecorHeight : 0; + } + + /** + * @return whether this view may have a bottom decor at all. This will force the view to layout + * itself higher than just it's content + */ + protected boolean canHaveBottomDecor() { + return false; + } + + /** + * @return whether this view has a decor view below it's content. This will make the intrinsic + * height from {@link #getIntrinsicHeight()} higher as well + */ + protected boolean hasBottomDecor() { + return false; + } + + /** * @return The maximum height of this notification. */ - public int getMaxHeight() { + public int getMaxContentHeight() { return getHeight(); } /** - * @return The minimum height of this notification. + * @return The minimum content height of this notification. */ public int getMinHeight() { return getHeight(); @@ -245,9 +287,9 @@ public abstract class ExpandableView extends FrameLayout { return false; } - public void notifyHeightChanged() { + public void notifyHeightChanged(boolean needsAnimation) { if (mOnHeightChangedListener != null) { - mOnHeightChangedListener.onHeightChanged(this); + mOnHeightChangedListener.onHeightChanged(this, needsAnimation); } } @@ -298,6 +340,41 @@ public abstract class ExpandableView extends FrameLayout { outRect.top += getTranslationY() + getClipTopAmount(); } + public int getContentHeight() { + return mActualHeight - getBottomDecorHeight(); + } + + /** + * @return whether the given child can be ignored for layouting and measuring purposes + */ + protected boolean isChildInvisible(View child) { + return false; + } + + public boolean areChildrenExpanded() { + return false; + } + + private void updateClipping() { + mClipRect.set(0, mClipTopOptimization, getWidth(), getActualHeight()); + setClipBounds(mClipRect); + } + + public int getClipTopOptimization() { + return mClipTopOptimization; + } + + /** + * Set that the view will be clipped by a given amount from the top. Contrary to + * {@link #setClipTopAmount} this amount doesn't effect shadows and the background. + * + * @param clipTopOptimization the amount to clip from the top + */ + public void setClipTopOptimization(int clipTopOptimization) { + mClipTopOptimization = clipTopOptimization; + updateClipping(); + } + /** * A listener notifying when {@link #getActualHeight} changes. */ @@ -306,8 +383,9 @@ public abstract class ExpandableView extends FrameLayout { /** * @param view the view for which the height changed, or {@code null} if just the top * padding or the padding between the elements changed + * @param needsAnimation whether the view height needs to be animated */ - void onHeightChanged(ExpandableView view); + void onHeightChanged(ExpandableView view, boolean needsAnimation); /** * Called when the view is reset and therefore the height will change abruptly diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java b/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java index 9f0f84e..0fa088b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/FlingAnimationUtils.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar; import android.animation.Animator; -import android.animation.ValueAnimator; import android.content.Context; import android.view.ViewPropertyAnimator; import android.view.animation.AnimationUtils; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java index 0fc46e9..01aa8d1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBackgroundView.java @@ -44,7 +44,7 @@ public class NotificationBackgroundView extends View { } private void draw(Canvas canvas, Drawable drawable) { - if (drawable != null) { + if (drawable != null && mActualHeight > mClipTopAmount) { drawable.setBounds(0, mClipTopAmount, getWidth(), mActualHeight); drawable.draw(canvas); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java index 914b3d8..745e75d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java @@ -17,21 +17,16 @@ package com.android.systemui.statusbar; import android.content.Context; -import android.graphics.ColorFilter; -import android.graphics.ColorMatrix; -import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; -import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.view.ViewTreeObserver; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.widget.FrameLayout; -import android.widget.ImageView; import com.android.systemui.R; /** @@ -52,7 +47,7 @@ public class NotificationContentView extends FrameLayout { private int mSmallHeight; private int mClipTopAmount; - private int mActualHeight; + private int mContentHeight; private final Interpolator mLinearInterpolator = new LinearInterpolator(); @@ -102,7 +97,7 @@ public class NotificationContentView extends FrameLayout { mSmallHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height); mContractedVisible = true; if (resetActualHeight) { - mActualHeight = mSmallHeight; + mContentHeight = mSmallHeight; } } @@ -159,12 +154,17 @@ public class NotificationContentView extends FrameLayout { } } - public void setActualHeight(int actualHeight) { - mActualHeight = actualHeight; + public void setContentHeight(int contentHeight) { + contentHeight = Math.max(Math.min(contentHeight, getHeight()), getMinHeight()); + mContentHeight = contentHeight; selectLayout(mAnimate /* animate */, false /* force */); updateClipping(); } + public int getContentHeight() { + return mContentHeight; + } + public int getMaxHeight() { // The maximum height is just the laid out height. @@ -181,7 +181,7 @@ public class NotificationContentView extends FrameLayout { } private void updateClipping() { - mClipBounds.set(0, mClipTopAmount, getWidth(), mActualHeight); + mClipBounds.set(0, mClipTopAmount, getWidth(), mContentHeight); setClipBounds(mClipBounds); } @@ -240,7 +240,7 @@ public class NotificationContentView extends FrameLayout { } private boolean showContractedChild() { - return mActualHeight <= mSmallHeight || mExpandedChild == null; + return mContentHeight <= mSmallHeight || mExpandedChild == null; } public void notifyContentUpdated() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index 34c458a..912f414 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -22,9 +22,10 @@ import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.StatusBarNotification; import android.util.ArrayMap; -import android.util.ArraySet; import android.view.View; +import com.android.systemui.statusbar.phone.NotificationGroupManager; + import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; @@ -91,10 +92,12 @@ public class NotificationData { private final ArrayMap<String, Entry> mEntries = new ArrayMap<>(); private final ArrayList<Entry> mSortedAndFiltered = new ArrayList<>(); - private ArraySet<String> mGroupsWithSummaries = new ArraySet<>(); + + private NotificationGroupManager mGroupManager; private RankingMap mRankingMap; private final Ranking mTmpRanking = new Ranking(); + private final Comparator<Entry> mRankingComparator = new Comparator<Entry>() { private final Ranking mRankingA = new Ranking(); private final Ranking mRankingB = new Ranking(); @@ -141,6 +144,7 @@ public class NotificationData { public NotificationData(Environment environment) { mEnvironment = environment; + mGroupManager = environment.getGroupManager(); } /** @@ -163,12 +167,14 @@ public class NotificationData { public void add(Entry entry, RankingMap ranking) { mEntries.put(entry.notification.getKey(), entry); updateRankingAndSort(ranking); + mGroupManager.onEntryAdded(entry); } public Entry remove(String key, RankingMap ranking) { Entry removed = mEntries.remove(key); if (removed == null) return null; updateRankingAndSort(ranking); + mGroupManager.onEntryRemoved(removed); return removed; } @@ -203,7 +209,6 @@ public class NotificationData { // anything changed, and this class should call back the UI so it updates itself. public void filterAndSort() { mSortedAndFiltered.clear(); - mGroupsWithSummaries.clear(); final int N = mEntries.size(); for (int i = 0; i < N; i++) { @@ -214,32 +219,12 @@ public class NotificationData { continue; } - if (sbn.getNotification().isGroupSummary()) { - mGroupsWithSummaries.add(sbn.getGroupKey()); - } mSortedAndFiltered.add(entry); } - // Second pass: Filter out group children with summary. - if (!mGroupsWithSummaries.isEmpty()) { - final int M = mSortedAndFiltered.size(); - for (int i = M - 1; i >= 0; i--) { - Entry ent = mSortedAndFiltered.get(i); - StatusBarNotification sbn = ent.notification; - if (sbn.getNotification().isGroupChild() && - mGroupsWithSummaries.contains(sbn.getGroupKey())) { - mSortedAndFiltered.remove(i); - } - } - } - Collections.sort(mSortedAndFiltered, mRankingComparator); } - public boolean isGroupWithSummary(String groupKey) { - return mGroupsWithSummaries.contains(groupKey); - } - boolean shouldFilterOut(StatusBarNotification sbn) { if (!(mEnvironment.isDeviceProvisioned() || showNotificationEvenIfUnprovisioned(sbn))) { @@ -254,6 +239,11 @@ public class NotificationData { mEnvironment.shouldHideSensitiveContents(sbn.getUserId())) { return true; } + + if (!BaseStatusBar.ENABLE_CHILD_NOTIFICATIONS + && mGroupManager.isChildInGroupWithSummary(sbn)) { + return true; + } return false; } @@ -328,5 +318,6 @@ public class NotificationData { public boolean isDeviceProvisioned(); public boolean isNotificationForCurrentProfiles(StatusBarNotification sbn); public String getCurrentMediaNotificationKey(); + public NotificationGroupManager getGroupManager(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java index bfa3aa5..5fa7070 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java @@ -62,4 +62,13 @@ public class NotificationOverflowContainer extends ActivatableNotificationView { public NotificationOverflowIconsView getIconsView() { return mIconsView; } + + protected int getContentHeightFromActualHeight(int actualHeight) { + int realActualHeight = actualHeight; + if (hasBottomDecor()) { + realActualHeight -= getBottomDecorHeight(); + } + realActualHeight = Math.max(getMinHeight(), realActualHeight); + return realActualHeight; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java index c4c9dac..88bb714 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar; import android.app.Notification; import android.content.Context; -import android.content.res.Configuration; import android.graphics.PorterDuff; import android.util.AttributeSet; import android.widget.ImageView; @@ -46,7 +45,7 @@ public class NotificationOverflowIconsView extends IconMerger { protected void onFinishInflate() { super.onFinishInflate(); mNotificationColorUtil = NotificationColorUtil.getInstance(getContext()); - mTintColor = getResources().getColor(R.color.keyguard_overflow_content_color); + mTintColor = getContext().getColor(R.color.keyguard_overflow_content_color); mIconSize = getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java index 59b62e5..958b8b5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java @@ -60,7 +60,7 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper { super(view); mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha); mIconBackgroundDarkColor = - ctx.getResources().getColor(R.color.doze_small_icon_background_color); + ctx.getColor(R.color.doze_small_icon_background_color); mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(ctx, android.R.interpolator.linear_out_slow_in); resolveViews(); @@ -79,7 +79,8 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper { // If the icon already has a color filter, we assume that we already forced the icon to be // white when we created the notification. - mIconForceGraysaleWhenDark = mIcon != null && mIcon.getDrawable().getColorFilter() != null; + final Drawable iconDrawable = mIcon != null ? mIcon.getDrawable() : null; + mIconForceGraysaleWhenDark = iconDrawable != null && iconDrawable.getColorFilter() != null; } private ImageView resolveIcon(ImageView largeIcon, ImageView rightIcon) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java index 78b9739..44e8b85 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java @@ -19,8 +19,6 @@ package com.android.systemui.statusbar; import android.content.Context; import android.view.View; -import com.android.internal.R; - /** * Wraps the actual notification content view; used to implement behaviors which are different for * the individual templates and custom views. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java b/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java index aea9ec6..602989a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ServiceMonitor.java @@ -177,6 +177,7 @@ public class ServiceMonitor { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); + filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addDataScheme("package"); mContext.registerReceiver(mBroadcastReceiver, filter); @@ -196,13 +197,14 @@ public class ServiceMonitor { + " extras=" + bundleToString(intent.getExtras())); if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) { mHandler.sendEmptyMessage(MSG_START_SERVICE); - } else if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())) { - PackageManager pm = mContext.getPackageManager(); - boolean serviceEnabled = - pm.getApplicationEnabledSetting(mServiceName.getPackageName()) - != PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } else if (Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction()) + || Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { + final PackageManager pm = mContext.getPackageManager(); + final boolean serviceEnabled = isPackageAvailable() + && pm.getApplicationEnabledSetting(mServiceName.getPackageName()) + != PackageManager.COMPONENT_ENABLED_STATE_DISABLED && pm.getComponentEnabledSetting(mServiceName) - != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + != PackageManager.COMPONENT_ENABLED_STATE_DISABLED; if (mBound && !serviceEnabled) { stopService(); scheduleCheckBound(); @@ -279,4 +281,25 @@ public class ServiceMonitor { } return sb.append('}').toString(); } + + public ComponentName getComponent() { + return getComponentNameFromSetting(); + } + + public void setComponent(ComponentName component) { + final String setting = component == null ? null : component.flattenToShortString(); + Settings.Secure.putStringForUser(mContext.getContentResolver(), + mSettingKey, setting, UserHandle.USER_CURRENT); + } + + public boolean isPackageAvailable() { + final ComponentName component = getComponent(); + if (component == null) return false; + try { + return mContext.getPackageManager().isPackageAvailable(component.getPackageName()); + } catch (RuntimeException e) { + Log.w(mTag, "Error checking package availability", e); + return false; + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index d02cd17..e6847d8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -55,7 +55,7 @@ public class StatusBarIconView extends AnimatedImageView { mSlot = slot; mNumberPain = new Paint(); mNumberPain.setTextAlign(Paint.Align.CENTER); - mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color)); + mNumberPain.setColor(context.getColor(R.drawable.notification_number_text_color)); mNumberPain.setAntiAlias(true); setNotification(notification); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java index e89e15d..1601b83 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java @@ -145,12 +145,12 @@ public class BarTransitions { mTransparent = 0x2f0000ff; mWarning = 0xffff0000; } else { - mOpaque = res.getColor(R.color.system_bar_background_opaque); - mSemiTransparent = res.getColor(R.color.system_bar_background_semi_transparent); - mTransparent = res.getColor(R.color.system_bar_background_transparent); - mWarning = res.getColor(com.android.internal.R.color.battery_saver_mode_color); + mOpaque = context.getColor(R.color.system_bar_background_opaque); + mSemiTransparent = context.getColor(R.color.system_bar_background_semi_transparent); + mTransparent = context.getColor(R.color.system_bar_background_transparent); + mWarning = context.getColor(com.android.internal.R.color.battery_saver_mode_color); } - mGradient = res.getDrawable(gradientResourceId); + mGradient = context.getDrawable(gradientResourceId); mInterpolator = new LinearInterpolator(); } @@ -160,7 +160,7 @@ public class BarTransitions { } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { // noop } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index acf7af9..a247c8e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -220,6 +220,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL public void setPhoneStatusBar(PhoneStatusBar phoneStatusBar) { mPhoneStatusBar = phoneStatusBar; + updateCameraVisibility(); // in case onFinishInflate() was called too early } private Intent getCameraIntent() { @@ -231,6 +232,10 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } private void updateCameraVisibility() { + if (mCameraImageView == null) { + // Things are not set up yet; reply hazy, ask again later + return; + } ResolveInfo resolved = mContext.getPackageManager().resolveActivityAsUser(getCameraIntent(), PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser()); @@ -253,7 +258,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private boolean isCameraDisabledByDpm() { final DevicePolicyManager dpm = (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE); - if (dpm != null) { + if (dpm != null && mPhoneStatusBar != null) { try { final int userId = ActivityManagerNative.getDefault().getCurrentUser().id; final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId); @@ -331,7 +336,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } public void launchCamera() { - mFlashlightController.killFlashlight(); Intent intent = getCameraIntent(); boolean wouldLaunchResolverActivity = PreviewInflater.wouldLaunchResolverActivity( mContext, intent, mLockPatternUtils.getCurrentUser()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPreviewContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPreviewContainer.java index 7579039..076e5f1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPreviewContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardPreviewContainer.java @@ -20,7 +20,6 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.WindowInsets; @@ -47,7 +46,7 @@ public class KeyguardPreviewContainer extends FrameLayout { } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { // noop } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 40c9134..13b3898 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.phone; -import android.animation.LayoutTransition; import android.content.Context; import android.content.res.Configuration; import android.graphics.drawable.Drawable; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java index b4a80f0..a712d29 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java @@ -26,7 +26,6 @@ import android.view.animation.AccelerateInterpolator; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.R; -import com.android.systemui.statusbar.policy.KeyButtonView; public final class NavigationBarTransitions extends BarTransitions { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 0d60e35..12ff399 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -50,8 +50,6 @@ import com.android.systemui.R; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.statusbar.DelegateViewHelper; import com.android.systemui.statusbar.policy.DeadZone; -import com.android.systemui.statusbar.policy.KeyButtonView; - import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java new file mode 100644 index 0000000..7072dcb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.phone; + +import android.app.Notification; +import android.service.notification.StatusBarNotification; + +import com.android.systemui.statusbar.ExpandableNotificationRow; +import com.android.systemui.statusbar.NotificationData; +import com.android.systemui.statusbar.StatusBarState; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * A class to handle notifications and their corresponding groups. + */ +public class NotificationGroupManager { + + private final HashMap<String, NotificationGroup> mGroupMap = new HashMap<>(); + private OnGroupChangeListener mListener; + private int mBarState = -1; + + public void setOnGroupChangeListener(OnGroupChangeListener listener) { + mListener = listener; + } + + public boolean isGroupExpanded(StatusBarNotification sbn) { + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + if (group == null) { + return false; + } + return group.expanded; + } + + public void setGroupExpanded(StatusBarNotification sbn, boolean expanded) { + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + if (group == null) { + return; + } + setGroupExpanded(group, expanded); + } + + private void setGroupExpanded(NotificationGroup group, boolean expanded) { + group.expanded = expanded; + if (group.summary != null) { + mListener.onGroupExpansionChanged(group.summary.row, expanded); + } + } + + public void onEntryRemoved(NotificationData.Entry removed) { + onEntryRemovedInternal(removed, removed.notification); + } + + /** + * An entry was removed. + * + * @param removed the removed entry + * @param sbn the notification the entry has, which doesn't need to be the same as it's internal + * notification + */ + private void onEntryRemovedInternal(NotificationData.Entry removed, + final StatusBarNotification sbn) { + Notification notif = sbn.getNotification(); + String groupKey = sbn.getGroupKey(); + final NotificationGroup group = mGroupMap.get(groupKey); + if (notif.isGroupSummary()) { + group.summary = null; + } else { + group.children.remove(removed); + } + if (group.children.isEmpty()) { + if (group.summary == null) { + mGroupMap.remove(groupKey); + } else { + if (group.expanded) { + // only the summary is left. Change it to unexpanded in a few ms. We do this to + // avoid raceconditions + removed.row.post(new Runnable() { + @Override + public void run() { + if (group.children.isEmpty()) { + setGroupExpanded(sbn, false); + } + } + }); + } else { + group.summary.row.updateExpandButton(); + } + } + } + } + + public void onEntryAdded(NotificationData.Entry added) { + StatusBarNotification sbn = added.notification; + Notification notif = sbn.getNotification(); + String groupKey = sbn.getGroupKey(); + NotificationGroup group = mGroupMap.get(groupKey); + if (group == null) { + group = new NotificationGroup(); + mGroupMap.put(groupKey, group); + } + if (notif.isGroupSummary()) { + group.summary = added; + group.expanded = added.row.areChildrenExpanded(); + if (!group.children.isEmpty()) { + mListener.onGroupCreatedFromChildren(group); + } + } else { + group.children.add(added); + if (group.summary != null && group.children.size() == 1 && !group.expanded) { + group.summary.row.updateExpandButton(); + } + } + } + + public void onEntryUpdated(NotificationData.Entry entry, + StatusBarNotification oldNotification) { + if (mGroupMap.get(oldNotification.getGroupKey()) != null) { + onEntryRemovedInternal(entry, oldNotification); + } + onEntryAdded(entry); + } + + public boolean isVisible(StatusBarNotification sbn) { + if (!sbn.getNotification().isGroupChild()) { + return true; + } + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + if (group != null && group.expanded) { + return true; + } + return false; + } + + public boolean hasGroupChildren(StatusBarNotification sbn) { + if (areGroupsProhibited()) { + return false; + } + if (!sbn.getNotification().isGroupSummary()) { + return false; + } + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + if (group == null) { + return false; + } + return !group.children.isEmpty(); + } + + public void setStatusBarState(int newState) { + if (mBarState == newState) { + return; + } + boolean prohibitedBefore = areGroupsProhibited(); + mBarState = newState; + boolean nowProhibited = areGroupsProhibited(); + if (nowProhibited != prohibitedBefore) { + if (nowProhibited) { + for (NotificationGroup group : mGroupMap.values()) { + if (group.expanded) { + setGroupExpanded(group, false); + } + } + } + mListener.onGroupsProhibitedChanged(); + } + } + + private boolean areGroupsProhibited() { + return mBarState == StatusBarState.KEYGUARD; + } + + /** + * @return whether a given notification is a child in a group which has a summary + */ + public boolean isChildInGroupWithSummary(StatusBarNotification sbn) { + if (!sbn.getNotification().isGroupChild()) { + return false; + } + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + if (group == null || group.summary == null) { + return false; + } + return true; + } + + public ExpandableNotificationRow getGroupSummary(StatusBarNotification sbn) { + NotificationGroup group = mGroupMap.get(sbn.getGroupKey()); + return group == null ? null + : group.summary == null ? null + : group.summary.row; + } + + public static class NotificationGroup { + public final HashSet<NotificationData.Entry> children = new HashSet<>(); + public NotificationData.Entry summary; + public boolean expanded; + } + + public interface OnGroupChangeListener { + /** + * The expansion of a group has changed. + * + * @param changedRow the row for which the expansion has changed, which is also the summary + * @param expanded a boolean indicating the new expanded state + */ + void onGroupExpansionChanged(ExpandableNotificationRow changedRow, boolean expanded); + + /** + * Children group policy has changed and children may no be prohibited or allowed. + */ + void onGroupsProhibitedChanged(); + + /** + * A group of children just received a summary notification and should therefore become + * children of it. + * + * @param group the group created + */ + void onGroupCreatedFromChildren(NotificationGroup group); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 7513fc6..195da46 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -1680,7 +1680,7 @@ public class NotificationPanelView extends PanelView implements } @Override - public void onHeightChanged(ExpandableView view) { + public void onHeightChanged(ExpandableView view, boolean needsAnimation) { // Block update if we are in quick settings and just the top padding changed // (i.e. view == null). diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java index e7b0c4c..a03c297 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationsQuickSettingsContainer.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewStub; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 47034e2..4bbf690 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -73,6 +73,7 @@ public abstract class PanelView extends FrameLayout { private boolean mTouchAboveFalsingThreshold; private int mUnlockFalsingThreshold; private boolean mTouchStartedInEmptyArea; + private boolean mMotionAborted; private ValueAnimator mHeightAnimator; private ObjectAnimator mPeekAnimator; @@ -208,7 +209,8 @@ public abstract class PanelView extends FrameLayout { @Override public boolean onTouchEvent(MotionEvent event) { - if (mInstantExpanding || mTouchDisabled) { + if (mInstantExpanding || mTouchDisabled + || (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN)) { return false; } @@ -226,8 +228,8 @@ public abstract class PanelView extends FrameLayout { pointerIndex = 0; mTrackingPointer = event.getPointerId(pointerIndex); } - final float y = event.getY(pointerIndex); final float x = event.getX(pointerIndex); + final float y = event.getY(pointerIndex); if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { mGestureWaitForTouchSlop = mExpandedHeight == 0f; @@ -244,6 +246,7 @@ public abstract class PanelView extends FrameLayout { mPanelClosedOnDown = mExpandedHeight == 0.0f; mHasLayoutedSinceDown = false; mUpdateFlingOnLayout = false; + mMotionAborted = false; mPeekTouching = mPanelClosedOnDown; mTouchAboveFalsingThreshold = false; if (mVelocityTracker == null) { @@ -276,7 +279,13 @@ public abstract class PanelView extends FrameLayout { mInitialTouchX = newX; } break; - + case MotionEvent.ACTION_POINTER_DOWN: + if (mStatusBar.getBarState() == StatusBarState.KEYGUARD) { + mMotionAborted = true; + endMotionEvent(event, x, y, true /* forceCancel */); + return false; + } + break; case MotionEvent.ACTION_MOVE: float h = y - mInitialTouchY; @@ -318,26 +327,35 @@ public abstract class PanelView extends FrameLayout { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: - mTrackingPointer = -1; trackMovement(event); - if ((mTracking && mTouchSlopExceeded) - || Math.abs(x - mInitialTouchX) > mTouchSlop - || Math.abs(y - mInitialTouchY) > mTouchSlop - || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { - float vel = 0f; - float vectorVel = 0f; - if (mVelocityTracker != null) { - mVelocityTracker.computeCurrentVelocity(1000); - vel = mVelocityTracker.getYVelocity(); - vectorVel = (float) Math.hypot( - mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity()); - } - boolean expand = flingExpands(vel, vectorVel) - || event.getActionMasked() == MotionEvent.ACTION_CANCEL; - onTrackingStopped(expand); - DozeLog.traceFling(expand, mTouchAboveFalsingThreshold, - mStatusBar.isFalsingThresholdNeeded(), - mStatusBar.isScreenOnComingFromTouch()); + endMotionEvent(event, x, y, false /* forceCancel */); + break; + } + return !waitForTouchSlop || mTracking; + } + + private void endMotionEvent(MotionEvent event, float x, float y, boolean forceCancel) { + mTrackingPointer = -1; + if ((mTracking && mTouchSlopExceeded) + || Math.abs(x - mInitialTouchX) > mTouchSlop + || Math.abs(y - mInitialTouchY) > mTouchSlop + || event.getActionMasked() == MotionEvent.ACTION_CANCEL + || forceCancel) { + float vel = 0f; + float vectorVel = 0f; + if (mVelocityTracker != null) { + mVelocityTracker.computeCurrentVelocity(1000); + vel = mVelocityTracker.getYVelocity(); + vectorVel = (float) Math.hypot( + mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity()); + } + boolean expand = flingExpands(vel, vectorVel) + || event.getActionMasked() == MotionEvent.ACTION_CANCEL + || forceCancel; + onTrackingStopped(expand); + DozeLog.traceFling(expand, mTouchAboveFalsingThreshold, + mStatusBar.isFalsingThresholdNeeded(), + mStatusBar.isScreenOnComingFromTouch()); // Log collapse gesture if on lock screen. if (!expand && mStatusBar.getBarState() == StatusBarState.KEYGUARD) { float displayDensity = mStatusBar.getDisplayDensity(); @@ -347,24 +365,21 @@ public abstract class PanelView extends FrameLayout { EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_UP_UNLOCK, heightDp, velocityDp); } - fling(vel, expand); - mUpdateFlingOnLayout = expand && mPanelClosedOnDown && !mHasLayoutedSinceDown; - if (mUpdateFlingOnLayout) { - mUpdateFlingVelocity = vel; - } - } else { - boolean expands = onEmptySpaceClick(mInitialTouchX); - onTrackingStopped(expands); - } + fling(vel, expand); + mUpdateFlingOnLayout = expand && mPanelClosedOnDown && !mHasLayoutedSinceDown; + if (mUpdateFlingOnLayout) { + mUpdateFlingVelocity = vel; + } + } else { + boolean expands = onEmptySpaceClick(mInitialTouchX); + onTrackingStopped(expands); + } - if (mVelocityTracker != null) { - mVelocityTracker.recycle(); - mVelocityTracker = null; - } - mPeekTouching = false; - break; + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; } - return !waitForTouchSlop || mTracking; + mPeekTouching = false; } private int getFalsingThreshold() { @@ -389,7 +404,8 @@ public abstract class PanelView extends FrameLayout { @Override public boolean onInterceptTouchEvent(MotionEvent event) { - if (mInstantExpanding) { + if (mInstantExpanding + || (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN)) { return false; } @@ -425,6 +441,7 @@ public abstract class PanelView extends FrameLayout { mTouchStartedInEmptyArea = !isInContentBounds(x, y); mTouchSlopExceeded = false; mJustPeeked = false; + mMotionAborted = false; mPanelClosedOnDown = mExpandedHeight == 0.0f; mHasLayoutedSinceDown = false; mUpdateFlingOnLayout = false; @@ -442,7 +459,15 @@ public abstract class PanelView extends FrameLayout { mInitialTouchY = event.getY(newIndex); } break; - + case MotionEvent.ACTION_POINTER_DOWN: + if (mStatusBar.getBarState() == StatusBarState.KEYGUARD) { + mMotionAborted = true; + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + } + break; case MotionEvent.ACTION_MOVE: final float h = y - mInitialTouchY; trackMovement(event); @@ -461,6 +486,10 @@ public abstract class PanelView extends FrameLayout { break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } break; } return false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 3ee7fb2..2c389fb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -101,7 +101,6 @@ import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityEvent; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; -import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; import android.view.animation.PathInterpolator; @@ -115,7 +114,6 @@ import com.android.systemui.BatteryMeterView; import com.android.systemui.DemoMode; import com.android.systemui.EventLogConstants; import com.android.systemui.EventLogTags; -import com.android.systemui.FontSizeUtils; import com.android.systemui.R; import com.android.systemui.doze.DozeHost; import com.android.systemui.doze.DozeLog; @@ -164,7 +162,7 @@ import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChildLocationsChangedListener; -import com.android.systemui.statusbar.stack.StackScrollState.ViewState; +import com.android.systemui.statusbar.stack.StackViewState; import com.android.systemui.volume.VolumeComponent; import java.io.FileDescriptor; @@ -172,6 +170,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -361,7 +360,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (!mUseHeadsUp) { Log.d(TAG, "dismissing any existing heads up notification on disable event"); setHeadsUpVisibility(false); - mHeadsUpNotificationView.release(); + mHeadsUpNotificationView.releaseImmediately(); removeHeadsUpView(); } else { addHeadsUpView(); @@ -447,10 +446,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // Fingerprint (as computed by getLoggingFingerprint() of the last logged state. private int mLastLoggedStateFingerprint; - private static final int VISIBLE_LOCATIONS = ViewState.LOCATION_FIRST_CARD - | ViewState.LOCATION_TOP_STACK_PEEKING - | ViewState.LOCATION_MAIN_AREA - | ViewState.LOCATION_BOTTOM_STACK_PEEKING; + private static final int VISIBLE_LOCATIONS = StackViewState.LOCATION_FIRST_CARD + | StackViewState.LOCATION_TOP_STACK_PEEKING + | StackViewState.LOCATION_MAIN_AREA + | StackViewState.LOCATION_BOTTOM_STACK_PEEKING; private final OnChildLocationsChangedListener mNotificationLocationsChangedListener = new OnChildLocationsChangedListener() { @@ -526,6 +525,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, goToLockedShade(null); } }; + private HashMap<ExpandableNotificationRow, List<ExpandableNotificationRow>> mTmpChildOrderMap + = new HashMap<>(); @Override public void start() { @@ -534,8 +535,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, updateDisplaySize(); mScrimSrcModeEnabled = mContext.getResources().getBoolean( R.bool.config_status_bar_scrim_behind_use_src); - mLightModeIconColor = mContext.getResources().getColor(R.color.light_mode_icon_color, - mContext.getTheme()); + mLightModeIconColor = mContext.getColor(R.color.light_mode_icon_color); super.start(); // calls createAndAddWindows() @@ -612,7 +612,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (!ActivityManager.isHighEndGfx()) { mStatusBarWindow.setBackground(null); - mNotificationPanel.setBackground(new FastColorDrawable(context.getResources().getColor( + mNotificationPanel.setBackground(new FastColorDrawable(context.getColor( R.color.notification_panel_solid_background))); } if (ENABLE_HEADS_UP) { @@ -666,6 +666,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, R.id.notification_stack_scroller); mStackScroller.setLongPressListener(getNotificationLongClicker()); mStackScroller.setPhoneStatusBar(this); + mStackScroller.setGroupManager(mGroupManager); + mGroupManager.setOnGroupChangeListener(mStackScroller); mKeyguardIconOverflowContainer = (NotificationOverflowContainer) LayoutInflater.from(mContext).inflate( @@ -857,9 +859,20 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, final ArrayList<View> viewsToHide = new ArrayList<View>(numChildren); for (int i = 0; i < numChildren; i++) { final View child = mStackScroller.getChildAt(i); - if (mStackScroller.canChildBeDismissed(child)) { - if (child.getVisibility() == View.VISIBLE) { - viewsToHide.add(child); + if (child instanceof ExpandableNotificationRow) { + if (mStackScroller.canChildBeDismissed(child)) { + if (child.getVisibility() == View.VISIBLE) { + viewsToHide.add(child); + } + } + ExpandableNotificationRow row = (ExpandableNotificationRow) child; + List<ExpandableNotificationRow> children = row.getNotificationChildren(); + if (row.areChildrenExpanded() && children != null) { + for (ExpandableNotificationRow childRow : children) { + if (childRow.getVisibility() == View.VISIBLE) { + viewsToHide.add(childRow); + } + } } } } @@ -1161,11 +1174,19 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } @Override - public void addNotification(StatusBarNotification notification, RankingMap ranking) { + public void addNotification(StatusBarNotification notification, RankingMap ranking, + Entry oldEntry) { if (DEBUG) Log.d(TAG, "addNotification key=" + notification.getKey()); if (mUseHeadsUp && shouldInterrupt(notification)) { if (DEBUG) Log.d(TAG, "launching notification in heads up mode"); - Entry interruptionCandidate = new Entry(notification, null); + Entry interruptionCandidate = oldEntry; + if (interruptionCandidate == null) { + final StatusBarIconView iconView = createIcon(notification); + if (iconView == null) { + return; + } + interruptionCandidate = new Entry(notification, iconView); + } ViewGroup holder = mHeadsUpNotificationView.getHolder(); if (inflateViewsForHeadsUp(interruptionCandidate, holder)) { // 1. Populate mHeadsUpNotificationView @@ -1200,12 +1221,12 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, setAreThereNotifications(); } - public void displayNotificationFromHeadsUp(StatusBarNotification notification) { - NotificationData.Entry shadeEntry = createNotificationViews(notification); - if (shadeEntry == null) { - return; - } + public void displayNotificationFromHeadsUp(Entry shadeEntry) { + + // The notification comes from the headsup, let's inflate the normal layout again + inflateViews(shadeEntry, mStackScroller); shadeEntry.setInterruption(); + shadeEntry.row.setHeadsUp(false); addNotificationViews(shadeEntry, null); // Recalculate the position of the sliding windows and the titles. @@ -1213,33 +1234,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } @Override - public void resetHeadsUpDecayTimer() { - mHandler.removeMessages(MSG_DECAY_HEADS_UP); - if (mUseHeadsUp && mHeadsUpNotificationDecay > 0 - && mHeadsUpNotificationView.isClearable()) { - mHandler.sendEmptyMessageDelayed(MSG_DECAY_HEADS_UP, mHeadsUpNotificationDecay); - } - } - - @Override - public void scheduleHeadsUpOpen() { - mHandler.removeMessages(MSG_SHOW_HEADS_UP); - mHandler.sendEmptyMessage(MSG_SHOW_HEADS_UP); - } - - @Override - public void scheduleHeadsUpClose() { - mHandler.removeMessages(MSG_HIDE_HEADS_UP); - mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP); - } - - @Override - public void scheduleHeadsUpEscalation() { - mHandler.removeMessages(MSG_ESCALATE_HEADS_UP); - mHandler.sendEmptyMessage(MSG_ESCALATE_HEADS_UP); - } - - @Override protected void updateNotificationRanking(RankingMap ranking) { mNotificationData.updateRanking(ranking); updateNotifications(); @@ -1247,9 +1241,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override public void removeNotification(String key, RankingMap ranking) { - if (ENABLE_HEADS_UP && mHeadsUpNotificationView.getEntry() != null - && key.equals(mHeadsUpNotificationView.getEntry().notification.getKey())) { - mHeadsUpNotificationView.clear(); + if (ENABLE_HEADS_UP) { + mHeadsUpNotificationView.removeNotification(key); } StatusBarNotification old = removeNotificationViews(key, ranking); @@ -1318,10 +1311,23 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, ent.row.setShowingLegacyBackground(true); } } - toShow.add(ent.row); + if (mGroupManager.isChildInGroupWithSummary(ent.row.getStatusBarNotification())) { + ExpandableNotificationRow summary = mGroupManager.getGroupSummary( + ent.row.getStatusBarNotification()); + List<ExpandableNotificationRow> orderedChildren = + mTmpChildOrderMap.get(summary); + if (orderedChildren == null) { + orderedChildren = new ArrayList<>(); + mTmpChildOrderMap.put(summary, orderedChildren); + } + orderedChildren.add(ent.row); + } else { + toShow.add(ent.row); + } + } - ArrayList<View> toRemove = new ArrayList<View>(); + ArrayList<View> toRemove = new ArrayList<>(); for (int i=0; i< mStackScroller.getChildCount(); i++) { View child = mStackScroller.getChildAt(i); if (!toShow.contains(child) && child instanceof ExpandableNotificationRow) { @@ -1350,17 +1356,22 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, continue; } - if (child == toShow.get(j)) { - // Everything is well, advance both lists. - j++; - continue; + ExpandableNotificationRow targetChild = toShow.get(j); + if (child != targetChild) { + // Oops, wrong notification at this position. Put the right one + // here and advance both lists. + mStackScroller.changeViewPosition(targetChild, i); } - - // Oops, wrong notification at this position. Put the right one - // here and advance both lists. - mStackScroller.changeViewPosition(toShow.get(j), i); j++; + } + + // lets handle the child notifications now + updateNotificationShadeForChildren(); + + // clear the map again for the next usage + mTmpChildOrderMap.clear(); + updateRowStates(); updateSpeedbump(); updateClearAll(); @@ -1375,6 +1386,52 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mShadeUpdates.check(); } + private void updateNotificationShadeForChildren() { + ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>(); + boolean orderChanged = false; + for (int i = 0; i < mStackScroller.getChildCount(); i++) { + View view = mStackScroller.getChildAt(i); + if (!(view instanceof ExpandableNotificationRow)) { + // We don't care about non-notification views. + continue; + } + + ExpandableNotificationRow parent = (ExpandableNotificationRow) view; + List<ExpandableNotificationRow> children = parent.getNotificationChildren(); + List<ExpandableNotificationRow> orderedChildren = mTmpChildOrderMap.get(parent); + + // lets first remove all undesired children + if (children != null) { + toRemove.clear(); + for (ExpandableNotificationRow childRow : children) { + if (orderedChildren == null || !orderedChildren.contains(childRow)) { + toRemove.add(childRow); + } + } + for (ExpandableNotificationRow remove : toRemove) { + parent.removeChildNotification(remove); + mStackScroller.notifyGroupChildRemoved(remove); + } + } + + // We now add all the children which are not in there already + for (int childIndex = 0; orderedChildren != null && childIndex < orderedChildren.size(); + childIndex++) { + ExpandableNotificationRow childView = orderedChildren.get(childIndex); + if (children == null || !children.contains(childView)) { + parent.addChildNotification(childView, childIndex); + mStackScroller.notifyGroupChildAdded(childView); + } + } + + // Finally after removing and adding has been beformed we can apply the order. + orderChanged |= parent.applyChildOrder(orderedChildren); + } + if (orderChanged) { + mStackScroller.generateChildOrderChangedEvent(); + } + } + private boolean packageHasVisibilityOverride(String key) { return mNotificationData.getVisibilityOverride(key) != NotificationListenerService.Ranking.VISIBILITY_NO_OVERRIDE; @@ -1401,6 +1458,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, final int N = activeNotifications.size(); for (int i = 0; i < N; i++) { Entry entry = activeNotifications.get(i); + boolean isChild = !isTopLevelChild(entry); + if (isChild) { + continue; + } if (entry.row.getVisibility() != View.GONE && mNotificationData.isAmbient(entry.key)) { speedbumpIndex = currentIndex; @@ -1411,6 +1472,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mStackScroller.updateSpeedBumpIndex(speedbumpIndex); } + public static boolean isTopLevelChild(Entry entry) { + return entry.row.getParent() instanceof NotificationStackScrollLayout; + } + @Override protected void updateNotifications() { mNotificationData.filterAndSort(); @@ -1870,16 +1935,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, case MSG_SHOW_HEADS_UP: setHeadsUpVisibility(true); break; - case MSG_DECAY_HEADS_UP: - mHeadsUpNotificationView.release(); - setHeadsUpVisibility(false); - break; - case MSG_HIDE_HEADS_UP: - mHeadsUpNotificationView.release(); - setHeadsUpVisibility(false); - break; case MSG_ESCALATE_HEADS_UP: escalateHeadsUp(); + case MSG_HIDE_HEADS_UP: + mHeadsUpNotificationView.releaseImmediately(); setHeadsUpVisibility(false); break; case MSG_LAUNCH_TRANSITION_TIMEOUT: @@ -1889,11 +1948,41 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } } + @Override + public void scheduleHeadsUpDecay(long delay) { + mHandler.removeMessages(MSG_HIDE_HEADS_UP); + if (mHeadsUpNotificationView.isClearable()) { + mHandler.sendEmptyMessageDelayed(MSG_HIDE_HEADS_UP, delay); + } + } + + @Override + public void scheduleHeadsUpOpen() { + mHandler.removeMessages(MSG_HIDE_HEADS_UP); + mHandler.removeMessages(MSG_SHOW_HEADS_UP); + mHandler.sendEmptyMessage(MSG_SHOW_HEADS_UP); + } + + @Override + public void scheduleHeadsUpClose() { + mHandler.removeMessages(MSG_HIDE_HEADS_UP); + if (mHeadsUpNotificationView.getVisibility() != View.GONE) { + mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP); + } + } + + @Override + public void scheduleHeadsUpEscalation() { + mHandler.removeMessages(MSG_HIDE_HEADS_UP); + mHandler.removeMessages(MSG_ESCALATE_HEADS_UP); + mHandler.sendEmptyMessage(MSG_ESCALATE_HEADS_UP); + } + /** if the interrupting notification had a fullscreen intent, fire it now. */ private void escalateHeadsUp() { if (mHeadsUpNotificationView.getEntry() != null) { final StatusBarNotification sbn = mHeadsUpNotificationView.getEntry().notification; - mHeadsUpNotificationView.release(); + mHeadsUpNotificationView.releaseImmediately(); final Notification notification = sbn.getNotification(); if (notification.fullScreenIntent != null) { if (DEBUG) @@ -2734,10 +2823,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mHeadsUpNotificationView.setVisibility(vis ? View.VISIBLE : View.GONE); } - public void onHeadsUpDismissed() { - mHeadsUpNotificationView.dismiss(); - } - /** * Reload some of our resources when the configuration changes. * @@ -2772,7 +2857,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore); - mHeadsUpNotificationDecay = res.getInteger(R.integer.heads_up_notification_decay); mRowMinHeight = res.getDimensionPixelSize(R.dimen.notification_min_height); mRowMaxHeight = res.getDimensionPixelSize(R.dimen.notification_max_height); @@ -2941,7 +3025,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { } @Override @@ -3077,7 +3161,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mLeaveOpenOnKeyguardHide = false; if (mDraggedDownRow != null) { mDraggedDownRow.setUserLocked(false); - mDraggedDownRow.notifyHeightChanged(); + mDraggedDownRow.notifyHeightChanged(false /* needsAnimation */); mDraggedDownRow = null; } } @@ -3127,6 +3211,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mLaunchTransitionFadingAway = false; } }); + mIconController.appTransitionStarting(SystemClock.uptimeMillis(), + StatusBarIconController.DEFAULT_TINT_ANIMATION_DURATION); } }; if (mNotificationPanel.isLaunchTransitionRunning()) { @@ -3194,16 +3280,31 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } /** + * Notifies the status bar that Keyguard is going away very soon. + */ + public void keyguardGoingAway() { + + // Treat Keyguard exit animation as an app transition to achieve nice transition for status + // bar. + mIconController.appTransitionPending(); + } + + /** * Notifies the status bar the Keyguard is fading away with the specified timings. * - * @param delay the animation delay in miliseconds + * @param startTime the start time of the animations in uptime millis + * @param delay the precalculated animation delay in miliseconds * @param fadeoutDuration the duration of the exit animation, in milliseconds */ - public void setKeyguardFadingAway(long delay, long fadeoutDuration) { + public void setKeyguardFadingAway(long startTime, long delay, long fadeoutDuration) { mKeyguardFadingAway = true; mKeyguardFadingAwayDelay = delay; mKeyguardFadingAwayDuration = fadeoutDuration; mWaitingForKeyguardExit = false; + mIconController.appTransitionStarting( + startTime + fadeoutDuration + - StatusBarIconController.DEFAULT_TINT_ANIMATION_DURATION, + StatusBarIconController.DEFAULT_TINT_ANIMATION_DURATION); disable(mDisabledUnmodified, true /* animate */); } @@ -3219,8 +3320,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } private void updatePublicMode() { - setLockscreenPublicMode(mStatusBarKeyguardViewManager.isShowing() - && mStatusBarKeyguardViewManager.isSecure(mCurrentUserId)); + setLockscreenPublicMode( + mStatusBarKeyguardViewManager.isShowing() && mStatusBarKeyguardViewManager + .isSecure(mCurrentUserId)); } private void updateKeyguardState(boolean goingToFullShade, boolean fromShadeLocked) { @@ -3364,6 +3466,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } } mState = state; + mGroupManager.setStatusBarState(state); mStatusBarWindowManager.setStatusBarState(state); } @@ -3647,6 +3750,31 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } } + @Override + public void appTransitionPending() { + + // Use own timings when Keyguard is going away, see keyguardGoingAway and + // setKeyguardFadingAway + if (!mKeyguardFadingAway) { + mIconController.appTransitionPending(); + } + } + + @Override + public void appTransitionCancelled() { + mIconController.appTransitionCancelled(); + } + + @Override + public void appTransitionStarting(long startTime, long duration) { + + // Use own timings when Keyguard is going away, see keyguardGoingAway and + // setKeyguardFadingAway + if (!mKeyguardFadingAway) { + mIconController.appTransitionStarting(startTime, duration); + } + } + private final class ShadeUpdates { private final ArraySet<String> mVisibleNotifications = new ArraySet<String>(); private final ArraySet<String> mNewVisibleNotifications = new ArraySet<String>(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index e8a000c..2236aae 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -33,6 +33,7 @@ import android.util.Log; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.R; +import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; @@ -198,7 +199,11 @@ public class PhoneStatusBarPolicy { int volumeIconId = 0; String volumeDescription = null; - if (mZen == Global.ZEN_MODE_NO_INTERRUPTIONS) { + if (DndTile.isVisible(mContext)) { + zenVisible = mZen != Global.ZEN_MODE_OFF; + zenIconId = R.drawable.stat_sys_dnd; + zenDescription = mContext.getString(R.string.quick_settings_dnd_label); + } else if (mZen == Global.ZEN_MODE_NO_INTERRUPTIONS) { zenVisible = true; zenIconId = R.drawable.stat_sys_zen_none; zenDescription = mContext.getString(R.string.zen_no_interruptions); @@ -208,7 +213,12 @@ public class PhoneStatusBarPolicy { zenDescription = mContext.getString(R.string.zen_important_interruptions); } - if (mZen != Global.ZEN_MODE_NO_INTERRUPTIONS && + if (DndTile.isVisible(mContext) + && audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT) { + volumeVisible = true; + volumeIconId = R.drawable.stat_sys_ringer_silent; + volumeDescription = mContext.getString(R.string.accessibility_ringer_silent); + } else if (mZen != Global.ZEN_MODE_NO_INTERRUPTIONS && audioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE) { volumeVisible = true; volumeIconId = R.drawable.stat_sys_ringer_vibrate; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java index 45a1386..954eb10 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java @@ -41,6 +41,7 @@ import com.android.systemui.qs.tiles.IntentTile; import com.android.systemui.qs.tiles.LocationTile; import com.android.systemui.qs.tiles.RotationLockTile; import com.android.systemui.qs.tiles.WifiTile; +import com.android.systemui.qs.tiles.DndTile; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.CastController; @@ -256,6 +257,7 @@ public class QSTileHost implements QSTile.Host { else if (tileSpec.equals("inversion")) return new ColorInversionTile(this); else if (tileSpec.equals("cell")) return new CellularTile(this); else if (tileSpec.equals("airplane")) return new AirplaneModeTile(this); + else if (tileSpec.equals("dnd")) return new DndTile(this); else if (tileSpec.equals("rotation")) return new RotationLockTile(this); else if (tileSpec.equals("flashlight")) return new FlashlightTile(this); else if (tileSpec.equals("location")) return new LocationTile(this); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 5622993..c49f620 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -16,11 +16,14 @@ package com.android.systemui.statusbar.phone; +import android.animation.ValueAnimator; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; +import android.os.Handler; +import android.os.SystemClock; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; @@ -48,9 +51,12 @@ import java.util.ArrayList; */ public class StatusBarIconController { + public static final long DEFAULT_TINT_ANIMATION_DURATION = 120; + private Context mContext; private PhoneStatusBar mPhoneStatusBar; private Interpolator mLinearOutSlowIn; + private Interpolator mFastOutSlowIn; private DemoStatusIcons mDemoStatusIcons; private NotificationColorUtil mNotificationColorUtil; @@ -69,6 +75,23 @@ public class StatusBarIconController { private int mIconTint = Color.WHITE; + private boolean mTransitionPending; + private boolean mTintChangePending; + private int mPendingIconTint; + private ValueAnimator mTintAnimator; + + private final Handler mHandler; + private boolean mTransitionDeferring; + private long mTransitionDeferringStartTime; + private long mTransitionDeferringDuration; + + private final Runnable mTransitionDeferringDoneRunnable = new Runnable() { + @Override + public void run() { + mTransitionDeferring = false; + } + }; + public StatusBarIconController(Context context, View statusBar, View keyguardStatusBar, PhoneStatusBar phoneStatusBar) { mContext = context; @@ -86,6 +109,9 @@ public class StatusBarIconController { mClock = (TextView) statusBar.findViewById(R.id.clock); mLinearOutSlowIn = AnimationUtils.loadInterpolator(mContext, android.R.interpolator.linear_out_slow_in); + mFastOutSlowIn = AnimationUtils.loadInterpolator(mContext, + android.R.interpolator.fast_out_slow_in); + mHandler = new Handler(); updateResources(); } @@ -132,13 +158,16 @@ public class StatusBarIconController { final int N = activeNotifications.size(); ArrayList<StatusBarIconView> toShow = new ArrayList<>(N); - // Filter out ambient notifications. + // Filter out ambient notifications and notification children. for (int i = 0; i < N; i++) { NotificationData.Entry ent = activeNotifications.get(i); if (notificationData.isAmbient(ent.key) && !NotificationData.showNotificationEvenIfUnprovisioned(ent.notification)) { continue; } + if (!PhoneStatusBar.isTopLevelChild(ent)) { + continue; + } toShow.add(ent.icon); } @@ -268,10 +297,49 @@ public class StatusBarIconController { } public void setIconTint(int tint) { + if (mTransitionPending) { + deferIconTintChange(tint); + } else if (mTransitionDeferring) { + animateIconTint(tint, + Math.max(0, mTransitionDeferringStartTime - SystemClock.uptimeMillis()), + mTransitionDeferringDuration); + } else { + animateIconTint(tint, 0 /* delay */, DEFAULT_TINT_ANIMATION_DURATION); + } + } + + private void animateIconTint(int targetTint, long delay, long duration) { + if (mTintAnimator != null) { + mTintAnimator.cancel(); + } + if (mIconTint == targetTint) { + return; + } + mTintAnimator = ValueAnimator.ofArgb(mIconTint, targetTint); + mTintAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + setIconTintInternal((Integer) animation.getAnimatedValue()); + } + }); + mTintAnimator.setDuration(duration); + mTintAnimator.setStartDelay(delay); + mTintAnimator.setInterpolator(mFastOutSlowIn); + mTintAnimator.start(); + } + private void setIconTintInternal(int tint) { mIconTint = tint; applyIconTint(); } + private void deferIconTintChange(int tint) { + if (mTintChangePending && tint == mPendingIconTint) { + return; + } + mTintChangePending = true; + mPendingIconTint = tint; + } + private void applyIconTint() { for (int i = 0; i < mStatusIcons.getChildCount(); i++) { StatusBarIconView v = (StatusBarIconView) mStatusIcons.getChildAt(i); @@ -305,4 +373,36 @@ public class StatusBarIconController { v.setTag(R.id.icon_is_grayscale, grayscale); return grayscale; } + + public void appTransitionPending() { + mTransitionPending = true; + } + + public void appTransitionCancelled() { + if (mTransitionPending && mTintChangePending) { + mTintChangePending = false; + animateIconTint(mPendingIconTint, 0 /* delay */, DEFAULT_TINT_ANIMATION_DURATION); + } + mTransitionPending = false; + } + + public void appTransitionStarting(long startTime, long duration) { + if (mTransitionPending && mTintChangePending) { + mTintChangePending = false; + animateIconTint(mPendingIconTint, + Math.max(0, startTime - SystemClock.uptimeMillis()), + duration); + + } else if (mTransitionPending) { + + // If we don't have a pending tint change yet, the change might come in the future until + // startTime is reached. + mTransitionDeferring = true; + mTransitionDeferringStartTime = startTime; + mTransitionDeferringDuration = duration; + mHandler.removeCallbacks(mTransitionDeferringDoneRunnable); + mHandler.postAtTime(mTransitionDeferringDoneRunnable, startTime); + } + mTransitionPending = false; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 19305f3..6369d5e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -31,6 +31,7 @@ import com.android.internal.policy.IKeyguardShowCallback; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.ViewMediatorCallback; +import com.android.systemui.statusbar.CommandQueue; import static com.android.keyguard.KeyguardHostView.OnDismissAction; @@ -257,7 +258,7 @@ public class StatusBarKeyguardViewManager { } }); } else { - mPhoneStatusBar.setKeyguardFadingAway(delay, fadeoutDuration); + mPhoneStatusBar.setKeyguardFadingAway(startTime, delay, fadeoutDuration); boolean staying = mPhoneStatusBar.hideKeyguard(); if (!staying) { mStatusBarWindowManager.setKeyguardFadingAway(true); @@ -435,4 +436,12 @@ public class StatusBarKeyguardViewManager { public boolean isInputRestricted() { return mViewMediatorCallback.isInputRestricted(); } + + public void keyguardGoingAway() { + mPhoneStatusBar.keyguardGoingAway(); + } + + public void animateCollapsePanels() { + mPhoneStatusBar.animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE, true /* force */); + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java index eba7d9f..63bbf97 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java @@ -115,7 +115,8 @@ public class StatusBarWindowManager { private void applyFocusableFlag(State state) { if (state.isKeyguardShowingAndNotOccluded() && state.keyguardNeedsInput - && state.bouncerShowing) { + && state.bouncerShowing + || BaseStatusBar.ENABLE_REMOTE_INPUT && state.statusBarExpanded) { mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; } else if (state.isKeyguardShowingAndNotOccluded() || state.statusBarFocusable) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrustDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrustDrawable.java index b89aa8f..56c1e10 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrustDrawable.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TrustDrawable.java @@ -120,7 +120,7 @@ public class TrustDrawable extends Drawable { } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { throw new UnsupportedOperationException("not implemented"); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/VelocityTrackerFactory.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/VelocityTrackerFactory.java index 4f43b4d..e153b85 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/VelocityTrackerFactory.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/VelocityTrackerFactory.java @@ -20,8 +20,6 @@ import android.content.Context; import com.android.systemui.R; -import static android.util.Pools.SynchronizedPool; - /** * A class to generate {@link VelocityTrackerInterface}, depending on the configuration. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java index 89ed787..cc431dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessibilityController.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.content.Context; -import android.util.Log; import android.view.accessibility.AccessibilityManager; import java.io.FileDescriptor; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java index cbdd138..cbe4c4d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java @@ -16,7 +16,9 @@ package com.android.systemui.statusbar.policy; -import java.util.Set; +import com.android.settingslib.bluetooth.CachedBluetoothDevice; + +import java.util.Collection; public interface BluetoothController { void addStateChangedCallback(Callback callback); @@ -28,32 +30,12 @@ public interface BluetoothController { boolean isBluetoothConnecting(); String getLastDeviceName(); void setBluetoothEnabled(boolean enabled); - Set<PairedDevice> getPairedDevices(); - void connect(PairedDevice device); - void disconnect(PairedDevice device); + Collection<CachedBluetoothDevice> getDevices(); + void connect(CachedBluetoothDevice device); + void disconnect(CachedBluetoothDevice device); public interface Callback { void onBluetoothStateChange(boolean enabled, boolean connecting); - void onBluetoothPairedDevicesChanged(); - } - - public static final class PairedDevice { - public static int STATE_DISCONNECTED = 0; - public static int STATE_CONNECTING = 1; - public static int STATE_CONNECTED = 2; - public static int STATE_DISCONNECTING = 3; - - public String id; - public String name; - public int state = STATE_DISCONNECTED; - public Object tag; - - public static String stateToString(int state) { - if (state == STATE_DISCONNECTED) return "STATE_DISCONNECTED"; - if (state == STATE_CONNECTING) return "STATE_CONNECTING"; - if (state == STATE_CONNECTED) return "STATE_CONNECTED"; - if (state == STATE_DISCONNECTING) return "STATE_DISCONNECTING"; - return "UNKNOWN"; - } + void onBluetoothDevicesChanged(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java index 81e1e45..8d4f302 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -16,138 +16,57 @@ package com.android.systemui.statusbar.policy; -import static android.bluetooth.BluetoothAdapter.ERROR; -import static com.android.systemui.statusbar.policy.BluetoothUtil.connectionStateToString; -import static com.android.systemui.statusbar.policy.BluetoothUtil.deviceToString; -import static com.android.systemui.statusbar.policy.BluetoothUtil.profileToString; -import static com.android.systemui.statusbar.policy.BluetoothUtil.uuidToProfile; -import static com.android.systemui.statusbar.policy.BluetoothUtil.uuidToString; -import static com.android.systemui.statusbar.policy.BluetoothUtil.uuidsToString; - -import android.bluetooth.BluetoothA2dp; -import android.bluetooth.BluetoothA2dpSink; import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothHeadset; -import android.bluetooth.BluetoothHeadsetClient; -import android.bluetooth.BluetoothInputDevice; -import android.bluetooth.BluetoothManager; -import android.bluetooth.BluetoothMap; -import android.bluetooth.BluetoothPan; -import android.bluetooth.BluetoothProfile; -import android.bluetooth.BluetoothProfile.ServiceListener; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; import android.os.Looper; -import android.os.Message; -import android.os.ParcelUuid; -import android.util.ArrayMap; -import android.util.ArraySet; import android.util.Log; -import android.util.SparseArray; -import com.android.systemui.statusbar.policy.BluetoothUtil.Profile; +import com.android.settingslib.bluetooth.BluetoothCallback; +import com.android.settingslib.bluetooth.CachedBluetoothDevice; +import com.android.settingslib.bluetooth.LocalBluetoothManager; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Set; +import java.util.Collection; -public class BluetoothControllerImpl implements BluetoothController { +public class BluetoothControllerImpl implements BluetoothController, BluetoothCallback, + CachedBluetoothDevice.Callback { private static final String TAG = "BluetoothController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - // This controls the order in which we check the states. Since a device can only have - // one state on screen, but can have multiple profiles, the later states override the - // value of earlier states. So if a device has a profile in CONNECTING and one in - // CONNECTED, it will show as CONNECTED, theoretically this shouldn't really happen often, - // but seemed worth noting. - private static final int[] CONNECTION_STATES = { - BluetoothProfile.STATE_DISCONNECTED, - BluetoothProfile.STATE_DISCONNECTING, - BluetoothProfile.STATE_CONNECTING, - BluetoothProfile.STATE_CONNECTED, - }; - // Update all the BT device states. - private static final int MSG_UPDATE_CONNECTION_STATES = 1; - // Update just one BT device. - private static final int MSG_UPDATE_SINGLE_CONNECTION_STATE = 2; - // Update whether devices are bonded or not. - private static final int MSG_UPDATE_BONDED_DEVICES = 3; - - private static final int MSG_ADD_PROFILE = 4; - private static final int MSG_REM_PROFILE = 5; - - private final Context mContext; - private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>(); - private final BluetoothAdapter mAdapter; - private final Receiver mReceiver = new Receiver(); - private final ArrayMap<BluetoothDevice, DeviceInfo> mDeviceInfo = new ArrayMap<>(); - private final SparseArray<BluetoothProfile> mProfiles = new SparseArray<>(); - private final H mHandler; + private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>(); + private final LocalBluetoothManager mLocalBluetoothManager; private boolean mEnabled; private boolean mConnecting; - private BluetoothDevice mLastDevice; + private CachedBluetoothDevice mLastDevice; public BluetoothControllerImpl(Context context, Looper bgLooper) { - mContext = context; - mHandler = new H(bgLooper); - - final BluetoothManager bluetoothManager = - (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); - mAdapter = bluetoothManager.getAdapter(); - if (mAdapter == null) { - Log.w(TAG, "Default BT adapter not found"); - return; + mLocalBluetoothManager = LocalBluetoothManager.getInstance(context, null); + if (mLocalBluetoothManager != null) { + mLocalBluetoothManager.getEventManager().registerCallback(this); + onBluetoothStateChanged( + mLocalBluetoothManager.getBluetoothAdapter().getBluetoothState()); } - - mReceiver.register(); - setAdapterState(mAdapter.getState()); - updateBondedDevices(); - bindAllProfiles(); } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("BluetoothController state:"); - pw.print(" mAdapter="); pw.println(mAdapter); + pw.print(" mLocalBluetoothManager="); pw.println(mLocalBluetoothManager); pw.print(" mEnabled="); pw.println(mEnabled); pw.print(" mConnecting="); pw.println(mConnecting); pw.print(" mLastDevice="); pw.println(mLastDevice); pw.print(" mCallbacks.size="); pw.println(mCallbacks.size()); - pw.print(" mProfiles="); pw.println(profilesToString(mProfiles)); - pw.print(" mDeviceInfo.size="); pw.println(mDeviceInfo.size()); - for (int i = 0; i < mDeviceInfo.size(); i++) { - final BluetoothDevice device = mDeviceInfo.keyAt(i); - final DeviceInfo info = mDeviceInfo.valueAt(i); - pw.print(" "); pw.print(deviceToString(device)); - pw.print('('); pw.print(uuidsToString(device)); pw.print(')'); - pw.print(" "); pw.println(infoToString(info)); + pw.println(" Bluetooth Devices:"); + for (CachedBluetoothDevice device : + mLocalBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy()) { + pw.println(" " + getDeviceString(device)); } } - private static String infoToString(DeviceInfo info) { - return info == null ? null : ("connectionState=" + - connectionStateToString(CONNECTION_STATES[info.connectionStateIndex]) - + ",bonded=" + info.bonded + ",profiles=" - + profilesToString(info.connectedProfiles)); - } - - private static String profilesToString(SparseArray<?> profiles) { - final int N = profiles.size(); - final StringBuffer buffer = new StringBuffer(); - buffer.append('['); - for (int i = 0; i < N; i++) { - if (i != 0) { - buffer.append(','); - } - buffer.append(BluetoothUtil.profileToString(profiles.keyAt(i))); - } - buffer.append(']'); - return buffer.toString(); + private String getDeviceString(CachedBluetoothDevice device) { + return device.getName() + " " + device.getBondState() + " " + device.isConnected(); } public void addStateChangedCallback(Callback cb) { @@ -162,411 +81,126 @@ public class BluetoothControllerImpl implements BluetoothController { @Override public boolean isBluetoothEnabled() { - return mAdapter != null && mAdapter.isEnabled(); + return mEnabled; } @Override public boolean isBluetoothConnected() { - return mAdapter != null - && mAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTED; + return mLocalBluetoothManager != null + && mLocalBluetoothManager.getBluetoothAdapter().getConnectionState() + == BluetoothAdapter.STATE_CONNECTED; } @Override public boolean isBluetoothConnecting() { - return mAdapter != null - && mAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTING; + return mConnecting; } @Override public void setBluetoothEnabled(boolean enabled) { - if (mAdapter != null) { - if (enabled) { - mAdapter.enable(); - } else { - mAdapter.disable(); - } + if (mLocalBluetoothManager != null) { + mLocalBluetoothManager.getBluetoothAdapter().setBluetoothEnabled(enabled); } } @Override public boolean isBluetoothSupported() { - return mAdapter != null; + return mLocalBluetoothManager != null; } @Override - public ArraySet<PairedDevice> getPairedDevices() { - final ArraySet<PairedDevice> rt = new ArraySet<>(); - for (int i = 0; i < mDeviceInfo.size(); i++) { - final BluetoothDevice device = mDeviceInfo.keyAt(i); - final DeviceInfo info = mDeviceInfo.valueAt(i); - if (!info.bonded) continue; - final PairedDevice paired = new PairedDevice(); - paired.id = device.getAddress(); - paired.tag = device; - paired.name = device.getAliasName(); - paired.state = connectionStateToPairedDeviceState(info.connectionStateIndex); - rt.add(paired); - } - return rt; - } - - private static int connectionStateToPairedDeviceState(int index) { - int state = CONNECTION_STATES[index]; - if (state == BluetoothAdapter.STATE_CONNECTED) return PairedDevice.STATE_CONNECTED; - if (state == BluetoothAdapter.STATE_CONNECTING) return PairedDevice.STATE_CONNECTING; - if (state == BluetoothAdapter.STATE_DISCONNECTING) return PairedDevice.STATE_DISCONNECTING; - return PairedDevice.STATE_DISCONNECTED; + public void connect(final CachedBluetoothDevice device) { + if (mLocalBluetoothManager == null || device == null) return; + device.connect(true); } @Override - public void connect(final PairedDevice pd) { - connect(pd, true); - } - - @Override - public void disconnect(PairedDevice pd) { - connect(pd, false); - } - - private void connect(PairedDevice pd, final boolean connect) { - if (mAdapter == null || pd == null || pd.tag == null) return; - final BluetoothDevice device = (BluetoothDevice) pd.tag; - final DeviceInfo info = mDeviceInfo.get(device); - final String action = connect ? "connect" : "disconnect"; - if (DEBUG) Log.d(TAG, action + " " + deviceToString(device)); - final ParcelUuid[] uuids = device.getUuids(); - if (uuids == null) { - Log.w(TAG, "No uuids returned, aborting " + action + " for " + deviceToString(device)); - return; - } - SparseArray<Boolean> profiles = new SparseArray<>(); - if (connect) { - // When connecting add every profile we can recognize by uuid. - for (ParcelUuid uuid : uuids) { - final int profile = uuidToProfile(uuid); - if (profile == 0) { - Log.w(TAG, "Device " + deviceToString(device) + " has an unsupported uuid: " - + uuidToString(uuid)); - continue; - } - final boolean connected = info.connectedProfiles.get(profile, false); - if (!connected) { - profiles.put(profile, true); - } - } - } else { - // When disconnecting, just add every profile we know they are connected to. - profiles = info.connectedProfiles; - } - for (int i = 0; i < profiles.size(); i++) { - final int profile = profiles.keyAt(i); - if (mProfiles.indexOfKey(profile) >= 0) { - final Profile p = BluetoothUtil.getProfile(mProfiles.get(profile)); - final boolean ok = connect ? p.connect(device) : p.disconnect(device); - if (DEBUG) Log.d(TAG, action + " " + profileToString(profile) + " " - + (ok ? "succeeded" : "failed")); - } else { - Log.w(TAG, "Unable get get Profile for " + profileToString(profile)); - } - } + public void disconnect(CachedBluetoothDevice device) { + if (mLocalBluetoothManager == null || device == null) return; + device.disconnect(); } @Override public String getLastDeviceName() { - return mLastDevice != null ? mLastDevice.getAliasName() : null; + return mLastDevice != null ? mLastDevice.getName() : null; } - private void updateBondedDevices() { - mHandler.removeMessages(MSG_UPDATE_BONDED_DEVICES); - mHandler.sendEmptyMessage(MSG_UPDATE_BONDED_DEVICES); - } - - private void updateConnectionStates() { - mHandler.removeMessages(MSG_UPDATE_CONNECTION_STATES); - mHandler.removeMessages(MSG_UPDATE_SINGLE_CONNECTION_STATE); - mHandler.sendEmptyMessage(MSG_UPDATE_CONNECTION_STATES); + @Override + public Collection<CachedBluetoothDevice> getDevices() { + return mLocalBluetoothManager != null + ? mLocalBluetoothManager.getCachedDeviceManager().getCachedDevicesCopy() + : null; } - private void updateConnectionState(BluetoothDevice device, int profile, int state) { - if (mHandler.hasMessages(MSG_UPDATE_CONNECTION_STATES)) { - // If we are about to update all the devices, then we don't need to update this one. - return; + private void firePairedDevicesChanged() { + for (Callback cb : mCallbacks) { + cb.onBluetoothDevicesChanged(); } - mHandler.obtainMessage(MSG_UPDATE_SINGLE_CONNECTION_STATE, profile, state, device) - .sendToTarget(); } - private void handleUpdateBondedDevices() { - if (mAdapter == null) return; - final Set<BluetoothDevice> bondedDevices = mAdapter.getBondedDevices(); - for (DeviceInfo info : mDeviceInfo.values()) { - info.bonded = false; - } - int bondedCount = 0; - BluetoothDevice lastBonded = null; - if (bondedDevices != null) { - for (BluetoothDevice bondedDevice : bondedDevices) { - final boolean bonded = bondedDevice.getBondState() != BluetoothDevice.BOND_NONE; - updateInfo(bondedDevice).bonded = bonded; - if (bonded) { - bondedCount++; - lastBonded = bondedDevice; - } - } - } - if (mLastDevice == null && bondedCount == 1) { - mLastDevice = lastBonded; + private void fireStateChange() { + for (Callback cb : mCallbacks) { + fireStateChange(cb); } - updateConnectionStates(); - firePairedDevicesChanged(); } - private void handleUpdateConnectionStates() { - final int N = mDeviceInfo.size(); - for (int i = 0; i < N; i++) { - BluetoothDevice device = mDeviceInfo.keyAt(i); - DeviceInfo info = updateInfo(device); - info.connectionStateIndex = 0; - info.connectedProfiles.clear(); - for (int j = 0; j < mProfiles.size(); j++) { - int state = mProfiles.valueAt(j).getConnectionState(device); - handleUpdateConnectionState(device, mProfiles.keyAt(j), state); - } - } - handleConnectionChange(); - firePairedDevicesChanged(); + private void fireStateChange(Callback cb) { + cb.onBluetoothStateChange(mEnabled, mConnecting); } - private void handleUpdateConnectionState(BluetoothDevice device, int profile, int state) { - if (DEBUG) Log.d(TAG, "updateConnectionState " + BluetoothUtil.deviceToString(device) - + " " + BluetoothUtil.profileToString(profile) - + " " + BluetoothUtil.connectionStateToString(state)); - DeviceInfo info = updateInfo(device); - int stateIndex = 0; - for (int i = 0; i < CONNECTION_STATES.length; i++) { - if (CONNECTION_STATES[i] == state) { - stateIndex = i; - break; - } - } - info.profileStates.put(profile, stateIndex); - - info.connectionStateIndex = 0; - final int N = info.profileStates.size(); - for (int i = 0; i < N; i++) { - if (info.profileStates.valueAt(i) > info.connectionStateIndex) { - info.connectionStateIndex = info.profileStates.valueAt(i); - } - } - if (state == BluetoothProfile.STATE_CONNECTED) { - info.connectedProfiles.put(profile, true); - } else { - info.connectedProfiles.remove(profile); + private void updateConnected() { + if (mLastDevice != null && mLastDevice.isConnected()) { + // Our current device is still valid. + return; } - } - - private void handleConnectionChange() { - // If we are no longer connected to the current device, see if we are connected to - // something else, so we don't display a name we aren't connected to. - if (mLastDevice != null && - CONNECTION_STATES[mDeviceInfo.get(mLastDevice).connectionStateIndex] - != BluetoothProfile.STATE_CONNECTED) { - // Make sure we don't keep this device while it isn't connected. - mLastDevice = null; - // Look for anything else connected. - final int size = mDeviceInfo.size(); - for (int i = 0; i < size; i++) { - BluetoothDevice device = mDeviceInfo.keyAt(i); - DeviceInfo info = mDeviceInfo.valueAt(i); - if (CONNECTION_STATES[info.connectionStateIndex] - == BluetoothProfile.STATE_CONNECTED) { - mLastDevice = device; - break; - } + for (CachedBluetoothDevice device : getDevices()) { + if (device.isConnected()) { + mLastDevice = device; } } } - private void bindAllProfiles() { - // Note: This needs to contain all of the types that can be returned by BluetoothUtil - // otherwise we can't find the profiles we need when we connect/disconnect. - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.A2DP); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.A2DP_SINK); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.AVRCP_CONTROLLER); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.HEADSET); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.HEADSET_CLIENT); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.INPUT_DEVICE); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.MAP); - mAdapter.getProfileProxy(mContext, mProfileListener, BluetoothProfile.PAN); - // Note Health is not in this list because health devices aren't 'connected'. - // If profiles are expanded to use more than just connection state and connect/disconnect - // then it should be added. - } - - private void firePairedDevicesChanged() { - for (Callback cb : mCallbacks) { - cb.onBluetoothPairedDevicesChanged(); - } - } - - private void setAdapterState(int adapterState) { - final boolean enabled = adapterState == BluetoothAdapter.STATE_ON; - if (mEnabled == enabled) return; - mEnabled = enabled; - fireStateChange(); - } - - private void setConnecting(boolean connecting) { - if (mConnecting == connecting) return; - mConnecting = connecting; + @Override + public void onBluetoothStateChanged(int bluetoothState) { + mEnabled = bluetoothState == BluetoothAdapter.STATE_ON; fireStateChange(); } - private void fireStateChange() { - for (Callback cb : mCallbacks) { - fireStateChange(cb); - } + @Override + public void onScanningStateChanged(boolean started) { + // Don't care. } - private void fireStateChange(Callback cb) { - cb.onBluetoothStateChange(mEnabled, mConnecting); + @Override + public void onDeviceAdded(CachedBluetoothDevice cachedDevice) { + cachedDevice.registerCallback(this); + updateConnected(); + firePairedDevicesChanged(); } - private static int getProfileFromAction(String action) { - if (BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.A2DP; - } else if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.HEADSET; - } else if (BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.A2DP_SINK; - } else if (BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.HEADSET_CLIENT; - } else if (BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.INPUT_DEVICE; - } else if (BluetoothMap.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.MAP; - } else if (BluetoothPan.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { - return BluetoothProfile.PAN; - } - if (DEBUG) Log.d(TAG, "Unknown action " + action); - return -1; + @Override + public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) { + updateConnected(); + firePairedDevicesChanged(); } - private final ServiceListener mProfileListener = new ServiceListener() { - @Override - public void onServiceDisconnected(int profile) { - if (DEBUG) Log.d(TAG, "Disconnected from " + BluetoothUtil.profileToString(profile)); - // We lost a profile, don't do any updates until it gets removed. - mHandler.removeMessages(MSG_UPDATE_CONNECTION_STATES); - mHandler.removeMessages(MSG_UPDATE_SINGLE_CONNECTION_STATE); - mHandler.obtainMessage(MSG_REM_PROFILE, profile, 0).sendToTarget(); - } - - @Override - public void onServiceConnected(int profile, BluetoothProfile proxy) { - if (DEBUG) Log.d(TAG, "Connected to " + BluetoothUtil.profileToString(profile)); - mHandler.obtainMessage(MSG_ADD_PROFILE, profile, 0, proxy).sendToTarget(); - } - }; - - private final class Receiver extends BroadcastReceiver { - public void register() { - final IntentFilter filter = new IntentFilter(); - filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); - filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); - filter.addAction(BluetoothDevice.ACTION_ALIAS_CHANGED); - filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothMap.ACTION_CONNECTION_STATE_CHANGED); - filter.addAction(BluetoothPan.ACTION_CONNECTION_STATE_CHANGED); - mContext.registerReceiver(this, filter); - } - - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - - if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { - setAdapterState(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, ERROR)); - updateBondedDevices(); - if (DEBUG) Log.d(TAG, "ACTION_STATE_CHANGED " + mEnabled); - } else if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { - updateInfo(device); - final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, - ERROR); - mLastDevice = device; - if (DEBUG) Log.d(TAG, "ACTION_CONNECTION_STATE_CHANGED " - + connectionStateToString(state) + " " + deviceToString(device)); - setConnecting(state == BluetoothAdapter.STATE_CONNECTING); - } else if (action.equals(BluetoothDevice.ACTION_ALIAS_CHANGED)) { - updateInfo(device); - mLastDevice = device; - } else if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) { - if (DEBUG) Log.d(TAG, "ACTION_BOND_STATE_CHANGED " + device); - updateBondedDevices(); - } else { - int profile = getProfileFromAction(intent.getAction()); - int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1); - if (DEBUG) Log.d(TAG, "ACTION_CONNECTION_STATE_CHANGE " - + BluetoothUtil.profileToString(profile) - + " " + BluetoothUtil.connectionStateToString(state)); - if ((profile != -1) && (state != -1)) { - updateConnectionState(device, profile, state); - } - } - } + @Override + public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) { + updateConnected(); + firePairedDevicesChanged(); } - private DeviceInfo updateInfo(BluetoothDevice device) { - DeviceInfo info = mDeviceInfo.get(device); - info = info != null ? info : new DeviceInfo(); - mDeviceInfo.put(device, info); - return info; + @Override + public void onDeviceAttributesChanged() { + updateConnected(); + firePairedDevicesChanged(); } - private class H extends Handler { - public H(Looper l) { - super(l); - } - - public void handleMessage(Message msg) { - switch (msg.what) { - case MSG_UPDATE_CONNECTION_STATES: - handleUpdateConnectionStates(); - firePairedDevicesChanged(); - break; - case MSG_UPDATE_SINGLE_CONNECTION_STATE: - handleUpdateConnectionState((BluetoothDevice) msg.obj, msg.arg1, msg.arg2); - handleConnectionChange(); - firePairedDevicesChanged(); - break; - case MSG_UPDATE_BONDED_DEVICES: - handleUpdateBondedDevices(); - firePairedDevicesChanged(); - break; - case MSG_ADD_PROFILE: - mProfiles.put(msg.arg1, (BluetoothProfile) msg.obj); - handleUpdateConnectionStates(); - firePairedDevicesChanged(); - break; - case MSG_REM_PROFILE: - mProfiles.remove(msg.arg1); - handleUpdateConnectionStates(); - firePairedDevicesChanged(); - break; - } - }; - }; - - private static class DeviceInfo { - int connectionStateIndex = 0; - boolean bonded; // per getBondedDevices - SparseArray<Boolean> connectedProfiles = new SparseArray<>(); - SparseArray<Integer> profileStates = new SparseArray<>(); + @Override + public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) { + mConnecting = state == BluetoothAdapter.STATE_CONNECTING; + mLastDevice = cachedDevice; + updateConnected(); + fireStateChange(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothUtil.java deleted file mode 100644 index ed8ac2c..0000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothUtil.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2014 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.systemui.statusbar.policy; - -import android.bluetooth.BluetoothA2dp; -import android.bluetooth.BluetoothA2dpSink; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothHeadset; -import android.bluetooth.BluetoothHeadsetClient; -import android.bluetooth.BluetoothInputDevice; -import android.bluetooth.BluetoothMap; -import android.bluetooth.BluetoothPan; -import android.bluetooth.BluetoothProfile; -import android.bluetooth.BluetoothUuid; -import android.os.ParcelUuid; -import android.text.TextUtils; - -public class BluetoothUtil { - - public static String profileToString(int profile) { - if (profile == BluetoothProfile.HEADSET) return "HEADSET"; - if (profile == BluetoothProfile.A2DP) return "A2DP"; - if (profile == BluetoothProfile.AVRCP_CONTROLLER) return "AVRCP_CONTROLLER"; - if (profile == BluetoothProfile.PAN) return "PAN"; - if (profile == BluetoothProfile.INPUT_DEVICE) return "INPUT_DEVICE"; - if (profile == BluetoothProfile.MAP) return "MAP"; - return "UNKNOWN(" + profile + ")"; - } - - public static String profileStateToString(int state) { - if (state == BluetoothProfile.STATE_CONNECTED) return "STATE_CONNECTED"; - if (state == BluetoothProfile.STATE_CONNECTING) return "STATE_CONNECTING"; - if (state == BluetoothProfile.STATE_DISCONNECTED) return "STATE_DISCONNECTED"; - if (state == BluetoothProfile.STATE_DISCONNECTING) return "STATE_DISCONNECTING"; - return "STATE_UNKNOWN"; - } - - public static String uuidToString(ParcelUuid uuid) { - if (BluetoothUuid.AudioSink.equals(uuid)) return "AudioSink"; - if (BluetoothUuid.AudioSource.equals(uuid)) return "AudioSource"; - if (BluetoothUuid.AdvAudioDist.equals(uuid)) return "AdvAudioDist"; - if (BluetoothUuid.HSP.equals(uuid)) return "HSP"; - if (BluetoothUuid.HSP_AG.equals(uuid)) return "HSP_AG"; - if (BluetoothUuid.Handsfree.equals(uuid)) return "Handsfree"; - if (BluetoothUuid.Handsfree_AG.equals(uuid)) return "Handsfree_AG"; - if (BluetoothUuid.AvrcpController.equals(uuid)) return "AvrcpController"; - if (BluetoothUuid.AvrcpTarget.equals(uuid)) return "AvrcpTarget"; - if (BluetoothUuid.ObexObjectPush.equals(uuid)) return "ObexObjectPush"; - if (BluetoothUuid.Hid.equals(uuid)) return "Hid"; - if (BluetoothUuid.Hogp.equals(uuid)) return "Hogp"; - if (BluetoothUuid.PANU.equals(uuid)) return "PANU"; - if (BluetoothUuid.NAP.equals(uuid)) return "NAP"; - if (BluetoothUuid.BNEP.equals(uuid)) return "BNEP"; - if (BluetoothUuid.PBAP_PSE.equals(uuid)) return "PBAP_PSE"; - if (BluetoothUuid.MAP.equals(uuid)) return "MAP"; - if (BluetoothUuid.MNS.equals(uuid)) return "MNS"; - if (BluetoothUuid.MAS.equals(uuid)) return "MAS"; - return uuid != null ? uuid.toString() : null; - } - - public static String connectionStateToString(int connectionState) { - if (connectionState == BluetoothAdapter.STATE_DISCONNECTED) return "STATE_DISCONNECTED"; - if (connectionState == BluetoothAdapter.STATE_CONNECTED) return "STATE_CONNECTED"; - if (connectionState == BluetoothAdapter.STATE_DISCONNECTING) return "STATE_DISCONNECTING"; - if (connectionState == BluetoothAdapter.STATE_CONNECTING) return "STATE_CONNECTING"; - return "ERROR"; - } - - public static String deviceToString(BluetoothDevice device) { - return device == null ? null : (device.getAddress() + '[' + device.getAliasName() + ']'); - } - - public static String uuidsToString(BluetoothDevice device) { - if (device == null) return null; - final ParcelUuid[] ids = device.getUuids(); - if (ids == null) return null; - final String[] tokens = new String[ids.length]; - for (int i = 0; i < tokens.length; i++) { - tokens[i] = uuidToString(ids[i]); - } - return TextUtils.join(",", tokens); - } - - public static int uuidToProfile(ParcelUuid uuid) { - if (BluetoothUuid.AudioSink.equals(uuid)) return BluetoothProfile.A2DP; - if (BluetoothUuid.AdvAudioDist.equals(uuid)) return BluetoothProfile.A2DP; - - if (BluetoothUuid.HSP.equals(uuid)) return BluetoothProfile.HEADSET; - if (BluetoothUuid.Handsfree.equals(uuid)) return BluetoothProfile.HEADSET; - - if (BluetoothUuid.MAP.equals(uuid)) return BluetoothProfile.MAP; - if (BluetoothUuid.MNS.equals(uuid)) return BluetoothProfile.MAP; - if (BluetoothUuid.MAS.equals(uuid)) return BluetoothProfile.MAP; - - if (BluetoothUuid.AvrcpController.equals(uuid)) return BluetoothProfile.AVRCP_CONTROLLER; - - if (BluetoothUuid.Hid.equals(uuid)) return BluetoothProfile.INPUT_DEVICE; - if (BluetoothUuid.Hogp.equals(uuid)) return BluetoothProfile.INPUT_DEVICE; - - if (BluetoothUuid.NAP.equals(uuid)) return BluetoothProfile.PAN; - - return 0; - } - - public static Profile getProfile(BluetoothProfile p) { - if (p instanceof BluetoothA2dp) return newProfile((BluetoothA2dp) p); - if (p instanceof BluetoothHeadset) return newProfile((BluetoothHeadset) p); - if (p instanceof BluetoothA2dpSink) return newProfile((BluetoothA2dpSink) p); - if (p instanceof BluetoothHeadsetClient) return newProfile((BluetoothHeadsetClient) p); - if (p instanceof BluetoothInputDevice) return newProfile((BluetoothInputDevice) p); - if (p instanceof BluetoothMap) return newProfile((BluetoothMap) p); - if (p instanceof BluetoothPan) return newProfile((BluetoothPan) p); - return null; - } - - private static Profile newProfile(final BluetoothA2dp a2dp) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return a2dp.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return a2dp.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothHeadset headset) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return headset.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return headset.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothA2dpSink sink) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return sink.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return sink.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothHeadsetClient client) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return client.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return client.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothInputDevice input) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return input.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return input.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothMap map) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return map.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return map.disconnect(device); - } - }; - } - - private static Profile newProfile(final BluetoothPan pan) { - return new Profile() { - @Override - public boolean connect(BluetoothDevice device) { - return pan.connect(device); - } - - @Override - public boolean disconnect(BluetoothDevice device) { - return pan.disconnect(device); - } - }; - } - - // common abstraction for supported profiles - public interface Profile { - boolean connect(BluetoothDevice device); - boolean disconnect(BluetoothDevice device); - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java index 33f7aff..cd1914c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java @@ -17,21 +17,14 @@ package com.android.systemui.statusbar.policy; import android.content.Context; -import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; -import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraCharacteristics; -import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; -import android.hardware.camera2.CameraMetadata; -import android.hardware.camera2.CaptureRequest; import android.os.Handler; import android.os.HandlerThread; import android.os.Process; -import android.os.SystemProperties; +import android.text.TextUtils; import android.util.Log; -import android.util.Size; -import android.view.Surface; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -45,7 +38,7 @@ public class FlashlightController { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int DISPATCH_ERROR = 0; - private static final int DISPATCH_OFF = 1; + private static final int DISPATCH_CHANGED = 1; private static final int DISPATCH_AVAILABILITY_CHANGED = 2; private final CameraManager mCameraManager; @@ -58,52 +51,50 @@ public class FlashlightController { /** Lock on {@code this} when accessing */ private boolean mFlashlightEnabled; - private String mCameraId; - private boolean mCameraAvailable; - private CameraDevice mCameraDevice; - private CaptureRequest mFlashlightRequest; - private CameraCaptureSession mSession; - private SurfaceTexture mSurfaceTexture; - private Surface mSurface; + private final String mCameraId; + private boolean mTorchAvailable; public FlashlightController(Context mContext) { mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); - initialize(); - } - public void initialize() { + String cameraId = null; try { - mCameraId = getCameraId(); + cameraId = getCameraId(); } catch (Throwable e) { Log.e(TAG, "Couldn't initialize.", e); return; + } finally { + mCameraId = cameraId; } if (mCameraId != null) { ensureHandler(); - mCameraManager.registerAvailabilityCallback(mAvailabilityCallback, mHandler); + mCameraManager.registerTorchCallback(mTorchCallback, mHandler); } } - public synchronized void setFlashlight(boolean enabled) { - if (mFlashlightEnabled != enabled) { - mFlashlightEnabled = enabled; - postUpdateFlashlight(); - } - } - - public void killFlashlight() { - boolean enabled; + public void setFlashlight(boolean enabled) { + boolean pendingError = false; synchronized (this) { - enabled = mFlashlightEnabled; + if (mFlashlightEnabled != enabled) { + mFlashlightEnabled = enabled; + try { + mCameraManager.setTorchMode(mCameraId, enabled); + } catch (CameraAccessException e) { + Log.e(TAG, "Couldn't set torch mode", e); + mFlashlightEnabled = false; + pendingError = true; + } + } } - if (enabled) { - mHandler.post(mKillFlashlightRunnable); + dispatchModeChanged(mFlashlightEnabled); + if (pendingError) { + dispatchError(); } } public synchronized boolean isAvailable() { - return mCameraAvailable; + return mTorchAvailable; } public void addListener(FlashlightListener l) { @@ -127,42 +118,6 @@ public class FlashlightController { } } - private void startDevice() throws CameraAccessException { - mCameraManager.openCamera(getCameraId(), mCameraListener, mHandler); - } - - private void startSession() throws CameraAccessException { - mSurfaceTexture = new SurfaceTexture(false); - Size size = getSmallestSize(mCameraDevice.getId()); - mSurfaceTexture.setDefaultBufferSize(size.getWidth(), size.getHeight()); - mSurface = new Surface(mSurfaceTexture); - ArrayList<Surface> outputs = new ArrayList<>(1); - outputs.add(mSurface); - mCameraDevice.createCaptureSession(outputs, mSessionListener, mHandler); - } - - private Size getSmallestSize(String cameraId) throws CameraAccessException { - Size[] outputSizes = mCameraManager.getCameraCharacteristics(cameraId) - .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) - .getOutputSizes(SurfaceTexture.class); - if (outputSizes == null || outputSizes.length == 0) { - throw new IllegalStateException( - "Camera " + cameraId + "doesn't support any outputSize."); - } - Size chosen = outputSizes[0]; - for (Size s : outputSizes) { - if (chosen.getWidth() >= s.getWidth() && chosen.getHeight() >= s.getHeight()) { - chosen = s; - } - } - return chosen; - } - - private void postUpdateFlashlight() { - ensureHandler(); - mHandler.post(mUpdateFlashlightRunnable); - } - private String getCameraId() throws CameraAccessException { String[] ids = mCameraManager.getCameraIdList(); for (String id : ids) { @@ -177,70 +132,12 @@ public class FlashlightController { return null; } - private void updateFlashlight(boolean forceDisable) { - try { - boolean enabled; - synchronized (this) { - enabled = mFlashlightEnabled && !forceDisable; - } - if (enabled) { - if (mCameraDevice == null) { - startDevice(); - return; - } - if (mSession == null) { - startSession(); - return; - } - if (mFlashlightRequest == null) { - CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest( - CameraDevice.TEMPLATE_PREVIEW); - builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); - builder.addTarget(mSurface); - CaptureRequest request = builder.build(); - mSession.capture(request, null, mHandler); - mFlashlightRequest = request; - } - } else { - if (mCameraDevice != null) { - mCameraDevice.close(); - teardown(); - } - } - - } catch (CameraAccessException|IllegalStateException|UnsupportedOperationException e) { - Log.e(TAG, "Error in updateFlashlight", e); - handleError(); - } - } - - private void teardown() { - mCameraDevice = null; - mSession = null; - mFlashlightRequest = null; - if (mSurface != null) { - mSurface.release(); - mSurfaceTexture.release(); - } - mSurface = null; - mSurfaceTexture = null; - } - - private void handleError() { - synchronized (this) { - mFlashlightEnabled = false; - } - dispatchError(); - dispatchOff(); - updateFlashlight(true /* forceDisable */); - } - - private void dispatchOff() { - dispatchListeners(DISPATCH_OFF, false /* argument (ignored) */); + private void dispatchModeChanged(boolean enabled) { + dispatchListeners(DISPATCH_CHANGED, enabled); } private void dispatchError() { - dispatchListeners(DISPATCH_ERROR, false /* argument (ignored) */); + dispatchListeners(DISPATCH_CHANGED, false /* argument (ignored) */); } private void dispatchAvailabilityChanged(boolean available) { @@ -256,8 +153,8 @@ public class FlashlightController { if (l != null) { if (message == DISPATCH_ERROR) { l.onFlashlightError(); - } else if (message == DISPATCH_OFF) { - l.onFlashlightOff(); + } else if (message == DISPATCH_CHANGED) { + l.onFlashlightChanged(argument); } else if (message == DISPATCH_AVAILABILITY_CHANGED) { l.onFlashlightAvailabilityChanged(argument); } @@ -280,106 +177,57 @@ public class FlashlightController { } } - private final CameraDevice.StateListener mCameraListener = new CameraDevice.StateListener() { - @Override - public void onOpened(CameraDevice camera) { - mCameraDevice = camera; - postUpdateFlashlight(); - } - - @Override - public void onDisconnected(CameraDevice camera) { - if (mCameraDevice == camera) { - dispatchOff(); - teardown(); - } - } - - @Override - public void onError(CameraDevice camera, int error) { - Log.e(TAG, "Camera error: camera=" + camera + " error=" + error); - if (camera == mCameraDevice || mCameraDevice == null) { - handleError(); - } - } - }; + private final CameraManager.TorchCallback mTorchCallback = + new CameraManager.TorchCallback() { - private final CameraCaptureSession.StateListener mSessionListener = - new CameraCaptureSession.StateListener() { @Override - public void onConfigured(CameraCaptureSession session) { - if (session.getDevice() == mCameraDevice) { - mSession = session; - } else { - session.close(); - } - postUpdateFlashlight(); - } - - @Override - public void onConfigureFailed(CameraCaptureSession session) { - Log.e(TAG, "Configure failed."); - if (mSession == null || mSession == session) { - handleError(); - } - } - }; - - private final Runnable mUpdateFlashlightRunnable = new Runnable() { - @Override - public void run() { - updateFlashlight(false /* forceDisable */); - } - }; - - private final Runnable mKillFlashlightRunnable = new Runnable() { - @Override - public void run() { - synchronized (this) { - mFlashlightEnabled = false; + public void onTorchModeUnavailable(String cameraId) { + if (TextUtils.equals(cameraId, mCameraId)) { + setCameraAvailable(false); } - updateFlashlight(true /* forceDisable */); - dispatchOff(); } - }; - private final CameraManager.AvailabilityCallback mAvailabilityCallback = - new CameraManager.AvailabilityCallback() { @Override - public void onCameraAvailable(String cameraId) { - if (DEBUG) Log.d(TAG, "onCameraAvailable(" + cameraId + ")"); - if (cameraId.equals(mCameraId)) { + public void onTorchModeChanged(String cameraId, boolean enabled) { + if (TextUtils.equals(cameraId, mCameraId)) { setCameraAvailable(true); - } - } - - @Override - public void onCameraUnavailable(String cameraId) { - if (DEBUG) Log.d(TAG, "onCameraUnavailable(" + cameraId + ")"); - if (cameraId.equals(mCameraId)) { - setCameraAvailable(false); + setTorchMode(enabled); } } private void setCameraAvailable(boolean available) { boolean changed; synchronized (FlashlightController.this) { - changed = mCameraAvailable != available; - mCameraAvailable = available; + changed = mTorchAvailable != available; + mTorchAvailable = available; } if (changed) { if (DEBUG) Log.d(TAG, "dispatchAvailabilityChanged(" + available + ")"); dispatchAvailabilityChanged(available); } } + + private void setTorchMode(boolean enabled) { + boolean changed; + synchronized (FlashlightController.this) { + changed = mFlashlightEnabled != enabled; + mFlashlightEnabled = enabled; + } + if (changed) { + if (DEBUG) Log.d(TAG, "dispatchModeChanged(" + enabled + ")"); + dispatchModeChanged(enabled); + } + } }; public interface FlashlightListener { /** - * Called when the flashlight turns off unexpectedly. + * Called when the flashlight was turned off or on. + * @param enabled true if the flashlight is currently turned on. */ - void onFlashlightOff(); + void onFlashlightChanged(boolean enabled); + /** * Called when there is an error that turns the flashlight off. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java index 2e96dd5..1e40bab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java @@ -36,6 +36,7 @@ import android.view.ViewTreeObserver; import android.view.accessibility.AccessibilityEvent; import android.widget.FrameLayout; +import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.ExpandHelper; import com.android.systemui.Gefingerpoken; import com.android.systemui.R; @@ -46,7 +47,6 @@ import com.android.systemui.statusbar.phone.PhoneStatusBar; import java.io.FileDescriptor; import java.io.PrintWriter; -import java.util.ArrayList; public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.Callback, ExpandHelper.Callback, ViewTreeObserver.OnComputeInternalInsetsListener { @@ -58,6 +58,9 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. Rect mTmpRect = new Rect(); int[] mTmpTwoArray = new int[2]; + private final int mHeadsUpNotificationDecay; + private final int mMinimumDisplayTime; + private final int mTouchSensitivityDelay; private final float mMaxAlpha = 1f; private final ArrayMap<String, Long> mSnoozedPackages; @@ -68,6 +71,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. private PhoneStatusBar mBar; + private long mLingerUntilMs; private long mStartTouchTime; private ViewGroup mContentHolder; private int mSnoozeLengthMs; @@ -76,6 +80,14 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. private NotificationData.Entry mHeadsUp; private int mUser; private String mMostRecentPackageName; + private boolean mTouched; + private Clock mClock; + + public static class Clock { + public long currentTimeMillis() { + return SystemClock.elapsedRealtime(); + } + } public HeadsUpNotificationView(Context context, AttributeSet attrs) { this(context, attrs, 0); @@ -89,6 +101,24 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. mSnoozedPackages = new ArrayMap<>(); mDefaultSnoozeLengthMs = resources.getInteger(R.integer.heads_up_default_snooze_length_ms); mSnoozeLengthMs = mDefaultSnoozeLengthMs; + mMinimumDisplayTime = resources.getInteger(R.integer.heads_up_notification_minimum_time); + mHeadsUpNotificationDecay = resources.getInteger(R.integer.heads_up_notification_decay); + mClock = new Clock(); + } + + @VisibleForTesting + public HeadsUpNotificationView(Context context, Clock clock, SwipeHelper swipeHelper, + EdgeSwipeHelper edgeSwipeHelper, int headsUpNotificationDecay, int minimumDisplayTime, + int touchSensitivityDelay, int snoozeLength) { + super(context, null); + mClock = clock; + mSwipeHelper = swipeHelper; + mEdgeSwipeHelper = edgeSwipeHelper; + mMinimumDisplayTime = minimumDisplayTime; + mHeadsUpNotificationDecay = headsUpNotificationDecay; + mTouchSensitivityDelay = touchSensitivityDelay; + mSnoozedPackages = new ArrayMap<>(); + mDefaultSnoozeLengthMs = snoozeLength; } public void updateResources() { @@ -104,88 +134,147 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. mBar = bar; } + public PhoneStatusBar getBar() { + return mBar; + } + public ViewGroup getHolder() { return mContentHolder; } - public boolean showNotification(NotificationData.Entry headsUp) { - if (mHeadsUp != null && headsUp != null && !mHeadsUp.key.equals(headsUp.key)) { + /** + * Called when posting a new notification to the heads up. + */ + public void showNotification(NotificationData.Entry headsUp) { + if (DEBUG) Log.v(TAG, "showNotification"); + if (mHeadsUp != null) { // bump any previous heads up back to the shade - release(); + releaseImmediately(); + } + mTouched = false; + updateNotification(headsUp, true); + mLingerUntilMs = mClock.currentTimeMillis() + mMinimumDisplayTime; + } + + /** + * Called when updating or posting a notification to the heads up. + */ + public void updateNotification(NotificationData.Entry headsUp, boolean alert) { + if (DEBUG) Log.v(TAG, "updateNotification"); + + if (mHeadsUp == headsUp) { + resetViewForHeadsup(); + // This is an in-place update. Noting more to do. + return; } mHeadsUp = headsUp; + if (mContentHolder != null) { mContentHolder.removeAllViews(); } if (mHeadsUp != null) { mMostRecentPackageName = mHeadsUp.notification.getPackageName(); - mHeadsUp.row.setSystemExpanded(true); - mHeadsUp.row.setSensitive(false); - mHeadsUp.row.setHeadsUp(true); - mHeadsUp.row.setHideSensitive( - false, false /* animated */, 0 /* delay */, 0 /* duration */); - if (mContentHolder == null) { - // too soon! - return false; + if (mHeadsUp.row != null) { + resetViewForHeadsup(); } - mContentHolder.setX(0); - mContentHolder.setVisibility(View.VISIBLE); - mContentHolder.setAlpha(mMaxAlpha); - mContentHolder.addView(mHeadsUp.row); - sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); - mSwipeHelper.snapChild(mContentHolder, 1f); mStartTouchTime = SystemClock.elapsedRealtime() + mTouchSensitivityDelay; + if (mContentHolder != null) { // only null in tests and before we are attached to a window + mContentHolder.setX(0); + mContentHolder.setVisibility(View.VISIBLE); + mContentHolder.setAlpha(mMaxAlpha); + mContentHolder.addView(mHeadsUp.row); + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + + mSwipeHelper.snapChild(mContentHolder, 1f); + } mHeadsUp.setInterruption(); - - // 2. Animate mHeadsUpNotificationView in + } + if (alert) { + // Make sure the heads up window is open. mBar.scheduleHeadsUpOpen(); - - // 3. Set alarm to age the notification off - mBar.resetHeadsUpDecayTimer(); + mBar.scheduleHeadsUpDecay(mHeadsUpNotificationDecay); } - return true; } - @Override - protected void onVisibilityChanged(View changedView, int visibility) { - super.onVisibilityChanged(changedView, visibility); - if (changedView.getVisibility() == VISIBLE) { - sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); + private void resetViewForHeadsup() { + if (mHeadsUp.row.areChildrenExpanded()) { + mHeadsUp.row.setChildrenExpanded(false /* expanded */, false /* animated */); + } + mHeadsUp.row.setSystemExpanded(true); + mHeadsUp.row.setSensitive(false); + mHeadsUp.row.setHeadsUp(true); + mHeadsUp.row.setTranslationY(0); + mHeadsUp.row.setTranslationZ(0); + mHeadsUp.row.setHideSensitive( + false, false /* animated */, 0 /* delay */, 0 /* duration */); + } + + /** + * Possibly enter the lingering state by delaying the closing of the window. + * + * @return true if the notification has entered the lingering state. + */ + private boolean startLingering(boolean removed) { + final long now = mClock.currentTimeMillis(); + if (!mTouched && mHeadsUp != null && now < mLingerUntilMs) { + if (removed) { + mHeadsUp = null; + } + mBar.scheduleHeadsUpDecay(mLingerUntilMs - now); + return true; } + return false; } - public boolean isShowing(String key) { - return mHeadsUp != null && mHeadsUp.key.equals(key); + /** + * React to the removal of the notification in the heads up. + */ + public void removeNotification(String key) { + if (DEBUG) Log.v(TAG, "remove"); + if (mHeadsUp == null || !mHeadsUp.key.equals(key)) { + return; + } + if (!startLingering(/* removed */ true)) { + mHeadsUp = null; + releaseImmediately(); + } } - /** Discard the Heads Up notification. */ - public void clear() { - mHeadsUp = null; - mBar.scheduleHeadsUpClose(); + /** + * Ask for any current Heads Up notification to be pushed down into the shade. + */ + public void release() { + if (DEBUG) Log.v(TAG, "release"); + if (!startLingering(/* removed */ false)) { + releaseImmediately(); + } } - /** Respond to dismissal of the Heads Up window. */ - public void dismiss() { - if (mHeadsUp == null) return; - if (mHeadsUp.notification.isClearable()) { - mBar.onNotificationClear(mHeadsUp.notification); - } else { - release(); + /** + * Push any current Heads Up notification down into the shade. + */ + public void releaseImmediately() { + if (DEBUG) Log.v(TAG, "releaseImmediately"); + if (mHeadsUp != null) { + mContentHolder.removeView(mHeadsUp.row); + mBar.displayNotificationFromHeadsUp(mHeadsUp); } mHeadsUp = null; mBar.scheduleHeadsUpClose(); } - /** Push any current Heads Up notification down into the shade. */ - public void release() { - if (mHeadsUp != null) { - mBar.displayNotificationFromHeadsUp(mHeadsUp.notification); + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + if (DEBUG) Log.v(TAG, "onVisibilityChanged: " + visibility); + if (changedView.getVisibility() == VISIBLE) { + mStartTouchTime = mClock.currentTimeMillis() + mTouchSensitivityDelay; + sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); } - mHeadsUp = null; } public boolean isSnoozed(String packageName) { @@ -206,16 +295,15 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. mSnoozedPackages.put(snoozeKey(mMostRecentPackageName, mUser), SystemClock.elapsedRealtime() + mSnoozeLengthMs); } - releaseAndClose(); + releaseImmediately(); } private static String snoozeKey(String packageName, int user) { return user + "," + packageName; } - public void releaseAndClose() { - release(); - mBar.scheduleHeadsUpClose(); + public boolean isShowing(String key) { + return mHeadsUp != null && mHeadsUp.key.equals(key); } public NotificationData.Entry getEntry() { @@ -228,19 +316,19 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. // ViewGroup methods - private static final ViewOutlineProvider CONTENT_HOLDER_OUTLINE_PROVIDER = - new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - int outlineLeft = view.getPaddingLeft(); - int outlineTop = view.getPaddingTop(); - - // Apply padding to shadow. - outline.setRect(outlineLeft, outlineTop, - view.getWidth() - outlineLeft - view.getPaddingRight(), - view.getHeight() - outlineTop - view.getPaddingBottom()); - } - }; +private static final ViewOutlineProvider CONTENT_HOLDER_OUTLINE_PROVIDER = + new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + int outlineLeft = view.getPaddingLeft(); + int outlineTop = view.getPaddingTop(); + + // Apply padding to shadow. + outline.setRect(outlineLeft, outlineTop, + view.getWidth() - outlineLeft - view.getPaddingRight(), + view.getHeight() - outlineTop - view.getPaddingBottom()); + } + }; @Override public void onAttachedToWindow() { @@ -248,7 +336,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. float touchSlop = viewConfiguration.getScaledTouchSlop(); mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, getContext()); mSwipeHelper.setMaxSwipeProgress(mMaxAlpha); - mEdgeSwipeHelper = new EdgeSwipeHelper(touchSlop); + mEdgeSwipeHelper = new EdgeSwipeHelper(this, touchSlop); int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height); int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_max_height); @@ -282,6 +370,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. getViewTreeObserver().addOnComputeInternalInsetsListener(this); } + @Override protected void onDetachedFromWindow() { mContext.getContentResolver().unregisterContentObserver(mSettingsObserver); @@ -290,11 +379,13 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()"); - if (SystemClock.elapsedRealtime() < mStartTouchTime) { + if (mClock.currentTimeMillis() < mStartTouchTime) { return true; } + mTouched = true; return mEdgeSwipeHelper.onInterceptTouchEvent(ev) || mSwipeHelper.onInterceptTouchEvent(ev) + || mHeadsUp == null // lingering || super.onInterceptTouchEvent(ev); } @@ -316,12 +407,17 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. @Override public boolean onTouchEvent(MotionEvent ev) { - if (SystemClock.elapsedRealtime() < mStartTouchTime) { + if (mClock.currentTimeMillis() < mStartTouchTime) { return false; } - mBar.resetHeadsUpDecayTimer(); + + final boolean wasRemoved = mHeadsUp == null; + if (!wasRemoved) { + mBar.scheduleHeadsUpDecay(mHeadsUpNotificationDecay); + } return mEdgeSwipeHelper.onTouchEvent(ev) || mSwipeHelper.onTouchEvent(ev) + || wasRemoved || super.onTouchEvent(ev); } @@ -390,7 +486,11 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. @Override public void onChildDismissed(View v) { Log.v(TAG, "User swiped heads up to dismiss"); - mBar.onHeadsUpDismissed(); + if (mHeadsUp != null && mHeadsUp.notification.isClearable()) { + mBar.onNotificationClear(mHeadsUp.notification); + mHeadsUp = null; + } + releaseImmediately(); } @Override @@ -448,6 +548,8 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. pw.println("HeadsUpNotificationView state:"); pw.print(" mTouchSensitivityDelay="); pw.println(mTouchSensitivityDelay); pw.print(" mSnoozeLengthMs="); pw.println(mSnoozeLengthMs); + pw.print(" mLingerUntilMs="); pw.println(mLingerUntilMs); + pw.print(" mTouched="); pw.println(mTouched); pw.print(" mMostRecentPackageName="); pw.println(mMostRecentPackageName); pw.print(" mStartTouchTime="); pw.println(mStartTouchTime); pw.print(" now="); pw.println(SystemClock.elapsedRealtime()); @@ -465,14 +567,16 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. } } - private class EdgeSwipeHelper implements Gefingerpoken { + public static class EdgeSwipeHelper implements Gefingerpoken { private static final boolean DEBUG_EDGE_SWIPE = false; private final float mTouchSlop; + private final HeadsUpNotificationView mHeadsUpView; private boolean mConsuming; private float mFirstY; private float mFirstX; - public EdgeSwipeHelper(float touchSlop) { + public EdgeSwipeHelper(HeadsUpNotificationView headsUpView, float touchSlop) { + mHeadsUpView = headsUpView; mTouchSlop = touchSlop; } @@ -492,10 +596,10 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. final float daX = Math.abs(ev.getX() - mFirstX); final float daY = Math.abs(dY); if (!mConsuming && daX < daY && daY > mTouchSlop) { - snooze(); + mHeadsUpView.snooze(); if (dY > 0) { if (DEBUG_EDGE_SWIPE) Log.d(TAG, "found an open"); - mBar.animateExpandNotificationsPanel(); + mHeadsUpView.getBar().animateExpandNotificationsPanel(); } mConsuming = true; } @@ -503,7 +607,7 @@ public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper. case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: - if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action done" ); + if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action done"); mConsuming = false; break; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java index 0863c86..7ca91a5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotController.java @@ -22,7 +22,6 @@ public interface HotspotController { boolean isHotspotEnabled(); boolean isHotspotSupported(); void setHotspotEnabled(boolean enabled); - boolean isProvisioningNeeded(); public interface Callback { void onHotspotChanged(boolean enabled); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index 5eff5a6..4bfd528 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -16,45 +16,38 @@ package com.android.systemui.statusbar.policy; -import android.app.ActivityManager; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.net.ConnectivityManager; import android.net.wifi.WifiManager; -import android.os.SystemProperties; import android.os.UserHandle; -import android.provider.Settings; import android.util.Log; +import com.android.settingslib.TetherUtil; + import java.util.ArrayList; public class HotspotControllerImpl implements HotspotController { private static final String TAG = "HotspotController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - // Keep these in sync with Settings TetherService.java - public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType"; - public static final String EXTRA_SET_ALARM = "extraSetAlarm"; - public static final String EXTRA_RUN_PROVISION = "extraRunProvision"; - public static final String EXTRA_ENABLE_WIFI_TETHER = "extraEnableWifiTether"; - // Keep this in sync with Settings TetherSettings.java - public static final int WIFI_TETHERING = 0; + private static final Intent TETHER_SERVICE_INTENT = new Intent() + .putExtra(TetherUtil.EXTRA_ADD_TETHER_TYPE, TetherUtil.TETHERING_WIFI) + .putExtra(TetherUtil.EXTRA_SET_ALARM, true) + .putExtra(TetherUtil.EXTRA_RUN_PROVISION, true) + .putExtra(TetherUtil.EXTRA_ENABLE_WIFI_TETHER, true) + .setComponent(TetherUtil.TETHER_SERVICE); private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>(); private final Receiver mReceiver = new Receiver(); private final Context mContext; private final WifiManager mWifiManager; - private final ConnectivityManager mConnectivityManager; public HotspotControllerImpl(Context context) { mContext = context; mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); - mConnectivityManager = (ConnectivityManager) - mContext.getSystemService(Context.CONNECTIVITY_SERVICE); } public void addCallback(Callback callback) { @@ -78,54 +71,17 @@ public class HotspotControllerImpl implements HotspotController { @Override public boolean isHotspotSupported() { - final boolean isSecondaryUser = ActivityManager.getCurrentUser() != UserHandle.USER_OWNER; - return !isSecondaryUser && mConnectivityManager.isTetheringSupported(); - } - - @Override - public boolean isProvisioningNeeded() { - // Keep in sync with other usage of config_mobile_hotspot_provision_app. - // TetherSettings#isProvisioningNeeded and - // ConnectivityManager#enforceTetherChangePermission - String[] provisionApp = mContext.getResources().getStringArray( - com.android.internal.R.array.config_mobile_hotspot_provision_app); - if (SystemProperties.getBoolean("net.tethering.noprovisioning", false) - || provisionApp == null) { - return false; - } - return (provisionApp.length == 2); + return TetherUtil.isTetheringSupported(mContext); } @Override public void setHotspotEnabled(boolean enabled) { final ContentResolver cr = mContext.getContentResolver(); // Call provisioning app which is called when enabling Tethering from Settings - if (enabled) { - if (isProvisioningNeeded()) { - String tetherEnable = mContext.getResources().getString( - com.android.internal.R.string.config_wifi_tether_enable); - Intent intent = new Intent(); - intent.putExtra(EXTRA_ADD_TETHER_TYPE, WIFI_TETHERING); - intent.putExtra(EXTRA_SET_ALARM, true); - intent.putExtra(EXTRA_RUN_PROVISION, true); - intent.putExtra(EXTRA_ENABLE_WIFI_TETHER, true); - intent.setComponent(ComponentName.unflattenFromString(tetherEnable)); - mContext.startServiceAsUser(intent, UserHandle.CURRENT); - } else { - int wifiState = mWifiManager.getWifiState(); - if ((wifiState == WifiManager.WIFI_STATE_ENABLING) || - (wifiState == WifiManager.WIFI_STATE_ENABLED)) { - mWifiManager.setWifiEnabled(false); - Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 1); - } - mWifiManager.setWifiApEnabled(null, true); - } + if (enabled && TetherUtil.isProvisioningNeeded(mContext)) { + mContext.startServiceAsUser(TETHER_SERVICE_INTENT, UserHandle.CURRENT); } else { - mWifiManager.setWifiApEnabled(null, false); - if (Settings.Global.getInt(cr, Settings.Global.WIFI_SAVED_STATE, 0) == 1) { - mWifiManager.setWifiEnabled(true); - Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 0); - } + TetherUtil.setWifiTethering(enabled, mContext); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java index 6998791..3f63b5f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java @@ -26,7 +26,7 @@ import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; -import android.view.HardwareCanvas; +import android.view.DisplayListCanvas; import android.view.RenderNodeAnimator; import android.view.View; import android.view.animation.Interpolator; @@ -106,7 +106,7 @@ public class KeyButtonRipple extends Drawable { public void draw(Canvas canvas) { mSupportHardware = canvas.isHardwareAccelerated(); if (mSupportHardware) { - drawHardware((HardwareCanvas) canvas); + drawHardware((DisplayListCanvas) canvas); } else { drawSoftware(canvas); } @@ -118,7 +118,7 @@ public class KeyButtonRipple extends Drawable { } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { // Not supported. } @@ -131,7 +131,7 @@ public class KeyButtonRipple extends Drawable { return getBounds().width() > getBounds().height(); } - private void drawHardware(HardwareCanvas c) { + private void drawHardware(DisplayListCanvas c) { if (mDrawingHardwareGlow) { c.drawRoundRect(mLeftProp, mTopProp, mRightProp, mBottomProp, mRxProp, mRyProp, mPaintProp); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java index a6becef..a18daed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java @@ -16,8 +16,6 @@ package com.android.systemui.statusbar.policy; -import android.animation.Animator; -import android.animation.ObjectAnimator; import android.app.ActivityManager; import android.content.Context; import android.content.res.TypedArray; @@ -26,7 +24,6 @@ import android.media.AudioManager; import android.os.Bundle; import android.os.SystemClock; import android.util.AttributeSet; -import android.util.Log; import android.view.HapticFeedbackConstants; import android.view.InputDevice; import android.view.KeyCharacterMap; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java index a5fc2fe..353e07d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcherScrim.java @@ -19,7 +19,6 @@ package com.android.systemui.statusbar.policy; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; -import android.graphics.LightingColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.RadialGradient; @@ -48,7 +47,7 @@ public class KeyguardUserSwitcherScrim extends Drawable public KeyguardUserSwitcherScrim(View host) { host.addOnLayoutChangeListener(this); - mDarkColor = host.getResources().getColor( + mDarkColor = host.getContext().getColor( R.color.keyguard_user_switcher_background_gradient_color); } @@ -77,7 +76,7 @@ public class KeyguardUserSwitcherScrim extends Drawable } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(ColorFilter colorFilter) { } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java index 030cd6d..34068fd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/PreviewInflater.java @@ -20,7 +20,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.os.UserHandle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java new file mode 100644 index 0000000..7d721c2 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.policy; + +import com.android.systemui.R; + +import android.annotation.NonNull; +import android.app.Notification; +import android.app.PendingIntent; +import android.app.RemoteInput; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.AttributeSet; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +/** + * Host for the remote input. + */ +public class RemoteInputView extends FrameLayout implements View.OnClickListener { + + private static final String TAG = "RemoteInput"; + + private RemoteEditText mEditText; + private ProgressBar mProgressBar; + private PendingIntent mPendingIntent; + private RemoteInput mRemoteInput; + private Notification.Action mAction; + + public RemoteInputView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mProgressBar = (ProgressBar) findViewById(R.id.remote_input_progress); + + mEditText = (RemoteEditText) getChildAt(0); + mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + + // Check if this was the result of hitting the enter key + final boolean isSoftImeEvent = event == null + && (actionId == EditorInfo.IME_ACTION_DONE + || actionId == EditorInfo.IME_ACTION_NEXT + || actionId == EditorInfo.IME_ACTION_SEND); + final boolean isKeyboardEnterKey = event != null + && KeyEvent.isConfirmKey(event.getKeyCode()) + && event.getAction() == KeyEvent.ACTION_DOWN; + + if (isSoftImeEvent || isKeyboardEnterKey) { + sendRemoteInput(); + return true; + } + return false; + } + }); + mEditText.setOnClickListener(this); + mEditText.setInnerFocusable(false); + } + + private void sendRemoteInput() { + Bundle results = new Bundle(); + results.putString(mRemoteInput.getResultKey(), mEditText.getText().toString()); + Intent fillInIntent = new Intent(); + RemoteInput.addResultsToIntent(mAction.getRemoteInputs(), fillInIntent, + results); + + mEditText.setEnabled(false); + mProgressBar.setVisibility(VISIBLE); + + try { + mPendingIntent.send(mContext, 0, fillInIntent); + } catch (PendingIntent.CanceledException e) { + Log.i(TAG, "Unable to send remote input result", e); + } + } + + public static RemoteInputView inflate(Context context, ViewGroup root, + Notification.Action action, RemoteInput remoteInput) { + RemoteInputView v = (RemoteInputView) + LayoutInflater.from(context).inflate(R.layout.remote_input, root, false); + + v.mEditText.setHint(action.title); + v.mPendingIntent = action.actionIntent; + v.mRemoteInput = remoteInput; + v.mAction = action; + + return v; + } + + @Override + public void onClick(View v) { + if (v == mEditText) { + if (!mEditText.isFocusable()) { + mEditText.setInnerFocusable(true); + InputMethodManager imm = InputMethodManager.getInstance(); + if (imm != null) { + imm.viewClicked(mEditText); + imm.showSoftInput(mEditText, 0); + } + } + } + } + + /** + * An EditText that changes appearance based on whether it's focusable and becomes + * un-focusable whenever the user navigates away from it or it becomes invisible. + */ + public static class RemoteEditText extends EditText { + + private final Drawable mBackground; + + public RemoteEditText(Context context, AttributeSet attrs) { + super(context, attrs); + mBackground = getBackground(); + } + + private void defocusIfNeeded() { + if (isFocusable() && isEnabled()) { + setInnerFocusable(false); + } + } + + @Override + protected void onVisibilityChanged(View changedView, int visibility) { + super.onVisibilityChanged(changedView, visibility); + + if (!isShown()) { + defocusIfNeeded(); + } + } + + @Override + protected void onFocusLost() { + super.onFocusLost(); + defocusIfNeeded(); + } + + @Override + public boolean onKeyPreIme(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + defocusIfNeeded(); + } + return super.onKeyPreIme(keyCode, event); + } + + + void setInnerFocusable(boolean focusable) { + setFocusableInTouchMode(focusable); + setFocusable(focusable); + setCursorVisible(focusable); + + if (focusable) { + requestFocus(); + setBackground(mBackground); + } else { + setBackground(null); + } + + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 2fbb812..f0dd943 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -190,7 +190,8 @@ public class SecurityControllerImpl implements SecurityController { NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(network); if (DEBUG) Log.d(TAG, "onAvailable " + network.netId + " : " + networkCapabilities); - if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { + if (networkCapabilities != null && + networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { setCurrentNetid(network.netId); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java index 8379b93..1d96c6b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java @@ -36,7 +36,7 @@ public abstract class SignalController<T extends SignalController.State, // Save the previous SignalController.States of all SignalControllers for dumps. static final boolean RECORD_HISTORY = true; // If RECORD_HISTORY how many to save, must be a power of 2. - static final int HISTORY_SIZE = 16; + static final int HISTORY_SIZE = 64; protected static final boolean DEBUG = NetworkControllerImpl.DEBUG; protected static final boolean CHATTY = NetworkControllerImpl.CHATTY; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java index 600b750..0e21457 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java @@ -31,6 +31,7 @@ public interface ZenModeController { void setUserId(int userId); boolean isZenAvailable(); ComponentName getEffectsSuppressor(); + boolean isCountdownConditionSupported(); public static class Callback { public void onZenChanged(int zen) {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index 37ed7d8..bea0c86 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.app.AlarmManager; -import android.app.INotificationManager; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -28,8 +27,6 @@ import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; -import android.os.RemoteException; -import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings.Global; import android.provider.Settings.Secure; @@ -53,7 +50,7 @@ public class ZenModeControllerImpl implements ZenModeController { private final Context mContext; private final GlobalSetting mModeSetting; private final GlobalSetting mConfigSetting; - private final INotificationManager mNoMan; + private final NotificationManager mNoMan; private final LinkedHashMap<Uri, Condition> mConditions = new LinkedHashMap<Uri, Condition>(); private final AlarmManager mAlarmManager; private final SetupObserver mSetupObserver; @@ -78,8 +75,7 @@ public class ZenModeControllerImpl implements ZenModeController { }; mModeSetting.setListening(true); mConfigSetting.setListening(true); - mNoMan = INotificationManager.Stub.asInterface( - ServiceManager.getService(Context.NOTIFICATION_SERVICE)); + mNoMan = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mSetupObserver = new SetupObserver(handler); mSetupObserver.register(); @@ -113,11 +109,7 @@ public class ZenModeControllerImpl implements ZenModeController { @Override public void requestConditions(boolean request) { mRequesting = request; - try { - mNoMan.requestZenModeConditions(mListener, request ? Condition.FLAG_RELEVANT_NOW : 0); - } catch (RemoteException e) { - // noop - } + mNoMan.requestZenModeConditions(mListener, request ? Condition.FLAG_RELEVANT_NOW : 0); if (!mRequesting) { mConditions.clear(); } @@ -125,24 +117,12 @@ public class ZenModeControllerImpl implements ZenModeController { @Override public void setExitCondition(Condition exitCondition) { - try { - mNoMan.setZenModeCondition(exitCondition); - } catch (RemoteException e) { - // noop - } + mNoMan.setZenModeCondition(exitCondition); } @Override public Condition getExitCondition() { - try { - final ZenModeConfig config = mNoMan.getZenModeConfig(); - if (config != null) { - return config.exitCondition; - } - } catch (RemoteException e) { - // noop - } - return null; + return mNoMan.getZenModeCondition(); } @Override @@ -169,6 +149,12 @@ public class ZenModeControllerImpl implements ZenModeController { return NotificationManager.from(mContext).getEffectsSuppressor(); } + @Override + public boolean isCountdownConditionSupported() { + return NotificationManager.from(mContext) + .isSystemConditionProviderEnabled(ZenModeConfig.COUNTDOWN_PATH); + } + private void fireNextAlarmChanged() { for (Callback cb : mCallbacks) { cb.onNextAlarmChanged(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java new file mode 100644 index 0000000..3c9e8cf --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java @@ -0,0 +1,406 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.stack; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.android.systemui.R; +import com.android.systemui.statusbar.ExpandableNotificationRow; +import com.android.systemui.statusbar.ExpandableView; + +import java.util.ArrayList; +import java.util.List; + +/** + * A container containing child notifications + */ +public class NotificationChildrenContainer extends ViewGroup { + + private final int mChildPadding; + private final int mDividerHeight; + private final int mMaxNotificationHeight; + private final List<View> mDividers = new ArrayList<>(); + private final List<ExpandableNotificationRow> mChildren = new ArrayList<>(); + private final View mCollapseButton; + private final View mCollapseDivider; + private final int mCollapseButtonHeight; + private final int mNotificationAppearDistance; + + public NotificationChildrenContainer(Context context) { + this(context, null); + } + + public NotificationChildrenContainer(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public NotificationChildrenContainer(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public NotificationChildrenContainer(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + mChildPadding = getResources().getDimensionPixelSize( + R.dimen.notification_children_padding); + mDividerHeight = getResources().getDimensionPixelSize( + R.dimen.notification_children_divider_height); + mMaxNotificationHeight = getResources().getDimensionPixelSize( + R.dimen.notification_max_height); + mNotificationAppearDistance = getResources().getDimensionPixelSize( + R.dimen.notification_appear_distance); + LayoutInflater inflater = mContext.getSystemService(LayoutInflater.class); + mCollapseButton = inflater.inflate(R.layout.notification_collapse_button, this, + false); + mCollapseButtonHeight = getResources().getDimensionPixelSize( + R.dimen.notification_bottom_decor_height); + addView(mCollapseButton); + mCollapseDivider = inflateDivider(); + addView(mCollapseDivider); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + int childCount = mChildren.size(); + boolean firstChild = true; + for (int i = 0; i < childCount; i++) { + View child = mChildren.get(i); + boolean viewGone = child.getVisibility() == View.GONE; + if (i != 0) { + View divider = mDividers.get(i - 1); + int dividerVisibility = divider.getVisibility(); + int newVisibility = viewGone ? INVISIBLE : VISIBLE; + if (dividerVisibility != newVisibility) { + divider.setVisibility(newVisibility); + } + } + if (viewGone) { + continue; + } + child.layout(0, 0, getWidth(), child.getMeasuredHeight()); + if (!firstChild) { + mDividers.get(i - 1).layout(0, 0, getWidth(), mDividerHeight); + } else { + firstChild = false; + } + } + mCollapseButton.layout(0, 0, getWidth(), mCollapseButtonHeight); + mCollapseDivider.layout(0, mCollapseButtonHeight - mDividerHeight, getWidth(), + mCollapseButtonHeight); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int ownMaxHeight = mMaxNotificationHeight; + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + boolean hasFixedHeight = heightMode == MeasureSpec.EXACTLY; + boolean isHeightLimited = heightMode == MeasureSpec.AT_MOST; + if (hasFixedHeight || isHeightLimited) { + int size = MeasureSpec.getSize(heightMeasureSpec); + ownMaxHeight = Math.min(ownMaxHeight, size); + } + int newHeightSpec = MeasureSpec.makeMeasureSpec(ownMaxHeight, MeasureSpec.AT_MOST); + int dividerHeightSpec = MeasureSpec.makeMeasureSpec(mDividerHeight, MeasureSpec.EXACTLY); + int collapseButtonHeightSpec = MeasureSpec.makeMeasureSpec(mCollapseButtonHeight, + MeasureSpec.EXACTLY); + mCollapseButton.measure(widthMeasureSpec, collapseButtonHeightSpec); + mCollapseDivider.measure(widthMeasureSpec, dividerHeightSpec); + int height = mCollapseButtonHeight; + int childCount = mChildren.size(); + boolean firstChild = true; + for (int i = 0; i < childCount; i++) { + View child = mChildren.get(i); + if (child.getVisibility() == View.GONE) { + continue; + } + child.measure(widthMeasureSpec, newHeightSpec); + height += child.getMeasuredHeight(); + if (!firstChild) { + // layout the divider + View divider = mDividers.get(i - 1); + divider.measure(widthMeasureSpec, dividerHeightSpec); + height += mChildPadding; + } else { + firstChild = false; + } + } + int width = MeasureSpec.getSize(widthMeasureSpec); + height = hasFixedHeight ? ownMaxHeight + : isHeightLimited ? Math.min(ownMaxHeight, height) + : height; + setMeasuredDimension(width, height); + } + + /** + * Add a child notification to this view. + * + * @param row the row to add + * @param childIndex the index to add it at, if -1 it will be added at the end + */ + public void addNotification(ExpandableNotificationRow row, int childIndex) { + int newIndex = childIndex < 0 ? mChildren.size() : childIndex; + mChildren.add(newIndex, row); + addView(row); + if (mChildren.size() != 1) { + View divider = inflateDivider(); + addView(divider); + mDividers.add(Math.max(newIndex - 1, 0), divider); + } + // TODO: adapt background corners + // TODO: fix overdraw + } + + public void removeNotification(ExpandableNotificationRow row) { + int childIndex = mChildren.indexOf(row); + mChildren.remove(row); + removeView(row); + if (!mDividers.isEmpty()) { + View divider = mDividers.remove(Math.max(childIndex - 1, 0)); + removeView(divider); + } + row.setSystemChildExpanded(false); + // TODO: adapt background corners + } + + private View inflateDivider() { + return LayoutInflater.from(mContext).inflate( + R.layout.notification_children_divider, this, false); + } + + public List<ExpandableNotificationRow> getNotificationChildren() { + return mChildren; + } + + /** + * Apply the order given in the list to the children. + * + * @param childOrder the new list order + * @return whether the list order has changed + */ + public boolean applyChildOrder(List<ExpandableNotificationRow> childOrder) { + if (childOrder == null) { + return false; + } + boolean result = false; + for (int i = 0; i < mChildren.size() && i < childOrder.size(); i++) { + ExpandableNotificationRow child = mChildren.get(i); + ExpandableNotificationRow desiredChild = childOrder.get(i); + if (child != desiredChild) { + mChildren.remove(desiredChild); + mChildren.add(i, desiredChild); + result = true; + } + } + + // Let's make the first child expanded! + boolean first = true; + for (int i = 0; i < childOrder.size(); i++) { + ExpandableNotificationRow child = childOrder.get(i); + child.setSystemChildExpanded(first); + first = false; + } + return result; + } + + public int getIntrinsicHeight() { + int childCount = mChildren.size(); + int intrinsicHeight = 0; + int visibleChildren = 0; + for (int i = 0; i < childCount; i++) { + ExpandableNotificationRow child = mChildren.get(i); + if (child.getVisibility() == View.GONE) { + continue; + } + intrinsicHeight += child.getIntrinsicHeight(); + visibleChildren++; + } + if (visibleChildren > 0) { + intrinsicHeight += (visibleChildren - 1) * mDividerHeight; + } + return intrinsicHeight; + } + + /** + * Update the state of all its children based on a linear layout algorithm. + * + * @param resultState the state to update + * @param parentState the state of the parent + */ + public void getState(StackScrollState resultState, StackViewState parentState) { + int childCount = mChildren.size(); + int yPosition = mCollapseButtonHeight; + boolean firstChild = true; + for (int i = 0; i < childCount; i++) { + ExpandableNotificationRow child = mChildren.get(i); + if (child.getVisibility() == View.GONE) { + continue; + } + if (!firstChild) { + // There's a divider + yPosition += mChildPadding; + } else { + firstChild = false; + } + StackViewState childState = resultState.getViewStateForView(child); + int intrinsicHeight = child.getIntrinsicHeight(); + childState.yTranslation = yPosition; + childState.zTranslation = 0; + childState.height = intrinsicHeight; + childState.dimmed = parentState.dimmed; + childState.dark = parentState.dark; + childState.hideSensitive = parentState.hideSensitive; + childState.belowSpeedBump = parentState.belowSpeedBump; + childState.scale = parentState.scale; + childState.clipTopAmount = 0; + childState.topOverLap = 0; + childState.location = parentState.location; + yPosition += intrinsicHeight; + } + } + + public void applyState(StackScrollState state) { + int childCount = mChildren.size(); + boolean firstChild = true; + ViewState dividerState = new ViewState(); + for (int i = 0; i < childCount; i++) { + ExpandableNotificationRow child = mChildren.get(i); + StackViewState viewState = state.getViewStateForView(child); + if (child.getVisibility() == View.GONE) { + continue; + } + if (!firstChild) { + // layout the divider + View divider = mDividers.get(i - 1); + dividerState.initFrom(divider); + dividerState.yTranslation = (int) (viewState.yTranslation + - (mChildPadding + mDividerHeight) / 2.0f); + dividerState.alpha = 1; + state.applyViewState(divider, dividerState); + } else { + firstChild = false; + } + state.applyState(child, viewState); + } + } + + public void setCollapseClickListener(OnClickListener collapseClickListener) { + mCollapseButton.setOnClickListener(collapseClickListener); + } + + /** + * This is called when the children expansion has changed and positions the children properly + * for an appear animation. + * + * @param state the new state we animate to + */ + public void prepareExpansionChanged(StackScrollState state) { + int childCount = mChildren.size(); + boolean firstChild = true; + StackViewState sourceState = new StackViewState(); + ViewState dividerState = new ViewState(); + for (int i = 0; i < childCount; i++) { + ExpandableNotificationRow child = mChildren.get(i); + StackViewState viewState = state.getViewStateForView(child); + if (child.getVisibility() == View.GONE) { + continue; + } + if (!firstChild) { + // layout the divider + View divider = mDividers.get(i - 1); + dividerState.initFrom(divider); + dividerState.yTranslation = viewState.yTranslation + - (mChildPadding + mDividerHeight) / 2.0f + mNotificationAppearDistance; + dividerState.alpha = 0; + state.applyViewState(divider, dividerState); + } else { + firstChild = false; + } + sourceState.copyFrom(viewState); + sourceState.alpha = 0; + sourceState.yTranslation += mNotificationAppearDistance; + state.applyState(child, sourceState); + } + mCollapseButton.setAlpha(0); + mCollapseDivider.setAlpha(0); + mCollapseDivider.setTranslationY(mNotificationAppearDistance / 4); + } + + public void startAnimationToState(StackScrollState state, StackStateAnimator stateAnimator, + boolean withDelays, long baseDelay, long duration) { + int childCount = mChildren.size(); + boolean firstChild = true; + ViewState dividerState = new ViewState(); + int notGoneIndex = 0; + for (int i = 0; i < childCount; i++) { + ExpandableNotificationRow child = mChildren.get(i); + StackViewState viewState = state.getViewStateForView(child); + if (child.getVisibility() == View.GONE) { + continue; + } + int difference = Math.min(StackStateAnimator.DELAY_EFFECT_MAX_INDEX_DIFFERENCE_CHILDREN, + notGoneIndex + 1); + long delay = withDelays + ? difference * StackStateAnimator.ANIMATION_DELAY_PER_ELEMENT_EXPAND_CHILDREN + : 0; + delay += baseDelay; + if (!firstChild) { + // layout the divider + View divider = mDividers.get(i - 1); + dividerState.initFrom(divider); + dividerState.yTranslation = viewState.yTranslation + - (mChildPadding + mDividerHeight) / 2.0f; + dividerState.alpha = 1; + stateAnimator.startViewAnimations(divider, dividerState, delay, duration); + } else { + firstChild = false; + } + stateAnimator.startStackAnimations(child, viewState, state, -1, delay); + notGoneIndex++; + } + dividerState.initFrom(mCollapseButton); + dividerState.alpha = 1.0f; + stateAnimator.startViewAnimations(mCollapseButton, dividerState, baseDelay, duration); + dividerState.initFrom(mCollapseDivider); + dividerState.alpha = 1.0f; + dividerState.yTranslation = 0.0f; + stateAnimator.startViewAnimations(mCollapseDivider, dividerState, baseDelay, duration); + } + + public ExpandableNotificationRow getViewAtPosition(float y) { + // find the view under the pointer, accounting for GONE views + final int count = mChildren.size(); + for (int childIdx = 0; childIdx < count; childIdx++) { + ExpandableNotificationRow slidingChild = mChildren.get(childIdx); + float childTop = slidingChild.getTranslationY(); + float top = childTop + slidingChild.getClipTopAmount(); + float bottom = childTop + slidingChild.getActualHeight(); + if (y >= top && y <= bottom) { + return slidingChild; + } + } + return null; + } + + public void setTintColor(int color) { + ExpandableNotificationRow.applyTint(mCollapseDivider, color); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 6dcbed6..2eafd57 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -41,12 +41,13 @@ import com.android.systemui.statusbar.DismissView; import com.android.systemui.statusbar.EmptyShadeView; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; +import com.android.systemui.statusbar.NotificationData; import com.android.systemui.statusbar.SpeedBumpView; import com.android.systemui.statusbar.StackScrollerDecorView; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.PhoneStatusBar; import com.android.systemui.statusbar.policy.ScrollAdapter; -import com.android.systemui.statusbar.stack.StackScrollState.ViewState; import java.util.ArrayList; import java.util.HashSet; @@ -56,7 +57,7 @@ import java.util.HashSet; */ public class NotificationStackScrollLayout extends ViewGroup implements SwipeHelper.Callback, ExpandHelper.Callback, ScrollAdapter, - ExpandableView.OnHeightChangedListener { + ExpandableView.OnHeightChangedListener, NotificationGroupManager.OnGroupChangeListener { private static final String TAG = "NotificationStackScrollLayout"; private static final boolean DEBUG = false; @@ -119,6 +120,7 @@ public class NotificationStackScrollLayout extends ViewGroup */ private StackScrollState mCurrentStackScrollState = new StackScrollState(this); private AmbientState mAmbientState = new AmbientState(); + private NotificationGroupManager mGroupManager; private ArrayList<View> mChildrenToAddAnimated = new ArrayList<View>(); private ArrayList<View> mChildrenToRemoveAnimated = new ArrayList<View>(); private ArrayList<View> mSnappedBackChildren = new ArrayList<View>(); @@ -181,6 +183,7 @@ public class NotificationStackScrollLayout extends ViewGroup private boolean mDontReportNextOverScroll; private boolean mRequestViewResizeAnimationOnLayout; private boolean mNeedViewResizeAnimation; + private View mExpandedGroupView; private boolean mEverythingNeedsAnimation; /** @@ -214,6 +217,8 @@ public class NotificationStackScrollLayout extends ViewGroup }; private PhoneStatusBar mPhoneStatusBar; private int[] mTempInt2 = new int[2]; + private boolean mGenerateChildOrderChangedEvent; + private boolean mRemoveAnimationEnabled; public NotificationStackScrollLayout(Context context) { this(context, null); @@ -309,7 +314,7 @@ public class NotificationStackScrollLayout extends ViewGroup private void notifyHeightChangeListener(ExpandableView view) { if (mOnHeightChangedListener != null) { - mOnHeightChangedListener.onHeightChanged(view); + mOnHeightChangedListener.onHeightChanged(view, false /* needsAnimation */); } } @@ -329,6 +334,9 @@ public class NotificationStackScrollLayout extends ViewGroup float centerX = getWidth() / 2.0f; for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); + if (child.getVisibility() == GONE) { + continue; + } float width = child.getMeasuredWidth(); float height = child.getMeasuredHeight(); child.layout((int) (centerX - width / 2.0f), @@ -339,16 +347,18 @@ public class NotificationStackScrollLayout extends ViewGroup setMaxLayoutHeight(getHeight()); updateContentHeight(); clampScrollPosition(); - requestAnimationOnViewResize(); + if (mRequestViewResizeAnimationOnLayout) { + requestAnimationOnViewResize(); + mRequestViewResizeAnimationOnLayout = false; + } requestChildrenUpdate(); } private void requestAnimationOnViewResize() { - if (mRequestViewResizeAnimationOnLayout && mIsExpanded && mAnimationsEnabled) { + if (mIsExpanded && mAnimationsEnabled) { mNeedViewResizeAnimation = true; mNeedsAnimation = true; } - mRequestViewResizeAnimationOnLayout = false; } public void updateSpeedBumpIndex(int newIndex) { @@ -375,15 +385,15 @@ public class NotificationStackScrollLayout extends ViewGroup * Returns the location the given child is currently rendered at. * * @param child the child to get the location for - * @return one of {@link ViewState}'s <code>LOCATION_*</code> constants + * @return one of {@link StackViewState}'s <code>LOCATION_*</code> constants */ public int getChildLocation(View child) { - ViewState childViewState = mCurrentStackScrollState.getViewStateForView(child); + StackViewState childViewState = mCurrentStackScrollState.getViewStateForView(child); if (childViewState == null) { - return ViewState.LOCATION_UNKNOWN; + return StackViewState.LOCATION_UNKNOWN; } if (childViewState.gone) { - return ViewState.LOCATION_GONE; + return StackViewState.LOCATION_GONE; } return childViewState.location; } @@ -645,6 +655,10 @@ public class NotificationStackScrollLayout extends ViewGroup int right = getWidth(); if (touchY >= top && touchY <= bottom && touchX >= left && touchX <= right) { + if (slidingChild instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) slidingChild; + return row.getViewAtPosition(touchY - childTop); + } return slidingChild; } } @@ -723,7 +737,6 @@ public class NotificationStackScrollLayout extends ViewGroup } public void dismissViewAnimated(View child, Runnable endRunnable, int delay, long duration) { - child.setClipBounds(null); mSwipeHelper.dismissChild(child, 0, endRunnable, delay, true, duration); } @@ -1544,6 +1557,14 @@ public class NotificationStackScrollLayout extends ViewGroup @Override protected void onViewRemoved(View child) { super.onViewRemoved(child); + // we only call our internal methods if this is actually a removal and not just a + // notification which becomes a child notification + if (!isChildInGroup(child)) { + onViewRemovedInternal(child); + } + } + + private void onViewRemovedInternal(View child) { mStackScrollAlgorithm.notifyChildrenChanged(this); if (mChangePositionInProgress) { // This is only a position change, don't do anything special @@ -1552,16 +1573,27 @@ public class NotificationStackScrollLayout extends ViewGroup ((ExpandableView) child).setOnHeightChangedListener(null); mCurrentStackScrollState.removeViewStateForView(child); updateScrollStateForRemovedChild(child); - boolean animationGenerated = generateRemoveAnimation(child); - if (animationGenerated && !mSwipedOutViews.contains(child)) { - // Add this view to an overlay in order to ensure that it will still be temporary - // drawn when removed - getOverlay().add(child); + if (mRemoveAnimationEnabled) { + boolean animationGenerated = generateRemoveAnimation(child); + if (animationGenerated && !mSwipedOutViews.contains(child)) { + // Add this view to an overlay in order to ensure that it will still be temporary + // drawn when removed + getOverlay().add(child); + } + } else { + // TODO: handle this more cleanly when HEADS-up and the shade are merged + requestAnimateEverything(); } updateAnimationState(false, child); // Make sure the clipRect we might have set is removed - child.setClipBounds(null); + ((ExpandableView) child).setClipTopOptimization(0); + } + + private boolean isChildInGroup(View child) { + return child instanceof ExpandableNotificationRow + && mGroupManager.isChildInGroupWithSummary( + ((ExpandableNotificationRow) child).getStatusBarNotification()); } /** @@ -1571,7 +1603,7 @@ public class NotificationStackScrollLayout extends ViewGroup * @return Whether an animation was generated. */ private boolean generateRemoveAnimation(View child) { - if (mIsExpanded && mAnimationsEnabled) { + if (mIsExpanded && mAnimationsEnabled && !isChildInInvisibleGroup(child)) { if (!mChildrenToAddAnimated.contains(child)) { // Generate Animations mChildrenToRemoveAnimated.add(child); @@ -1587,6 +1619,23 @@ public class NotificationStackScrollLayout extends ViewGroup } /** + * @param child the child to query + * @return whether a view is not a top level child but a child notification and that group is + * not expanded + */ + private boolean isChildInInvisibleGroup(View child) { + if (child instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) child; + ExpandableNotificationRow groupSummary = + mGroupManager.getGroupSummary(row.getStatusBarNotification()); + if (groupSummary != null && groupSummary != row) { + return !groupSummary.areChildrenExpanded(); + } + } + return false; + } + + /** * Updates the scroll position when a child was removed * * @param removedChild the removed child @@ -1634,6 +1683,10 @@ public class NotificationStackScrollLayout extends ViewGroup @Override protected void onViewAdded(View child) { super.onViewAdded(child); + onViewAddedInternal(child); + } + + private void onViewAddedInternal(View child) { mStackScrollAlgorithm.notifyChildrenChanged(this); ((ExpandableView) child).setOnHeightChangedListener(this); generateAddAnimation(child, false /* fromMoreCard */); @@ -1646,6 +1699,14 @@ public class NotificationStackScrollLayout extends ViewGroup } } + public void notifyGroupChildRemoved(View row) { + onViewRemovedInternal(row); + } + + public void notifyGroupChildAdded(View row) { + onViewAddedInternal(row); + } + public void setAnimationsEnabled(boolean animationsEnabled) { mAnimationsEnabled = animationsEnabled; updateNotificationAnimationStates(); @@ -1741,10 +1802,20 @@ public class NotificationStackScrollLayout extends ViewGroup generateDarkEvent(); generateGoToFullShadeEvent(); generateViewResizeEvent(); + generateGroupExpansionEvent(); generateAnimateEverythingEvent(); mNeedsAnimation = false; } + private void generateGroupExpansionEvent() { + // Generate a group expansion/collapsing event if there is such a group at all + if (mExpandedGroupView != null) { + mAnimationEvents.add(new AnimationEvent(mExpandedGroupView, + AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED)); + mExpandedGroupView = null; + } + } + private void generateViewResizeEvent() { if (mNeedViewResizeAnimation) { mAnimationEvents.add( @@ -1791,6 +1862,11 @@ public class NotificationStackScrollLayout extends ViewGroup AnimationEvent.ANIMATION_TYPE_CHANGE_POSITION)); } mChildrenChangingPositions.clear(); + if (mGenerateChildOrderChangedEvent) { + mAnimationEvents.add(new AnimationEvent(null, + AnimationEvent.ANIMATION_TYPE_CHANGE_POSITION)); + mGenerateChildOrderChangedEvent = false; + } } private void generateChildAdditionEvents() { @@ -2059,11 +2135,14 @@ public class NotificationStackScrollLayout extends ViewGroup } @Override - public void onHeightChanged(ExpandableView view) { + public void onHeightChanged(ExpandableView view, boolean needsAnimation) { updateContentHeight(); updateScrollPositionOnExpandInBottom(view); clampScrollPosition(); notifyHeightChangeListener(view); + if (needsAnimation) { + requestAnimationOnViewResize(); + } requestChildrenUpdate(); } @@ -2338,6 +2417,20 @@ public class NotificationStackScrollLayout extends ViewGroup public void setDismissAllInProgress(boolean dismissAllInProgress) { mDismissAllInProgress = dismissAllInProgress; mDismissView.setDismissAllInProgress(dismissAllInProgress); + if (dismissAllInProgress) { + disableClipOptimization(); + } + } + + private void disableClipOptimization() { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + ExpandableView child = (ExpandableView) getChildAt(i); + if (child.getVisibility() == GONE) { + continue; + } + child.setClipTopOptimization(0); + } } public boolean isDismissViewNotGone() { @@ -2392,28 +2485,97 @@ public class NotificationStackScrollLayout extends ViewGroup this.mPhoneStatusBar = phoneStatusBar; } + public void setGroupManager(NotificationGroupManager groupManager) { + this.mGroupManager = groupManager; + } + public void onGoToKeyguard() { + requestAnimateEverything(); + } + + private void requestAnimateEverything() { if (mIsExpanded && mAnimationsEnabled) { mEverythingNeedsAnimation = true; + mNeedsAnimation = true; requestChildrenUpdate(); } } private boolean isBelowLastNotification(float touchX, float touchY) { - ExpandableView lastChildNotGone = (ExpandableView) getLastChildNotGone(); - if (lastChildNotGone == null) { - return touchY > mIntrinsicPadding; - } - if (lastChildNotGone != mDismissView && lastChildNotGone != mEmptyShadeView) { - return touchY > lastChildNotGone.getY() + lastChildNotGone.getActualHeight(); - } else if (lastChildNotGone == mEmptyShadeView) { - return touchY > mEmptyShadeView.getY(); - } else { - float dismissY = mDismissView.getY(); - boolean belowDismissView = touchY > dismissY + mDismissView.getActualHeight(); - return belowDismissView || (touchY > dismissY - && mDismissView.isOnEmptySpace(touchX - mDismissView.getX(), - touchY - dismissY)); + int childCount = getChildCount(); + for (int i = childCount - 1; i >= 0; i--) { + ExpandableView child = (ExpandableView) getChildAt(i); + if (child.getVisibility() != View.GONE) { + float childTop = child.getY(); + if (childTop > touchY) { + // we are above a notification entirely let's abort + return false; + } + boolean belowChild = touchY > childTop + child.getActualHeight(); + if (child == mDismissView) { + if(!belowChild && !mDismissView.isOnEmptySpace(touchX - mDismissView.getX(), + touchY - childTop)) { + // We clicked on the dismiss button + return false; + } + } else if (child == mEmptyShadeView) { + // We arrived at the empty shade view, for which we accept all clicks + return true; + } else if (!belowChild){ + // We are on a child + return false; + } + } + } + return touchY > mIntrinsicPadding; + } + + public void setRemoveAnimationEnabled(boolean enabled) { + mRemoveAnimationEnabled = enabled; + } + + private void updateExpandButtons() { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) child; + row.updateExpandButton(); + } + } + } + + @Override + public void onGroupExpansionChanged(ExpandableNotificationRow changedRow, boolean expanded) { + boolean animated = mAnimationsEnabled && mIsExpanded; + if (animated) { + mExpandedGroupView = changedRow; + mNeedsAnimation = true; + } + changedRow.setChildrenExpanded(expanded, animated); + onHeightChanged(changedRow, false /* needsAnimation */); + } + + @Override + public void onGroupsProhibitedChanged() { + updateExpandButtons(); + } + + @Override + public void onGroupCreatedFromChildren(NotificationGroupManager.NotificationGroup group) { + for (NotificationData.Entry entry : group.children) { + ExpandableNotificationRow row = entry.row; + if (indexOfChild(row) != -1) { + removeView(row); + group.summary.row.addChildNotification(row); + } + } + } + + public void generateChildOrderChangedEvent() { + if (mIsExpanded && mAnimationsEnabled) { + mGenerateChildOrderChangedEvent = true; + mNeedsAnimation = true; + requestChildrenUpdate(); } } @@ -2553,6 +2715,14 @@ public class NotificationStackScrollLayout extends ViewGroup .animateY() .animateZ(), + // ANIMATION_TYPE_GROUP_EXPANSION_CHANGED + new AnimationFilter() + .animateAlpha() + .animateHeight() + .animateTopInset() + .animateY() + .animateZ(), + // ANIMATION_TYPE_EVERYTHING new AnimationFilter() .animateAlpha() @@ -2607,6 +2777,9 @@ public class NotificationStackScrollLayout extends ViewGroup // ANIMATION_TYPE_VIEW_RESIZE StackStateAnimator.ANIMATION_DURATION_STANDARD, + // ANIMATION_TYPE_GROUP_EXPANSION_CHANGED + StackStateAnimator.ANIMATION_DURATION_EXPAND_CLICKED, + // ANIMATION_TYPE_EVERYTHING StackStateAnimator.ANIMATION_DURATION_STANDARD, }; @@ -2624,7 +2797,8 @@ public class NotificationStackScrollLayout extends ViewGroup static final int ANIMATION_TYPE_GO_TO_FULL_SHADE = 10; static final int ANIMATION_TYPE_HIDE_SENSITIVE = 11; static final int ANIMATION_TYPE_VIEW_RESIZE = 12; - static final int ANIMATION_TYPE_EVERYTHING = 13; + static final int ANIMATION_TYPE_GROUP_EXPANSION_CHANGED = 13; + static final int ANIMATION_TYPE_EVERYTHING = 14; static final int DARK_ANIMATION_ORIGIN_INDEX_ABOVE = -1; static final int DARK_ANIMATION_ORIGIN_INDEX_BELOW = -2; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java index ddc4251..e7bf47b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java @@ -27,6 +27,7 @@ import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; import java.util.ArrayList; +import java.util.List; /** * The Algorithm of the {@link com.android.systemui.statusbar.stack @@ -171,6 +172,19 @@ public class StackScrollAlgorithm { updateDimmedActivatedHideSensitive(ambientState, resultState, algorithmState); updateClipping(resultState, algorithmState); updateSpeedBumpState(resultState, algorithmState, ambientState.getSpeedBumpIndex()); + getNotificationChildrenStates(resultState, algorithmState); + } + + private void getNotificationChildrenStates(StackScrollState resultState, + StackScrollAlgorithmState algorithmState) { + int childCount = algorithmState.visibleChildren.size(); + for (int i = 0; i < childCount; i++) { + ExpandableView v = algorithmState.visibleChildren.get(i); + if (v instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) v; + row.getChildrenStates(resultState); + } + } } private void updateSpeedBumpState(StackScrollState resultState, @@ -178,7 +192,7 @@ public class StackScrollAlgorithm { int childCount = algorithmState.visibleChildren.size(); for (int i = 0; i < childCount; i++) { View child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState childViewState = resultState.getViewStateForView(child); + StackViewState childViewState = resultState.getViewStateForView(child); // The speed bump can also be gone, so equality needs to be taken when comparing // indices. @@ -194,7 +208,7 @@ public class StackScrollAlgorithm { int childCount = algorithmState.visibleChildren.size(); for (int i = 0; i < childCount; i++) { ExpandableView child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState state = resultState.getViewStateForView(child); + StackViewState state = resultState.getViewStateForView(child); float newYTranslation = state.yTranslation + state.height * (1f - state.scale) / 2f; float newHeight = state.height * state.scale; // apply clipping and shadow @@ -242,8 +256,8 @@ public class StackScrollAlgorithm { * @param backgroundHeight the desired background height. The shadows of the view will be * based on this height and the content will be clipped from the top */ - private void updateChildClippingAndBackground(StackScrollState.ViewState state, - float realHeight, float clipHeight, float backgroundHeight) { + private void updateChildClippingAndBackground(StackViewState state, float realHeight, + float clipHeight, float backgroundHeight) { if (realHeight > clipHeight) { // Rather overlap than create a hole. state.topOverLap = (int) Math.floor((realHeight - clipHeight) / state.scale); @@ -270,7 +284,7 @@ public class StackScrollAlgorithm { int childCount = algorithmState.visibleChildren.size(); for (int i = 0; i < childCount; i++) { View child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState childViewState = resultState.getViewStateForView(child); + StackViewState childViewState = resultState.getViewStateForView(child); childViewState.dimmed = dimmed; childViewState.dark = dark; childViewState.hideSensitive = hideSensitive; @@ -297,14 +311,14 @@ public class StackScrollAlgorithm { if (!draggedViews.contains(nextChild)) { // only if the view is not dragged itself we modify its state to be fully // visible - StackScrollState.ViewState viewState = resultState.getViewStateForView( + StackViewState viewState = resultState.getViewStateForView( nextChild); // The child below the dragged one must be fully visible viewState.alpha = 1; } // Lets set the alpha to the one it currently has, as its currently being dragged - StackScrollState.ViewState viewState = resultState.getViewStateForView(draggedView); + StackViewState viewState = resultState.getViewStateForView(draggedView); // The dragged child should keep the set alpha viewState.alpha = draggedView.getAlpha(); } @@ -320,12 +334,31 @@ public class StackScrollAlgorithm { int childCount = hostView.getChildCount(); state.visibleChildren.clear(); state.visibleChildren.ensureCapacity(childCount); + int notGoneIndex = 0; for (int i = 0; i < childCount; i++) { ExpandableView v = (ExpandableView) hostView.getChildAt(i); if (v.getVisibility() != View.GONE) { - StackScrollState.ViewState viewState = resultState.getViewStateForView(v); - viewState.notGoneIndex = state.visibleChildren.size(); + StackViewState viewState = resultState.getViewStateForView(v); + viewState.notGoneIndex = notGoneIndex; state.visibleChildren.add(v); + notGoneIndex++; + + // handle the notgoneIndex for the children as well + if (v instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) v; + List<ExpandableNotificationRow> children = + row.getNotificationChildren(); + if (row.areChildrenExpanded() && children != null) { + for (ExpandableNotificationRow childRow : children) { + if (childRow.getVisibility() != View.GONE) { + StackViewState childState + = resultState.getViewStateForView(childRow); + childState.notGoneIndex = notGoneIndex; + notGoneIndex++; + } + } + } + } } } } @@ -355,8 +388,8 @@ public class StackScrollAlgorithm { int numberOfElementsCompletelyIn = (int) algorithmState.itemsInTopStack; for (int i = 0; i < childCount; i++) { ExpandableView child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState childViewState = resultState.getViewStateForView(child); - childViewState.location = StackScrollState.ViewState.LOCATION_UNKNOWN; + StackViewState childViewState = resultState.getViewStateForView(child); + childViewState.location = StackViewState.LOCATION_UNKNOWN; int childHeight = getMaxAllowedChildHeight(child); float yPositionInScrollViewAfterElement = yPositionInScrollView + childHeight @@ -413,7 +446,7 @@ public class StackScrollAlgorithm { } else { // Case 3: // We are in the regular scroll area. - childViewState.location = StackScrollState.ViewState.LOCATION_MAIN_AREA; + childViewState.location = StackViewState.LOCATION_MAIN_AREA; clampYTranslation(childViewState, childHeight); } @@ -427,9 +460,9 @@ public class StackScrollAlgorithm { bottomPeekStart - mCollapseSecondCardPadding - childViewState.yTranslation, mCollapsedSize); } - childViewState.location = StackScrollState.ViewState.LOCATION_FIRST_CARD; + childViewState.location = StackViewState.LOCATION_FIRST_CARD; } - if (childViewState.location == StackScrollState.ViewState.LOCATION_UNKNOWN) { + if (childViewState.location == StackViewState.LOCATION_UNKNOWN) { Log.wtf(LOG_TAG, "Failed to assign location for child " + i); } currentYPosition = childViewState.yTranslation + childHeight + mPaddingBetweenElements; @@ -445,7 +478,7 @@ public class StackScrollAlgorithm { * @param childViewState the view state of the child * @param childHeight the height of this child */ - private void clampYTranslation(StackScrollState.ViewState childViewState, int childHeight) { + private void clampYTranslation(StackViewState childViewState, int childHeight) { clampPositionToBottomStackStart(childViewState, childHeight); clampPositionToTopStackEnd(childViewState, childHeight); } @@ -457,7 +490,7 @@ public class StackScrollAlgorithm { * @param childViewState the view state of the child * @param childHeight the height of this child */ - private void clampPositionToBottomStackStart(StackScrollState.ViewState childViewState, + private void clampPositionToBottomStackStart(StackViewState childViewState, int childHeight) { childViewState.yTranslation = Math.min(childViewState.yTranslation, mInnerHeight - mBottomStackPeekSize - mCollapseSecondCardPadding - childHeight); @@ -470,7 +503,7 @@ public class StackScrollAlgorithm { * @param childViewState the view state of the child * @param childHeight the height of this child */ - private void clampPositionToTopStackEnd(StackScrollState.ViewState childViewState, + private void clampPositionToTopStackEnd(StackViewState childViewState, int childHeight) { childViewState.yTranslation = Math.max(childViewState.yTranslation, mCollapsedSize - childHeight); @@ -489,7 +522,7 @@ public class StackScrollAlgorithm { private void updateStateForChildTransitioningInBottom(StackScrollAlgorithmState algorithmState, float transitioningPositionStart, float bottomPeakStart, float currentYPosition, - StackScrollState.ViewState childViewState, int childHeight) { + StackViewState childViewState, int childHeight) { // This is the transitioning element on top of bottom stack, calculate how far we are in. algorithmState.partialInBottom = 1.0f - ( @@ -510,11 +543,11 @@ public class StackScrollAlgorithm { // We want at least to be at the end of the top stack when collapsing clampPositionToTopStackEnd(childViewState, newHeight); - childViewState.location = StackScrollState.ViewState.LOCATION_MAIN_AREA; + childViewState.location = StackViewState.LOCATION_MAIN_AREA; } private void updateStateForChildFullyInBottomStack(StackScrollAlgorithmState algorithmState, - float transitioningPositionStart, StackScrollState.ViewState childViewState, + float transitioningPositionStart, StackViewState childViewState, int childHeight) { float currentYPosition; @@ -524,7 +557,7 @@ public class StackScrollAlgorithm { currentYPosition = transitioningPositionStart + mBottomStackIndentationFunctor.getValue(algorithmState.itemsInBottomStack) - mPaddingBetweenElements; - childViewState.location = StackScrollState.ViewState.LOCATION_BOTTOM_STACK_PEEKING; + childViewState.location = StackViewState.LOCATION_BOTTOM_STACK_PEEKING; } else { // we are fully inside the stack if (algorithmState.itemsInBottomStack > MAX_ITEMS_IN_BOTTOM_STACK + 2) { @@ -533,7 +566,7 @@ public class StackScrollAlgorithm { > MAX_ITEMS_IN_BOTTOM_STACK + 1) { childViewState.alpha = 1.0f - algorithmState.partialInBottom; } - childViewState.location = StackScrollState.ViewState.LOCATION_BOTTOM_STACK_HIDDEN; + childViewState.location = StackViewState.LOCATION_BOTTOM_STACK_HIDDEN; currentYPosition = mInnerHeight; } childViewState.yTranslation = currentYPosition - childHeight; @@ -542,7 +575,7 @@ public class StackScrollAlgorithm { private void updateStateForTopStackChild(StackScrollAlgorithmState algorithmState, int numberOfElementsCompletelyIn, int i, int childHeight, - StackScrollState.ViewState childViewState, float scrollOffset) { + StackViewState childViewState, float scrollOffset) { // First we calculate the index relative to the current stack window of size at most @@ -574,7 +607,7 @@ public class StackScrollAlgorithm { - mTopStackIndentationFunctor.getValue(numItemsBefore); childViewState.yTranslation = currentChildEndY - childHeight; } - childViewState.location = StackScrollState.ViewState.LOCATION_TOP_STACK_PEEKING; + childViewState.location = StackViewState.LOCATION_TOP_STACK_PEEKING; } else { if (paddedIndex == -1) { childViewState.alpha = 1.0f - algorithmState.partialInTop; @@ -583,7 +616,7 @@ public class StackScrollAlgorithm { childViewState.alpha = 0.0f; } childViewState.yTranslation = mCollapsedSize - childHeight; - childViewState.location = StackScrollState.ViewState.LOCATION_TOP_STACK_HIDDEN; + childViewState.location = StackViewState.LOCATION_TOP_STACK_HIDDEN; } @@ -605,7 +638,7 @@ public class StackScrollAlgorithm { // find the number of elements in the top stack. for (int i = 0; i < childCount; i++) { ExpandableView child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState childViewState = resultState.getViewStateForView(child); + StackViewState childViewState = resultState.getViewStateForView(child); int childHeight = getMaxAllowedChildHeight(child); float yPositionInScrollViewAfterElement = yPositionInScrollView + childHeight @@ -676,7 +709,7 @@ public class StackScrollAlgorithm { int childCount = algorithmState.visibleChildren.size(); for (int i = 0; i < childCount; i++) { View child = algorithmState.visibleChildren.get(i); - StackScrollState.ViewState childViewState = resultState.getViewStateForView(child); + StackViewState childViewState = resultState.getViewStateForView(child); if (i < algorithmState.itemsInTopStack) { float stackIndex = algorithmState.itemsInTopStack - i; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java index 0b1ce8f..feae590 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.stack; -import android.graphics.Rect; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -24,10 +23,12 @@ import android.view.ViewGroup; import com.android.systemui.R; import com.android.systemui.statusbar.DismissView; import com.android.systemui.statusbar.EmptyShadeView; +import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; import com.android.systemui.statusbar.SpeedBumpView; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -39,13 +40,12 @@ public class StackScrollState { private static final String CHILD_NOT_FOUND_TAG = "StackScrollStateNoSuchChild"; private final ViewGroup mHostView; - private Map<ExpandableView, ViewState> mStateMap; - private final Rect mClipRect = new Rect(); + private Map<ExpandableView, StackViewState> mStateMap; private final int mClearAllTopPadding; public StackScrollState(ViewGroup hostView) { mHostView = hostView; - mStateMap = new HashMap<ExpandableView, ViewState>(); + mStateMap = new HashMap<ExpandableView, StackViewState>(); mClearAllTopPadding = hostView.getContext().getResources().getDimensionPixelSize( R.dimen.clear_all_padding_top); } @@ -58,20 +58,36 @@ public class StackScrollState { int numChildren = mHostView.getChildCount(); for (int i = 0; i < numChildren; i++) { ExpandableView child = (ExpandableView) mHostView.getChildAt(i); - ViewState viewState = mStateMap.get(child); - if (viewState == null) { - viewState = new ViewState(); - mStateMap.put(child, viewState); + resetViewState(child); + + // handling reset for child notifications + if (child instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) child; + List<ExpandableNotificationRow> children = + row.getNotificationChildren(); + if (row.areChildrenExpanded() && children != null) { + for (ExpandableNotificationRow childRow : children) { + resetViewState(childRow); + } + } } - // initialize with the default values of the view - viewState.height = child.getIntrinsicHeight(); - viewState.gone = child.getVisibility() == View.GONE; - viewState.alpha = 1; - viewState.notGoneIndex = -1; } } - public ViewState getViewStateForView(View requestedView) { + private void resetViewState(ExpandableView view) { + StackViewState viewState = mStateMap.get(view); + if (viewState == null) { + viewState = new StackViewState(); + mStateMap.put(view, viewState); + } + // initialize with the default values of the view + viewState.height = view.getIntrinsicHeight(); + viewState.gone = view.getVisibility() == View.GONE; + viewState.alpha = 1; + viewState.notGoneIndex = -1; + } + + public StackViewState getViewStateForView(View requestedView) { return mStateMap.get(requestedView); } @@ -87,126 +103,139 @@ public class StackScrollState { int numChildren = mHostView.getChildCount(); for (int i = 0; i < numChildren; i++) { ExpandableView child = (ExpandableView) mHostView.getChildAt(i); - ViewState state = mStateMap.get(child); - if (state == null) { - Log.wtf(CHILD_NOT_FOUND_TAG, "No child state was found when applying this state " + - "to the hostView"); + StackViewState state = mStateMap.get(child); + if (!applyState(child, state)) { continue; } - if (!state.gone) { - float alpha = child.getAlpha(); - float yTranslation = child.getTranslationY(); - float xTranslation = child.getTranslationX(); - float zTranslation = child.getTranslationZ(); - float scale = child.getScaleX(); - int height = child.getActualHeight(); - float newAlpha = state.alpha; - float newYTranslation = state.yTranslation; - float newZTranslation = state.zTranslation; - float newScale = state.scale; - int newHeight = state.height; - boolean becomesInvisible = newAlpha == 0.0f; - if (alpha != newAlpha && xTranslation == 0) { - // apply layer type - boolean becomesFullyVisible = newAlpha == 1.0f; - boolean newLayerTypeIsHardware = !becomesInvisible && !becomesFullyVisible; - int layerType = child.getLayerType(); - int newLayerType = newLayerTypeIsHardware - ? View.LAYER_TYPE_HARDWARE - : View.LAYER_TYPE_NONE; - if (layerType != newLayerType) { - child.setLayerType(newLayerType, null); - } - - // apply alpha - child.setAlpha(newAlpha); - } - - // apply visibility - int oldVisibility = child.getVisibility(); - int newVisibility = becomesInvisible ? View.INVISIBLE : View.VISIBLE; - if (newVisibility != oldVisibility) { - child.setVisibility(newVisibility); - } - - // apply yTranslation - if (yTranslation != newYTranslation) { - child.setTranslationY(newYTranslation); - } + if(child instanceof SpeedBumpView) { + performSpeedBumpAnimation(i, (SpeedBumpView) child, state, 0); + } else if (child instanceof DismissView) { + DismissView dismissView = (DismissView) child; + boolean visible = state.topOverLap < mClearAllTopPadding; + dismissView.performVisibilityAnimation(visible && !dismissView.willBeGone()); + } else if (child instanceof EmptyShadeView) { + EmptyShadeView emptyShadeView = (EmptyShadeView) child; + boolean visible = state.topOverLap <= 0; + emptyShadeView.performVisibilityAnimation( + visible && !emptyShadeView.willBeGone()); + } + } + } - // apply zTranslation - if (zTranslation != newZTranslation) { - child.setTranslationZ(newZTranslation); - } + /** + * Applies a {@link StackViewState} to an {@link ExpandableView}. + * + * @return whether the state was applied correctly + */ + public boolean applyState(ExpandableView view, StackViewState state) { + if (state == null) { + Log.wtf(CHILD_NOT_FOUND_TAG, "No child state was found when applying this state " + + "to the hostView"); + return false; + } + if (state.gone) { + return false; + } + applyViewState(view, state); - // apply scale - if (scale != newScale) { - child.setScaleX(newScale); - child.setScaleY(newScale); - } + int height = view.getActualHeight(); + int newHeight = state.height; - // apply height - if (height != newHeight) { - child.setActualHeight(newHeight, false /* notifyListeners */); - } + // apply height + if (height != newHeight) { + view.setActualHeight(newHeight, false /* notifyListeners */); + } - // apply dimming - child.setDimmed(state.dimmed, false /* animate */); + // apply dimming + view.setDimmed(state.dimmed, false /* animate */); - // apply dark - child.setDark(state.dark, false /* animate */, 0 /* delay */); + // apply dark + view.setDark(state.dark, false /* animate */, 0 /* delay */); - // apply hiding sensitive - child.setHideSensitive( - state.hideSensitive, false /* animated */, 0 /* delay */, 0 /* duration */); + // apply hiding sensitive + view.setHideSensitive( + state.hideSensitive, false /* animated */, 0 /* delay */, 0 /* duration */); - // apply speed bump state - child.setBelowSpeedBump(state.belowSpeedBump); + // apply speed bump state + view.setBelowSpeedBump(state.belowSpeedBump); - // apply clipping - float oldClipTopAmount = child.getClipTopAmount(); - if (oldClipTopAmount != state.clipTopAmount) { - child.setClipTopAmount(state.clipTopAmount); - } - updateChildClip(child, newHeight, state.topOverLap); - - if(child instanceof SpeedBumpView) { - performSpeedBumpAnimation(i, (SpeedBumpView) child, state, 0); - } else if (child instanceof DismissView) { - DismissView dismissView = (DismissView) child; - boolean visible = state.topOverLap < mClearAllTopPadding; - dismissView.performVisibilityAnimation(visible && !dismissView.willBeGone()); - } else if (child instanceof EmptyShadeView) { - EmptyShadeView emptyShadeView = (EmptyShadeView) child; - boolean visible = state.topOverLap <= 0; - emptyShadeView.performVisibilityAnimation( - visible && !emptyShadeView.willBeGone()); - } - } + // apply clipping + float oldClipTopAmount = view.getClipTopAmount(); + if (oldClipTopAmount != state.clipTopAmount) { + view.setClipTopAmount(state.clipTopAmount); } + float oldClipTopOptimization = view.getClipTopOptimization(); + if (oldClipTopOptimization != state.topOverLap) { + view.setClipTopOptimization(state.topOverLap); + } + if (view instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) view; + row.applyChildrenState(this); + } + return true; } /** - * Updates the clipping of a view - * - * @param child the view to update - * @param height the currently applied height of the view - * @param clipInset how much should this view be clipped from the top + * Applies a {@link ViewState} to a normal view. */ - private void updateChildClip(View child, int height, int clipInset) { - mClipRect.set(0, - clipInset, - child.getWidth(), - height); - child.setClipBounds(mClipRect); + public void applyViewState(View view, ViewState state) { + float alpha = view.getAlpha(); + float yTranslation = view.getTranslationY(); + float xTranslation = view.getTranslationX(); + float zTranslation = view.getTranslationZ(); + float scale = view.getScaleX(); + float newAlpha = state.alpha; + float newYTranslation = state.yTranslation; + float newZTranslation = state.zTranslation; + float newScale = state.scale; + boolean becomesInvisible = newAlpha == 0.0f; + if (alpha != newAlpha && xTranslation == 0) { + // apply layer type + boolean becomesFullyVisible = newAlpha == 1.0f; + boolean newLayerTypeIsHardware = !becomesInvisible && !becomesFullyVisible + && view.hasOverlappingRendering(); + int layerType = view.getLayerType(); + int newLayerType = newLayerTypeIsHardware + ? View.LAYER_TYPE_HARDWARE + : View.LAYER_TYPE_NONE; + if (layerType != newLayerType) { + view.setLayerType(newLayerType, null); + } + + // apply alpha + view.setAlpha(newAlpha); + } + + // apply visibility + int oldVisibility = view.getVisibility(); + int newVisibility = becomesInvisible ? View.INVISIBLE : View.VISIBLE; + if (newVisibility != oldVisibility) { + view.setVisibility(newVisibility); + } + + // apply yTranslation + if (yTranslation != newYTranslation) { + view.setTranslationY(newYTranslation); + } + + // apply zTranslation + if (zTranslation != newZTranslation) { + view.setTranslationZ(newZTranslation); + } + + // apply scale + if (scale != newScale) { + view.setScaleX(newScale); + view.setScaleY(newScale); + } } - public void performSpeedBumpAnimation(int i, SpeedBumpView speedBump, ViewState state, + public void performSpeedBumpAnimation(int i, SpeedBumpView speedBump, StackViewState state, long delay) { View nextChild = getNextChildNotGone(i); if (nextChild != null) { float lineEnd = state.yTranslation + state.height / 2; - ViewState nextState = getViewStateForView(nextChild); + StackViewState nextState = getViewStateForView(nextChild); boolean startIsAboveNext = nextState.yTranslation > lineEnd; speedBump.animateDivider(startIsAboveNext, delay, null /* onFinishedRunnable */); } @@ -223,53 +252,4 @@ public class StackScrollState { return null; } - public static class ViewState { - - // These are flags such that we can create masks for filtering. - - public static final int LOCATION_UNKNOWN = 0x00; - public static final int LOCATION_FIRST_CARD = 0x01; - public static final int LOCATION_TOP_STACK_HIDDEN = 0x02; - public static final int LOCATION_TOP_STACK_PEEKING = 0x04; - public static final int LOCATION_MAIN_AREA = 0x08; - public static final int LOCATION_BOTTOM_STACK_PEEKING = 0x10; - public static final int LOCATION_BOTTOM_STACK_HIDDEN = 0x20; - /** The view isn't layouted at all. */ - public static final int LOCATION_GONE = 0x40; - - float alpha; - float yTranslation; - float zTranslation; - int height; - boolean gone; - float scale; - boolean dimmed; - boolean dark; - boolean hideSensitive; - boolean belowSpeedBump; - - /** - * The amount which the view should be clipped from the top. This is calculated to - * perceive consistent shadows. - */ - int clipTopAmount; - - /** - * How much does the child overlap with the previous view on the top? Can be used for - * a clipping optimization - */ - int topOverLap; - - /** - * The index of the view, only accounting for views not equal to GONE - */ - int notGoneIndex; - - /** - * The location this view is currently rendered at. - * - * <p>See <code>LOCATION_</code> flags.</p> - */ - int location; - } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java index b027787..b249fbf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java @@ -26,6 +26,7 @@ import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import com.android.systemui.R; +import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; import com.android.systemui.statusbar.SpeedBumpView; @@ -42,12 +43,15 @@ public class StackStateAnimator { public static final int ANIMATION_DURATION_STANDARD = 360; public static final int ANIMATION_DURATION_GO_TO_FULL_SHADE = 448; public static final int ANIMATION_DURATION_APPEAR_DISAPPEAR = 464; + public static final int ANIMATION_DURATION_EXPAND_CLICKED = 360; public static final int ANIMATION_DURATION_DIMMED_ACTIVATED = 220; public static final int ANIMATION_DELAY_PER_ELEMENT_INTERRUPTING = 80; + public static final int ANIMATION_DELAY_PER_ELEMENT_EXPAND_CHILDREN = 54; public static final int ANIMATION_DELAY_PER_ELEMENT_MANUAL = 32; public static final int ANIMATION_DELAY_PER_ELEMENT_GO_TO_FULL_SHADE = 48; public static final int ANIMATION_DELAY_PER_ELEMENT_DARK = 24; - private static final int DELAY_EFFECT_MAX_INDEX_DIFFERENCE = 2; + public static final int DELAY_EFFECT_MAX_INDEX_DIFFERENCE = 2; + public static final int DELAY_EFFECT_MAX_INDEX_DIFFERENCE_CHILDREN = 3; private static final int TAG_ANIMATOR_TRANSLATION_Y = R.id.translation_y_animator_tag; private static final int TAG_ANIMATOR_TRANSLATION_Z = R.id.translation_z_animator_tag; @@ -85,6 +89,7 @@ public class StackStateAnimator { private ValueAnimator mTopOverScrollAnimator; private ValueAnimator mBottomOverScrollAnimator; + private ExpandableNotificationRow mChildExpandingView; public StackStateAnimator(NotificationStackScrollLayout hostLayout) { mHostLayout = hostLayout; @@ -113,13 +118,13 @@ public class StackStateAnimator { for (int i = 0; i < childCount; i++) { final ExpandableView child = (ExpandableView) mHostLayout.getChildAt(i); - StackScrollState.ViewState viewState = finalState.getViewStateForView(child); + StackViewState viewState = finalState.getViewStateForView(child); if (viewState == null || child.getVisibility() == View.GONE) { continue; } - child.setClipBounds(null); - startAnimations(child, viewState, finalState, i); + child.setClipTopOptimization(0); + startStackAnimations(child, viewState, finalState, i, -1 /* fixedDelay */); } if (!isRunning()) { // no child has preformed any animation, lets finish @@ -127,6 +132,7 @@ public class StackStateAnimator { } mNewEvents.clear(); mNewAddChildren.clear(); + mChildExpandingView = null; } private int findLastNotAddedIndex(StackScrollState finalState) { @@ -134,7 +140,7 @@ public class StackStateAnimator { for (int i = childCount - 1; i >= 0; i--) { final ExpandableView child = (ExpandableView) mHostLayout.getChildAt(i); - StackScrollState.ViewState viewState = finalState.getViewStateForView(child); + StackViewState viewState = finalState.getViewStateForView(child); if (viewState == null || child.getVisibility() == View.GONE) { continue; } @@ -145,18 +151,29 @@ public class StackStateAnimator { return -1; } + /** - * Start an animation to the given viewState + * Start an animation to the given {@link StackViewState}. + * + * @param child the child to start the animation on + * @param viewState the {@link StackViewState} of the view to animate to + * @param finalState the final state after the animation + * @param i the index of the view; only relevant if the view is the speed bump and is + * ignored otherwise + * @param fixedDelay a fixed delay if desired or -1 if the delay should be calculated */ - private void startAnimations(final ExpandableView child, StackScrollState.ViewState viewState, - StackScrollState finalState, int i) { - int childVisibility = child.getVisibility(); - boolean wasVisible = childVisibility == View.VISIBLE; + public void startStackAnimations(final ExpandableView child, StackViewState viewState, + StackScrollState finalState, int i, long fixedDelay) { final float alpha = viewState.alpha; - if (!wasVisible && alpha != 0 && !viewState.gone) { - child.setVisibility(View.VISIBLE); + boolean wasAdded = mNewAddChildren.contains(child); + long duration = mCurrentLength; + if (wasAdded && mAnimationFilter.hasGoToFullShadeEvent) { + child.setTranslationY(child.getTranslationY() + mGoToFullShadeAppearingTranslation); + float longerDurationFactor = viewState.notGoneIndex - mCurrentLastNotAddedIndex; + longerDurationFactor = (float) Math.pow(longerDurationFactor, 0.7f); + duration = ANIMATION_DURATION_APPEAR_DISAPPEAR + 50 + + (long) (100 * longerDurationFactor); } - boolean yTranslationChanging = child.getTranslationY() != viewState.yTranslation; boolean zTranslationChanging = child.getTranslationZ() != viewState.zTranslation; boolean scaleChanging = child.getScaleX() != viewState.scale; @@ -164,94 +181,40 @@ public class StackStateAnimator { boolean heightChanging = viewState.height != child.getActualHeight(); boolean darkChanging = viewState.dark != child.isDark(); boolean topInsetChanging = viewState.clipTopAmount != child.getClipTopAmount(); - boolean wasAdded = mNewAddChildren.contains(child); boolean hasDelays = mAnimationFilter.hasDelays; boolean isDelayRelevant = yTranslationChanging || zTranslationChanging || scaleChanging || alphaChanging || heightChanging || topInsetChanging || darkChanging; - boolean noAnimation = wasAdded; long delay = 0; - long duration = mCurrentLength; - if (hasDelays && isDelayRelevant || wasAdded) { + if (fixedDelay != -1) { + delay = fixedDelay; + } else if (hasDelays && isDelayRelevant || wasAdded) { delay = mCurrentAdditionalDelay + calculateChildAnimationDelay(viewState, finalState); } - if (wasAdded && mAnimationFilter.hasGoToFullShadeEvent) { - child.setTranslationY(child.getTranslationY() + mGoToFullShadeAppearingTranslation); - yTranslationChanging = true; - float longerDurationFactor = viewState.notGoneIndex - mCurrentLastNotAddedIndex; - longerDurationFactor = (float) Math.pow(longerDurationFactor, 0.7f); - duration = ANIMATION_DURATION_APPEAR_DISAPPEAR + 50 + - (long) (100 * longerDurationFactor); - } - - // start translationY animation - if (yTranslationChanging) { - if (noAnimation && !mAnimationFilter.hasGoToFullShadeEvent) { - child.setTranslationY(viewState.yTranslation); - } else { - startYTranslationAnimation(child, viewState, duration, delay); - } - } - - // start translationZ animation - if (zTranslationChanging) { - if (noAnimation) { - child.setTranslationZ(viewState.zTranslation); - } else { - startZTranslationAnimation(child, viewState, duration, delay); - } - } - - // start scale animation - if (scaleChanging) { - if (noAnimation) { - child.setScaleX(viewState.scale); - child.setScaleY(viewState.scale); - } else { - startScaleAnimation(child, viewState, duration); - } - } - - // start alpha animation - if (alphaChanging && child.getTranslationX() == 0) { - if (noAnimation) { - child.setAlpha(viewState.alpha); - } else { - startAlphaAnimation(child, viewState, duration, delay); - } - } + startViewAnimations(child, viewState, delay, duration); // start height animation if (heightChanging && child.getActualHeight() != 0) { - if (noAnimation) { - child.setActualHeight(viewState.height, false); - } else { - startHeightAnimation(child, viewState, duration, delay); - } + startHeightAnimation(child, viewState, duration, delay); } // start top inset animation if (topInsetChanging) { - if (noAnimation) { - child.setClipTopAmount(viewState.clipTopAmount); - } else { - startInsetAnimation(child, viewState, duration, delay); - } + startInsetAnimation(child, viewState, duration, delay); } // start dimmed animation - child.setDimmed(viewState.dimmed, mAnimationFilter.animateDimmed && !wasAdded - && !noAnimation); + child.setDimmed(viewState.dimmed, mAnimationFilter.animateDimmed); // start dark animation - child.setDark(viewState.dark, mAnimationFilter.animateDark && !noAnimation, delay); + child.setDark(viewState.dark, mAnimationFilter.animateDark, delay); // apply speed bump state child.setBelowSpeedBump(viewState.belowSpeedBump); // start hiding sensitive animation - child.setHideSensitive(viewState.hideSensitive, mAnimationFilter.animateHideSensitive && - !wasAdded && !noAnimation, delay, duration); + child.setHideSensitive(viewState.hideSensitive, mAnimationFilter.animateHideSensitive, + delay, duration); if (wasAdded) { child.performAddAnimation(delay, mCurrentLength); @@ -259,10 +222,55 @@ public class StackStateAnimator { if (child instanceof SpeedBumpView) { finalState.performSpeedBumpAnimation(i, (SpeedBumpView) child, viewState, delay + duration); + } else if (child instanceof ExpandableNotificationRow) { + ExpandableNotificationRow row = (ExpandableNotificationRow) child; + row.startChildAnimation(finalState, this, child == mChildExpandingView, delay, + duration); } } - private long calculateChildAnimationDelay(StackScrollState.ViewState viewState, + /** + * Start an animation to a new {@link ViewState}. + * + * @param child the child to start the animation on + * @param viewState the {@link StackViewState} of the view to animate to + * @param delay a fixed delay + * @param duration the duration of the animation + */ + public void startViewAnimations(View child, ViewState viewState, long delay, long duration) { + boolean wasVisible = child.getVisibility() == View.VISIBLE; + final float alpha = viewState.alpha; + if (!wasVisible && alpha != 0 && !viewState.gone) { + child.setVisibility(View.VISIBLE); + } + boolean yTranslationChanging = child.getTranslationY() != viewState.yTranslation; + boolean zTranslationChanging = child.getTranslationZ() != viewState.zTranslation; + boolean scaleChanging = child.getScaleX() != viewState.scale; + float childAlpha = child.getVisibility() == View.INVISIBLE ? 0.0f : child.getAlpha(); + boolean alphaChanging = viewState.alpha != childAlpha; + + // start translationY animation + if (yTranslationChanging) { + startYTranslationAnimation(child, viewState, duration, delay); + } + + // start translationZ animation + if (zTranslationChanging) { + startZTranslationAnimation(child, viewState, duration, delay); + } + + // start scale animation + if (scaleChanging) { + startScaleAnimation(child, viewState, duration); + } + + // start alpha animation + if (alphaChanging && child.getTranslationX() == 0) { + startAlphaAnimation(child, viewState, duration, delay); + } + } + + private long calculateChildAnimationDelay(StackViewState viewState, StackScrollState finalState) { if (mAnimationFilter.hasDarkEvent) { return calculateDelayDark(viewState); @@ -314,7 +322,7 @@ public class StackStateAnimator { return minDelay; } - private long calculateDelayDark(StackScrollState.ViewState viewState) { + private long calculateDelayDark(StackViewState viewState) { int referenceIndex; if (mAnimationFilter.darkAnimationOriginIndex == NotificationStackScrollLayout.AnimationEvent.DARK_ANIMATION_ORIGIN_INDEX_ABOVE) { @@ -328,14 +336,14 @@ public class StackStateAnimator { return Math.abs(referenceIndex - viewState.notGoneIndex) * ANIMATION_DELAY_PER_ELEMENT_DARK; } - private long calculateDelayGoToFullShade(StackScrollState.ViewState viewState) { + private long calculateDelayGoToFullShade(StackViewState viewState) { float index = viewState.notGoneIndex; index = (float) Math.pow(index, 0.7f); return (long) (index * ANIMATION_DELAY_PER_ELEMENT_GO_TO_FULL_SHADE); } private void startHeightAnimation(final ExpandableView child, - StackScrollState.ViewState viewState, long duration, long delay) { + StackViewState viewState, long duration, long delay) { Integer previousStartValue = getChildTag(child, TAG_START_HEIGHT); Integer previousEndValue = getChildTag(child, TAG_END_HEIGHT); int newEndValue = viewState.height; @@ -394,7 +402,7 @@ public class StackStateAnimator { } private void startInsetAnimation(final ExpandableView child, - StackScrollState.ViewState viewState, long duration, long delay) { + StackViewState viewState, long duration, long delay) { Integer previousStartValue = getChildTag(child, TAG_START_TOP_INSET); Integer previousEndValue = getChildTag(child, TAG_END_TOP_INSET); int newEndValue = viewState.clipTopAmount; @@ -451,8 +459,8 @@ public class StackStateAnimator { child.setTag(TAG_END_TOP_INSET, newEndValue); } - private void startAlphaAnimation(final ExpandableView child, - final StackScrollState.ViewState viewState, long duration, long delay) { + private void startAlphaAnimation(final View child, + final ViewState viewState, long duration, long delay) { Float previousStartValue = getChildTag(child,TAG_START_ALPHA); Float previousEndValue = getChildTag(child,TAG_END_ALPHA); final float newEndValue = viewState.alpha; @@ -525,8 +533,8 @@ public class StackStateAnimator { child.setTag(TAG_END_ALPHA, newEndValue); } - private void startZTranslationAnimation(final ExpandableView child, - final StackScrollState.ViewState viewState, long duration, long delay) { + private void startZTranslationAnimation(final View child, + final ViewState viewState, long duration, long delay) { Float previousStartValue = getChildTag(child,TAG_START_TRANSLATION_Z); Float previousEndValue = getChildTag(child,TAG_END_TRANSLATION_Z); float newEndValue = viewState.zTranslation; @@ -577,8 +585,8 @@ public class StackStateAnimator { child.setTag(TAG_END_TRANSLATION_Z, newEndValue); } - private void startYTranslationAnimation(final ExpandableView child, - StackScrollState.ViewState viewState, long duration, long delay) { + private void startYTranslationAnimation(final View child, + ViewState viewState, long duration, long delay) { Float previousStartValue = getChildTag(child,TAG_START_TRANSLATION_Y); Float previousEndValue = getChildTag(child,TAG_END_TRANSLATION_Y); float newEndValue = viewState.yTranslation; @@ -630,8 +638,8 @@ public class StackStateAnimator { child.setTag(TAG_END_TRANSLATION_Y, newEndValue); } - private void startScaleAnimation(final ExpandableView child, - StackScrollState.ViewState viewState, long duration) { + private void startScaleAnimation(final View child, + ViewState viewState, long duration) { Float previousStartValue = getChildTag(child, TAG_START_SCALE); Float previousEndValue = getChildTag(child, TAG_END_SCALE); float newEndValue = viewState.scale; @@ -765,7 +773,7 @@ public class StackStateAnimator { NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_ADD) { // This item is added, initialize it's properties. - StackScrollState.ViewState viewState = finalState + StackViewState viewState = finalState .getViewStateForView(changingView); if (viewState == null) { // The position for this child was never generated, let's continue. @@ -776,10 +784,7 @@ public class StackStateAnimator { finalState.removeViewStateForView(changingView); continue; } - changingView.setAlpha(viewState.alpha); - changingView.setTranslationY(viewState.yTranslation); - changingView.setTranslationZ(viewState.zTranslation); - changingView.setActualHeight(viewState.height, false); + finalState.applyState(changingView, viewState); mNewAddChildren.add(changingView); } else if (event.animationType == @@ -791,7 +796,7 @@ public class StackStateAnimator { // Find the amount to translate up. This is needed in order to understand the // direction of the remove animation (either downwards or upwards) - StackScrollState.ViewState viewState = finalState + StackViewState viewState = finalState .getViewStateForView(event.viewAfterChangingView); int actualHeight = changingView.getActualHeight(); // upwards by default @@ -813,11 +818,16 @@ public class StackStateAnimator { mHostLayout.getOverlay().remove(changingView); } }); - } else if (event.animationType == + } else if (event.animationType == NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) { // A race condition can trigger the view to be added to the overlay even though // it is swiped out. So let's remove it mHostLayout.getOverlay().remove(changingView); + } else if (event.animationType == NotificationStackScrollLayout + .AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED) { + ExpandableNotificationRow row = (ExpandableNotificationRow) event.changingView; + row.prepareExpansionChanged(finalState); + mChildExpandingView = row; } mNewEvents.add(event); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java new file mode 100644 index 0000000..55ef440 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.stack; + +import android.view.View; + +import com.android.systemui.statusbar.ExpandableView; + +/** +* A state of an expandable view +*/ +public class StackViewState extends ViewState { + + // These are flags such that we can create masks for filtering. + + public static final int LOCATION_UNKNOWN = 0x00; + public static final int LOCATION_FIRST_CARD = 0x01; + public static final int LOCATION_TOP_STACK_HIDDEN = 0x02; + public static final int LOCATION_TOP_STACK_PEEKING = 0x04; + public static final int LOCATION_MAIN_AREA = 0x08; + public static final int LOCATION_BOTTOM_STACK_PEEKING = 0x10; + public static final int LOCATION_BOTTOM_STACK_HIDDEN = 0x20; + /** The view isn't layouted at all. */ + public static final int LOCATION_GONE = 0x40; + + public int height; + public boolean dimmed; + public boolean dark; + public boolean hideSensitive; + public boolean belowSpeedBump; + + /** + * The amount which the view should be clipped from the top. This is calculated to + * perceive consistent shadows. + */ + public int clipTopAmount; + + /** + * How much does the child overlap with the previous view on the top? Can be used for + * a clipping optimization + */ + public int topOverLap; + + /** + * The index of the view, only accounting for views not equal to GONE + */ + public int notGoneIndex; + + /** + * The location this view is currently rendered at. + * + * <p>See <code>LOCATION_</code> flags.</p> + */ + public int location; + + @Override + public void copyFrom(ViewState viewState) { + super.copyFrom(viewState); + if (viewState instanceof StackViewState) { + StackViewState svs = (StackViewState) viewState; + height = svs.height; + dimmed = svs.dimmed; + dark = svs.dark; + hideSensitive = svs.hideSensitive; + belowSpeedBump = svs.belowSpeedBump; + clipTopAmount = svs.clipTopAmount; + topOverLap = svs.topOverLap; + notGoneIndex = svs.notGoneIndex; + location = svs.location; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/ViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/ViewState.java new file mode 100644 index 0000000..3e538df --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/ViewState.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.stack; + +import android.view.View; + +/** + * A state of a view. This can be used to apply a set of view properties to a view with + * {@link com.android.systemui.statusbar.stack.StackScrollState} or start animations with + * {@link com.android.systemui.statusbar.stack.StackStateAnimator}. +*/ +public class ViewState { + + public float alpha; + public float yTranslation; + public float zTranslation; + public boolean gone; + public float scale; + + public void copyFrom(ViewState viewState) { + alpha = viewState.alpha; + yTranslation = viewState.yTranslation; + zTranslation = viewState.zTranslation; + gone = viewState.gone; + scale = viewState.scale; + } + + public void initFrom(View view) { + alpha = view.getVisibility() == View.INVISIBLE ? 0.0f : view.getAlpha(); + yTranslation = view.getTranslationY(); + zTranslation = view.getTranslationZ(); + gone = view.getVisibility() == View.GONE; + scale = view.getScaleX(); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java index 0a14cf5..d1e1b71 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java @@ -26,6 +26,7 @@ import android.view.WindowManager; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.statusbar.ActivatableNotificationView; import com.android.systemui.statusbar.BaseStatusBar; +import com.android.systemui.statusbar.NotificationData; /* * Status bar implementation for "large screen" products that mostly present no on-screen nav @@ -47,7 +48,8 @@ public class TvStatusBar extends BaseStatusBar { } @Override - public void addNotification(StatusBarNotification notification, RankingMap ranking) { + public void addNotification(StatusBarNotification notification, RankingMap ranking, + NotificationData.Entry entry) { } @Override @@ -127,7 +129,7 @@ public class TvStatusBar extends BaseStatusBar { } @Override - public void resetHeadsUpDecayTimer() { + public void scheduleHeadsUpDecay(long delay) { } @Override @@ -170,4 +172,16 @@ public class TvStatusBar extends BaseStatusBar { @Override public void showScreenPinningRequest() { } + + @Override + public void appTransitionPending() { + } + + @Override + public void appTransitionCancelled() { + } + + @Override + public void appTransitionStarting(long startTime, long duration) { + } } diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java index f804736..5771d22 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java +++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java @@ -327,7 +327,7 @@ public class StorageNotification extends SystemUI { pi = PendingIntent.getBroadcastAsUser(mContext, 0, intent, 0, UserHandle.CURRENT); } - mUsbStorageNotification.color = mContext.getResources().getColor( + mUsbStorageNotification.color = mContext.getColor( com.android.internal.R.color.system_notification_accent_color); mUsbStorageNotification.setLatestEventInfo(mContext, title, message, pi); mUsbStorageNotification.visibility = Notification.VISIBILITY_PUBLIC; @@ -422,7 +422,7 @@ public class StorageNotification extends SystemUI { } mMediaStorageNotification.icon = icon; - mMediaStorageNotification.color = mContext.getResources().getColor( + mMediaStorageNotification.color = mContext.getColor( com.android.internal.R.color.system_notification_accent_color); mMediaStorageNotification.setLatestEventInfo(mContext, title, message, pi); mMediaStorageNotification.visibility = Notification.VISIBILITY_PUBLIC; diff --git a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java index 2f02f7c..5f5b881 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java +++ b/packages/SystemUI/src/com/android/systemui/volume/SegmentedButtons.java @@ -60,7 +60,7 @@ public class SegmentedButtons extends LinearLayout { final Object tag = c.getTag(); final boolean selected = Objects.equals(mSelectedValue, tag); c.setSelected(selected); - c.getCompoundDrawables()[1].setTint(mContext.getResources().getColor(selected + c.getCompoundDrawables()[1].setTint(mContext.getColor(selected ? R.color.segmented_button_selected : R.color.segmented_button_unselected)); } fireOnSelected(); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java index acdcfc1..d16b818 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java @@ -37,7 +37,6 @@ import android.graphics.PixelFormat; import android.graphics.drawable.ColorDrawable; import android.media.AudioAttributes; import android.media.AudioManager; -import android.media.AudioService; import android.media.AudioSystem; import android.media.RingtoneManager; import android.media.ToneGenerator; @@ -88,7 +87,7 @@ public class VolumePanel extends Handler implements DemoMode { private static final String TAG = "VolumePanel"; private static boolean LOGD = Log.isLoggable(TAG, Log.DEBUG); - private static final int PLAY_SOUND_DELAY = AudioService.PLAY_SOUND_DELAY; + private static final int PLAY_SOUND_DELAY = AudioSystem.PLAY_SOUND_DELAY; /** * The delay before vibrating. This small period exists so if the user is @@ -126,8 +125,6 @@ public class VolumePanel extends Handler implements DemoMode { private static final int MSG_NOTIFICATION_EFFECTS_SUPPRESSOR_CHANGED = 15; private static final int MSG_INTERNAL_RINGER_MODE_CHANGED = 16; - // Pseudo stream type for master volume - private static final int STREAM_MASTER = -100; // Pseudo stream type for remote volume private static final int STREAM_REMOTE_MUSIC = -200; @@ -155,10 +152,6 @@ public class VolumePanel extends Handler implements DemoMode { private int mLastRingerProgress = 0; private int mDemoIcon; - // True if we want to play tones on the system stream when the master stream is specified. - private final boolean mPlayMasterStreamTones; - - /** Volume panel content view */ private final View mView; /** Dialog hosting the panel */ @@ -214,12 +207,6 @@ public class VolumePanel extends Handler implements DemoMode { com.android.systemui.R.drawable.ic_ringer_audible, com.android.systemui.R.drawable.ic_ringer_mute, true), - // for now, use media resources for master volume - MasterStream(STREAM_MASTER, - R.string.volume_icon_description_media, //FIXME should have its own description - IC_AUDIO_VOL, - IC_AUDIO_VOL_MUTE, - false), RemoteStream(STREAM_REMOTE_MUSIC, R.string.volume_icon_description_media, //FIXME should have its own description com.android.systemui.R.drawable.ic_audio_remote, @@ -250,7 +237,6 @@ public class VolumePanel extends Handler implements DemoMode { StreamResources.MediaStream, StreamResources.NotificationStream, StreamResources.AlarmStream, - StreamResources.MasterStream, StreamResources.RemoteStream }; @@ -267,6 +253,7 @@ public class VolumePanel extends Handler implements DemoMode { int iconRes; int iconMuteRes; int iconSuppressedRes; + int minVolume; } // Synchronize when accessing this @@ -351,6 +338,17 @@ public class VolumePanel extends Handler implements DemoMode { }; } + protected LayoutParams getDialogLayoutParams(Window window, Resources res) { + final LayoutParams lp = window.getAttributes(); + lp.token = null; + lp.y = res.getDimensionPixelOffset(com.android.systemui.R.dimen.volume_panel_top); + lp.type = LayoutParams.TYPE_STATUS_BAR_PANEL; + lp.format = PixelFormat.TRANSLUCENT; + lp.windowAnimations = com.android.systemui.R.style.VolumePanelAnimation; + lp.setTitle(TAG); + return lp; + } + public VolumePanel(Context context, ZenModeController zenController) { mTag = String.format("%s.%08x", TAG, hashCode()); mContext = context; @@ -361,15 +359,6 @@ public class VolumePanel extends Handler implements DemoMode { mSecondaryIconTransition = new SecondaryIconTransition(); mIconPulser = new IconPulser(context); - // For now, only show master volume if master volume is supported - final Resources res = context.getResources(); - final boolean useMasterVolume = res.getBoolean(R.bool.config_useMasterVolume); - if (useMasterVolume) { - for (int i = 0; i < STREAMS.length; i++) { - StreamResources streamRes = STREAMS[i]; - streamRes.show = (streamRes.streamType == STREAM_MASTER); - } - } if (LOGD) Log.d(mTag, "new VolumePanel"); mDisabledAlpha = 0.5f; @@ -409,14 +398,8 @@ public class VolumePanel extends Handler implements DemoMode { mDialog.create(); - final LayoutParams lp = window.getAttributes(); - lp.token = null; - lp.y = res.getDimensionPixelOffset(com.android.systemui.R.dimen.volume_panel_top); - lp.type = LayoutParams.TYPE_STATUS_BAR_PANEL; - lp.format = PixelFormat.TRANSLUCENT; - lp.windowAnimations = com.android.systemui.R.style.VolumePanelAnimation; - lp.setTitle(TAG); - window.setAttributes(lp); + final Resources res = context.getResources(); + window.setAttributes(getDialogLayoutParams(window, res)); updateWidth(); @@ -444,16 +427,12 @@ public class VolumePanel extends Handler implements DemoMode { mHasVibrator = mVibrator != null && mVibrator.hasVibrator(); mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable); - if (mZenController != null && !useMasterVolume) { + if (mZenController != null) { mZenModeAvailable = mZenController.isZenAvailable(); mNotificationEffectsSuppressor = mZenController.getEffectsSuppressor(); mZenController.addCallback(mZenCallback); } - final boolean masterVolumeOnly = res.getBoolean(R.bool.config_useMasterVolume); - final boolean masterVolumeKeySounds = res.getBoolean(R.bool.config_useVolumeKeySounds); - mPlayMasterStreamTones = masterVolumeOnly && masterVolumeKeySounds; - registerReceiver(); } @@ -486,7 +465,6 @@ public class VolumePanel extends Handler implements DemoMode { pw.print(" mDisabledAlpha="); pw.println(mDisabledAlpha); pw.print(" mLastRingerMode="); pw.println(mLastRingerMode); pw.print(" mLastRingerProgress="); pw.println(mLastRingerProgress); - pw.print(" mPlayMasterStreamTones="); pw.println(mPlayMasterStreamTones); pw.print(" isShowing()="); pw.println(isShowing()); pw.print(" mCallback="); pw.println(mCallback); pw.print(" sConfirmSafeVolumeDialog="); @@ -573,9 +551,7 @@ public class VolumePanel extends Handler implements DemoMode { } private boolean isMuted(int streamType) { - if (streamType == STREAM_MASTER) { - return mAudioManager.isMasterMute(); - } else if (streamType == STREAM_REMOTE_MUSIC) { + if (streamType == STREAM_REMOTE_MUSIC) { // TODO do we need to support a distinct mute property for remote? return false; } else { @@ -583,10 +559,16 @@ public class VolumePanel extends Handler implements DemoMode { } } + private int getStreamMinVolume(int streamType) { + if (streamType == STREAM_REMOTE_MUSIC) { + return 0; + } else { + return mAudioManager.getStreamMinVolume(streamType); + } + } + private int getStreamMaxVolume(int streamType) { - if (streamType == STREAM_MASTER) { - return mAudioManager.getMasterMaxVolume(); - } else if (streamType == STREAM_REMOTE_MUSIC) { + if (streamType == STREAM_REMOTE_MUSIC) { if (mStreamControls != null) { StreamControl sc = mStreamControls.get(streamType); if (sc != null && sc.controller != null) { @@ -601,9 +583,7 @@ public class VolumePanel extends Handler implements DemoMode { } private int getStreamVolume(int streamType) { - if (streamType == STREAM_MASTER) { - return mAudioManager.getMasterVolume(); - } else if (streamType == STREAM_REMOTE_MUSIC) { + if (streamType == STREAM_REMOTE_MUSIC) { if (mStreamControls != null) { StreamControl sc = mStreamControls.get(streamType); if (sc != null && sc.controller != null) { @@ -613,7 +593,7 @@ public class VolumePanel extends Handler implements DemoMode { } return -1; } else { - return mAudioManager.getStreamVolume(streamType); + return mAudioManager.getLastAudibleStreamVolume(streamType); } } @@ -625,11 +605,7 @@ public class VolumePanel extends Handler implements DemoMode { Log.w(mTag, "Adjusting remote volume without a controller!"); } } else if (getStreamVolume(sc.streamType) != index) { - if (sc.streamType == STREAM_MASTER) { - mAudioManager.setMasterVolume(index, flags); - } else { - mAudioManager.setStreamVolume(sc.streamType, index, flags); - } + mAudioManager.setStreamVolume(sc.streamType, index, flags); } } @@ -694,9 +670,8 @@ public class VolumePanel extends Handler implements DemoMode { } }); } - final int plusOne = (streamType == AudioSystem.STREAM_BLUETOOTH_SCO || - streamType == AudioSystem.STREAM_VOICE_CALL) ? 1 : 0; - sc.seekbarView.setMax(getStreamMaxVolume(streamType) + plusOne); + sc.minVolume = getStreamMinVolume(streamType); + sc.seekbarView.setMax(getStreamMaxVolume(streamType) - sc.minVolume); sc.seekbarView.setOnSeekBarChangeListener(mSeekListener); sc.seekbarView.setTag(sc); mStreamControls.put(streamType, sc); @@ -739,7 +714,7 @@ public class VolumePanel extends Handler implements DemoMode { if (progress < 0) { progress = getStreamVolume(sc.streamType); } - sc.seekbarView.setProgress(progress); + sc.seekbarView.setProgress(progress - sc.minVolume); if (isRinger) { mLastRingerProgress = progress; } @@ -830,7 +805,7 @@ public class VolumePanel extends Handler implements DemoMode { sc.icon.setAlpha(mDisabledAlpha); sc.icon.setClickable(false); } else if (fixedVolume || - (sc.streamType != mAudioManager.getMasterStreamType() && !isRinger && muted) || + (sc.streamType != mAudioManager.getUiSoundsStreamType() && !isRinger && muted) || (sSafetyWarning != null)) { sc.seekbarView.setEnabled(false); } else { @@ -974,10 +949,6 @@ public class VolumePanel extends Handler implements DemoMode { obtainMessage(MSG_REMOTE_VOLUME_UPDATE_IF_SHOWN).sendToTarget(); } - public void postMasterVolumeChanged(int flags) { - postVolumeChanged(STREAM_MASTER, flags); - } - public void postMuteChanged(int streamType, int flags) { if (hasMessages(MSG_VOLUME_CHANGED)) return; synchronized (this) { @@ -989,10 +960,6 @@ public class VolumePanel extends Handler implements DemoMode { obtainMessage(MSG_MUTE_CHANGED, streamType, flags).sendToTarget(); } - public void postMasterMuteChanged(int flags) { - postMuteChanged(STREAM_MASTER, flags); - } - public void postDisplaySafeVolumeWarning(int flags) { if (hasMessages(MSG_DISPLAY_SAFE_VOLUME_WARNING)) return; obtainMessage(MSG_DISPLAY_SAFE_VOLUME_WARNING, flags, 0).sendToTarget(); @@ -1012,7 +979,7 @@ public class VolumePanel extends Handler implements DemoMode { } private static String streamToString(int stream) { - return AudioService.streamToString(stream); + return AudioSystem.streamToString(stream); } /** @@ -1075,7 +1042,7 @@ public class VolumePanel extends Handler implements DemoMode { // get max volume for progress bar - int max = getStreamMaxVolume(streamType); + int max = getStreamMaxVolume(streamType) - getStreamMinVolume(streamType); StreamControl sc = mStreamControls.get(streamType); switch (streamType) { @@ -1102,17 +1069,6 @@ public class VolumePanel extends Handler implements DemoMode { break; } - case AudioManager.STREAM_VOICE_CALL: { - /* - * For in-call voice call volume, there is no inaudible volume. - * Rescale the UI control so the progress bar doesn't go all - * the way to zero and don't show the mute icon. - */ - index++; - max++; - break; - } - case AudioManager.STREAM_ALARM: { break; } @@ -1126,17 +1082,6 @@ public class VolumePanel extends Handler implements DemoMode { break; } - case AudioManager.STREAM_BLUETOOTH_SCO: { - /* - * For in-call voice call volume, there is no inaudible volume. - * Rescale the UI control so the progress bar doesn't go all - * the way to zero and don't show the mute icon. - */ - index++; - max++; - break; - } - case STREAM_REMOTE_MUSIC: { if (controller == null && sc != null) { // If we weren't passed one try using the last one set. @@ -1189,9 +1134,7 @@ public class VolumePanel extends Handler implements DemoMode { if (!isShowing()) { int stream = (streamType == STREAM_REMOTE_MUSIC) ? -1 : streamType; // when the stream is for remote playback, use -1 to reset the stream type evaluation - if (stream != STREAM_MASTER) { - mAudioManager.forceVolumeControlStream(stream); - } + mAudioManager.forceVolumeControlStream(stream); mDialog.show(); if (mCallback != null) { mCallback.onVisible(true); @@ -1357,16 +1300,6 @@ public class VolumePanel extends Handler implements DemoMode { * Lock on this VolumePanel instance as long as you use the returned ToneGenerator. */ private ToneGenerator getOrCreateToneGenerator(int streamType) { - if (streamType == STREAM_MASTER) { - // For devices that use the master volume setting only but still want to - // play a volume-changed tone, direct the master volume pseudostream to - // the system stream's tone generator. - if (mPlayMasterStreamTones) { - streamType = AudioManager.STREAM_SYSTEM; - } else { - return null; - } - } synchronized (this) { if (mToneGenerators[streamType] == null) { try { @@ -1546,7 +1479,7 @@ public class VolumePanel extends Handler implements DemoMode { final Object tag = seekBar.getTag(); if (fromUser && tag instanceof StreamControl) { StreamControl sc = (StreamControl) tag; - setStreamVolume(sc, progress, + setStreamVolume(sc, progress + sc.minVolume, AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_VIBRATE); } resetTimeout(); diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java index 7102c2a..ac08904 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java @@ -1,60 +1,75 @@ +/* + * Copyright (C) 2014 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.systemui.volume; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.ApplicationInfo; import android.content.res.Configuration; -import android.database.ContentObserver; import android.media.AudioManager; import android.media.IRemoteVolumeController; import android.media.IVolumeController; +import android.media.VolumePolicy; import android.media.session.ISessionController; import android.media.session.MediaController; import android.media.session.MediaSessionManager; -import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; import android.provider.Settings; +import android.text.TextUtils; import android.util.Log; import com.android.systemui.R; import com.android.systemui.SystemUI; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.qs.tiles.DndTile; +import com.android.systemui.statusbar.ServiceMonitor; import com.android.systemui.statusbar.phone.PhoneStatusBar; +import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.ZenModeController; import com.android.systemui.statusbar.policy.ZenModeControllerImpl; import java.io.FileDescriptor; import java.io.PrintWriter; -/* - * Copyright (C) 2014 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. - */ - public class VolumeUI extends SystemUI { private static final String TAG = "VolumeUI"; - private static final String SETTING = "systemui_volume_controller"; // for testing - private static final Uri SETTING_URI = Settings.Global.getUriFor(SETTING); - private static final int DEFAULT = 1; // enabled by default + private static boolean LOGD = Log.isLoggable(TAG, Log.DEBUG); private final Handler mHandler = new Handler(); + private final Receiver mReceiver = new Receiver(); + private final RestorationNotification mRestorationNotification = new RestorationNotification(); private boolean mEnabled; private AudioManager mAudioManager; + private NotificationManager mNotificationManager; private MediaSessionManager mMediaSessionManager; private VolumeController mVolumeController; private RemoteVolumeController mRemoteVolumeController; + private ServiceMonitor mVolumeControllerService; private VolumePanel mPanel; private int mDismissDelay; @@ -64,14 +79,19 @@ public class VolumeUI extends SystemUI { mEnabled = mContext.getResources().getBoolean(R.bool.enable_volume_ui); if (!mEnabled) return; mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); + mNotificationManager = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); mMediaSessionManager = (MediaSessionManager) mContext .getSystemService(Context.MEDIA_SESSION_SERVICE); initPanel(); mVolumeController = new VolumeController(); mRemoteVolumeController = new RemoteVolumeController(); putComponent(VolumeComponent.class, mVolumeController); - updateController(); - mContext.getContentResolver().registerContentObserver(SETTING_URI, false, mObserver); + mReceiver.start(); + mVolumeControllerService = new ServiceMonitor(TAG, LOGD, + mContext, Settings.Secure.VOLUME_CONTROLLER_SERVICE_COMPONENT, + new ServiceMonitorCallbacks()); + mVolumeControllerService.start(); } @Override @@ -85,18 +105,21 @@ public class VolumeUI extends SystemUI { @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.print("mEnabled="); pw.println(mEnabled); + pw.print("mVolumeControllerService="); pw.println(mVolumeControllerService.getComponent()); if (mPanel != null) { mPanel.dump(fd, pw, args); } } - private void updateController() { - if (Settings.Global.getInt(mContext.getContentResolver(), SETTING, DEFAULT) != 0) { - Log.d(TAG, "Registering volume controller"); + private void setVolumeController(boolean register) { + if (register) { + if (LOGD) Log.d(TAG, "Registering default volume controller"); mAudioManager.setVolumeController(mVolumeController); + mAudioManager.setVolumePolicy(VolumePolicy.DEFAULT); mMediaSessionManager.setRemoteVolumeController(mRemoteVolumeController); + DndTile.setVisible(mContext, false); } else { - Log.d(TAG, "Unregistering volume controller"); + if (LOGD) Log.d(TAG, "Unregistering default volume controller"); mAudioManager.setVolumeController(null); mMediaSessionManager.setRemoteVolumeController(null); } @@ -129,13 +152,32 @@ public class VolumeUI extends SystemUI { }); } - private final ContentObserver mObserver = new ContentObserver(mHandler) { - public void onChange(boolean selfChange, Uri uri) { - if (SETTING_URI.equals(uri)) { - updateController(); + private String getAppLabel(ComponentName component) { + final String pkg = component.getPackageName(); + try { + final ApplicationInfo ai = mContext.getPackageManager().getApplicationInfo(pkg, 0); + final String rt = mContext.getPackageManager().getApplicationLabel(ai).toString(); + if (!TextUtils.isEmpty(rt)) { + return rt; } + } catch (Exception e) { + Log.w(TAG, "Error loading app label", e); } - }; + return pkg; + } + + private void showServiceActivationDialog(final ComponentName component) { + final SystemUIDialog d = new SystemUIDialog(mContext); + d.setMessage(mContext.getString(R.string.volumeui_prompt_message, getAppLabel(component))); + d.setPositiveButton(R.string.volumeui_prompt_allow, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mVolumeControllerService.setComponent(component); + } + }); + d.setNegativeButton(R.string.volumeui_prompt_deny, null); + d.show(); + } private final Runnable mStartZenSettings = new Runnable() { @Override @@ -161,13 +203,8 @@ public class VolumeUI extends SystemUI { } @Override - public void masterVolumeChanged(int flags) throws RemoteException { - mPanel.postMasterVolumeChanged(flags); - } - - @Override public void masterMuteChanged(int flags) throws RemoteException { - mPanel.postMasterMuteChanged(flags); + // no-op } @Override @@ -213,4 +250,89 @@ public class VolumeUI extends SystemUI { // than by remoteVolumeChanged. } } + + private final class ServiceMonitorCallbacks implements ServiceMonitor.Callbacks { + @Override + public void onNoService() { + if (LOGD) Log.d(TAG, "onNoService"); + setVolumeController(true); + mRestorationNotification.hide(); + if (!mVolumeControllerService.isPackageAvailable()) { + mVolumeControllerService.setComponent(null); + } + } + + @Override + public long onServiceStartAttempt() { + if (LOGD) Log.d(TAG, "onServiceStartAttempt"); + // poke the setting to update the uid + mVolumeControllerService.setComponent(mVolumeControllerService.getComponent()); + setVolumeController(false); + mVolumeController.dismissNow(); + mRestorationNotification.show(); + return 0; + } + } + + private final class Receiver extends BroadcastReceiver { + private static final String ENABLE = "com.android.systemui.vui.ENABLE"; + private static final String DISABLE = "com.android.systemui.vui.DISABLE"; + private static final String EXTRA_COMPONENT = "component"; + + public void start() { + final IntentFilter filter = new IntentFilter(); + filter.addAction(ENABLE); + filter.addAction(DISABLE); + mContext.registerReceiver(this, filter, null, mHandler); + } + + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + final ComponentName component = intent.getParcelableExtra(EXTRA_COMPONENT); + final boolean current = component.equals(mVolumeControllerService.getComponent()); + if (ENABLE.equals(action) && component != null) { + if (!current) { + showServiceActivationDialog(component); + } + } + if (DISABLE.equals(action) && component != null) { + if (current) { + mVolumeControllerService.setComponent(null); + } + } + } + } + + private final class RestorationNotification { + public void hide() { + mNotificationManager.cancel(R.id.notification_volumeui); + } + + public void show() { + final ComponentName component = mVolumeControllerService.getComponent(); + if (component == null) { + Log.w(TAG, "Not showing restoration notification, component not active"); + return; + } + final Intent intent = new Intent(Receiver.DISABLE) + .putExtra(Receiver.EXTRA_COMPONENT, component); + mNotificationManager.notify(R.id.notification_volumeui, + new Notification.Builder(mContext) + .setSmallIcon(R.drawable.ic_ringer_audible) + .setWhen(0) + .setShowWhen(false) + .setOngoing(true) + .setContentTitle(mContext.getString( + R.string.volumeui_notification_title, getAppLabel(component))) + .setContentText(mContext.getString(R.string.volumeui_notification_text)) + .setContentIntent(PendingIntent.getBroadcast(mContext, 0, intent, + PendingIntent.FLAG_UPDATE_CURRENT)) + .setPriority(Notification.PRIORITY_MIN) + .setVisibility(Notification.VISIBILITY_PUBLIC) + .setColor(mContext.getColor( + com.android.internal.R.color.system_notification_accent_color)) + .build()); + } + } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java index d40a2c0..878ab712 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenModePanel.java @@ -19,7 +19,6 @@ package com.android.systemui.volume; import android.animation.LayoutTransition; import android.animation.LayoutTransition.TransitionListener; import android.app.ActivityManager; -import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -85,24 +84,26 @@ public class ZenModePanel extends LinearLayout { private final int mSubheadWarningColor; private final int mSubheadColor; private final Interpolator mInterpolator; - private final int mMaxConditions; - private final int mMaxOptionalConditions; - private final boolean mCountdownConditionSupported; - private final int mFirstConditionIndex; private final TransitionHelper mTransitionHelper = new TransitionHelper(); private final Uri mForeverId; private String mTag = TAG + "/" + Integer.toHexString(System.identityHashCode(this)); private SegmentedButtons mZenButtons; + private ViewGroup mZenButtonsContainer; private View mZenSubhead; private TextView mZenSubheadCollapsed; private TextView mZenSubheadExpanded; + private View mZenEmbeddedDivider; private View mMoreSettings; private LinearLayout mZenConditions; private Callback mCallback; private ZenModeController mController; + private boolean mCountdownConditionSupported; + private int mMaxConditions; + private int mMaxOptionalConditions; + private int mFirstConditionIndex; private boolean mRequestingConditions; private Condition mExitCondition; private String mExitConditionText; @@ -115,6 +116,7 @@ public class ZenModePanel extends LinearLayout { private Condition mSessionExitCondition; private Condition[] mConditions; private Condition mTimeCondition; + private boolean mEmbedded; public ZenModePanel(Context context, AttributeSet attrs) { super(context, attrs); @@ -122,19 +124,10 @@ public class ZenModePanel extends LinearLayout { mPrefs = new Prefs(); mInflater = LayoutInflater.from(mContext.getApplicationContext()); mIconPulser = new IconPulser(mContext); - final Resources res = mContext.getResources(); - mSubheadWarningColor = res.getColor(R.color.system_warning_color); - mSubheadColor = res.getColor(R.color.qs_subhead); + mSubheadWarningColor = context.getColor(R.color.system_warning_color); + mSubheadColor = context.getColor(R.color.qs_subhead); mInterpolator = AnimationUtils.loadInterpolator(mContext, com.android.internal.R.interpolator.fast_out_slow_in); - mCountdownConditionSupported = NotificationManager.from(mContext) - .isSystemConditionProviderEnabled(ZenModeConfig.COUNTDOWN_PATH); - final int countdownDelta = mCountdownConditionSupported ? 1 : 0; - mFirstConditionIndex = COUNTDOWN_CONDITION_INDEX + countdownDelta; - final int minConditions = 1 /*forever*/ + countdownDelta; - mMaxConditions = MathUtils.constrain(res.getInteger(R.integer.zen_mode_max_conditions), - minConditions, 100); - mMaxOptionalConditions = mMaxConditions - minConditions; mForeverId = Condition.newId(mContext).appendPath("forever").build(); if (DEBUG) Log.d(mTag, "new ZenModePanel"); } @@ -149,9 +142,25 @@ public class ZenModePanel extends LinearLayout { pw.print(" mExpanded="); pw.println(mExpanded); pw.print(" mSessionZen="); pw.println(mSessionZen); pw.print(" mAttachedZen="); pw.println(mAttachedZen); + pw.print(" mEmbedded="); pw.println(mEmbedded); mTransitionHelper.dump(fd, pw, args); } + public void setEmbedded(boolean embedded) { + if (mEmbedded == embedded) return; + mEmbedded = embedded; + mZenButtonsContainer.setLayoutTransition(mEmbedded ? null : newLayoutTransition(null)); + if (mEmbedded) { + mZenButtonsContainer.setBackground(null); + } else { + mZenButtonsContainer.setBackgroundResource(R.drawable.qs_background_secondary); + } + mZenButtons.getChildAt(2).setVisibility(mEmbedded ? GONE : VISIBLE); + mZenEmbeddedDivider.setVisibility(mEmbedded ? VISIBLE : GONE); + setExpanded(mEmbedded); + updateWidgets(); + } + @Override protected void onFinishInflate() { super.onFinishInflate(); @@ -165,10 +174,11 @@ public class ZenModePanel extends LinearLayout { Global.ZEN_MODE_OFF); mZenButtons.setCallback(mZenButtonsCallback); - final ViewGroup zenButtonsContainer = (ViewGroup) findViewById(R.id.zen_buttons_container); - zenButtonsContainer.setLayoutTransition(newLayoutTransition(null)); + mZenButtonsContainer = (ViewGroup) findViewById(R.id.zen_buttons_container); + mZenButtonsContainer.setLayoutTransition(newLayoutTransition(null)); mZenSubhead = findViewById(R.id.zen_subhead); + mZenEmbeddedDivider = findViewById(R.id.zen_embedded_divider); mZenSubheadCollapsed = (TextView) findViewById(R.id.zen_subhead_collapsed); mZenSubheadCollapsed.setOnClickListener(new View.OnClickListener() { @@ -192,9 +202,6 @@ public class ZenModePanel extends LinearLayout { Interaction.register(mMoreSettings, mInteractionCallback); mZenConditions = (LinearLayout) findViewById(R.id.zen_conditions); - for (int i = 0; i < mMaxConditions; i++) { - mZenConditions.addView(mInflater.inflate(R.layout.zen_mode_condition, this, false)); - } setLayoutTransition(newLayoutTransition(mTransitionHelper)); } @@ -234,7 +241,9 @@ public class ZenModePanel extends LinearLayout { mAttachedZen = -1; mSessionZen = -1; setSessionExitCondition(null); - setExpanded(false); + if (!mEmbedded) { + setExpanded(false); + } setRequestingConditions(false); mTransitionHelper.clear(); } @@ -306,6 +315,16 @@ public class ZenModePanel extends LinearLayout { public void init(ZenModeController controller) { mController = controller; + mCountdownConditionSupported = mController.isCountdownConditionSupported(); + final int countdownDelta = mCountdownConditionSupported ? 1 : 0; + mFirstConditionIndex = COUNTDOWN_CONDITION_INDEX + countdownDelta; + final int minConditions = 1 /*forever*/ + countdownDelta; + mMaxConditions = MathUtils.constrain(mContext.getResources() + .getInteger(R.integer.zen_mode_max_conditions), minConditions, 100); + mMaxOptionalConditions = mMaxConditions - minConditions; + for (int i = 0; i < mMaxConditions; i++) { + mZenConditions.addView(mInflater.inflate(R.layout.zen_mode_condition, this, false)); + } setExitCondition(mController.getExitCondition()); refreshExitConditionText(); mSessionZen = getSelectedZen(-1); @@ -363,7 +382,7 @@ public class ZenModePanel extends LinearLayout { private void handleUpdateZen(int zen) { if (mSessionZen != -1 && mSessionZen != zen) { - setExpanded(zen != Global.ZEN_MODE_OFF); + setExpanded(mEmbedded || zen != Global.ZEN_MODE_OFF); mSessionZen = zen; } mZenButtons.setSelectedValue(zen); @@ -405,7 +424,7 @@ public class ZenModePanel extends LinearLayout { final boolean expanded = !mHidden && mExpanded; mZenButtons.setVisibility(mHidden ? GONE : VISIBLE); - mZenSubhead.setVisibility(!mHidden && !zenOff ? VISIBLE : GONE); + mZenSubhead.setVisibility(!mHidden && !zenOff && !mEmbedded ? VISIBLE : GONE); mZenSubheadExpanded.setVisibility(expanded ? VISIBLE : GONE); mZenSubheadCollapsed.setVisibility(!expanded ? VISIBLE : GONE); mMoreSettings.setVisibility(zenImportant && expanded ? VISIBLE : GONE); diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java new file mode 100644 index 0000000..3fdb3d2 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 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.systemui; + +import android.test.AndroidTestCase; + +/** + * Base class that does System UI specific setup. + */ +public class SysuiTestCase extends AndroidTestCase { + @Override + protected void setUp() throws Exception { + super.setUp(); + // Mockito stuff. + System.setProperty("dexmaker.dexcache", mContext.getCacheDir().getPath()); + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpNotificationTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpNotificationTest.java new file mode 100644 index 0000000..e8a80d9 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HeadsUpNotificationTest.java @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2014 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.systemui.statusbar.policy; + +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; + +import android.app.Notification; +import android.os.*; +import android.service.notification.StatusBarNotification; +import com.android.systemui.SwipeHelper; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.ExpandableNotificationRow; +import com.android.systemui.statusbar.NotificationData; +import com.android.systemui.statusbar.phone.PhoneStatusBar; + +import org.mockito.ArgumentCaptor; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; + +/** + * Test the Heads Up Notification. + * + * Specifically the policy that a notificaiton must remain visibile for a minimum period of time. + */ +public class HeadsUpNotificationTest extends SysuiTestCase { + private static final String TAG = "HeadsUpNotificationTest"; + + private static int TOUCH_SENSITIVITY = 100; + private static int NOTIFICATION_DECAY = 10000; + private static int MINIMUM_DISPLAY_TIME = 3000; + private static int SNOOZE_TIME = 60000; + private static long TOO_SOON = 1000L; // less than MINIMUM_DISPLAY_TIME + private static long LATER = 5000L; // more than MINIMUM_DISPLAY_TIME + private static long REMAINING_VISIBILITY = MINIMUM_DISPLAY_TIME - TOO_SOON; + + protected HeadsUpNotificationView mHeadsUp; + + @Mock protected PhoneStatusBar mMockStatusBar; + @Mock private HeadsUpNotificationView.Clock mClock; + @Mock private SwipeHelper mMockSwipeHelper; + @Mock private HeadsUpNotificationView.EdgeSwipeHelper mMockEdgeSwipeHelper; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + MockitoAnnotations.initMocks(this); + + mHeadsUp = new HeadsUpNotificationView(mContext, + mClock, mMockSwipeHelper, mMockEdgeSwipeHelper, + NOTIFICATION_DECAY, MINIMUM_DISPLAY_TIME, TOUCH_SENSITIVITY, SNOOZE_TIME); + mHeadsUp.setBar(mMockStatusBar); + } + + private NotificationData.Entry makeNotification(String key) { + StatusBarNotification sbn = mock(StatusBarNotification.class); + when(sbn.getKey()).thenReturn(key); + return new NotificationData.Entry(sbn, null); + } + + public void testPostAndDecay() { + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpOpen(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar).scheduleHeadsUpDecay(decayArg.capture()); + // New notification gets a full decay time. + assertEquals(NOTIFICATION_DECAY, (long) decayArg.getValue()); + } + + public void testPostAndDeleteTooSoon() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + mHeadsUp.removeNotification(a.key); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar).scheduleHeadsUpDecay(decayArg.capture()); + // Leave the window up for the balance of the minumum time. + assertEquals(REMAINING_VISIBILITY, (long) decayArg.getValue()); + } + + public void testPostAndDeleteLater() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(LATER); + mHeadsUp.removeNotification(a.key); + // Delete closes immediately if the minimum time window is satisfied. + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpDecay(anyInt()); + } + + // This is a bad test. It should not care that there is a call to scheduleHeadsUpClose(), + // but it happens that there will be one, so it is important that it happen before the + // call to scheduleHeadsUpOpen(), so that the final state is open. + // Maybe mMockStatusBar should instead be a fake that tracks the open/closed state. + public void testPostAndReplaceTooSoon() { + InOrder callOrder = inOrder(mMockStatusBar); + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + NotificationData.Entry b = makeNotification("b"); + mHeadsUp.showNotification(b); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpClose(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpDecay(decayArg.capture()); + // New notification gets a full decay time. + assertEquals(NOTIFICATION_DECAY, (long) decayArg.getValue()); + + // Make sure close was called before open, so that the heads up stays open. + callOrder.verify(mMockStatusBar).scheduleHeadsUpClose(); + callOrder.verify(mMockStatusBar).scheduleHeadsUpOpen(); + } + + public void testPostAndUpdateAlertAgain() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + mHeadsUp.updateNotification(a, true); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpDecay(decayArg.capture()); + // Alert again gets a full decay time. + assertEquals(NOTIFICATION_DECAY, (long) decayArg.getValue()); + } + + public void testPostAndUpdateAlertAgainFastFail() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + NotificationData.Entry a_prime = makeNotification("a"); + mHeadsUp.updateNotification(a_prime, true); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpDecay(decayArg.capture()); + // Alert again gets a full decay time. + assertEquals(NOTIFICATION_DECAY, (long) decayArg.getValue()); + } + + public void testPostAndUpdateNoAlertAgain() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + mHeadsUp.updateNotification(a, false); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpDecay(anyInt()); + } + + public void testPostAndUpdateNoAlertAgainFastFail() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + NotificationData.Entry a_prime = makeNotification("a"); + mHeadsUp.updateNotification(a_prime, false); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpDecay(anyInt()); + } + + public void testPostAndUpdateLowPriorityTooSoon() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + mHeadsUp.release(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpDecay(decayArg.capture()); + // Down grade on update leaves the window up for the balance of the minumum time. + assertEquals(REMAINING_VISIBILITY, (long) decayArg.getValue()); + } + + public void testPostAndUpdateLowPriorityTooSoonFastFail() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(TOO_SOON); + NotificationData.Entry a_prime = makeNotification("a"); + mHeadsUp.updateNotification(a_prime, false); + mHeadsUp.release(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpClose(); + ArgumentCaptor<Long> decayArg = ArgumentCaptor.forClass(Long.class); + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpDecay(decayArg.capture()); + // Down grade on update leaves the window up for the balance of the minumum time. + assertEquals(REMAINING_VISIBILITY, (long) decayArg.getValue()); + } + + public void testPostAndUpdateLowPriorityLater() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(LATER); + mHeadsUp.release(); + // Down grade on update closes immediately if the minimum time window is satisfied. + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpDecay(anyInt()); + } + + public void testPostAndUpdateLowPriorityLaterFastFail() { + when(mClock.currentTimeMillis()).thenReturn(0L); + NotificationData.Entry a = makeNotification("a"); + mHeadsUp.showNotification(a); + reset(mMockStatusBar); + + when(mClock.currentTimeMillis()).thenReturn(LATER); + NotificationData.Entry a_prime = makeNotification("a"); + mHeadsUp.updateNotification(a_prime, false); + mHeadsUp.release(); + // Down grade on update closes immediately if the minimum time window is satisfied. + Mockito.verify(mMockStatusBar, times(1)).scheduleHeadsUpClose(); + Mockito.verify(mMockStatusBar, never()).scheduleHeadsUpDecay(anyInt()); + } +} diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 260dea0..5d88407 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -29,11 +29,11 @@ import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import android.test.AndroidTestCase; import android.util.Log; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.cdma.EriInfo; +import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback; import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config; import com.android.systemui.statusbar.policy.NetworkControllerImpl.SignalCluster; @@ -46,7 +46,7 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.List; -public class NetworkControllerBaseTest extends AndroidTestCase { +public class NetworkControllerBaseTest extends SysuiTestCase { private static final String TAG = "NetworkControllerBaseTest"; protected static final int DEFAULT_LEVEL = 2; protected static final int DEFAULT_SIGNAL_STRENGTH = @@ -76,9 +76,6 @@ public class NetworkControllerBaseTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - // Mockito stuff. - System.setProperty("dexmaker.dexcache", mContext.getCacheDir().getPath()); - Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); mMockWm = mock(WifiManager.class); mMockTm = mock(TelephonyManager.class); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java index 7fa3f68..aefb1bb 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java @@ -248,6 +248,11 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest { } } + public void testHistorySize() { + // Verify valid history size, otherwise it gits printed out the wrong order and whatnot. + assertEquals(0, SignalController.HISTORY_SIZE & (SignalController.HISTORY_SIZE - 1)); + } + private void setCdma() { setIsGsm(false); updateDataConnectionState(TelephonyManager.DATA_CONNECTED, diff --git a/packages/VpnDialogs/res/values-en-rAU/strings.xml b/packages/VpnDialogs/res/values-en-rAU/strings.xml new file mode 100644 index 0000000..2c93c78 --- /dev/null +++ b/packages/VpnDialogs/res/values-en-rAU/strings.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="prompt" msgid="3183836924226407828">"Connection request"</string> + <string name="warning" msgid="809658604548412033">"<xliff:g id="APP">%s</xliff:g> wants to set up a VPN connection that allows it to monitor network traffic. Only accept if you trust the source. <br /> <br /> <img src=vpn_icon /> appears at the top of your screen when VPN is active."</string> + <string name="legacy_title" msgid="192936250066580964">"VPN is connected"</string> + <string name="configure" msgid="4905518375574791375">"Configure"</string> + <string name="disconnect" msgid="971412338304200056">"Disconnect"</string> + <string name="session" msgid="6470628549473641030">"Session:"</string> + <string name="duration" msgid="3584782459928719435">"Duration:"</string> + <string name="data_transmitted" msgid="7988167672982199061">"Sent:"</string> + <string name="data_received" msgid="4062776929376067820">"Received:"</string> + <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> packets"</string> +</resources> diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java index 897c96cf..ea8b2ec 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java @@ -18,13 +18,8 @@ package com.android.vpndialogs; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.IConnectivityManager; -import android.net.VpnService; import android.os.ServiceManager; import android.text.Html; import android.text.Html.ImageGetter; @@ -36,8 +31,6 @@ import android.widget.TextView; import com.android.internal.app.AlertActivity; import com.android.internal.net.VpnConfig; -import java.util.List; - public class ConfirmDialog extends AlertActivity implements DialogInterface.OnClickListener, ImageGetter { private static final String TAG = "VpnConfirm"; diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java index 57b0731..a319beb 100644 --- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java +++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java @@ -21,7 +21,6 @@ import android.app.Activity; import android.app.WallpaperManager; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java index c6b76f1..74391eb 100644 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java +++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java @@ -72,16 +72,22 @@ public class PacService extends Service { @Override public String resolvePacFile(String host, String url) throws RemoteException { try { + if (host == null) { + throw new IllegalArgumentException("The host must not be null"); + } + if (url == null) { + throw new IllegalArgumentException("The URL must not be null"); + } // Check for characters that could be used for an injection attack. new URL(url); for (char c : host.toCharArray()) { if (!Character.isLetterOrDigit(c) && (c != '.') && (c != '-')) { - throw new RemoteException("Invalid host was passed"); + throw new IllegalArgumentException("Invalid host was passed"); } } return mPacNative.makeProxyRequest(url, host); } catch (MalformedURLException e) { - throw new RemoteException("Invalid URL was passed"); + throw new IllegalArgumentException("Invalid URL was passed"); } } diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java index edb1630..ac40222 100644 --- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java +++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java @@ -20,6 +20,7 @@ import android.util.Log; import com.android.net.IProxyPortListener; import com.google.android.collect.Lists; +import com.google.android.collect.Sets; import java.io.IOException; import java.io.InputStream; @@ -33,6 +34,7 @@ import java.net.SocketException; import java.net.URI; import java.net.URISyntaxException; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -46,6 +48,10 @@ public class ProxyServer extends Thread { private static final String TAG = "ProxyServer"; + // HTTP Headers + private static final String HEADER_CONNECTION = "connection"; + private static final String HEADER_PROXY_CONNECTION = "proxy-connection"; + private ExecutorService threadExecutor; public boolean mIsRunning = false; @@ -65,10 +71,6 @@ public class ProxyServer extends Thread { public void run() { try { String requestLine = getLine(connection.getInputStream()); - if (requestLine == null) { - connection.close(); - return; - } String[] splitLine = requestLine.split(" "); if (splitLine.length < 3) { connection.close(); @@ -76,22 +78,30 @@ public class ProxyServer extends Thread { } String requestType = splitLine[0]; String urlString = splitLine[1]; + String httpVersion = splitLine[2]; - String host = ""; - int port = 80; + URI url = null; + String host; + int port; if (requestType.equals(CONNECT)) { String[] hostPortSplit = urlString.split(":"); host = hostPortSplit[0]; - try { - port = Integer.parseInt(hostPortSplit[1]); - } catch (NumberFormatException nfe) { + // Use default SSL port if not specified. Parse it otherwise + if (hostPortSplit.length < 2) { port = 443; + } else { + try { + port = Integer.parseInt(hostPortSplit[1]); + } catch (NumberFormatException nfe) { + connection.close(); + return; + } } urlString = "Https://" + host + ":" + port; } else { try { - URI url = new URI(urlString); + url = new URI(urlString); host = url.getHost(); port = url.getPort(); if (port < 0) { @@ -122,44 +132,99 @@ public class ProxyServer extends Thread { } else { server = new Socket(host, port); if (requestType.equals(CONNECT)) { - while (getLine(connection.getInputStream()).length() != 0); + skipToRequestBody(connection); // No proxy to respond so we must. sendLine(connection, HTTP_OK); } else { - sendLine(server, requestLine); + // Proxying the request directly to the origin server. + sendAugmentedRequestToHost(connection, server, + requestType, url, httpVersion); } } } catch (IOException ioe) { - + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "Unable to connect to proxy " + proxy, ioe); + } } if (server != null) { break; } } - if (server == null) { + if (list.isEmpty()) { server = new Socket(host, port); if (requestType.equals(CONNECT)) { - while (getLine(connection.getInputStream()).length() != 0); + skipToRequestBody(connection); // No proxy to respond so we must. sendLine(connection, HTTP_OK); } else { - sendLine(server, requestLine); + // Proxying the request directly to the origin server. + sendAugmentedRequestToHost(connection, server, + requestType, url, httpVersion); } } // Pass data back and forth until complete. - SocketConnect.connect(connection, server); - } catch (IOException e) { + if (server != null) { + SocketConnect.connect(connection, server); + } + } catch (Exception e) { Log.d(TAG, "Problem Proxying", e); } try { connection.close(); } catch (IOException ioe) { + // Do nothing + } + } + /** + * Sends HTTP request-line (i.e. the first line in the request) + * that contains absolute path of a given absolute URI. + * + * @param server server to send the request to. + * @param requestType type of the request, a.k.a. HTTP method. + * @param absoluteUri absolute URI which absolute path should be extracted. + * @param httpVersion version of HTTP, e.g. HTTP/1.1. + * @throws IOException if the request-line cannot be sent. + */ + private void sendRequestLineWithPath(Socket server, String requestType, + URI absoluteUri, String httpVersion) throws IOException { + + String absolutePath = getAbsolutePathFromAbsoluteURI(absoluteUri); + String outgoingRequestLine = String.format("%s %s %s", + requestType, absolutePath, httpVersion); + sendLine(server, outgoingRequestLine); + } + + /** + * Extracts absolute path form a given URI. E.g., passing + * <code>http://google.com:80/execute?query=cat#top</code> + * will result in <code>/execute?query=cat#top</code>. + * + * @param uri URI which absolute path has to be extracted, + * @return the absolute path of the URI, + */ + private String getAbsolutePathFromAbsoluteURI(URI uri) { + String rawPath = uri.getRawPath(); + String rawQuery = uri.getRawQuery(); + String rawFragment = uri.getRawFragment(); + StringBuilder absolutePath = new StringBuilder(); + + if (rawPath != null) { + absolutePath.append(rawPath); + } else { + absolutePath.append("/"); + } + if (rawQuery != null) { + absolutePath.append("?").append(rawQuery); } + if (rawFragment != null) { + absolutePath.append("#").append(rawFragment); + } + return absolutePath.toString(); } private String getLine(InputStream inputStream) throws IOException { - StringBuffer buffer = new StringBuffer(); + StringBuilder buffer = new StringBuilder(); int byteBuffer = inputStream.read(); if (byteBuffer < 0) return ""; do { @@ -179,6 +244,79 @@ public class ProxyServer extends Thread { os.write('\n'); os.flush(); } + + /** + * Reads from socket until an empty line is read which indicates the end of HTTP headers. + * + * @param socket socket to read from. + * @throws IOException if an exception took place during the socket read. + */ + private void skipToRequestBody(Socket socket) throws IOException { + while (getLine(socket.getInputStream()).length() != 0); + } + + /** + * Sends an augmented request to the final host (DIRECT connection). + * + * @param src socket to read HTTP headers from.The socket current position should point + * to the beginning of the HTTP header section. + * @param dst socket to write the augmented request to. + * @param httpMethod original request http method. + * @param uri original request absolute URI. + * @param httpVersion original request http version. + * @throws IOException if an exception took place during socket reads or writes. + */ + private void sendAugmentedRequestToHost(Socket src, Socket dst, + String httpMethod, URI uri, String httpVersion) throws IOException { + + sendRequestLineWithPath(dst, httpMethod, uri, httpVersion); + filterAndForwardRequestHeaders(src, dst); + + // Currently the proxy does not support keep-alive connections; therefore, + // the proxy has to request the destination server to close the connection + // after the destination server sent the response. + sendLine(dst, "Connection: close"); + + // Sends and empty line that indicates termination of the header section. + sendLine(dst, ""); + } + + /** + * Forwards original request headers filtering out the ones that have to be removed. + * + * @param src source socket that contains original request headers. + * @param dst destination socket to send the filtered headers to. + * @throws IOException if the data cannot be read from or written to the sockets. + */ + private void filterAndForwardRequestHeaders(Socket src, Socket dst) throws IOException { + String line; + do { + line = getLine(src.getInputStream()); + if (line.length() > 0 && !shouldRemoveHeaderLine(line)) { + sendLine(dst, line); + } + } while (line.length() > 0); + } + + /** + * Returns true if a given header line has to be removed from the original request. + * + * @param line header line that should be analysed. + * @return true if the header line should be removed and not forwarded to the destination. + */ + private boolean shouldRemoveHeaderLine(String line) { + int colIndex = line.indexOf(":"); + if (colIndex != -1) { + String headerName = line.substring(0, colIndex).trim(); + if (headerName.regionMatches(true, 0, HEADER_CONNECTION, 0, + HEADER_CONNECTION.length()) + || headerName.regionMatches(true, 0, HEADER_PROXY_CONNECTION, + 0, HEADER_PROXY_CONNECTION.length())) { + return true; + } + } + return false; + } } public ProxyServer() { @@ -192,23 +330,21 @@ public class ProxyServer extends Thread { try { serverSocket = new ServerSocket(0); - if (serverSocket != null) { - setPort(serverSocket.getLocalPort()); + setPort(serverSocket.getLocalPort()); - while (mIsRunning) { - try { - Socket socket = serverSocket.accept(); - // Only receive local connections. - if (socket.getInetAddress().isLoopbackAddress()) { - ProxyConnection parser = new ProxyConnection(socket); + while (mIsRunning) { + try { + Socket socket = serverSocket.accept(); + // Only receive local connections. + if (socket.getInetAddress().isLoopbackAddress()) { + ProxyConnection parser = new ProxyConnection(socket); - threadExecutor.execute(parser); - } else { - socket.close(); - } - } catch (IOException e) { - e.printStackTrace(); + threadExecutor.execute(parser); + } else { + socket.close(); } + } catch (IOException e) { + e.printStackTrace(); } } } catch (SocketException e) { |