diff options
36 files changed, 446 insertions, 242 deletions
diff --git a/core/java/com/android/internal/app/NetInitiatedActivity.java b/core/java/com/android/internal/app/NetInitiatedActivity.java index 92e9fe492442..5efeb0fc928e 100644 --- a/core/java/com/android/internal/app/NetInitiatedActivity.java +++ b/core/java/com/android/internal/app/NetInitiatedActivity.java @@ -17,18 +17,14 @@ package com.android.internal.app; import android.app.AlertDialog; -import android.compat.annotation.UnsupportedAppUsage; -import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.IntentFilter; import android.location.LocationManagerInternal; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; -import android.widget.Toast; import com.android.internal.R; import com.android.internal.location.GpsNetInitiatedHandler; @@ -43,7 +39,6 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa private static final String TAG = "NetInitiatedActivity"; private static final boolean DEBUG = true; - private static final boolean VERBOSE = false; private static final int POSITIVE_BUTTON = AlertDialog.BUTTON_POSITIVE; private static final int NEGATIVE_BUTTON = AlertDialog.BUTTON_NEGATIVE; @@ -55,17 +50,6 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa private int default_response = -1; private int default_response_timeout = 6; - /** Used to detect when NI request is received */ - private BroadcastReceiver mNetInitiatedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (DEBUG) Log.d(TAG, "NetInitiatedReceiver onReceive: " + intent.getAction()); - if (intent.getAction() == GpsNetInitiatedHandler.ACTION_NI_VERIFY) { - handleNIVerify(intent); - } - } - }; - private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { @@ -109,14 +93,12 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa protected void onResume() { super.onResume(); if (DEBUG) Log.d(TAG, "onResume"); - registerReceiver(mNetInitiatedReceiver, new IntentFilter(GpsNetInitiatedHandler.ACTION_NI_VERIFY)); } @Override protected void onPause() { super.onPause(); if (DEBUG) Log.d(TAG, "onPause"); - unregisterReceiver(mNetInitiatedReceiver); } /** @@ -141,17 +123,4 @@ public class NetInitiatedActivity extends AlertActivity implements DialogInterfa LocationManagerInternal lm = LocalServices.getService(LocationManagerInternal.class); lm.sendNiResponse(notificationId, response); } - - @UnsupportedAppUsage - private void handleNIVerify(Intent intent) { - int notifId = intent.getIntExtra(GpsNetInitiatedHandler.NI_INTENT_KEY_NOTIF_ID, -1); - notificationId = notifId; - - if (DEBUG) Log.d(TAG, "handleNIVerify action: " + intent.getAction()); - } - - private void showNIError() { - Toast.makeText(this, "NI error" /* com.android.internal.R.string.usb_storage_error_message */, - Toast.LENGTH_LONG).show(); - } } diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 6fbdd4626b94..78ed3a86a697 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -775,7 +775,7 @@ <string name="eventTypeAnniversary" msgid="4684702412407916888">"Гадавіна"</string> <string name="eventTypeOther" msgid="530671238533887997">"Іншае"</string> <string name="emailTypeCustom" msgid="1809435350482181786">"Карыстальніцкая"</string> - <string name="emailTypeHome" msgid="1597116303154775999">"Хатні"</string> + <string name="emailTypeHome" msgid="1597116303154775999">"Асабістая"</string> <string name="emailTypeWork" msgid="2020095414401882111">"Працоўная"</string> <string name="emailTypeOther" msgid="5131130857030897465">"Іншая"</string> <string name="emailTypeMobile" msgid="787155077375364230">"Мабільны"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 4d93d6eaf641..e0a35ac95a9b 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -325,8 +325,8 @@ <string name="capability_desc_canControlMagnification" msgid="2206586716709254805">"Controla el posicionamiento y el nivel de zoom de la pantalla."</string> <string name="capability_title_canPerformGestures" msgid="9106545062106728987">"Usar gestos"</string> <string name="capability_desc_canPerformGestures" msgid="6619457251067929726">"Permite presionar, deslizar, pellizcar y usar otros gestos."</string> - <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"Gestos del sensor de huellas digitales"</string> - <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"Captura los gestos que se hacen en el sensor de huellas digitales del dispositivo."</string> + <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"Gestos del sensor de huellas dactilares"</string> + <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"Captura los gestos que se hacen en el sensor de huellas dactilares del dispositivo."</string> <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"Tomar captura de pantalla"</string> <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"Puede tomar una captura de la pantalla."</string> <string name="permlab_statusBar" msgid="8798267849526214017">"desactivar o modificar la barra de estado"</string> @@ -511,9 +511,9 @@ <string name="permdesc_changeWimaxState" product="tv" msgid="5373274458799425276">"Permite que la app conecte el dispositivo Android TV a redes WiMAX y que lo desconecte de ellas."</string> <string name="permdesc_changeWimaxState" product="default" msgid="1551666203780202101">"Permite que la aplicación conecte el dispositivo a una red WiMAX y que lo desconecte de ella."</string> <string name="permlab_bluetooth" msgid="586333280736937209">"vincular con dispositivos Bluetooth"</string> - <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que la aplicación vea la configuración de Bluetooth de la tablet y que cree y acepte conexiones con los dispositivos sincronizados."</string> - <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que la app vea la configuración de Bluetooth del dispositivo Android TV, así como que cree y acepte conexiones con los dispositivos sincronizados."</string> - <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite que la aplicación vea la configuración de Bluetooth del dispositivo y que cree y acepte conexiones con los dispositivos sincronizados."</string> + <string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Permite que la aplicación vea la configuración de Bluetooth de la tablet y que cree y acepte conexiones con los dispositivos vinculados."</string> + <string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Permite que la app vea la configuración de Bluetooth del dispositivo Android TV, así como que cree y acepte conexiones con los dispositivos vinculados."</string> + <string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Permite que la aplicación vea la configuración de Bluetooth del dispositivo y que cree y acepte conexiones con los dispositivos vinculados."</string> <string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Información sobre servicio de pago NFC preferido"</string> <string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Permite que la app reciba información del servicio de pago NFC preferido, como el servicio de asistencia registrado y el destino de la ruta."</string> <string name="permlab_nfc" msgid="1904455246837674977">"controlar la Transmisión de datos en proximidad"</string> @@ -524,10 +524,10 @@ <string name="permdesc_requestPasswordComplexity" msgid="1130556896836258567">"Permite que la app conozca el nivel de complejidad del bloqueo de pantalla (alta, media, baja o ninguna), lo que indica el rango de duración posible y el tipo de bloqueo. La app también puede sugerirles a los usuarios que actualicen el bloqueo de pantalla a un determinado nivel, aunque ellos pueden ignorar esta sugerencia y seguir navegando. Ten en cuenta que el bloqueo de pantalla no se almacena como texto sin formato, por lo que la app no conoce la contraseña exacta."</string> <string name="permlab_useBiometric" msgid="6314741124749633786">"usar hardware biométrico"</string> <string name="permdesc_useBiometric" msgid="7502858732677143410">"Permite que la app use hardware biométrico para realizar la autenticación"</string> - <string name="permlab_manageFingerprint" msgid="7432667156322821178">"Administrar el hardware de huellas digitales"</string> - <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas digitales para su uso."</string> - <string name="permlab_useFingerprint" msgid="1001421069766751922">"Utilizar hardware de huellas digitales"</string> - <string name="permdesc_useFingerprint" msgid="412463055059323742">"Permite que la aplicación utilice el hardware de huellas digitales para realizar la autenticación."</string> + <string name="permlab_manageFingerprint" msgid="7432667156322821178">"Administrar el hardware de huellas dactilares"</string> + <string name="permdesc_manageFingerprint" msgid="2025616816437339865">"Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas dactilares para su uso."</string> + <string name="permlab_useFingerprint" msgid="1001421069766751922">"Utilizar hardware de huellas dactilares"</string> + <string name="permdesc_useFingerprint" msgid="412463055059323742">"Permite que la aplicación utilice el hardware de huellas dactilares para realizar la autenticación."</string> <string name="permlab_audioWrite" msgid="8501705294265669405">"modificar tu colección de música"</string> <string name="permdesc_audioWrite" msgid="8057399517013412431">"Permite que la app modifique tu colección de música."</string> <string name="permlab_videoWrite" msgid="5940738769586451318">"modificar tu colección de videos"</string> @@ -542,31 +542,31 @@ <string name="biometric_not_recognized" msgid="5106687642694635888">"No se reconoció"</string> <string name="biometric_error_canceled" msgid="8266582404844179778">"Se canceló la autenticación"</string> <string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No se estableció ningún PIN, patrón ni contraseña"</string> - <string name="fingerprint_acquired_partial" msgid="8532380671091299342">"Se detectó parcialmente la huella digital. Vuelve a intentarlo."</string> - <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se pudo procesar la huella digital. Vuelve a intentarlo."</string> - <string name="fingerprint_acquired_imager_dirty" msgid="4694800187151533990">"El sensor de huellas digitales está sucio. Limpia el sensor y vuelve a intentarlo."</string> + <string name="fingerprint_acquired_partial" msgid="8532380671091299342">"Se detectó parcialmente la huella dactilar. Vuelve a intentarlo."</string> + <string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se pudo procesar la huella dactilar. Vuelve a intentarlo."</string> + <string name="fingerprint_acquired_imager_dirty" msgid="4694800187151533990">"El sensor de huellas dactilares está sucio. Limpia el sensor y vuelve a intentarlo."</string> <string name="fingerprint_acquired_too_fast" msgid="5151661932298844352">"Moviste el dedo muy rápido. Vuelve a intentarlo."</string> <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"Moviste el dedo muy lento. Vuelve a intentarlo."</string> <string-array name="fingerprint_acquired_vendor"> </string-array> - <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se autenticó la huella digital"</string> + <string name="fingerprint_authenticated" msgid="2024862866860283100">"Se autenticó la huella dactilar"</string> <string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Se autenticó el rostro"</string> <string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se autenticó el rostro; presiona Confirmar"</string> - <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"El hardware para detectar huellas digitales no está disponible."</string> - <string name="fingerprint_error_no_space" msgid="6126456006769817485">"No se puede almacenar la huella digital. Elimina una de las existentes."</string> - <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Finalizó el tiempo de espera para la huella digital. Vuelve a intentarlo."</string> - <string name="fingerprint_error_canceled" msgid="540026881380070750">"Se canceló la operación de huella digital."</string> - <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"El usuario canceló la operación de huella digital."</string> + <string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"El hardware para detectar huellas dactilares no está disponible."</string> + <string name="fingerprint_error_no_space" msgid="6126456006769817485">"No se puede almacenar la huella dactilar. Elimina una de las existentes."</string> + <string name="fingerprint_error_timeout" msgid="2946635815726054226">"Finalizó el tiempo de espera para la huella dactilar. Vuelve a intentarlo."</string> + <string name="fingerprint_error_canceled" msgid="540026881380070750">"Se canceló la operación de huella dactilar."</string> + <string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"El usuario canceló la operación de huella dactilar."</string> <string name="fingerprint_error_lockout" msgid="7853461265604738671">"Demasiados intentos. Vuelve a intentarlo más tarde."</string> - <string name="fingerprint_error_lockout_permanent" msgid="3895478283943513746">"Realizaste demasiados intentos. Se inhabilitó el sensor de huellas digitales."</string> + <string name="fingerprint_error_lockout_permanent" msgid="3895478283943513746">"Realizaste demasiados intentos. Se inhabilitó el sensor de huellas dactilares."</string> <string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Vuelve a intentarlo."</string> <string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"No se registraron huellas digitales."</string> - <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas digitales."</string> + <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Este dispositivo no tiene sensor de huellas dactilares."</string> <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Se inhabilitó temporalmente el sensor."</string> <string name="fingerprint_name_template" msgid="8941662088160289778">"Dedo <xliff:g id="FINGERID">%d</xliff:g>"</string> <string-array name="fingerprint_error_vendor"> </string-array> - <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Ícono de huella digital"</string> + <string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Ícono de huella dactilar"</string> <string name="permlab_manageFace" msgid="4569549381889283282">"administrar el hardware de desbloqueo facial"</string> <string name="permdesc_manageFace" msgid="6204569688492710471">"Permite que la app emplee métodos para agregar y borrar plantillas de rostros para su uso."</string> <string name="permlab_useFaceAuthentication" msgid="1011430526454859030">"usar el hardware de desbloqueo facial"</string> @@ -1539,8 +1539,8 @@ <string name="expires_on" msgid="1623640879705103121">"Expira el:"</string> <string name="serial_number" msgid="3479576915806623429">"Número de serie:"</string> <string name="fingerprints" msgid="148690767172613723">"Huellas digitales:"</string> - <string name="sha256_fingerprint" msgid="7103976380961964600">"Huella digital SHA-256"</string> - <string name="sha1_fingerprint" msgid="2339915142825390774">"Huella digital SHA-1:"</string> + <string name="sha256_fingerprint" msgid="7103976380961964600">"Huella dactilar SHA-256"</string> + <string name="sha1_fingerprint" msgid="2339915142825390774">"Huella dactilar SHA-1:"</string> <string name="activity_chooser_view_see_all" msgid="3917045206812726099">"Ver todas"</string> <string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"Elige actividad"</string> <string name="share_action_provider_share_with" msgid="1904096863622941880">"Compartir con"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index cd307dfb9d40..139e6b4862b9 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -1326,7 +1326,7 @@ <string name="share_remote_bugreport_notification_message_finished" msgid="7325635795739260135">"आपके एडमिन ने इस डिवाइस की समस्या को हल करने में सहायता के लिए एक गड़बड़ी की रिपोर्ट का अनुरोध किया है. ऐप्लिकेशन और डेटा शेयर किए जा सकते हैं."</string> <string name="share_remote_bugreport_action" msgid="7630880678785123682">"शेयर करें"</string> <string name="decline_remote_bugreport_action" msgid="4040894777519784346">"अस्वीकार करें"</string> - <string name="select_input_method" msgid="3971267998568587025">"इनपुट पद्धति चुनें"</string> + <string name="select_input_method" msgid="3971267998568587025">"इनपुट का तरीका चुनें"</string> <string name="show_ime" msgid="6406112007347443383">"सामान्य कीबोर्ड के सक्रिय होने के दौरान इसे स्क्रीन पर बनाए रखें"</string> <string name="hardware" msgid="1800597768237606953">"वर्चुअल कीबोर्ड दिखाएं"</string> <string name="select_keyboard_layout_notification_title" msgid="4427643867639774118">"सामान्य कीबोर्ड कॉन्फ़िगर करें"</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index c42cf953c651..ed25123ed39d 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -996,7 +996,7 @@ <item quantity="other">Акыркы <xliff:g id="COUNT_1">%d</xliff:g> күн</item> <item quantity="one">Акыркы <xliff:g id="COUNT_0">%d</xliff:g> күн</item> </plurals> - <string name="last_month" msgid="1528906781083518683">"Өткөн ай"</string> + <string name="last_month" msgid="1528906781083518683">"Акыркы ай"</string> <string name="older" msgid="1645159827884647400">"Эскирээк"</string> <string name="preposition_for_date" msgid="2780767868832729599">"<xliff:g id="DATE">%s</xliff:g> күнү"</string> <string name="preposition_for_time" msgid="4336835286453822053">"саат <xliff:g id="TIME">%s</xliff:g>"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index d3cb8528683f..6de3cdffefae 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -254,7 +254,7 @@ <item quantity="one">A tirar uma captura de ecrã do relatório de erro dentro de <xliff:g id="NUMBER_0">%d</xliff:g> segundo…</item> </plurals> <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Captura de ecrã tirada com o relatório de erro."</string> - <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Falha ao tirar captura de ecrã com o relatório de erro."</string> + <string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Falha ao fazer captura de ecrã com o relatório de erro."</string> <string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"Modo silencioso"</string> <string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"Som desativado"</string> <string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"O som está ativado"</string> @@ -327,7 +327,7 @@ <string name="capability_desc_canPerformGestures" msgid="6619457251067929726">"É possível tocar, deslizar rapidamente, juntar os dedos e realizar outros gestos"</string> <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"Gestos de impressão digital"</string> <string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"Pode capturar gestos realizados no sensor de impressões digitais do dispositivo."</string> - <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"Tirar captura de ecrã"</string> + <string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"Fazer captura de ecrã"</string> <string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"É possível tirar uma captura de ecrã."</string> <string name="permlab_statusBar" msgid="8798267849526214017">"desativar ou modificar barra de estado"</string> <string name="permdesc_statusBar" msgid="5809162768651019642">"Permite à app desativar a barra de estado ou adicionar e remover ícones do sistema."</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index f68ed31dabe1..0bd750f1aa33 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -220,7 +220,7 @@ <string name="reboot_to_update_prepare" msgid="6978842143587422365">"Naghahandang i-update…"</string> <string name="reboot_to_update_package" msgid="4644104795527534811">"Pinoproseso ang package ng update…"</string> <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Nagre-restart…"</string> - <string name="reboot_to_reset_title" msgid="2226229680017882787">"I-reset ang data ng factory"</string> + <string name="reboot_to_reset_title" msgid="2226229680017882787">"Pag-reset sa factory data"</string> <string name="reboot_to_reset_message" msgid="3347690497972074356">"Nagre-restart…"</string> <string name="shutdown_progress" msgid="5017145516412657345">"Nagsa-shut down…"</string> <string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Mag-shut down ang iyong tablet."</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index bf7fbca64581..71d93ba82951 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -967,7 +967,7 @@ <string name="save_password_remember" msgid="6490888932657708341">"Nhớ"</string> <string name="save_password_never" msgid="6776808375903410659">"Chưa bao giờ"</string> <string name="open_permission_deny" msgid="5136793905306987251">"Bạn không được phép mở trang này."</string> - <string name="text_copied" msgid="2531420577879738860">"Đã sao chép văn bản vào khay nhớ tạm thời."</string> + <string name="text_copied" msgid="2531420577879738860">"Đã sao chép văn bản vào bảng nhớ tạm thời."</string> <string name="copied" msgid="4675902854553014676">"Đã sao chép"</string> <string name="more_item_label" msgid="7419249600215749115">"Thêm"</string> <string name="prepend_shortcut_label" msgid="1743716737502867951">"Trình đơn+"</string> @@ -1092,7 +1092,7 @@ <string name="selectAll" msgid="1532369154488982046">"Chọn tất cả"</string> <string name="cut" msgid="2561199725874745819">"Cắt"</string> <string name="copy" msgid="5472512047143665218">"Sao chép"</string> - <string name="failed_to_copy_to_clipboard" msgid="725919885138539875">"Không sao chép được vào khay nhớ tạm"</string> + <string name="failed_to_copy_to_clipboard" msgid="725919885138539875">"Không sao chép được vào bảng nhớ tạm"</string> <string name="paste" msgid="461843306215520225">"Dán"</string> <string name="paste_as_plain_text" msgid="7664800665823182587">"Dán dưới dạng văn bản thuần túy"</string> <string name="replace" msgid="7842675434546657444">"Thay thế..."</string> diff --git a/data/etc/car/Android.bp b/data/etc/car/Android.bp index c5a460b78474..dc892080417d 100644 --- a/data/etc/car/Android.bp +++ b/data/etc/car/Android.bp @@ -163,3 +163,10 @@ prebuilt_etc { src: "com.android.car.activityresolver.xml", filename_from_src: true, } + +prebuilt_etc { + name: "allowed_privapp_com.android.car.rotary", + sub_dir: "permissions", + src: "com.android.car.rotary.xml", + filename_from_src: true, +} diff --git a/data/etc/car/com.android.car.rotary.xml b/data/etc/car/com.android.car.rotary.xml new file mode 100644 index 000000000000..575275507ea5 --- /dev/null +++ b/data/etc/car/com.android.car.rotary.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2021 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. + --> +<permissions> + <privapp-permissions package="com.android.car.rotary"> + <permission name="android.permission.GET_ACCOUNTS_PRIVILEGED"/> + <permission name="android.permission.WRITE_SECURE_SETTINGS"/> + </privapp-permissions> +</permissions> diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java index 67a040dba3e7..a3765151a6f7 100644 --- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java +++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java @@ -51,9 +51,6 @@ public class GpsNetInitiatedHandler { private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - // NI verify activity for bringing up UI (not used yet) - public static final String ACTION_NI_VERIFY = "android.intent.action.NETWORK_INITIATED_VERIFY"; - // string constants for defining data fields in NI Intent public static final String NI_INTENT_KEY_NOTIF_ID = "notif_id"; public static final String NI_INTENT_KEY_TITLE = "title"; diff --git a/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml b/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml index 3e35df9d9b0c..f617ec06ae52 100644 --- a/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml +++ b/packages/CarSystemUI/res-keyguard/layout/keyguard_container.xml @@ -14,10 +14,7 @@ ~ limitations under the License. --> -<!-- Car customizations - Car has solid black background instead of a transparent one ---> -<LinearLayout +<com.android.car.ui.FocusArea xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyguard_container" android:layout_width="match_parent" diff --git a/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml b/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml index 8306cb4a708a..c5974e3c7167 100644 --- a/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml +++ b/packages/CarSystemUI/res-keyguard/layout/num_pad_keys.xml @@ -66,7 +66,6 @@ android:src="@drawable/ic_backspace" android:clickable="true" android:tint="@android:color/white" - android:background="@drawable/ripple_drawable" android:contentDescription="@string/keyboardview_keycode_delete" /> <com.android.keyguard.NumPadKey android:id="@+id/key0" @@ -77,7 +76,6 @@ style="@style/NumPadKeyButton.LastRow" android:src="@drawable/ic_done" android:tint="@android:color/white" - android:background="@drawable/ripple_drawable" android:contentDescription="@string/keyboardview_keycode_enter" /> </merge> diff --git a/packages/CarSystemUI/res-keyguard/values/dimens.xml b/packages/CarSystemUI/res-keyguard/values/dimens.xml index 8dfe1716ef54..3c139586c2cc 100644 --- a/packages/CarSystemUI/res-keyguard/values/dimens.xml +++ b/packages/CarSystemUI/res-keyguard/values/dimens.xml @@ -17,10 +17,8 @@ <resources> <dimen name="num_pad_margin_left">112dp</dimen> <dimen name="num_pad_margin_right">144dp</dimen> - <dimen name="num_pad_key_width">80dp</dimen> + <dimen name="num_pad_key_width">120dp</dimen> <dimen name="num_pad_key_height">80dp</dimen> - <dimen name="num_pad_key_margin_horizontal">@*android:dimen/car_padding_5</dimen> - <dimen name="num_pad_key_margin_bottom">@*android:dimen/car_padding_5</dimen> <dimen name="pin_entry_height">@dimen/num_pad_key_height</dimen> <dimen name="divider_height">1dp</dimen> <dimen name="key_enter_margin_top">128dp</dimen> diff --git a/packages/CarSystemUI/res-keyguard/values/styles.xml b/packages/CarSystemUI/res-keyguard/values/styles.xml index ecea30a13ced..ca37428a9fd9 100644 --- a/packages/CarSystemUI/res-keyguard/values/styles.xml +++ b/packages/CarSystemUI/res-keyguard/values/styles.xml @@ -23,12 +23,11 @@ <item name="android:layout_width">@dimen/num_pad_key_width</item> <item name="android:layout_height">@dimen/num_pad_key_height</item> <item name="android:layout_marginBottom">@dimen/num_pad_key_margin_bottom</item> + <item name="android:background">?android:attr/selectableItemBackground</item> <item name="textView">@id/pinEntry</item> </style> <style name="NumPadKeyButton.MiddleColumn"> - <item name="android:layout_marginStart">@dimen/num_pad_key_margin_horizontal</item> - <item name="android:layout_marginEnd">@dimen/num_pad_key_margin_horizontal</item> </style> <style name="NumPadKeyButton.LastRow"> @@ -36,12 +35,10 @@ </style> <style name="NumPadKeyButton.LastRow.MiddleColumn"> - <item name="android:layout_marginStart">@dimen/num_pad_key_margin_horizontal</item> - <item name="android:layout_marginEnd">@dimen/num_pad_key_margin_horizontal</item> </style> <style name="KeyguardButton" parent="@android:style/Widget.DeviceDefault.Button"> - <item name="android:background">@drawable/keyguard_button_background</item> + <item name="android:background">?android:attr/selectableItemBackground</item> <item name="android:textColor">@color/button_text</item> <item name="android:textAllCaps">false</item> </style> diff --git a/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml b/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml index 99df6d52de07..f987b5a650bc 100644 --- a/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml +++ b/packages/CarSystemUI/res/layout/car_fullscreen_user_switcher.xml @@ -14,29 +14,36 @@ See the License for the specific language governing permissions and limitations under the License. --> -<com.android.systemui.car.userswitcher.UserSwitcherContainer + +<com.android.car.ui.FocusArea xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/container" + android:id="@+id/user_switcher_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/car_user_switcher_background_color" - android:orientation="vertical"> + android:gravity="center"> + <com.android.systemui.car.userswitcher.UserSwitcherContainer + android:id="@+id/container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/car_user_switcher_background_color" + android:orientation="vertical"> - <include - layout="@layout/car_status_bar_header" - android:layout_alignParentTop="true" - android:theme="@android:style/Theme"/> + <include + layout="@layout/car_status_bar_header" + android:layout_alignParentTop="true" + android:theme="@android:style/Theme"/> - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - <com.android.systemui.car.userswitcher.UserGridRecyclerView - android:id="@+id/user_grid" + <FrameLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:layout_marginTop="@dimen/car_user_switcher_margin_top"/> - </FrameLayout> + android:layout_height="match_parent"> + <com.android.systemui.car.userswitcher.UserGridRecyclerView + android:id="@+id/user_grid" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginTop="@dimen/car_user_switcher_margin_top"/> + </FrameLayout> -</com.android.systemui.car.userswitcher.UserSwitcherContainer> + </com.android.systemui.car.userswitcher.UserSwitcherContainer> +</com.android.car.ui.FocusArea> diff --git a/packages/CarSystemUI/res/layout/notification_center_activity.xml b/packages/CarSystemUI/res/layout/notification_center_activity.xml index 0e45e43132de..51d23db79e8d 100644 --- a/packages/CarSystemUI/res/layout/notification_center_activity.xml +++ b/packages/CarSystemUI/res/layout/notification_center_activity.xml @@ -22,10 +22,6 @@ android:layout_height="match_parent" android:background="@color/notification_shade_background_color"> - <com.android.car.ui.FocusParkingView - android:layout_width="wrap_content" - android:layout_height="wrap_content"/> - <View android:id="@+id/glass_pane" android:layout_width="match_parent" @@ -37,20 +33,15 @@ app:layout_constraintTop_toTopOf="parent" /> - <com.android.car.ui.FocusArea - android:layout_width="0dp" - android:layout_height="0dp" - android:orientation="vertical" + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/notifications" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingBottom="@dimen/notification_shade_list_padding_bottom" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent"> - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/notifications" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:paddingBottom="@dimen/notification_shade_list_padding_bottom"/> - </com.android.car.ui.FocusArea> + app:layout_constraintTop_toTopOf="parent"/> <include layout="@layout/notification_handle_bar"/> diff --git a/packages/CarSystemUI/res/layout/notification_panel_container.xml b/packages/CarSystemUI/res/layout/notification_panel_container.xml index 3b53c6aaeac3..de69769b2bb0 100644 --- a/packages/CarSystemUI/res/layout/notification_panel_container.xml +++ b/packages/CarSystemUI/res/layout/notification_panel_container.xml @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<FrameLayout +<com.android.car.ui.FocusArea xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/notification_container" android:layout_width="match_parent" diff --git a/packages/CarSystemUI/res/layout/sysui_overlay_window.xml b/packages/CarSystemUI/res/layout/sysui_overlay_window.xml index e7295aa6383d..3d6085c55b5b 100644 --- a/packages/CarSystemUI/res/layout/sysui_overlay_window.xml +++ b/packages/CarSystemUI/res/layout/sysui_overlay_window.xml @@ -22,25 +22,29 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + <com.android.car.ui.FocusParkingView + android:layout_width="wrap_content" + android:layout_height="wrap_content"/> + <ViewStub android:id="@+id/notification_panel_stub" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout="@layout/notification_panel_container" - android:layout_marginBottom="@dimen/car_bottom_navigation_bar_height"/> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/notification_panel_container" + android:layout_marginBottom="@dimen/car_bottom_navigation_bar_height"/> <ViewStub android:id="@+id/keyguard_stub" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout="@layout/keyguard_container" /> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/keyguard_container" /> <ViewStub android:id="@+id/fullscreen_user_switcher_stub" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout="@layout/car_fullscreen_user_switcher"/> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/car_fullscreen_user_switcher"/> <ViewStub android:id="@+id/user_switching_dialog_stub" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout="@layout/car_user_switching_dialog"/> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout="@layout/car_user_switching_dialog"/> </FrameLayout>
\ No newline at end of file diff --git a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java index ec018f9bb62e..53d2320b3f9f 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/keyguard/CarKeyguardViewController.java @@ -148,6 +148,11 @@ public class CarKeyguardViewController extends OverlayViewController implements } @Override + protected int getFocusAreaViewId() { + return R.id.keyguard_container; + } + + @Override protected boolean shouldShowNavigationBarInsets() { return true; } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java index 7b81974e8ec1..d7d7f53eb46d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/notification/NotificationPanelViewController.java @@ -219,6 +219,11 @@ public class NotificationPanelViewController extends OverlayPanelViewController } @Override + protected int getFocusAreaViewId() { + return R.id.notification_container; + } + + @Override protected boolean shouldShowNavigationBarInsets() { return true; } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java index 5fc7299f68c5..dd59efa7b0b2 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/userswitcher/FullScreenUserSwitcherViewController.java @@ -76,7 +76,7 @@ public class FullScreenUserSwitcherViewController extends OverlayViewController } if (event.getAction() == KeyEvent.ACTION_UP && getLayout().isVisibleToUser()) { - getLayout().setVisibility(View.GONE); + stop(); } return true; }); @@ -92,6 +92,11 @@ public class FullScreenUserSwitcherViewController extends OverlayViewController } @Override + protected int getFocusAreaViewId() { + return R.id.user_switcher_container; + } + + @Override protected boolean shouldFocusWindow() { return true; } diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java index 8adc1adcc41c..7bc17765d9fc 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewController.java @@ -17,12 +17,17 @@ package com.android.systemui.car.window; import static android.view.WindowInsets.Type.statusBars; +import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.view.WindowInsets; +import androidx.annotation.IdRes; + +import com.android.car.ui.FocusArea; + /** * Owns a {@link View} that is present in SystemUIOverlayWindow. */ @@ -128,6 +133,66 @@ public class OverlayViewController { return mOverlayViewGlobalStateController; } + /** Returns whether the view controlled by this controller is visible. */ + public final boolean isVisible() { + return mLayout.getVisibility() == View.VISIBLE; + } + + /** + * Returns the ID of the focus area that should receive focus when this view is the + * topmost view or {@link View#NO_ID} if there is no focus area. + */ + @IdRes + protected int getFocusAreaViewId() { + return View.NO_ID; + } + + /** Returns whether the view controlled by this controller has rotary focus. */ + protected final boolean hasRotaryFocus() { + return !mLayout.isInTouchMode() && mLayout.hasFocus(); + } + + /** + * Sets whether this view allows rotary focus. This should be set to {@code true} for the + * topmost layer in the overlay window and {@code false} for the others. + */ + public void setAllowRotaryFocus(boolean allowRotaryFocus) { + if (!isInflated()) { + return; + } + + if (!(mLayout instanceof ViewGroup)) { + return; + } + + ViewGroup viewGroup = (ViewGroup) mLayout; + viewGroup.setDescendantFocusability(allowRotaryFocus + ? ViewGroup.FOCUS_BEFORE_DESCENDANTS + : ViewGroup.FOCUS_BLOCK_DESCENDANTS); + } + + /** + * Refreshes the rotary focus in this view if we are in rotary mode. If the view already has + * rotary focus, it leaves the focus alone. Returns {@code true} if a new view was focused. + */ + public boolean refreshRotaryFocusIfNeeded() { + if (mLayout.isInTouchMode()) { + return false; + } + + if (hasRotaryFocus()) { + return false; + } + + View view = mLayout.findViewById(getFocusAreaViewId()); + if (view == null || !(view instanceof FocusArea)) { + return mLayout.requestFocus(); + } + + FocusArea focusArea = (FocusArea) view; + return focusArea.performAccessibilityAction(ACTION_FOCUS, /* arguments= */ null); + } + /** * Returns {@code true} if heads up notifications should be displayed over this view. */ diff --git a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java index 55f0975aeccf..204dde7e87b7 100644 --- a/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java +++ b/packages/CarSystemUI/src/com/android/systemui/car/window/OverlayViewGlobalStateController.java @@ -29,6 +29,7 @@ import androidx.annotation.VisibleForTesting; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -120,6 +121,7 @@ public class OverlayViewGlobalStateController { refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); + refreshRotaryFocusIfNeeded(); Log.d(TAG, "Content shown: " + viewController.getClass().getName()); debugLog(); @@ -193,6 +195,7 @@ public class OverlayViewGlobalStateController { refreshWindowFocus(); refreshNavigationBarVisibility(); refreshStatusBarVisibility(); + refreshRotaryFocusIfNeeded(); if (mZOrderVisibleSortedMap.isEmpty()) { setWindowVisible(false); @@ -254,6 +257,17 @@ public class OverlayViewGlobalStateController { } } + private void refreshRotaryFocusIfNeeded() { + for (OverlayViewController controller : mZOrderVisibleSortedMap.values()) { + boolean isTop = Objects.equals(controller, mHighestZOrder); + controller.setAllowRotaryFocus(isTop); + } + + if (!mZOrderVisibleSortedMap.isEmpty()) { + mHighestZOrder.refreshRotaryFocusIfNeeded(); + } + } + /** Returns {@code true} is the window is visible. */ public boolean isWindowVisible() { return mSystemUIOverlayWindowController.isWindowVisible(); diff --git a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java index c9ec34fd5f08..bbab4388f17d 100644 --- a/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java +++ b/packages/CarSystemUI/src/com/android/systemui/wm/DisplaySystemBarsController.java @@ -16,12 +16,14 @@ package com.android.systemui.wm; +import android.content.Context; import android.os.Handler; import android.os.RemoteException; import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; +import android.view.IWindowManager; import android.view.InsetsController; import android.view.InsetsSourceControl; import android.view.InsetsState; @@ -48,30 +50,32 @@ public class DisplaySystemBarsController extends DisplayImeController { private static final String TAG = "DisplaySystemBarsController"; + private final Context mContext; + private final Handler mHandler; + private SparseArray<PerDisplay> mPerDisplaySparseArray; @Inject public DisplaySystemBarsController( - SystemWindows syswin, + Context context, + IWindowManager wmService, DisplayController displayController, @Main Handler mainHandler, TransactionPool transactionPool) { - super(syswin, displayController, mainHandler, transactionPool); + super(wmService, displayController, mainHandler::post, transactionPool); + mContext = context; + mHandler = mainHandler; } @Override public void onDisplayAdded(int displayId) { PerDisplay pd = new PerDisplay(displayId); - try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); - } catch (RemoteException e) { - Slog.w(TAG, "Unable to set insets controller on display " + displayId); - } + pd.register(); // Lazy loading policy control filters instead of during boot. if (mPerDisplaySparseArray == null) { mPerDisplaySparseArray = new SparseArray<>(); - BarControlPolicy.reloadFromSetting(mSystemWindows.mContext); - BarControlPolicy.registerContentObserver(mSystemWindows.mContext, mHandler, () -> { + BarControlPolicy.reloadFromSetting(mContext); + BarControlPolicy.registerContentObserver(mContext, mHandler, () -> { int size = mPerDisplaySparseArray.size(); for (int i = 0; i < size; i++) { mPerDisplaySparseArray.valueAt(i).modifyDisplayWindowInsets(); @@ -84,7 +88,7 @@ public class DisplaySystemBarsController extends DisplayImeController { @Override public void onDisplayRemoved(int displayId) { try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); + mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } @@ -100,11 +104,10 @@ public class DisplaySystemBarsController extends DisplayImeController { String mPackageName; PerDisplay(int displayId) { - super(displayId, - mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); + super(displayId, mDisplayController.getDisplayLayout(displayId).rotation()); mDisplayId = displayId; mInsetsController = new InsetsController( - new DisplaySystemBarsInsetsControllerHost(mHandler, this)); + new DisplaySystemBarsInsetsControllerHost(mHandler, mInsetsControllerImpl)); } @Override @@ -166,7 +169,7 @@ public class DisplaySystemBarsController extends DisplayImeController { showInsets(barVisibilities[0], /* fromIme= */ false); hideInsets(barVisibilities[1], /* fromIme= */ false); try { - mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); + mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { Slog.w(TAG, "Unable to update window manager service."); } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java index 294aa0d3cf9b..d97b2329350f 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/car/window/OverlayViewGlobalStateControllerTest.java @@ -215,6 +215,16 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { } @Test + public void showView_nothingAlreadyShown_newHighestZOrder_isVisible() { + setupOverlayViewController1(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + assertThat(mOverlayViewGlobalStateController.mZOrderVisibleSortedMap.containsKey( + OVERLAY_VIEW_CONTROLLER_1_Z_ORDER)).isTrue(); + } + + @Test public void showView_nothingAlreadyShown_newHighestZOrder() { setupOverlayViewController1(); @@ -225,13 +235,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { } @Test - public void showView_nothingAlreadyShown_newHighestZOrder_isVisible() { + public void showView_nothingAlreadyShown_descendantsFocusable() { setupOverlayViewController1(); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); - assertThat(mOverlayViewGlobalStateController.mZOrderVisibleSortedMap.containsKey( - OVERLAY_VIEW_CONTROLLER_1_Z_ORDER)).isTrue(); + verify(mOverlayViewController1).setAllowRotaryFocus(true); } @Test @@ -332,6 +341,30 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { } @Test + public void showView_newHighestZOrder_topDescendantsFocusable() { + setupOverlayViewController1(); + setOverlayViewControllerAsShowing(mOverlayViewController1); + setupOverlayViewController2(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); + + verify(mOverlayViewController1).setAllowRotaryFocus(false); + verify(mOverlayViewController2).setAllowRotaryFocus(true); + } + + @Test + public void showView_newHighestZOrder_refreshTopFocus() { + setupOverlayViewController1(); + setOverlayViewControllerAsShowing(mOverlayViewController1); + setupOverlayViewController2(); + + mOverlayViewGlobalStateController.showView(mOverlayViewController2, mRunnable); + + verify(mOverlayViewController1, never()).refreshRotaryFocusIfNeeded(); + verify(mOverlayViewController2).refreshRotaryFocusIfNeeded(); + } + + @Test public void showView_oldHighestZOrder() { setupOverlayViewController2(); setOverlayViewControllerAsShowing(mOverlayViewController2); @@ -345,9 +378,9 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarsHidden() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -360,11 +393,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarsShown() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -374,9 +408,9 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarsHidden() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -389,11 +423,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { @Test public void showView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarsShown() { setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); - setOverlayViewControllerAsShowing(mOverlayViewController2); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); @@ -426,6 +461,30 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { } @Test + public void showView_oldHighestZOrder_topDescendantsFocusable() { + setupOverlayViewController1(); + setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mOverlayViewController1).setAllowRotaryFocus(false); + verify(mOverlayViewController2).setAllowRotaryFocus(true); + } + + @Test + public void showView_oldHighestZOrder_refreshTopFocus() { + setupOverlayViewController1(); + setupOverlayViewController2(); + setOverlayViewControllerAsShowing(mOverlayViewController2); + + mOverlayViewGlobalStateController.showView(mOverlayViewController1, mRunnable); + + verify(mOverlayViewController1, never()).refreshRotaryFocusIfNeeded(); + verify(mOverlayViewController2).refreshRotaryFocusIfNeeded(); + } + + @Test public void showView_somethingAlreadyShown_windowVisibleNotCalled() { setupOverlayViewController1(); setOverlayViewControllerAsShowing(mOverlayViewController1); @@ -577,10 +636,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_newHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -593,10 +652,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_newHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowNavigationBarInsets()).thenReturn(true); reset(mWindowInsetsController); @@ -609,10 +668,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_newHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -625,10 +684,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_newHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController1.shouldShowStatusBarInsets()).thenReturn(true); reset(mWindowInsetsController); @@ -668,10 +727,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_oldHighestZOrder_shouldShowNavBarFalse_navigationBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -684,11 +743,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_oldHighestZOrder_shouldShowNavBarTrue_navigationBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowNavigationBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -699,10 +759,10 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_oldHighestZOrder_shouldShowStatusBarFalse_statusBarHidden() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(false); reset(mWindowInsetsController); @@ -715,11 +775,12 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { public void hideView_oldHighestZOrder_shouldShowStatusBarTrue_statusBarShown() { setupOverlayViewController1(); setupOverlayViewController2(); - when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); - when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); setOverlayViewControllerAsShowing(mOverlayViewController1); setOverlayViewControllerAsShowing(mOverlayViewController2); + when(mOverlayViewController1.shouldFocusWindow()).thenReturn(true); + when(mOverlayViewController2.shouldFocusWindow()).thenReturn(true); when(mOverlayViewController2.shouldShowStatusBarInsets()).thenReturn(true); + reset(mWindowInsetsController); mOverlayViewGlobalStateController.hideView(mOverlayViewController1, mRunnable); @@ -917,7 +978,11 @@ public class OverlayViewGlobalStateControllerTest extends SysuiTestCase { private void setOverlayViewControllerAsShowing(OverlayViewController overlayViewController) { mOverlayViewGlobalStateController.showView(overlayViewController, /* show= */ null); + View layout = overlayViewController.getLayout(); reset(mSystemUIOverlayWindowController); + reset(overlayViewController); when(mSystemUIOverlayWindowController.getBaseLayout()).thenReturn(mBaseLayout); + when(overlayViewController.getLayout()).thenReturn(layout); + when(overlayViewController.isInflated()).thenReturn(true); } } diff --git a/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java b/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java index 29cc8eec4bc3..765a4e7900b5 100644 --- a/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java +++ b/packages/CarSystemUI/tests/src/com/android/systemui/wm/DisplaySystemBarsControllerTest.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.car.settings.CarSettings; import android.os.Handler; @@ -29,6 +30,7 @@ import android.provider.Settings; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.IWindowManager; +import android.view.Surface; import androidx.test.filters.SmallTest; @@ -60,15 +62,20 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { private Handler mHandler; @Mock private TransactionPool mTransactionPool; + @Mock + private DisplayLayout mDisplayLayout; @Before public void setUp() { MockitoAnnotations.initMocks(this); mSystemWindows.mContext = mContext; mSystemWindows.mWmService = mIWindowManager; + when(mDisplayLayout.rotation()).thenReturn(Surface.ROTATION_0); + when(mDisplayController.getDisplayLayout(DISPLAY_ID)).thenReturn(mDisplayLayout); mController = new DisplaySystemBarsController( - mSystemWindows, + mContext, + mIWindowManager, mDisplayController, mHandler, mTransactionPool @@ -81,7 +88,8 @@ public class DisplaySystemBarsControllerTest extends SysuiTestCase { mController.onDisplayAdded(DISPLAY_ID); verify(mIWindowManager).setDisplayWindowInsetsController( - eq(DISPLAY_ID), any(DisplaySystemBarsController.PerDisplay.class)); + eq(DISPLAY_ID), + any(DisplayImeController.PerDisplay.DisplayWindowInsetsControllerImpl.class)); } @Test diff --git a/packages/InputDevices/res/values-eu/strings.xml b/packages/InputDevices/res/values-eu/strings.xml index 18d3eb745574..fe4110aa2614 100644 --- a/packages/InputDevices/res/values-eu/strings.xml +++ b/packages/InputDevices/res/values-eu/strings.xml @@ -38,9 +38,9 @@ <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabiarra"</string> <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greziarra"</string> <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrearra"</string> - <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituaniera"</string> - <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espainiera (Latinoamerika)"</string> - <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letoniera"</string> + <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituaniarra"</string> + <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espainiarra (Latinoamerika)"</string> + <string name="keyboard_layout_latvian" msgid="4405417142306250595">"Letoniarra"</string> <string name="keyboard_layout_persian" msgid="3920643161015888527">"Persiarra"</string> <string name="keyboard_layout_azerbaijani" msgid="7315895417176467567">"Azerbaijandarra"</string> <string name="keyboard_layout_polish" msgid="1121588624094925325">"Poloniarra"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 36230e0be18c..d99961434f2f 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -58,7 +58,7 @@ <string name="always_use_device" msgid="210535878779644679">"Abrir siempre <xliff:g id="APPLICATION">%1$s</xliff:g> cuando se conecte <xliff:g id="USB_DEVICE">%2$s</xliff:g>"</string> <string name="always_use_accessory" msgid="1977225429341838444">"Abrir siempre <xliff:g id="APPLICATION">%1$s</xliff:g> cuando se conecte <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>"</string> <string name="usb_debugging_title" msgid="8274884945238642726">"¿Permitir depuración por USB?"</string> - <string name="usb_debugging_message" msgid="5794616114463921773">"La huella digital de tu clave RSA es:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> + <string name="usb_debugging_message" msgid="5794616114463921773">"La huella dactilar de tu clave RSA es:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> <string name="usb_debugging_always" msgid="4003121804294739548">"Permitir siempre desde esta computadora"</string> <string name="usb_debugging_allow" msgid="1722643858015321328">"Permitir"</string> <string name="usb_debugging_secondary_user_title" msgid="7843050591380107998">"No tienes permitida la depuración por USB"</string> @@ -128,8 +128,8 @@ <string name="accessibility_phone_button" msgid="4256353121703100427">"Teléfono"</string> <string name="accessibility_voice_assist_button" msgid="6497706615649754510">"Asistente voz"</string> <string name="accessibility_unlock_button" msgid="122785427241471085">"Desbloquear"</string> - <string name="accessibility_waiting_for_fingerprint" msgid="5209142744692162598">"Esperando huella digital"</string> - <string name="accessibility_unlock_without_fingerprint" msgid="1811563723195375298">"Desbloquear sin utilizar la huella digital"</string> + <string name="accessibility_waiting_for_fingerprint" msgid="5209142744692162598">"Esperando huella dactilar"</string> + <string name="accessibility_unlock_without_fingerprint" msgid="1811563723195375298">"Desbloquear sin utilizar la huella dactilar"</string> <string name="accessibility_scanning_face" msgid="3093828357921541387">"Escaneando rostro"</string> <string name="accessibility_send_smart_reply" msgid="8885032190442015141">"Enviar"</string> <string name="accessibility_manage_notification" msgid="582215815790143983">"Administrar notificaciones"</string> @@ -168,8 +168,8 @@ <string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"Hubo demasiados intentos incorrectos. Se borrará este usuario."</string> <string name="biometric_dialog_failed_attempts_now_wiping_profile" msgid="5239378521440749682">"Hubo demasiados intentos incorrectos. Se borrarán este perfil de trabajo y sus datos."</string> <string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Descartar"</string> - <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca el sensor de huellas digitales"</string> - <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Ícono de huella digital"</string> + <string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Toca el sensor de huellas dactilares"</string> + <string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Ícono de huella dactilar"</string> <string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Autenticando tu rostro…"</string> <string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"Ícono de rostro"</string> <string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"Botón de zoom de compatibilidad"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index af9a11635cac..514e60b3ecd7 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -997,7 +997,7 @@ <string name="privacy_type_camera" msgid="7974051382167078332">"տեսախցիկը"</string> <string name="privacy_type_location" msgid="7991481648444066703">"վայրը"</string> <string name="privacy_type_microphone" msgid="9136763906797732428">"խոսափողը"</string> - <string name="sensor_privacy_mode" msgid="4462866919026513692">"Տվիչներն անջատած են"</string> + <string name="sensor_privacy_mode" msgid="4462866919026513692">"Տվիչներն անջատված են"</string> <string name="device_services" msgid="1549944177856658705">"Սարքի ծառայություններ"</string> <string name="music_controls_no_title" msgid="4166497066552290938">"Անանուն"</string> <string name="restart_button_description" msgid="6916116576177456480">"Հպեք՝ հավելվածը վերագործարկելու և լիաէկրան ռեժիմին անցնելու համար։"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 56709cf683ba..7c64e26136bb 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -718,7 +718,7 @@ <string name="notification_channel_summary_default" msgid="3282930979307248890">"Atkarībā no tālruņa iestatījumiem var zvanīt vai vibrēt"</string> <string name="notification_channel_summary_default_with_bubbles" msgid="1782419896613644568">"Atkarībā no tālruņa iestatījumiem var zvanīt vai vibrēt. Sarunas no lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pēc noklusējuma tiek parādītas burbulī."</string> <string name="notification_channel_summary_bubble" msgid="7235935211580860537">"Piesaista jūsu uzmanību, rādot peldošu saīsni uz šo saturu."</string> - <string name="notification_channel_summary_priority" msgid="7952654515769021553">"Parādās sarunu sadaļas augšdaļā un kā peldošs burbulis, kā arī bloķēšanas ekrānā tiek rādīts profila attēls"</string> + <string name="notification_channel_summary_priority" msgid="7952654515769021553">"Parādās sarunu sadaļas augšdaļā, arī kā peldošs burbulis, profila attēls parādās bloķēšanas ekrānā"</string> <string name="notification_conversation_channel_settings" msgid="2409977688430606835">"Iestatījumi"</string> <string name="notification_priority_title" msgid="2079708866333537093">"Prioritārs"</string> <string name="no_shortcut" msgid="8257177117568230126">"Lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> netiek atbalstītas sarunu funkcijas."</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 4367ad123ff0..837c7817f3b3 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -223,7 +223,7 @@ <string name="data_connection_lte" msgid="557021044282539923">"LTE"</string> <string name="data_connection_lte_plus" msgid="4799302403782283178">"LTE+"</string> <string name="data_connection_cdma" msgid="7678457855627313518">"1X"</string> - <string name="data_connection_roaming" msgid="375650836665414797">"ပြင်ပကွန်ရက်နှင့် ချိတ်ဆက်ခြင်း"</string> + <string name="data_connection_roaming" msgid="375650836665414797">"ပြင်ပကွန်ရက်သုံးခြင်း"</string> <string name="data_connection_edge" msgid="6316755666481405762">"EDGE"</string> <string name="accessibility_data_connection_wifi" msgid="4422160347472742434">"Wi-Fi"</string> <string name="accessibility_no_sim" msgid="1140839832913084973">"ဆင်းကဒ်မရှိပါ။"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 8ae1e1a01bf8..9ff77b4fd670 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -833,7 +833,7 @@ <string name="right_nav_bar_button_type" msgid="4472566498647364715">"Loại nút bổ sung bên phải"</string> <string name="nav_bar_default" msgid="8386559913240761526">"(mặc định)"</string> <string-array name="nav_bar_buttons"> - <item msgid="2681220472659720036">"Khay nhớ tạm"</item> + <item msgid="2681220472659720036">"Bảng nhớ tạm"</item> <item msgid="4795049793625565683">"Mã phím"</item> <item msgid="80697951177515644">"Xác nhận xoay, trình chuyển đổi bàn phím"</item> <item msgid="7626977989589303588">"Không có"</item> @@ -848,7 +848,7 @@ <string name="save" msgid="3392754183673848006">"Lưu"</string> <string name="reset" msgid="8715144064608810383">"Đặt lại"</string> <string name="adjust_button_width" msgid="8313444823666482197">"Điều chỉnh chiều rộng nút"</string> - <string name="clipboard" msgid="8517342737534284617">"Khay nhớ tạm"</string> + <string name="clipboard" msgid="8517342737534284617">"Bảng nhớ tạm"</string> <string name="accessibility_key" msgid="3471162841552818281">"Nút điều hướng tùy chỉnh"</string> <string name="left_keycode" msgid="8211040899126637342">"Mã phím bên trái"</string> <string name="right_keycode" msgid="2480715509844798438">"Mã phím bên phải"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 010f954059a9..d54b0ae92a1c 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -71,7 +71,7 @@ <string name="wifi_debugging_secondary_user_message" msgid="4492383073970079751">"目前登入這部裝置的使用者無法開啟無線偵錯功能。如要使用這項功能,請切換到主要使用者。"</string> <string name="usb_contaminant_title" msgid="894052515034594113">"USB 連接埠已停用"</string> <string name="usb_contaminant_message" msgid="7730476585174719805">"為了避免液體或灰塵導致你的裝置受損,系統已停用 USB 連接埠,因此目前無法偵測任何配件。\n\n系統會在可繼續使用 USB 連接埠時通知你。"</string> - <string name="usb_port_enabled" msgid="531823867664717018">"USB 通訊埠已啟用,可偵測充電器和配件"</string> + <string name="usb_port_enabled" msgid="531823867664717018">"USB 連接埠已啟用,可偵測充電器和配件"</string> <string name="usb_disable_contaminant_detection" msgid="3827082183595978641">"啟用 USB 連接埠"</string> <string name="learn_more" msgid="4690632085667273811">"瞭解詳情"</string> <string name="compat_mode_on" msgid="4963711187149440884">"放大為全螢幕"</string> diff --git a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java index ab4da83518e4..20e09a2df1cb 100644 --- a/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java +++ b/packages/SystemUI/src/com/android/systemui/wm/DisplayImeController.java @@ -24,12 +24,12 @@ import android.content.Context; import android.content.res.Configuration; import android.graphics.Point; import android.graphics.Rect; -import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import android.util.SparseArray; import android.view.IDisplayWindowInsetsController; +import android.view.IWindowManager; import android.view.InsetsSource; import android.view.InsetsSourceControl; import android.view.InsetsState; @@ -39,11 +39,15 @@ import android.view.WindowInsets; import android.view.animation.Interpolator; import android.view.animation.PathInterpolator; +import androidx.annotation.BinderThread; +import androidx.annotation.VisibleForTesting; + import com.android.internal.view.IInputMethodManager; import com.android.systemui.TransactionPool; import com.android.systemui.dagger.qualifiers.Main; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Singleton; @@ -66,20 +70,22 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private static final int DIRECTION_HIDE = 2; private static final int FLOATING_IME_BOTTOM_INSET = -80; - SystemWindows mSystemWindows; - final Handler mHandler; + protected final IWindowManager mWmService; + protected final Executor mMainExecutor; final TransactionPool mTransactionPool; + final DisplayController mDisplayController; final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>(); final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>(); @Inject - public DisplayImeController(SystemWindows syswin, DisplayController displayController, - @Main Handler mainHandler, TransactionPool transactionPool) { - mHandler = mainHandler; - mSystemWindows = syswin; + public DisplayImeController(IWindowManager wmService, DisplayController displayController, + @Main Executor mainExecutor, TransactionPool transactionPool) { + mWmService = wmService; + mMainExecutor = mainExecutor; mTransactionPool = transactionPool; + mDisplayController = displayController; displayController.addDisplayWindowListener(this); } @@ -88,12 +94,8 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // Add's a system-ui window-manager specifically for ime. This type is special because // WM will defer IME inset handling to it in multi-window scenarious. PerDisplay pd = new PerDisplay(displayId, - mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation()); - try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, pd); - } catch (RemoteException e) { - Slog.w(TAG, "Unable to set insets controller on display " + displayId); - } + mDisplayController.getDisplayLayout(displayId).rotation()); + pd.register(); mImePerDisplay.put(displayId, pd); } @@ -103,7 +105,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged if (pd == null) { return; } - if (mSystemWindows.mDisplayController.getDisplayLayout(displayId).rotation() + if (mDisplayController.getDisplayLayout(displayId).rotation() != pd.mRotation && isImeShowing(displayId)) { pd.startAnimation(true, false /* forceRestart */); } @@ -112,7 +114,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged @Override public void onDisplayRemoved(int displayId) { try { - mSystemWindows.mWmService.setDisplayWindowInsetsController(displayId, null); + mWmService.setDisplayWindowInsetsController(displayId, null); } catch (RemoteException e) { Slog.w(TAG, "Unable to remove insets controller on display " + displayId); } @@ -180,9 +182,12 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged } } - class PerDisplay extends IDisplayWindowInsetsController.Stub { + /** An implementation of {@link IDisplayWindowInsetsController} for a given display id. */ + public class PerDisplay { final int mDisplayId; final InsetsState mInsetsState = new InsetsState(); + protected final DisplayWindowInsetsControllerImpl mInsetsControllerImpl = + new DisplayWindowInsetsControllerImpl(); InsetsSourceControl mImeSourceControl = null; int mAnimationDirection = DIRECTION_NONE; ValueAnimator mAnimation = null; @@ -196,28 +201,32 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged mRotation = initialRotation; } - @Override + public void register() { + try { + mWmService.setDisplayWindowInsetsController(mDisplayId, mInsetsControllerImpl); + } catch (RemoteException e) { + Slog.w(TAG, "Unable to set insets controller on display " + mDisplayId); + } + } + public void insetsChanged(InsetsState insetsState) { - mHandler.post(() -> { - if (mInsetsState.equals(insetsState)) { - return; - } + if (mInsetsState.equals(insetsState)) { + return; + } - mImeShowing = insetsState.getSourceOrDefaultVisibility(InsetsState.ITYPE_IME); + mImeShowing = insetsState.getSourceOrDefaultVisibility(InsetsState.ITYPE_IME); - final InsetsSource newSource = insetsState.getSource(InsetsState.ITYPE_IME); - final Rect newFrame = newSource.getFrame(); - final Rect oldFrame = mInsetsState.getSource(InsetsState.ITYPE_IME).getFrame(); + final InsetsSource newSource = insetsState.getSource(InsetsState.ITYPE_IME); + final Rect newFrame = newSource.getFrame(); + final Rect oldFrame = mInsetsState.getSource(InsetsState.ITYPE_IME).getFrame(); - mInsetsState.set(insetsState, true /* copySources */); - if (mImeShowing && !newFrame.equals(oldFrame) && newSource.isVisible()) { - if (DEBUG) Slog.d(TAG, "insetsChanged when IME showing, restart animation"); - startAnimation(mImeShowing, true /* forceRestart */); - } - }); + mInsetsState.set(insetsState, true /* copySources */); + if (mImeShowing && !newFrame.equals(oldFrame) && newSource.isVisible()) { + if (DEBUG) Slog.d(TAG, "insetsChanged when IME showing, restart animation"); + startAnimation(mImeShowing, true /* forceRestart */); + } } - @Override public void insetsControlChanged(InsetsState insetsState, InsetsSourceControl[] activeControls) { insetsChanged(insetsState); @@ -227,27 +236,25 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged continue; } if (activeControl.getType() == InsetsState.ITYPE_IME) { - mHandler.post(() -> { - final Point lastSurfacePosition = mImeSourceControl != null - ? mImeSourceControl.getSurfacePosition() : null; - final boolean positionChanged = - !activeControl.getSurfacePosition().equals(lastSurfacePosition); - final boolean leashChanged = - !haveSameLeash(mImeSourceControl, activeControl); - mImeSourceControl = activeControl; - if (mAnimation != null) { - if (positionChanged) { - startAnimation(mImeShowing, true /* forceRestart */); - } - } else { - if (leashChanged) { - applyVisibilityToLeash(); - } - if (!mImeShowing) { - removeImeSurface(); - } + final Point lastSurfacePosition = mImeSourceControl != null + ? mImeSourceControl.getSurfacePosition() : null; + final boolean positionChanged = + !activeControl.getSurfacePosition().equals(lastSurfacePosition); + final boolean leashChanged = + !haveSameLeash(mImeSourceControl, activeControl); + mImeSourceControl = activeControl; + if (mAnimation != null) { + if (positionChanged) { + startAnimation(mImeShowing, true /* forceRestart */); + } + } else { + if (leashChanged) { + applyVisibilityToLeash(); } - }); + if (!mImeShowing) { + removeImeSurface(); + } + } } } } @@ -267,25 +274,22 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged } } - @Override public void showInsets(int types, boolean fromIme) { if ((types & WindowInsets.Type.ime()) == 0) { return; } if (DEBUG) Slog.d(TAG, "Got showInsets for ime"); - mHandler.post(() -> startAnimation(true /* show */, false /* forceRestart */)); + startAnimation(true /* show */, false /* forceRestart */); } - @Override public void hideInsets(int types, boolean fromIme) { if ((types & WindowInsets.Type.ime()) == 0) { return; } if (DEBUG) Slog.d(TAG, "Got hideInsets for ime"); - mHandler.post(() -> startAnimation(false /* show */, false /* forceRestart */)); + startAnimation(false /* show */, false /* forceRestart */); } - @Override public void topFocusedWindowChanged(String packageName) { // no-op } @@ -296,7 +300,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged private void setVisibleDirectly(boolean visible) { mInsetsState.getSource(InsetsState.ITYPE_IME).setVisible(visible); try { - mSystemWindows.mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); + mWmService.modifyDisplayWindowInsets(mDisplayId, mInsetsState); } catch (RemoteException e) { } } @@ -315,7 +319,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // an IME inset). For now, we assume that no non-floating IME will be <= this nav bar // frame height so any reported frame that is <= nav-bar frame height is assumed to // be floating. - return frame.height() <= mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId) + return frame.height() <= mDisplayController.getDisplayLayout(mDisplayId) .navBarFrameHeight(); } @@ -331,7 +335,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged // pretend the ime has some size just below the screen. mImeFrame.set(newFrame); final int floatingInset = (int) ( - mSystemWindows.mDisplayController.getDisplayLayout(mDisplayId).density() + mDisplayController.getDisplayLayout(mDisplayId).density() * FLOATING_IME_BOTTOM_INSET); mImeFrame.bottom -= floatingInset; } else if (newFrame.height() != 0) { @@ -448,6 +452,47 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged setVisibleDirectly(true /* visible */); } } + + @VisibleForTesting + @BinderThread + public class DisplayWindowInsetsControllerImpl + extends IDisplayWindowInsetsController.Stub { + @Override + public void topFocusedWindowChanged(String packageName) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.topFocusedWindowChanged(packageName); + }); + } + + @Override + public void insetsChanged(InsetsState insetsState) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.insetsChanged(insetsState); + }); + } + + @Override + public void insetsControlChanged(InsetsState insetsState, + InsetsSourceControl[] activeControls) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.insetsControlChanged(insetsState, activeControls); + }); + } + + @Override + public void showInsets(int types, boolean fromIme) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.showInsets(types, fromIme); + }); + } + + @Override + public void hideInsets(int types, boolean fromIme) throws RemoteException { + mMainExecutor.execute(() -> { + PerDisplay.this.hideInsets(types, fromIme); + }); + } + } } void removeImeSurface() { diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 27c3ff1b4c09..2e04f9c2bcd1 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -3071,7 +3071,8 @@ public class AccountManagerService .setContentTitle(title) .setContentText(subtitle) .setContentIntent(PendingIntent.getActivityAsUser(mContext, 0, intent, - PendingIntent.FLAG_CANCEL_CURRENT, null, user)) + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, + null, user)) .build(); installNotification(getCredentialPermissionNotificationId( account, authTokenType, uid), n, packageName, user.getIdentifier()); @@ -5293,7 +5294,8 @@ public class AccountManagerService .setContentTitle(String.format(notificationTitleFormat, account.name)) .setContentText(message) .setContentIntent(PendingIntent.getActivityAsUser( - mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, + mContext, 0, intent, + PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE, null, new UserHandle(userId))) .build(); installNotification(id, n, packageName, userId); |