diff --git a/core/java/android/security/trickystore/TrickyStoreService.java b/core/java/android/security/trickystore/TrickyStoreService.java
index dbb6eb3c609b7..5057b59f39fdd 100644
--- a/core/java/android/security/trickystore/TrickyStoreService.java
+++ b/core/java/android/security/trickystore/TrickyStoreService.java
@@ -51,6 +51,8 @@ public class TrickyStoreService {
private volatile Boolean mTeeBroken = null;
private volatile long mLastRevocationCheckMs = 0L;
+ private volatile long mLastTargetsRefreshMs = 0L;
+ private static final long TARGETS_REFRESH_COOLDOWN_MS = 5_000L;
private static final long REVOCATION_CHECK_COOLDOWN_MS = 24 * 60 * 60 * 1000L;
private volatile CustomPatchLevel mCustomPatchLevel = null;
private volatile String mLastKeyboxFingerprint = null;
@@ -461,7 +463,7 @@ private boolean checkTeeBroken() {
public boolean needHack(int callingUid, String[] packages) {
if (packages == null) return false;
- refreshTargets();
+ maybeRefreshTargets();
ensureTeeStatus();
for (String pkg : packages) {
Mode mode = mPackageModes.get(pkg);
@@ -473,7 +475,7 @@ public boolean needHack(int callingUid, String[] packages) {
public boolean needGenerate(int callingUid, String[] packages) {
if (packages == null) return false;
- refreshTargets();
+ maybeRefreshTargets();
ensureTeeStatus();
for (String pkg : packages) {
Mode mode = mPackageModes.get(pkg);
@@ -483,6 +485,14 @@ public boolean needGenerate(int callingUid, String[] packages) {
return false;
}
+ private void maybeRefreshTargets() {
+ long now = System.currentTimeMillis();
+ if (now - mLastTargetsRefreshMs >= TARGETS_REFRESH_COOLDOWN_MS) {
+ mLastTargetsRefreshMs = now;
+ refreshTargets();
+ }
+ }
+
public KeyBoxManager getKeyBoxManager() {
refreshKeyBox();
return mKeyBoxManager;
diff --git a/core/res/res/values-ar-rSA/cr_strings.xml b/core/res/res/values-ar-rSA/cr_strings.xml
index becad2ce67d89..89f5fc0a2cddb 100644
--- a/core/res/res/values-ar-rSA/cr_strings.xml
+++ b/core/res/res/values-ar-rSA/cr_strings.xml
@@ -8,6 +8,12 @@
نسخ رابط سجل العُطل
تم نسخ الرابط بنجاح
حدث خطأ أثناء نسخ رابط السجل
+
+ مرر مجدداً لفتح الإيماءات
+
+ أضيفت %s إلى GameSpace
+
+ افتح %1$s
وضع الجيب نشط
رسم توضيحي للهاتف في الجيب
@@ -16,6 +22,4 @@
2. اضغط مع الاستمرار على زر الطاقة للخروج من وضع الجيب.
المكالمات والإشعارات ستصدر رنيناً
-
- أضيفت %s إلى GameSpace
diff --git a/core/res/res/values-az-rAZ/cr_strings.xml b/core/res/res/values-az-rAZ/cr_strings.xml
index 069398eaa15fb..488a8805c8544 100644
--- a/core/res/res/values-az-rAZ/cr_strings.xml
+++ b/core/res/res/values-az-rAZ/cr_strings.xml
@@ -8,6 +8,12 @@
Çökmə jurnal URL-sini kopyala
URL uğurla kopyalandı
An error occured while uploading the log to Pasty
+
+ Swipe again to unlock gestures
+
+ %s added to GameSpace
+
+ Unlock %1$s
Pocket mode is active
Illustration of phone in pocket
@@ -16,6 +22,4 @@
2. Press and hold the power button to exit pocket mode.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-be-rBY/cr_strings.xml b/core/res/res/values-be-rBY/cr_strings.xml
index a45483546f4f8..cdf5839053f90 100644
--- a/core/res/res/values-be-rBY/cr_strings.xml
+++ b/core/res/res/values-be-rBY/cr_strings.xml
@@ -8,6 +8,12 @@
Капіяваць спасылку журнала памылкі
Спасылка паспяхова скапіявана
Адбылася памылка падчас загрузкі лога на Pasty
+
+ Правядзіце яшчэ раз, каб разблакіраваць жэсты
+
+ %s added to GameSpace
+
+ Разблакіраваць %1$s
Рэжым \"У кішэні\" уключаны
Ілюстрацыя тэлефона ў кішэні
@@ -16,6 +22,4 @@
2. Каб выйсці з кішэннага рэжыму, націсніце і ўтрымлівайце кнопку сілкавання.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-bg-rBG/cr_strings.xml b/core/res/res/values-bg-rBG/cr_strings.xml
index 9fb1eb5738a72..bb4d8964ac586 100644
--- a/core/res/res/values-bg-rBG/cr_strings.xml
+++ b/core/res/res/values-bg-rBG/cr_strings.xml
@@ -8,6 +8,12 @@
Копиране на URL адреса на регистъра за сривове
URL aдресът е копиран успешно
Възникна грешка при качването на лога в Pasty
+
+ Плъзни отново да отключиш жестове
+
+ %s е добавен към GameSpace
+
+ Отключи %1$s
Джобен режим е активен
Илюстрация на телефон в джоб
@@ -16,6 +22,4 @@
2. Натисни и задържи копчето за захранване да излезеш от джобния режим.
Повиквания и известия ще звънят
-
- %s е добавен към GameSpace
diff --git a/core/res/res/values-ca-rES/cr_strings.xml b/core/res/res/values-ca-rES/cr_strings.xml
index fc5f1858fcad8..addf3c7d7ce39 100644
--- a/core/res/res/values-ca-rES/cr_strings.xml
+++ b/core/res/res/values-ca-rES/cr_strings.xml
@@ -8,6 +8,12 @@
Copiar URL del registre d\'errors
URL copiada amb èxit
Hi ha hagut un error mentre es carregava el registre a Pasty
+
+ Swipe again to unlock gestures
+
+ %s added to GameSpace
+
+ Desbloqueja %1$s
Pocket mode is active
Illustration of phone in pocket
@@ -16,6 +22,4 @@
2. Press and hold the power button to exit pocket mode.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-cs-rCZ/cr_strings.xml b/core/res/res/values-cs-rCZ/cr_strings.xml
index ade81d01d818b..c078620fcae22 100644
--- a/core/res/res/values-cs-rCZ/cr_strings.xml
+++ b/core/res/res/values-cs-rCZ/cr_strings.xml
@@ -8,6 +8,12 @@
Kopírovat URL protokolu o\u00a0selhání
URL byla úspěšně zkopírována
Při nahrávání protokolu o\u00a0selhání na Pasty došlo k\u00a0chybě
+
+ Opětovným přejetím odemknete gesta
+
+ Aplikace %s byla přidána do GameSpace
+
+ Odemknout %1$s
Režim v kapse je aktivní
Ilustrace telefonu v kapse
@@ -16,6 +22,4 @@
2. Chcete-li ukončit režim v kapse, stiskněte a podržte tlačítko napájení.
Volání a oznámení budou vyzvánět
-
- Aplikace %s byla přidána do GameSpace
diff --git a/core/res/res/values-de-rDE/cr_strings.xml b/core/res/res/values-de-rDE/cr_strings.xml
index 66efbf5fcbff3..ffec92179e701 100644
--- a/core/res/res/values-de-rDE/cr_strings.xml
+++ b/core/res/res/values-de-rDE/cr_strings.xml
@@ -8,6 +8,12 @@
URL des Absturzberichts kopieren
URL erfolgreich kopiert
Beim Hochladen des Absturzberichts zu Pasty ist ein Fehler aufgetreten
+
+ Erneut wischen, um Gesten zu verwenden
+
+ %s wurde dem Spielmodus hinzugefügt
+
+ %1$s entsperren
Taschenmodus aktiv
Abbildung des Telefons in der Tasche
@@ -16,6 +22,4 @@
2. Ein-/Austaste gedrückt halten zum Beenden des Taschenmodus.
Bei Anrufen und Benachrichtigungen klingeln
-
- %s wurde dem Spielmodus hinzugefügt
diff --git a/core/res/res/values-el-rGR/cr_strings.xml b/core/res/res/values-el-rGR/cr_strings.xml
index 326208455aae4..49b70f276290c 100644
--- a/core/res/res/values-el-rGR/cr_strings.xml
+++ b/core/res/res/values-el-rGR/cr_strings.xml
@@ -8,6 +8,12 @@
Αντιγραφή διεύθυνσης URL σφάλματος
Το URL αντιγράφηκε με επιτυχία
Παρουσιάστηκε σφάλμα κατά τη μεταφόρτωση του αρχείου καταγραφής στο Pasty
+
+ Σύρετε ξανά για να ξεκλειδώσετε τις χειρονομίες
+
+ %s προστέθηκε στο Χώρο Παιχνιδιού
+
+ Ξεκλείδωμα %1$s
Η λειτουργία τσέπης είναι ενεργή
Απεικόνιση του τηλεφώνου στην τσέπη
@@ -16,6 +22,4 @@
2. Πατήστε και κρατήστε πατημένο το κουμπί τροφοδοσίας για να βγείτε από τη λειτουργία τσέπης.
Οι κλήσεις και οι ειδοποιήσεις θα ηχούν
-
- %s προστέθηκε στο Χώρο Παιχνιδιού
diff --git a/core/res/res/values-es-rES/cr_strings.xml b/core/res/res/values-es-rES/cr_strings.xml
index d0bc0eecf7414..a8973cb1020e4 100644
--- a/core/res/res/values-es-rES/cr_strings.xml
+++ b/core/res/res/values-es-rES/cr_strings.xml
@@ -8,6 +8,12 @@
Copiar URL del registro de errores
URL copiada satisfactoriamente
Se ha producido un error cargando el registro a Pasty
+
+ Desliza nuevamente para desbloquear los gestos
+
+ %s añadido a Espacio de Juego
+
+ Desbloquear %1$s
Modo juego activado
Ilustración del teléfono en el bolsillo
@@ -16,6 +22,4 @@
2. Presiona y mantén el botón de encendido para salir del modo bolsillo.
Sonarán las llamadas y las notificaciones
-
- %s añadido a Espacio de Juego
diff --git a/core/res/res/values-et-rEE/cr_strings.xml b/core/res/res/values-et-rEE/cr_strings.xml
index fdb03de05dc2a..62cb68741a1a8 100644
--- a/core/res/res/values-et-rEE/cr_strings.xml
+++ b/core/res/res/values-et-rEE/cr_strings.xml
@@ -8,6 +8,12 @@
Kopeeri rikke logi URL
URL kopeeritud
Logi Pasty\'sse üleslaadimisel esines viga
+
+ Liigutuste avamiseks pühkige uuesti
+
+ %s added to GameSpace
+
+ Lukusta %1$s lahti
Taskurežiim on sees
Taskus oleva telefoni illustratsioon
@@ -16,6 +22,4 @@
2. Vajuta ja hoia toitenuppu, et väljuda tasku režiimist.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-fa-rIR/cr_strings.xml b/core/res/res/values-fa-rIR/cr_strings.xml
index def8dac433c0a..bfeabb76e7581 100644
--- a/core/res/res/values-fa-rIR/cr_strings.xml
+++ b/core/res/res/values-fa-rIR/cr_strings.xml
@@ -8,6 +8,12 @@
کپی کردن آدرس گزارش خرابی
آدرس با موفقیت کپی شد
هنگام بارگزاری گزارش در Pasty خطایی روی داد
+
+ با کشیدن دوباره، حرکات را فعال کنید
+
+ %s به فضای بازی اضافه شد
+
+ بازگشایی %1$s
حالت جیب فعال است
تصویر گوشی در جیب
@@ -16,6 +22,4 @@
2. دکمه پاور را فشار داده و نگه دارید تا از حالت جیبی خارج شوید.
تماسها و اعلانها زنگ خواهند خورد
-
- %s به فضای بازی اضافه شد
diff --git a/core/res/res/values-fi-rFI/cr_strings.xml b/core/res/res/values-fi-rFI/cr_strings.xml
index f1d13a8dcc529..3c3788ee2bc83 100644
--- a/core/res/res/values-fi-rFI/cr_strings.xml
+++ b/core/res/res/values-fi-rFI/cr_strings.xml
@@ -8,6 +8,12 @@
Kopioi kaatumislokin URL-osoite
URL-osoite kopioitu onnistuneesti
Virhe ladatessa lokia Pasty-palvelimelle
+
+ Swipe again to unlock gestures
+
+ %s added to GameSpace
+
+ Avaa %1$s
Pocket mode is active
Illustration of phone in pocket
@@ -16,6 +22,4 @@
2. Press and hold the power button to exit pocket mode.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-fr-rFR/cr_strings.xml b/core/res/res/values-fr-rFR/cr_strings.xml
index 4091bc1382713..55ef5395097ec 100644
--- a/core/res/res/values-fr-rFR/cr_strings.xml
+++ b/core/res/res/values-fr-rFR/cr_strings.xml
@@ -8,6 +8,12 @@
Copier l\'URL du rapport d\'erreur
URL copiée avec succès
Une erreur est survenue pendant l\'envoi du rapport
+
+ Balayez à nouveau pour déverrouiller les gestes
+
+ %s ajouté au mode immersif
+
+ Déverrouiller %1$s
Le mode poche est activé
Illustration d\'un téléphone dans une poche
@@ -16,6 +22,4 @@
2. Appuyez et maintenez le bouton d\'alimentation pour sortir du mode poche.
Les appels et les notifications sonnent
-
- %s ajouté au mode immersif
diff --git a/core/res/res/values-hu-rHU/cr_strings.xml b/core/res/res/values-hu-rHU/cr_strings.xml
index 5f7e1192649c7..1657584898410 100644
--- a/core/res/res/values-hu-rHU/cr_strings.xml
+++ b/core/res/res/values-hu-rHU/cr_strings.xml
@@ -8,6 +8,12 @@
Az összeomlási napló URL-jének másolása
Az URL sikeresen másolva
Hiba történt a napló Pasty-feltöltése során
+
+ Csúsztasson újból a vezérlések feloldásához
+
+ %s hozzáadva a Játéktérhez
+
+ Feloldja a következőt: %1$s
A Zsebmód aktív
A zsebben lévő telefon illusztrációja
@@ -16,6 +22,4 @@
2. Tartsa lenyomva a bekapcsológombot a Zsebmódból való lkilépéshez.
A hívások és az értesítések rezegni fognak
-
- %s hozzáadva a Játéktérhez
diff --git a/core/res/res/values-in-rID/cr_strings.xml b/core/res/res/values-in-rID/cr_strings.xml
index 16e1026a0aff0..c15f24ec3e58f 100644
--- a/core/res/res/values-in-rID/cr_strings.xml
+++ b/core/res/res/values-in-rID/cr_strings.xml
@@ -8,6 +8,12 @@
Salin URL log kerusakan
URL berhasil disalin
Terjadi kesalahan pada saat mengunggah log ke Pasty
+
+ Usap lagi untuk membuka kunci gestur
+
+ %s ditambahkan ke Ruang Game
+
+ Buka %1$s
Mode saku aktif
Ilustrasi telepon di saku
@@ -16,6 +22,4 @@
2. Tekan dan tahan tombol daya untuk keluar dari mode saku.
Panggilan dan notifikasi akan berdering
-
- %s ditambahkan ke Ruang Game
diff --git a/core/res/res/values-it-rIT/cr_strings.xml b/core/res/res/values-it-rIT/cr_strings.xml
index afb070620b4fb..51d40bed53431 100644
--- a/core/res/res/values-it-rIT/cr_strings.xml
+++ b/core/res/res/values-it-rIT/cr_strings.xml
@@ -8,6 +8,12 @@
Copia l\'URL del log di crash
URL copiato con successo
Si è verificato un errore durante il caricamento del log su pasty
+
+ Scorri di nuovo per sbloccare i gesti
+
+ %s aggiunto a GameSpace
+
+ Sblocca %1$s
La modalità tasca è attiva
Illustrazione del telefono in tasca
@@ -16,6 +22,4 @@
2. Premere e tenere premuto il pulsante di accensione per uscire dalla modalità tasca.
Le chiamate e le notifiche squilleranno
-
- %s aggiunto a GameSpace
diff --git a/core/res/res/values-iw-rIL/cr_strings.xml b/core/res/res/values-iw-rIL/cr_strings.xml
index d7304d6685400..5fcbfc687ff8c 100644
--- a/core/res/res/values-iw-rIL/cr_strings.xml
+++ b/core/res/res/values-iw-rIL/cr_strings.xml
@@ -8,6 +8,12 @@
העתק את הקישור של דוח הקריסה
הקישור הועתק בהצלחה
התרחשה שגיאה במהלך העלאת דו\"ח הקריסה
+
+ החליקו בשנית כדי להתיר מחוות
+
+ %s התווסף ל-GameSpace
+
+ פתיחת הנעילה של %1$s
מצב כיס מופעל
תרשים של טלפון בכיס
@@ -16,6 +22,4 @@
2. ליחצו והחזיקו את כפתור ההפעלה ליציאה ממצב כיס.
שיחות והתראות יצלצלו
-
- %s התווסף ל-GameSpace
diff --git a/core/res/res/values-ja-rJP/cr_strings.xml b/core/res/res/values-ja-rJP/cr_strings.xml
index 05726c57b2b40..1c9e4ee0fc71a 100644
--- a/core/res/res/values-ja-rJP/cr_strings.xml
+++ b/core/res/res/values-ja-rJP/cr_strings.xml
@@ -8,6 +8,12 @@
クラッシュログ URL をコピー
URL をコピーしました
Pasty へのログのアップロード中にエラーが発生しました
+
+ 再度スワイプしてジェスチャーのロックを解除
+
+ %sがゲームスペースに追加されました
+
+ %1$s をロック解除
ポケットモードがアクティブです
ポケットの中のスマートフォンのイラスト
@@ -16,6 +22,4 @@
2. 電源ボタンを押したままにするとポケットモードを終了します。
着信音と通知音が鳴ります
-
- %sがゲームスペースに追加されました
diff --git a/core/res/res/values-ko-rKR/cr_strings.xml b/core/res/res/values-ko-rKR/cr_strings.xml
index fa808203d9b41..9711ebed4cef7 100644
--- a/core/res/res/values-ko-rKR/cr_strings.xml
+++ b/core/res/res/values-ko-rKR/cr_strings.xml
@@ -8,6 +8,12 @@
비정상 종료 로그 URL 복사
URL을 복사했습니다.
Pasty 서비스에 로그를 업로드하는 중 오류가 발생했습니다.
+
+ 제스처 잠금을 해제하려면 다시 한 번 스와이프하세요.
+
+ %s GameSpace에 추가되었습니다
+
+ %1$s 잠금 해제
포켓 모드 사용 중
주머니에 들어 있는 기기를 나타낸 그림
@@ -16,6 +22,4 @@
2. 전원 버튼을 길게 눌러 포켓 모드를 종료합니다.
벨소리 및 알림 소리가 울립니다.
-
- %s GameSpace에 추가되었습니다
diff --git a/core/res/res/values-ku-rTR/cr_strings.xml b/core/res/res/values-ku-rTR/cr_strings.xml
index a8e1b3d7d894d..81b20e994574b 100644
--- a/core/res/res/values-ku-rTR/cr_strings.xml
+++ b/core/res/res/values-ku-rTR/cr_strings.xml
@@ -8,6 +8,12 @@
لەبەرگرتنەوەی بەستەری کڕاشبوون
بەسەرکەوتوویی لەبەرگیرایەوە
Di dema barkirina têketinê li Pasty de xeletiyek derket
+
+ Swipe again to unlock gestures
+
+ %s added to GameSpace
+
+ Unlock %1$s
Pocket mode is active
Illustration of phone in pocket
@@ -16,6 +22,4 @@
2. Press and hold the power button to exit pocket mode.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-nl-rNL/cr_strings.xml b/core/res/res/values-nl-rNL/cr_strings.xml
index 06afb9b2ca5df..a3740e098c1c3 100644
--- a/core/res/res/values-nl-rNL/cr_strings.xml
+++ b/core/res/res/values-nl-rNL/cr_strings.xml
@@ -8,6 +8,12 @@
Kopieer crash log URL
URL succesvol gekopieerd
Er is een fout opgetreden tijdens het uploaden van het logboek naar Pasty
+
+ Veeg opnieuw om gebaren te ontgrendelen
+
+ %s toegevoegd aan GameSpace
+
+ Ontgrendel %1$s
Pocket mode is aan
Illustratie van de telefoon in zak
@@ -16,6 +22,4 @@
2. Houd de aan/uit-knop ingedrukt om de broekzak modus te sluiten.
Gesprekken en meldingen zullen af gaan
-
- %s toegevoegd aan GameSpace
diff --git a/core/res/res/values-pl-rPL/cr_strings.xml b/core/res/res/values-pl-rPL/cr_strings.xml
index e01300eeb94ad..4c99f7ae7bdc8 100644
--- a/core/res/res/values-pl-rPL/cr_strings.xml
+++ b/core/res/res/values-pl-rPL/cr_strings.xml
@@ -8,6 +8,12 @@
Skopiuj adres URL dziennika awarii
URL skopiowany pomyślnie
Wystąpił błąd podczas przesyłania dziennika do serwisu Pasty
+
+ Przesuń ponownie, aby odblokować gesty
+
+ %s dodano do Przestrzeni gier
+
+ Odblokuj %1$s
Tryb kieszonkowy jest aktywny
Ilustracja telefonu w kieszeni
@@ -16,6 +22,4 @@
2. Naciśnij i przytrzymaj przycisk zasilania, aby wyjść z trybu kieszonkowego.
Połączenia i powiadomienia będą z dźwiękiem
-
- %s dodano do przestrzeni gier
diff --git a/core/res/res/values-pt-rBR/cr_strings.xml b/core/res/res/values-pt-rBR/cr_strings.xml
index 9377164371bd3..c2b754a1b23e0 100644
--- a/core/res/res/values-pt-rBR/cr_strings.xml
+++ b/core/res/res/values-pt-rBR/cr_strings.xml
@@ -8,6 +8,12 @@
Copiar URL do log de erro
URL copiado com sucesso
Ocorreu um erro durante o upload do log para o Pasty
+
+ Deslize novamente para desbloquear os gestos
+
+ %s adicionado ao GameSpace
+
+ Desbloquear %1$s
Modo de bolso está ativo
Ilustração de telefone no bolso
@@ -16,6 +22,4 @@
2. Pressione e segure o botão liga/desliga para sair do modo de bolso.
Chamadas e notificações irão tocar
-
- %s adicionado ao GameSpace
diff --git a/core/res/res/values-pt-rPT/cr_strings.xml b/core/res/res/values-pt-rPT/cr_strings.xml
index 1d20e1ca3f366..2b43d4d1393c5 100644
--- a/core/res/res/values-pt-rPT/cr_strings.xml
+++ b/core/res/res/values-pt-rPT/cr_strings.xml
@@ -8,6 +8,12 @@
Copiar URL do registo de falhas
URL copiado com sucesso
Ocorreu um erro ao enviar o registo para o dogbin
+
+ Deslize novamente para desbloquear os gestos
+
+ %s adicionado ao EspaçoJogo
+
+ Desbloquear %1$s
Modo de bolso está ativo
Ilustração do telefone no bolso
@@ -16,6 +22,4 @@
2. Pressione e segure o botão de ligar/desligar para sair do modo bolso.
As chamadas e as notificações vão tocar
-
- %s adicionado ao EspaçoJogo
diff --git a/core/res/res/values-ro-rRO/cr_strings.xml b/core/res/res/values-ro-rRO/cr_strings.xml
index 319bd3008f57a..20117db3f5faa 100644
--- a/core/res/res/values-ro-rRO/cr_strings.xml
+++ b/core/res/res/values-ro-rRO/cr_strings.xml
@@ -8,6 +8,12 @@
Copiază URL-ul jurnalului de eroare
URL-ul a fost copiat cu succes
A apărut o eroare la încărcarea registrului în pasty
+
+ Glisați din nou pentru a debloca gesturile
+
+ %s adăugat la GameSpace
+
+ Deblocare %1$s
Modul de buzunar este activ
Ilustrație de telefon în buzunar
@@ -16,6 +22,4 @@
2. Apăsați și țineți apăsat butonul de pornire pentru a ieși din modul buzunar.
Apelurile și notificările vor suna
-
- %s adăugat la GameSpace
diff --git a/core/res/res/values-ru-rRU/cr_strings.xml b/core/res/res/values-ru-rRU/cr_strings.xml
index ad699f2a07682..3d23c262eaffb 100644
--- a/core/res/res/values-ru-rRU/cr_strings.xml
+++ b/core/res/res/values-ru-rRU/cr_strings.xml
@@ -8,6 +8,12 @@
Скопировать ссылку на журнал сбоя
Ссылка скопирована
Произошла ошибка во время загрузки лога на Pasty
+
+ Проведите ещё раз, чтобы разблокировать жесты
+
+ %s добавлена в GameSpace
+
+ Разблокировать %1$s
Режим «В кармане» включен
Иллюстрация телефона в кармане
@@ -16,6 +22,4 @@
2. Нажмите и удерживайте кнопку питания, чтобы выйти из режима «В кармане».
Звонки и уведомления будут звучать
-
- %s добавлена в GameSpace
diff --git a/core/res/res/values-sat-rIN/cr_strings.xml b/core/res/res/values-sat-rIN/cr_strings.xml
index 8137b0bb05276..4132d2ba4d881 100644
--- a/core/res/res/values-sat-rIN/cr_strings.xml
+++ b/core/res/res/values-sat-rIN/cr_strings.xml
@@ -8,6 +8,12 @@
ᱠᱨᱟᱥ ᱞᱚᱜᱽ URL ᱱᱚᱠᱚᱞ ᱢᱮ
URL ᱨᱟᱥ ᱞᱮᱠᱟᱛᱮ ᱱᱚᱠᱚᱞᱮᱱᱟ
An error occured while uploading the log to Pasty
+
+ Swipe again to unlock gestures
+
+ %s added to GameSpace
+
+ Unlock %1$s
Pocket mode is active
Illustration of phone in pocket
@@ -16,6 +22,4 @@
2. Press and hold the power button to exit pocket mode.
Calls and notifications will ring
-
- %s added to GameSpace
diff --git a/core/res/res/values-sk-rSK/cr_strings.xml b/core/res/res/values-sk-rSK/cr_strings.xml
index 4d809ad81573d..539c1a75f5517 100644
--- a/core/res/res/values-sk-rSK/cr_strings.xml
+++ b/core/res/res/values-sk-rSK/cr_strings.xml
@@ -8,6 +8,12 @@
Kopírovať adresu URL záznamu o chybe
URL úspešne skopírované
Pri nahrávaní protokolu o zlyhaní došlo k chybe
+
+ Prejdite prstom znova pre odomknutie gest
+
+ %s pridané do GameSpace
+
+ Odomknúť %1$s
Režim detekcie nosenia vo vrecku je aktívny
Znázornenie režimu detekcie nosenia vo vrecku
@@ -16,6 +22,4 @@
2. Stlačte a podržte tlačidlo napájania, pre vypnutie režimu detekcie nosenia vo vrecku.
Telefonáty a upozornenia budú zvoniť
-
- %s pridané do GameSpace
diff --git a/core/res/res/values-tr-rTR/cr_strings.xml b/core/res/res/values-tr-rTR/cr_strings.xml
index 9847e0ace88a7..999d76a33ee1e 100644
--- a/core/res/res/values-tr-rTR/cr_strings.xml
+++ b/core/res/res/values-tr-rTR/cr_strings.xml
@@ -8,6 +8,12 @@
Kilitlenme günlüğü bağlantısını kopyala
Bağlantı başarıyla kopyalandı
Kayıt Pasty\'ye yüklenirken bir hata oluştu
+
+ Jestlerin kilidini açmak için tekrar kaydırın
+
+ GameSpace\'e %s eklendi
+
+ Kilidi aç %1$s
Cep modu kullanımda
Cepteki telefon illüstrasyon
@@ -16,6 +22,4 @@
2. Cep modundan çıkmak için güç düğmesini basılı tutun.
Çağrılar ve bildirimlerde zil çalacak
-
- GameSpace\'e %s eklendi
diff --git a/core/res/res/values-uk-rUA/cr_strings.xml b/core/res/res/values-uk-rUA/cr_strings.xml
index 20083115dbb18..88f55317258f9 100644
--- a/core/res/res/values-uk-rUA/cr_strings.xml
+++ b/core/res/res/values-uk-rUA/cr_strings.xml
@@ -8,6 +8,12 @@
Копіювати URL звіту про помилку
URL успішно скопійовано
Сталася помилка під час завантаження журналу до Pasty
+
+ Проведіть ще раз, щоб розблокувати жести
+
+ %s додано до ігрового простору
+
+ Розблокувати %1$s
Кишеньковий режим активний
Ілюстрація телефону в кишені
@@ -16,6 +22,4 @@
2. Натисніть і утримуйте кнопку живлення, щоб вийти з кишенькового режиму.
Звук для викликів та сповіщень увімкнено
-
- %s додано до ігрового простору
diff --git a/core/res/res/values-vi-rVN/cr_strings.xml b/core/res/res/values-vi-rVN/cr_strings.xml
index 605019e82d48d..083471742f9da 100644
--- a/core/res/res/values-vi-rVN/cr_strings.xml
+++ b/core/res/res/values-vi-rVN/cr_strings.xml
@@ -8,6 +8,12 @@
Sao chép địa chỉ nhật ký sự cố
Đã sao chép thành công
Đã xảy ra lỗi khi tải nhật ký lên máy chủ
+
+ Vuốt lại để mở khóa cử chỉ
+
+ %s đã thêm vào không gian trò chơi
+
+ Mở khóa %1$s
Chế độ bỏ túi đang được bật
Hình minh họa điện thoại trong túi
@@ -16,6 +22,4 @@
2. Ấn giữ nút nguồn để tiếp tục.
Cuộc gọi & thông báo sẽ đổ chuông
-
- %s đã thêm vào không gian trò chơi
diff --git a/core/res/res/values-zh-rCN/cr_strings.xml b/core/res/res/values-zh-rCN/cr_strings.xml
index 14aa3e319bf70..ddb5597d61fe0 100644
--- a/core/res/res/values-zh-rCN/cr_strings.xml
+++ b/core/res/res/values-zh-rCN/cr_strings.xml
@@ -8,6 +8,12 @@
复制崩溃日志链接
已成功复制链接
将日志上传到 Pasty 时出错
+
+ 再次滑动以解锁手势
+
+ %s 已添加到 游戏空间
+
+ 解锁应用 %1$s
口袋检测已开启
口袋检测说明
@@ -16,6 +22,4 @@
2. 按住电源按钮可退出口袋检测。
来电和通知时将响铃
-
- %s 已添加到 游戏空间
diff --git a/core/res/res/values-zh-rTW/cr_strings.xml b/core/res/res/values-zh-rTW/cr_strings.xml
index 13a18590b97b7..3eda7c49750d2 100644
--- a/core/res/res/values-zh-rTW/cr_strings.xml
+++ b/core/res/res/values-zh-rTW/cr_strings.xml
@@ -8,6 +8,12 @@
複製當機紀錄連結
已成功複製連結
上傳紀錄至 Pasty 時發生錯誤
+
+ 再滑動一次以解鎖手勢
+
+ %s 已加入 GameSpace
+
+ 解鎖 %1$s
防誤觸模式已啟用
防誤觸模式示意圖
@@ -16,6 +22,4 @@
2. 長按電源鍵以退出防誤觸模式。
來電與通知將發出鈴聲
-
- %s 已加入 GameSpace
diff --git a/packages/SystemUI/res/layout/screen_record_options.xml b/packages/SystemUI/res/layout/screen_record_options.xml
index cb9f904072eab..efe5744423293 100644
--- a/packages/SystemUI/res/layout/screen_record_options.xml
+++ b/packages/SystemUI/res/layout/screen_record_options.xml
@@ -41,14 +41,14 @@
android:dropDownWidth="274dp"
android:importantForAccessibility="yes"/>
-
-
+ android:layout_marginTop="@dimen/screenrecord_option_padding"
+ android:visibility="gone">
-
+ android:layout_marginTop="@dimen/screenrecord_option_padding"
+ android:visibility="gone">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
\ No newline at end of file
+
+
diff --git a/packages/SystemUI/res/layout/screenrecord_spinner_item.xml b/packages/SystemUI/res/layout/screenrecord_spinner_item.xml
new file mode 100644
index 0000000000000..87b0682089434
--- /dev/null
+++ b/packages/SystemUI/res/layout/screenrecord_spinner_item.xml
@@ -0,0 +1,24 @@
+
+
+
diff --git a/packages/SystemUI/res/values-ar-rSA/cr_strings.xml b/packages/SystemUI/res/values-ar-rSA/cr_strings.xml
index 846a21beaf798..0b1e7e2b40837 100644
--- a/packages/SystemUI/res/values-ar-rSA/cr_strings.xml
+++ b/packages/SystemUI/res/values-ar-rSA/cr_strings.xml
@@ -156,100 +156,99 @@
تم حذف تسجيل الشاشة
المؤقت
- ساعة الإيقاف
- المنبّه
- الكشاف
- نقطة اتصال
- نقطة الاتصال نشطة
- VPN نشط
- تسجيل الشاشة
- قيد التشغيل
- إخراج الوسائط
- وضع الصوت
+ Stopwatch
+ Alarm
+ Flashlight
+ Hotspot
+ Hotspot Active
+ VPN Active
+ Screen Recording
+ Now Playing
+ Media output
+ Sound Mode
صامت
الاهتزاز
نغمة الرنين
- جارِ الشحن
- لاسلكي
- موفر
- الموسيقى
- منسوخ
- منسوخ!
- تم نسخ الصورة
- نسخ الصورة
- صورة الحافظة
- الصورة
- الرابط
- تجاهل
- فتح
+ Charging
+ Wireless
+ Saver
+ Music
+ Copied
+ Copied!
+ Image copied
+ Copy Image
+ Clipboard image
+ Image
+ URL
+ Dismiss
+ Open
إيقاف
- إيقاف التسجيل
- إعادة التعيين
- مسح الكل
- إظهار المزيد
- عرض أقل
- تشغيل
- إيقاف مؤقت
- متوقف مؤقتاً
- حفظ
- التسجيل
- تم
- الرنين
- قيد التشغيل
- تشغيل
- التطبيقات الأخيرة
- Kill app
- مفتوح
- تم فتح الجهاز
- التقدم
- الإرسال إلى
- الكاميرا & الميكروفون
- الكاميرا
- الميكروفون
- الكاميرا & الميكروفون
- أجهزة %d
- الشحن اللاسلكي
- حتى الإكتمال
- موفر البطارية
- الاتصال
- مكالمة واردة
- متصل
- غير متصل
- لا توجد أجهزة
- جهاز متصل
- <xliff:d id="count" example="3">%d</xliff:g> الأجهزة
- VPN متصل
- مؤمن
- جاري الاتصال\u2026
- 1 جهاز
- أجهزة بلوتوث
+ Stop Recording
+ Reset
+ Clear All
+ Show more
+ Show less
+ Play
+ Pause
+ Paused
+ Saved
+ Recording
+ Done
+ Ringing
+ Running
+ ON
+ Recents
+ Unlocked
+ Device Unlocked
+ Progress
+ Casting to
+ Camera & Microphone
+ Camera
+ Microphone
+ Camera & Mic
+ %d devices
+ Wireless Charging
+ until full
+ Battery Saver
+ Call
+ Incoming Call
+ Connected
+ Disconnect
+ No devices
+ 1 device connected
+ %d devices connected
+ VPN Connected
+ Secured
+ Connecting\u2026
+ 1 device
+ Bluetooth device
%d apps
- الآن
- %d منذ دقيقة
- %d منذ ساعة
- %d منذ يوم
- %d منذ اسبوع
- استئناف
- الحافظة
- السابق
- التالي
- خلْط
- إخراج
- تسجيل
- إرسال
- نشط
- البصمة
- موثوق به
- المحاذاة
- كاميرا
- ميكروفون
- التطبيقات الأخيرة
- %d جارية..
- ضد
- مباشر
- النهائي
- استراحة مابين الشوطين
- القادمة
+ Just now
+ %dm ago
+ %dh ago
+ %dd ago
+ %dw ago
+ Resume
+ Clipboard
+ Previous
+ Next
+ Shuffle
+ Output
+ Rec
+ Cast
+ Active
+ Biometric
+ Trust
+ Alignment
+ Cam
+ Mic
+ Recent Apps
+ %d running
+ vs
+ LIVE
+ Final
+ Halftime
+ Upcoming
لقطة الشاشة
diff --git a/packages/SystemUI/res/values-az-rAZ/cr_strings.xml b/packages/SystemUI/res/values-az-rAZ/cr_strings.xml
index 7cddeb7efe3f0..67eb9aa04de9d 100644
--- a/packages/SystemUI/res/values-az-rAZ/cr_strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-be-rBY/cr_strings.xml b/packages/SystemUI/res/values-be-rBY/cr_strings.xml
index bc15ad03e5196..7b57ef1bd6a6b 100644
--- a/packages/SystemUI/res/values-be-rBY/cr_strings.xml
+++ b/packages/SystemUI/res/values-be-rBY/cr_strings.xml
@@ -196,7 +196,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-bg-rBG/cr_strings.xml b/packages/SystemUI/res/values-bg-rBG/cr_strings.xml
index b67df30f60edb..0c2f5f73911f3 100644
--- a/packages/SystemUI/res/values-bg-rBG/cr_strings.xml
+++ b/packages/SystemUI/res/values-bg-rBG/cr_strings.xml
@@ -194,7 +194,6 @@
Бягане
Включено
Скорошни
- Kill app
Отключено
Устройството е отключено
Прогрес
diff --git a/packages/SystemUI/res/values-ca-rES/cr_strings.xml b/packages/SystemUI/res/values-ca-rES/cr_strings.xml
index e291d420a8cf0..7d2b9a955a687 100644
--- a/packages/SystemUI/res/values-ca-rES/cr_strings.xml
+++ b/packages/SystemUI/res/values-ca-rES/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-cs-rCZ/cr_strings.xml b/packages/SystemUI/res/values-cs-rCZ/cr_strings.xml
index d219794f1cd33..3fb18abf442bc 100644
--- a/packages/SystemUI/res/values-cs-rCZ/cr_strings.xml
+++ b/packages/SystemUI/res/values-cs-rCZ/cr_strings.xml
@@ -196,7 +196,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-de-rDE/cr_strings.xml b/packages/SystemUI/res/values-de-rDE/cr_strings.xml
index fb432b89c0edd..9aa3bcd039c29 100644
--- a/packages/SystemUI/res/values-de-rDE/cr_strings.xml
+++ b/packages/SystemUI/res/values-de-rDE/cr_strings.xml
@@ -194,7 +194,6 @@
Läuft
AN
App-Verlauf
- App beenden
Entsperrt
Gerät entsperrt
Fortschritt
diff --git a/packages/SystemUI/res/values-el-rGR/cr_strings.xml b/packages/SystemUI/res/values-el-rGR/cr_strings.xml
index 2f9e24d2c5009..11b6ba92e7af7 100644
--- a/packages/SystemUI/res/values-el-rGR/cr_strings.xml
+++ b/packages/SystemUI/res/values-el-rGR/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-es-rES/cr_strings.xml b/packages/SystemUI/res/values-es-rES/cr_strings.xml
index d099e2d3cadde..dedb99a29ec28 100644
--- a/packages/SystemUI/res/values-es-rES/cr_strings.xml
+++ b/packages/SystemUI/res/values-es-rES/cr_strings.xml
@@ -108,9 +108,9 @@
Panel de volumen
Píxeles inteligentes
- Activado
- Desactivado
- Porcentaje de píxeles
+ On
+ Off
+ Pixel percentage
%d%%
Error al cargar datos del clima
@@ -151,101 +151,100 @@
Grabación de pantalla eliminada
- Temporizador
- Cronómetro
- Alarma
- Linterna
- Punto de acceso
- Punto de acceso activo
- VPN activa
- Grabación de pantalla
- Reproduciendo
- Salida multimedia
- Modo de sonido
+ Timer
+ Stopwatch
+ Alarm
+ Flashlight
+ Hotspot
+ Hotspot Active
+ VPN Active
+ Screen Recording
+ Now Playing
+ Media output
+ Sound Mode
Vibrar
Timbre
- Cargando
- Inalámbrico
- Ahorro
- Música
- Copiado
- ¡Copiado!
- Imagen copiada
- Copiar imagen
- Imagen del portapapeles
- Imagen
+ Charging
+ Wireless
+ Saver
+ Music
+ Copied
+ Copied!
+ Image copied
+ Copy Image
+ Clipboard image
+ Image
URL
- Descartar
- Abrir
+ Dismiss
+ Open
Detener
- Detener grabación
- Reiniciar
- Borrar todo
- Mostrar más
- Mostrar menos
- Reproducir
- Pausar
- En pausa
- Guardado
- Grabando
- Hecho
- Sonando
- En ejecución
- ACTIVADO
- Recientes
- Finalizar aplicación
- Desbloqueado
- Dispositivo desbloqueado
- Progreso
- Transmitiendo a
- Cámara & Micrófono
- Cámara
- Micrófono
- Cámara & Micro
- %d dispositivos
- Carga inalámbrica
- hasta que se complete
- Ahorro de batería
- Llamada
- Llamada entrante
- Conectado
- Desconectar
- No hay dispositivos
- 1 dispositivo conectado
- %d dispositivos conectados
- VPN Conectada
- Seguro
- Conectando\u2026
- 1 dispositivo
- Dispositivo Bluetooth
- %d aplicaciones
- Justo ahora
- %d minutos atrás
- %dhoras atrás
- %ddías atrás
- %dsemanas atrás
- Reanudar
- Portapapeles
- Anterior
- Siguiente
- Aleatorio
- Salida
- Grabar
- Transmitir
- Activo
- Biométrico
- Confianza
- Alineación
- Cámara
- Micrófono
- Aplicaciones recientes
- %d en ejecución
- contra
- EN VIVO
+ Stop Recording
+ Reset
+ Clear All
+ Show more
+ Show less
+ Play
+ Pause
+ Paused
+ Saved
+ Recording
+ Done
+ Ringing
+ Running
+ ON
+ Recents
+ Unlocked
+ Device Unlocked
+ Progress
+ Casting to
+ Camera & Microphone
+ Camera
+ Microphone
+ Camera & Mic
+ %d devices
+ Wireless Charging
+ until full
+ Battery Saver
+ Call
+ Incoming Call
+ Connected
+ Disconnect
+ No devices
+ 1 device connected
+ %d devices connected
+ VPN Connected
+ Secured
+ Connecting\u2026
+ 1 device
+ Bluetooth device
+ %d apps
+ Just now
+ %dm ago
+ %dh ago
+ %dd ago
+ %dw ago
+ Resume
+ Clipboard
+ Previous
+ Next
+ Shuffle
+ Output
+ Rec
+ Cast
+ Active
+ Biometric
+ Trust
+ Alignment
+ Cam
+ Mic
+ Recent Apps
+ %d running
+ vs
+ LIVE
Final
- Medio tiempo
- Próximamente
+ Halftime
+ Upcoming
Captura de pantalla
diff --git a/packages/SystemUI/res/values-et-rEE/cr_strings.xml b/packages/SystemUI/res/values-et-rEE/cr_strings.xml
index 812ecabb5a249..4944580ea932b 100644
--- a/packages/SystemUI/res/values-et-rEE/cr_strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-fa-rIR/cr_strings.xml b/packages/SystemUI/res/values-fa-rIR/cr_strings.xml
index 7dd5d49083c84..900084d8345ca 100644
--- a/packages/SystemUI/res/values-fa-rIR/cr_strings.xml
+++ b/packages/SystemUI/res/values-fa-rIR/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-fi-rFI/cr_strings.xml b/packages/SystemUI/res/values-fi-rFI/cr_strings.xml
index 36272ba54106c..a48c8647420f4 100644
--- a/packages/SystemUI/res/values-fi-rFI/cr_strings.xml
+++ b/packages/SystemUI/res/values-fi-rFI/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-fr-rFR/cr_strings.xml b/packages/SystemUI/res/values-fr-rFR/cr_strings.xml
index 56eb56d32ca07..6d145355aa627 100644
--- a/packages/SystemUI/res/values-fr-rFR/cr_strings.xml
+++ b/packages/SystemUI/res/values-fr-rFR/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Récents
- Kill app
Déverrouillé
Appareil déverrouillé
Progression
diff --git a/packages/SystemUI/res/values-hu-rHU/cr_strings.xml b/packages/SystemUI/res/values-hu-rHU/cr_strings.xml
index 6b39efa163d87..ddc8cf2330b4e 100644
--- a/packages/SystemUI/res/values-hu-rHU/cr_strings.xml
+++ b/packages/SystemUI/res/values-hu-rHU/cr_strings.xml
@@ -194,7 +194,6 @@
Folyamatban
BE
Előzmények
- Alkalmazás kilövése
Feloldva
A készülék feloldva
Folyamat
diff --git a/packages/SystemUI/res/values-in-rID/cr_strings.xml b/packages/SystemUI/res/values-in-rID/cr_strings.xml
index 19a9607bf7702..28d47ea331c2f 100644
--- a/packages/SystemUI/res/values-in-rID/cr_strings.xml
+++ b/packages/SystemUI/res/values-in-rID/cr_strings.xml
@@ -193,7 +193,6 @@
Running
ON
Recents
- Matikan aplikasi
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-it-rIT/cr_strings.xml b/packages/SystemUI/res/values-it-rIT/cr_strings.xml
index fc276e33fed26..74e143f04db90 100644
--- a/packages/SystemUI/res/values-it-rIT/cr_strings.xml
+++ b/packages/SystemUI/res/values-it-rIT/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-iw-rIL/cr_strings.xml b/packages/SystemUI/res/values-iw-rIL/cr_strings.xml
index e82691655897e..c13122dec6fc8 100644
--- a/packages/SystemUI/res/values-iw-rIL/cr_strings.xml
+++ b/packages/SystemUI/res/values-iw-rIL/cr_strings.xml
@@ -196,7 +196,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-ja-rJP/cr_strings.xml b/packages/SystemUI/res/values-ja-rJP/cr_strings.xml
index 730b608f0ab61..a089c9c81cd48 100644
--- a/packages/SystemUI/res/values-ja-rJP/cr_strings.xml
+++ b/packages/SystemUI/res/values-ja-rJP/cr_strings.xml
@@ -193,7 +193,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-ko-rKR/cr_strings.xml b/packages/SystemUI/res/values-ko-rKR/cr_strings.xml
index 5cf9fcf49a82b..3879fcfb4e552 100644
--- a/packages/SystemUI/res/values-ko-rKR/cr_strings.xml
+++ b/packages/SystemUI/res/values-ko-rKR/cr_strings.xml
@@ -108,9 +108,9 @@
음량 패널
스마트 픽셀
- 켜기
- 끄기
- 픽셀 퍼센티지
+ On
+ Off
+ Pixel percentage
%d%%
날씨 데이터를 불러오는 중 오류가 발생했습니다.
@@ -193,7 +193,6 @@
실행중
켜기
최근
- Kill app
잠금 해제됨
기기 잠금 해제됨
진행 상태
diff --git a/packages/SystemUI/res/values-ku-rTR/cr_strings.xml b/packages/SystemUI/res/values-ku-rTR/cr_strings.xml
index adf6192f75660..3ddefda220dcc 100644
--- a/packages/SystemUI/res/values-ku-rTR/cr_strings.xml
+++ b/packages/SystemUI/res/values-ku-rTR/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-nl-rNL/cr_strings.xml b/packages/SystemUI/res/values-nl-rNL/cr_strings.xml
index d2f3d9cfe5a87..7bb8e4a0f050e 100644
--- a/packages/SystemUI/res/values-nl-rNL/cr_strings.xml
+++ b/packages/SystemUI/res/values-nl-rNL/cr_strings.xml
@@ -194,7 +194,6 @@
Bezig
AAN
Recente
- App beëindigen
Ontgrendeld
Apparaat ontgrendeld
Voortgang
diff --git a/packages/SystemUI/res/values-pl-rPL/cr_strings.xml b/packages/SystemUI/res/values-pl-rPL/cr_strings.xml
index fe5ef5e647237..fc9207495b905 100644
--- a/packages/SystemUI/res/values-pl-rPL/cr_strings.xml
+++ b/packages/SystemUI/res/values-pl-rPL/cr_strings.xml
@@ -108,9 +108,9 @@
Panel głośności
Inteligentne piksele
- Włącz
- Wyłącz
- Procent pikseli
+ On
+ Off
+ Pixel percentage
%d%%
Błąd wczytywania danych o pogodzie
@@ -196,7 +196,6 @@
Uruchamianie
WŁ.
Ostatnio używane
- Zakończ aplikację
Odblokowano
Odblokowano urządzenie
Postęp
diff --git a/packages/SystemUI/res/values-pt-rBR/cr_strings.xml b/packages/SystemUI/res/values-pt-rBR/cr_strings.xml
index 85a3500b56905..3d5836f11a89b 100644
--- a/packages/SystemUI/res/values-pt-rBR/cr_strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-pt-rPT/cr_strings.xml b/packages/SystemUI/res/values-pt-rPT/cr_strings.xml
index 2f7908b5d683c..ec1413274959c 100644
--- a/packages/SystemUI/res/values-pt-rPT/cr_strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/cr_strings.xml
@@ -108,9 +108,9 @@
Painel de volume
Pixeis Inteligentes
- Ligado
- Desligado
- Percentagem de píxeis
+ On
+ Off
+ Pixel percentage
%d%%
Erro ao carregar dados meteorológicos
@@ -194,11 +194,10 @@
Em execução
LIGADO
Recentes
- Terminar aplicação
Desbloqueado
Dispositivo desbloqueado
Progresso
- Transmitindo para
+ Trasnmitindo para
Câmara & Microfone
Câmara
Microfone
@@ -207,7 +206,7 @@
Carregamento sem fio
até encher
Poupança de Bateria
- Chamada
+ Call
Chamada Recebida
Conectado
Desconectar
diff --git a/packages/SystemUI/res/values-ro-rRO/cr_strings.xml b/packages/SystemUI/res/values-ro-rRO/cr_strings.xml
index edddb2bdbd14f..799b4a086da76 100644
--- a/packages/SystemUI/res/values-ro-rRO/cr_strings.xml
+++ b/packages/SystemUI/res/values-ro-rRO/cr_strings.xml
@@ -195,7 +195,6 @@
Rulează
PORNITĂ
Recente
- Kill app
Deblocat
Dispozitiv deblocat
Progres
diff --git a/packages/SystemUI/res/values-ru-rRU/cr_strings.xml b/packages/SystemUI/res/values-ru-rRU/cr_strings.xml
index 77308c90985ea..4c5022f1fab1a 100644
--- a/packages/SystemUI/res/values-ru-rRU/cr_strings.xml
+++ b/packages/SystemUI/res/values-ru-rRU/cr_strings.xml
@@ -196,7 +196,6 @@
Выполнение
Вкл.
Недавние
- Закрыть приложение
Разблокировано
Устройство разблокировано
Прогресс
diff --git a/packages/SystemUI/res/values-sat-rIN/cr_strings.xml b/packages/SystemUI/res/values-sat-rIN/cr_strings.xml
index 5d651f005eb9c..54b90f6b30aca 100644
--- a/packages/SystemUI/res/values-sat-rIN/cr_strings.xml
+++ b/packages/SystemUI/res/values-sat-rIN/cr_strings.xml
@@ -194,7 +194,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-sk-rSK/cr_strings.xml b/packages/SystemUI/res/values-sk-rSK/cr_strings.xml
index 1ae240224433d..b008caa262f4c 100644
--- a/packages/SystemUI/res/values-sk-rSK/cr_strings.xml
+++ b/packages/SystemUI/res/values-sk-rSK/cr_strings.xml
@@ -196,7 +196,6 @@
Running
ON
Recents
- Kill app
Unlocked
Device Unlocked
Progress
diff --git a/packages/SystemUI/res/values-tr-rTR/cr_strings.xml b/packages/SystemUI/res/values-tr-rTR/cr_strings.xml
index de804491ff69f..1b1def214df29 100644
--- a/packages/SystemUI/res/values-tr-rTR/cr_strings.xml
+++ b/packages/SystemUI/res/values-tr-rTR/cr_strings.xml
@@ -159,7 +159,7 @@
Kişisel Erişim Noktası Etkin
VPN Etkin
Ekran Kaydı
- Şimdi çalınıyor
+ Şu An Çalan
Medya çıkışı
Ses Modu
Sessiz
@@ -194,7 +194,6 @@
Çalışıyor
AÇIK
Son Kullanılanlar
- Uygulamayı kapat
Kilidi Açıldı
Cihaz Kilidi Açıldı
İlerleme
diff --git a/packages/SystemUI/res/values-uk-rUA/cr_strings.xml b/packages/SystemUI/res/values-uk-rUA/cr_strings.xml
index 7a4e3be66a73e..e776ca4ecd1ed 100644
--- a/packages/SystemUI/res/values-uk-rUA/cr_strings.xml
+++ b/packages/SystemUI/res/values-uk-rUA/cr_strings.xml
@@ -196,7 +196,6 @@
Виконується
УВІМК
Меню \"Нещодавніх завдань\"
- Закрити програму
Розблоковано
Пристрій розблоковано
Прогрес
diff --git a/packages/SystemUI/res/values-vi-rVN/cr_strings.xml b/packages/SystemUI/res/values-vi-rVN/cr_strings.xml
index acf5a2c758015..ccda08d405c3c 100644
--- a/packages/SystemUI/res/values-vi-rVN/cr_strings.xml
+++ b/packages/SystemUI/res/values-vi-rVN/cr_strings.xml
@@ -51,7 +51,7 @@
Trang %1$d trên %2$d
%1$s đang bật
Không có tiêu đề
- Nhìn thoáng qua
+ At a glance
Mã QR
Xem
@@ -108,9 +108,9 @@
Bảng điều chỉnh âm lượng
Điểm ảnh thông minh
- Bật
- Tắt
- Tỷ lệ phần trăm điểm ảnh
+ On
+ Off
+ Pixel percentage
%d%%
Lỗi khi tải dữ liệu thời tiết
@@ -174,13 +174,13 @@
Sao chép hình ảnh
Hình ảnh trong bảng tạm
Hình ảnh
- Liên kết
+ URL
Bỏ qua
Mở
Dừng lại
Dừng ghi
Đặt lại
- Xóa tất cả
+ Xoá tất cả
Hiện thêm
Hiện ít hơn
Phát
@@ -192,21 +192,20 @@
Đang đổ chuông
Đang chạy
BẬT
- Gần đây
- Dừng ứng dụng
- Đã mở khóa
- Thiết bị đã mở khóa
+ Ứng dụng gần đây
+ Đã mở khoá
+ Thiết bị đã mở khoá
Tiến trình
Đang chiếu lên
- Máy ảnh & micrô
- Máy ảnh
- Micrô
- Máy ảnh & micrô
+ Camera & Microphone
+ Camera
+ Microphone
+ Camera & Mic
%d thiết bị
- Đang sạc không dây
+ Sạc không dây
cho đến khi đầy
Tiết kiệm pin
- Cuộc gọi
+ Call
Cuộc gọi đến
Đã kết nối
Ngắt kết nối
@@ -225,7 +224,7 @@
%d ngày trước
%d tuần trước
Tiếp tục
- Bảng nhớ tạm
+ Bảng tạm
Trước
Tiếp theo
Phát ngẫu nhiên
@@ -240,7 +239,7 @@
Mic
Ứng dụng gần đây
%d đang chạy
- với
+ vs
TRỰC TIẾP
Chung kết
Hiệp nghỉ
diff --git a/packages/SystemUI/res/values-zh-rCN/cr_strings.xml b/packages/SystemUI/res/values-zh-rCN/cr_strings.xml
index e812fe46a5e36..0e2b1b74e1049 100644
--- a/packages/SystemUI/res/values-zh-rCN/cr_strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/cr_strings.xml
@@ -108,9 +108,9 @@
音量面板
智能像素
- 开启
- 关闭
- 像素百分比
+ On
+ Off
+ Pixel percentage
%d%%
加载天气数据时出错
@@ -193,7 +193,6 @@
正在运行
开启
最近应用
- 关闭程序
已解锁
设备已解锁
进度
diff --git a/packages/SystemUI/res/values-zh-rTW/cr_strings.xml b/packages/SystemUI/res/values-zh-rTW/cr_strings.xml
index ffe6728b883d0..aeaf83f951bbc 100644
--- a/packages/SystemUI/res/values-zh-rTW/cr_strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/cr_strings.xml
@@ -108,9 +108,9 @@
音量面板
智慧像素
- 已啟用
- 停用
- 螢幕省電像素比例
+ On
+ Off
+ Pixel percentage
%d%%
載入天氣資訊時發生錯誤
@@ -193,7 +193,6 @@
運行中
開啟
總覽
- 結束應用程式
未鎖定
裝置已解鎖
進度
@@ -206,7 +205,7 @@
無線充電
直至充飽
省電模式
- 呼叫
+ Call
來電
已連線
中斷連線
diff --git a/packages/SystemUI/res/values/cm_strings.xml b/packages/SystemUI/res/values/cm_strings.xml
index 381dc02c91103..4fbd6818b1a13 100644
--- a/packages/SystemUI/res/values/cm_strings.xml
+++ b/packages/SystemUI/res/values/cm_strings.xml
@@ -129,6 +129,29 @@
Remove the 3 second wait
HEVC encoding
Use the more efficient HEVC encoder
+ Resolution
+ Frame rate
+ Time limit
+ File size limit
+ Video quality
+ High
+ Medium
+ Low
+ Auto
+ Auto
+ 30 FPS
+ 60 FPS
+ Unlimited
+ 5 minutes
+ 10 minutes
+ 30 minutes
+ 60 minutes
+ Unlimited
+ 10 MB
+ 100 MB
+ 500 MB
+ 1 GB
+ 15 GB
This keeps it in view until you unpin. Touch & hold Back to unpin.
diff --git a/packages/SystemUI/res/values/cr_arrays.xml b/packages/SystemUI/res/values/cr_arrays.xml
index 79515214b333c..0640396f0d1b8 100644
--- a/packages/SystemUI/res/values/cr_arrays.xml
+++ b/packages/SystemUI/res/values/cr_arrays.xml
@@ -7,17 +7,47 @@
- - @string/quick_settings_compass_N
- - @string/quick_settings_compass_NE
- - @string/quick_settings_compass_E
- - @string/quick_settings_compass_SE
- - @string/quick_settings_compass_S
- - @string/quick_settings_compass_SW
- - @string/quick_settings_compass_W
- - @string/quick_settings_compass_NW
+ - @string/quick_settings_compass_N
+ - @string/quick_settings_compass_NE
+ - @string/quick_settings_compass_E
+ - @string/quick_settings_compass_SE
+ - @string/quick_settings_compass_S
+ - @string/quick_settings_compass_SW
+ - @string/quick_settings_compass_W
+ - @string/quick_settings_compass_NW
+
+
+ - @string/screenrecord_bitrate_high
+ - @string/screenrecord_bitrate_medium
+ - @string/screenrecord_bitrate_low
+
+
+
+ - @string/screenrecord_fps_auto
+ - @string/screenrecord_fps_30
+ - @string/screenrecord_fps_60
+
+
+
+ - @string/screenrecord_time_unlimited
+ - @string/screenrecord_time_5min
+ - @string/screenrecord_time_10min
+ - @string/screenrecord_time_30min
+ - @string/screenrecord_time_60min
+
+
+
+ - @string/screenrecord_size_unlimited
+ - @string/screenrecord_size_10mb
+ - @string/screenrecord_size_100mb
+ - @string/screenrecord_size_500mb
+ - @string/screenrecord_size_1gb
+ - @string/screenrecord_size_15gb
+
+
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
index 14ffbd6c54786..f139ecd537627 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/RecordingService.java
@@ -94,6 +94,11 @@ public class RecordingService extends Service implements ScreenMediaRecorderList
private static final String EXTRA_LOW_QUALITY = "extra_lowQuality";
private static final String EXTRA_LONGER_DURATION = "extra_longerDuration";
private final static String EXTRA_HEVC = "extra_HEVC";
+ private static final String EXTRA_RESOLUTION_MODE = "extra_resolutionMode";
+ private static final String EXTRA_FPS_MODE = "extra_fpsMode";
+ private static final String EXTRA_TIME_LIMIT_MS = "extra_timeLimitMs";
+ private static final String EXTRA_FILE_SIZE_BYTES = "extra_fileSizeBytes";
+ private static final String EXTRA_BITRATE_MULTIPLIER = "extra_bitrateMultiplier";
protected static final String ACTION_START = "com.android.systemui.screenrecord.START";
protected static final String ACTION_SHOW_START_NOTIF =
@@ -129,6 +134,11 @@ public class RecordingService extends Service implements ScreenMediaRecorderList
private boolean mLowQuality;
private boolean mLongerDuration;
private boolean mHEVC;
+ private int mResolutionMode;
+ private int mFpsMode;
+ private int mTimeLimitMs;
+ private long mFileSizeBytes;
+ private float mBitrateMultiplier = 1.0f;
@Inject
public RecordingService(ScreenRecordUxController controller, @LongRunning Executor executor,
@@ -174,6 +184,21 @@ public static Intent getStartIntent(Context context, int resultCode,
.putExtra(EXTRA_HEVC, hevc);
}
+ public static Intent getStartIntent(Context context, int resultCode,
+ int audioSource, boolean showTaps,
+ @Nullable MediaProjectionCaptureTarget captureTarget,
+ boolean lowQuality, boolean longerDuration, boolean hevc,
+ int resolutionMode, int fpsMode, int timeLimitMs, long fileSizeBytes,
+ float bitrateMultiplier) {
+ return getStartIntent(context, resultCode, audioSource, showTaps, captureTarget,
+ lowQuality, longerDuration, hevc)
+ .putExtra(EXTRA_RESOLUTION_MODE, resolutionMode)
+ .putExtra(EXTRA_FPS_MODE, fpsMode)
+ .putExtra(EXTRA_TIME_LIMIT_MS, timeLimitMs)
+ .putExtra(EXTRA_FILE_SIZE_BYTES, fileSizeBytes)
+ .putExtra(EXTRA_BITRATE_MULTIPLIER, bitrateMultiplier);
+ }
+
/**
* Get an intent to start the recording service.
*
@@ -202,6 +227,27 @@ public static Intent getStartIntent(
.putExtra(EXTRA_DISPLAY_ID, displayId);
}
+ public static Intent getStartIntent(
+ Context context,
+ int resultCode,
+ int audioSource,
+ boolean showTaps,
+ int displayId,
+ @Nullable MediaProjectionCaptureTarget captureTarget,
+ boolean lowQuality,
+ boolean longerDuration,
+ boolean hevc,
+ int resolutionMode,
+ int fpsMode,
+ int timeLimitMs,
+ long fileSizeBytes,
+ float bitrateMultiplier) {
+ return getStartIntent(context, resultCode, audioSource, showTaps, captureTarget, lowQuality,
+ longerDuration, hevc, resolutionMode, fpsMode, timeLimitMs, fileSizeBytes,
+ bitrateMultiplier)
+ .putExtra(EXTRA_DISPLAY_ID, displayId);
+ }
+
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null) {
@@ -231,6 +277,11 @@ public int onStartCommand(Intent intent, int flags, int startId) {
mLowQuality = intent.getBooleanExtra(EXTRA_LOW_QUALITY, false);
mLongerDuration = intent.getBooleanExtra(EXTRA_LONGER_DURATION, false);
mHEVC = intent.getBooleanExtra(EXTRA_HEVC, true);
+ mResolutionMode = intent.getIntExtra(EXTRA_RESOLUTION_MODE, 0);
+ mFpsMode = intent.getIntExtra(EXTRA_FPS_MODE, 0);
+ mTimeLimitMs = intent.getIntExtra(EXTRA_TIME_LIMIT_MS, 0);
+ mFileSizeBytes = intent.getLongExtra(EXTRA_FILE_SIZE_BYTES, 0L);
+ mBitrateMultiplier = intent.getFloatExtra(EXTRA_BITRATE_MULTIPLIER, 1.0f);
MediaProjectionCaptureTarget captureTarget =
intent.getParcelableExtra(EXTRA_CAPTURE_TARGET,
@@ -259,6 +310,11 @@ public int onStartCommand(Intent intent, int flags, int startId) {
setLowQuality(mLowQuality);
setLongerDuration(mLongerDuration);
setHEVC(mHEVC);
+ setResolutionMode(mResolutionMode);
+ setRequestedFps(mFpsMode);
+ setTimeLimitMs(mTimeLimitMs);
+ setFileSizeBytes(mFileSizeBytes);
+ setBitrateMultiplier(mBitrateMultiplier);
if (startRecording()) {
updateState(true);
@@ -701,6 +757,36 @@ private void setHEVC(boolean hevc) {
}
}
+ private void setResolutionMode(int resolutionMode) {
+ if (getRecorder() != null) {
+ getRecorder().setResolutionMode(resolutionMode);
+ }
+ }
+
+ private void setRequestedFps(int fps) {
+ if (getRecorder() != null) {
+ getRecorder().setRequestedFps(fps);
+ }
+ }
+
+ private void setTimeLimitMs(int timeLimitMs) {
+ if (getRecorder() != null) {
+ getRecorder().setTimeLimitMs(timeLimitMs);
+ }
+ }
+
+ private void setFileSizeBytes(long fileSizeBytes) {
+ if (getRecorder() != null) {
+ getRecorder().setFileSizeBytes(fileSizeBytes);
+ }
+ }
+
+ private void setBitrateMultiplier(float multiplier) {
+ if (getRecorder() != null) {
+ getRecorder().setBitrateMultiplier(multiplier);
+ }
+ }
+
private PendingIntent getStopPendingIntent() {
return PendingIntent.getService(this, REQUEST_CODE, getStopIntent(this),
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
index 8274713d3cb7e..996a521e25f75 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenMediaRecorder.java
@@ -102,6 +102,11 @@ public class ScreenMediaRecorder extends MediaProjection.Callback {
private boolean mLowQuality;
private boolean mLongerDuration;
private boolean mHEVC;
+ private int mResolutionMode;
+ private int mRequestedFps;
+ private int mTimeLimitMs;
+ private long mFileSizeBytes;
+ private float mBitrateMultiplier = 1.0f;
private Context mContext;
ScreenMediaRecorderListener mListener;
@@ -157,6 +162,26 @@ public void setHEVC(boolean hevc) {
mHEVC = hevc;
}
+ public void setResolutionMode(int resolutionMode) {
+ mResolutionMode = resolutionMode;
+ }
+
+ public void setRequestedFps(int fps) {
+ mRequestedFps = fps;
+ }
+
+ public void setTimeLimitMs(int timeLimitMs) {
+ mTimeLimitMs = timeLimitMs;
+ }
+
+ public void setFileSizeBytes(long fileSizeBytes) {
+ mFileSizeBytes = fileSizeBytes;
+ }
+
+ public void setBitrateMultiplier(float multiplier) {
+ mBitrateMultiplier = multiplier;
+ }
+
private void prepare() throws IOException, RemoteException, RuntimeException {
//Setup media projection
IBinder b = ServiceManager.getService(MEDIA_PROJECTION_SERVICE);
@@ -198,16 +223,35 @@ private void prepare() throws IOException, RemoteException, RuntimeException {
DisplayManager dm = mContext.getSystemService(DisplayManager.class);
Display display = dm.getDisplay(mDisplayId);
display.getRealMetrics(metrics);
- int refreshRate = mLowQuality ? LOW_VIDEO_FRAME_RATE : (int) display.getRefreshRate();
+ int refreshRate;
+ if (mRequestedFps > 0) {
+ refreshRate = mRequestedFps;
+ } else {
+ refreshRate = mLowQuality ? LOW_VIDEO_FRAME_RATE : (int) display.getRefreshRate();
+ }
if (mMaxRefreshRate != 0 && refreshRate > mMaxRefreshRate) refreshRate = mMaxRefreshRate;
- int[] dimens = getSupportedSize(metrics.widthPixels, metrics.heightPixels, refreshRate);
+ int targetWidth = metrics.widthPixels;
+ int targetHeight = metrics.heightPixels;
+ if (mResolutionMode > 0) {
+ int longEdge = Math.max(targetWidth, targetHeight);
+ if (longEdge > mResolutionMode) {
+ double scale = (double) mResolutionMode / longEdge;
+ targetWidth = (int) (targetWidth * scale);
+ targetHeight = (int) (targetHeight * scale);
+ }
+ } else if (mResolutionMode == -1) {
+ targetWidth = targetWidth * 3 / 4;
+ targetHeight = targetHeight * 3 / 4;
+ }
+ int[] dimens = getSupportedSize(targetWidth, targetHeight, refreshRate);
int width = dimens[0];
int height = dimens[1];
refreshRate = dimens[2];
int resRatio = mLowQuality ? LOW_VIDEO_FRAME_RATE_TO_RESOLUTION_RATIO
: VIDEO_FRAME_RATE_TO_RESOLUTION_RATIO;
- int vidBitRate = width * height * refreshRate / VIDEO_FRAME_RATE * resRatio;
- long maxFilesize = mLongerDuration ? MAX_FILESIZE_BYTES_LONGER : MAX_FILESIZE_BYTES;
+ int vidBitRate = (int) (width * height * refreshRate / VIDEO_FRAME_RATE * resRatio * mBitrateMultiplier);
+ long maxFilesize = mFileSizeBytes > 0 ? mFileSizeBytes
+ : (mLongerDuration ? MAX_FILESIZE_BYTES_LONGER : MAX_FILESIZE_BYTES);
if (!mHEVC) {
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setVideoEncodingProfileLevel(
@@ -224,7 +268,8 @@ private void prepare() throws IOException, RemoteException, RuntimeException {
mMediaRecorder.setVideoSize(width, height);
mMediaRecorder.setVideoFrameRate(refreshRate);
mMediaRecorder.setVideoEncodingBitRate(vidBitRate);
- mMediaRecorder.setMaxDuration(mLongerDuration ? 0 : MAX_DURATION_MS);
+ int maxDurationMs = mTimeLimitMs > 0 ? mTimeLimitMs : (mLongerDuration ? 0 : MAX_DURATION_MS);
+ mMediaRecorder.setMaxDuration(maxDurationMs);
mMediaRecorder.setMaxFileSize(maxFilesize);
// Set up audio
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionContentManager.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionContentManager.kt
index 71f8ce079b1f7..4abe7d02837f9 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionContentManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/ScreenRecordPermissionContentManager.kt
@@ -21,6 +21,7 @@ import android.app.Activity
import android.content.Intent
import android.hardware.display.DisplayManager
import android.media.MediaCodecInfo
+import android.util.DisplayMetrics
import android.media.MediaCodecList
import android.media.MediaFormat
import android.media.projection.StopReason
@@ -38,8 +39,8 @@ import android.view.View.VISIBLE
import android.view.accessibility.AccessibilityNodeInfo
import android.widget.AdapterView
import android.widget.ArrayAdapter
+import android.widget.CompoundButton
import android.widget.Spinner
-import android.widget.Switch
import androidx.annotation.LayoutRes
import com.android.systemui.Prefs
import com.android.systemui.mediaprojection.MediaProjectionCaptureTarget
@@ -109,14 +110,20 @@ class ScreenRecordPermissionContentManager(
): ScreenRecordPermissionContentManager
}
- private lateinit var tapsSwitch: Switch
- private lateinit var audioSwitch: Switch
- private lateinit var lowQualitySwitch: Switch
- private lateinit var longerDurationSwitch: Switch
- private lateinit var skipTimeSwitch: Switch
- private lateinit var hevcSwitch: Switch
+ private lateinit var tapsSwitch: CompoundButton
+ private lateinit var audioSwitch: CompoundButton
+ private lateinit var lowQualitySwitch: CompoundButton
+ private lateinit var longerDurationSwitch: CompoundButton
+ private lateinit var skipTimeSwitch: CompoundButton
+ private lateinit var hevcSwitch: CompoundButton
private lateinit var tapsView: View
private lateinit var options: Spinner
+ private lateinit var bitrateSpinner: Spinner
+ private lateinit var resolutionSpinner: Spinner
+ private lateinit var fpsSpinner: Spinner
+ private lateinit var timeLimitSpinner: Spinner
+ private lateinit var fileSizeSpinner: Spinner
+ private val resolutionModeValues = mutableListOf()
override fun bind(view: View) {
super.bind(view)
@@ -191,6 +198,17 @@ class ScreenRecordPermissionContentManager(
audioSwitch.isChecked = true
}
+ resolutionSpinner = containerView.requireViewById(R.id.screenrecord_resolution_spinner)
+ fpsSpinner = containerView.requireViewById(R.id.screenrecord_fps_spinner)
+ timeLimitSpinner = containerView.requireViewById(R.id.screenrecord_time_limit_spinner)
+ fileSizeSpinner = containerView.requireViewById(R.id.screenrecord_file_size_spinner)
+ bitrateSpinner = containerView.requireViewById(R.id.screenrecord_bitrate_spinner)
+ setupSpinner(bitrateSpinner, R.array.screenrecord_bitrate_entries)
+ setupResolutionSpinner()
+ setupSpinner(fpsSpinner, R.array.screenrecord_fps_entries)
+ setupSpinner(timeLimitSpinner, R.array.screenrecord_time_limit_entries)
+ setupSpinner(fileSizeSpinner, R.array.screenrecord_file_size_entries)
+
// Disable HEVC when hardware accelerated codec is not available
if (!hasHevcHwEncoder()) {
Prefs.putInt(containerView.context, PREF_HEVC, 0)
@@ -242,6 +260,11 @@ class ScreenRecordPermissionContentManager(
val longerDuration = longerDurationSwitch.isChecked
val skipTime = skipTimeSwitch.isChecked
val hevc = hevcSwitch.isChecked
+ val bitrateMultiplier = BITRATE_MULTIPLIER_VALUES[bitrateSpinner.selectedItemPosition]
+ val resolutionMode = resolutionModeValues[resolutionSpinner.selectedItemPosition]
+ val fpsMode = FPS_MODE_VALUES[fpsSpinner.selectedItemPosition]
+ val timeLimitMs = TIME_LIMIT_VALUES_MS[timeLimitSpinner.selectedItemPosition]
+ val fileSizeBytes = FILE_SIZE_VALUES_BYTES[fileSizeSpinner.selectedItemPosition]
savePrefs();
@@ -258,6 +281,11 @@ class ScreenRecordPermissionContentManager(
lowQuality = lowQuality,
longerDuration = longerDuration,
hevc = hevc,
+ bitrateMultiplier = bitrateMultiplier,
+ resolutionMode = resolutionMode,
+ fpsMode = fpsMode,
+ timeLimitMs = timeLimitMs,
+ fileSizeBytes = fileSizeBytes,
)
)
},
@@ -265,6 +293,57 @@ class ScreenRecordPermissionContentManager(
)
}
+ private fun setupResolutionSpinner() {
+ val ctx = containerView.context
+ val dm = ctx.getSystemService(DisplayManager::class.java)
+ val metrics = DisplayMetrics()
+ dm.getDisplay(Display.DEFAULT_DISPLAY).getRealMetrics(metrics)
+ val screenW = metrics.widthPixels
+ val screenH = metrics.heightPixels
+ val longEdge = maxOf(screenW, screenH)
+
+ val entries = mutableListOf(ctx.getString(R.string.screenrecord_resolution_auto))
+ resolutionModeValues.clear()
+ resolutionModeValues.add(0)
+
+ if (longEdge > 2560) {
+ entries.add(resolutionLabel(screenW, screenH, 2560))
+ resolutionModeValues.add(2560)
+ }
+ if (longEdge > 1920) {
+ entries.add(resolutionLabel(screenW, screenH, 1920))
+ resolutionModeValues.add(1920)
+ }
+ if (longEdge > 1280) {
+ entries.add(resolutionLabel(screenW, screenH, 1280))
+ resolutionModeValues.add(1280)
+ }
+
+ val adapter = ArrayAdapter(ctx, R.layout.screenrecord_spinner_item, entries)
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ resolutionSpinner.adapter = adapter
+ }
+
+ private fun resolutionLabel(screenW: Int, screenH: Int, longEdgeCap: Int): String {
+ val scale = longEdgeCap.toDouble() / maxOf(screenW, screenH)
+ val w = (screenW * scale).toInt()
+ val h = (screenH * scale).toInt()
+ val className = when (longEdgeCap) {
+ 2560 -> "1440p"
+ 1920 -> "1080p"
+ else -> "720p"
+ }
+ return "$className ($w × $h)"
+ }
+
+ private fun setupSpinner(spinner: Spinner, entriesRes: Int) {
+ val ctx = containerView.context
+ val entries = ctx.resources.getTextArray(entriesRes)
+ val adapter = ArrayAdapter(ctx, R.layout.screenrecord_spinner_item, entries)
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
+ spinner.adapter = adapter
+ }
+
private fun hasHevcHwEncoder(): Boolean {
val mediaCodecList = MediaCodecList(MediaCodecList.REGULAR_CODECS)
@@ -292,6 +371,11 @@ class ScreenRecordPermissionContentManager(
Prefs.putInt(userContext, PREF_AUDIO_SOURCE, options.selectedItemPosition)
Prefs.putInt(userContext, PREF_SKIP, if (skipTimeSwitch.isChecked) 1 else 0)
Prefs.putInt(userContext, PREF_HEVC, if (hevcSwitch.isChecked) 1 else 0)
+ Prefs.putInt(userContext, PREF_BITRATE, bitrateSpinner.selectedItemPosition)
+ Prefs.putInt(userContext, PREF_RESOLUTION, resolutionModeValues[resolutionSpinner.selectedItemPosition])
+ Prefs.putInt(userContext, PREF_FPS, fpsSpinner.selectedItemPosition)
+ Prefs.putInt(userContext, PREF_TIME_LIMIT, timeLimitSpinner.selectedItemPosition)
+ Prefs.putInt(userContext, PREF_FILE_SIZE, fileSizeSpinner.selectedItemPosition)
}
private fun loadPrefs() {
@@ -303,6 +387,12 @@ class ScreenRecordPermissionContentManager(
options.setSelection(Prefs.getInt(userContext, PREF_AUDIO_SOURCE, 0))
skipTimeSwitch.isChecked = Prefs.getInt(userContext, PREF_SKIP, 0) == 1
hevcSwitch.isChecked = Prefs.getInt(userContext, PREF_HEVC, 1) == 1
+ bitrateSpinner.setSelection(Prefs.getInt(userContext, PREF_BITRATE, 0))
+ val savedResMode = Prefs.getInt(userContext, PREF_RESOLUTION, 0)
+ resolutionSpinner.setSelection(resolutionModeValues.indexOf(savedResMode).coerceAtLeast(0))
+ fpsSpinner.setSelection(Prefs.getInt(userContext, PREF_FPS, 0))
+ timeLimitSpinner.setSelection(Prefs.getInt(userContext, PREF_TIME_LIMIT, 0))
+ fileSizeSpinner.setSelection(Prefs.getInt(userContext, PREF_FILE_SIZE, 0))
}
private inner class CaptureTargetResultReceiver :
@@ -340,6 +430,16 @@ class ScreenRecordPermissionContentManager(
private const val PREF_AUDIO_SOURCE = "screenrecord_audio_source"
private const val PREF_SKIP = "screenrecord_skip_timer"
private const val PREF_HEVC = "screenrecord_use_hevc"
+ private const val PREF_BITRATE = "screenrecord_bitrate"
+ private const val PREF_RESOLUTION = "screenrecord_resolution_mode"
+ private const val PREF_FPS = "screenrecord_fps_mode"
+ private const val PREF_TIME_LIMIT = "screenrecord_time_limit"
+ private const val PREF_FILE_SIZE = "screenrecord_file_size"
+
+ private val BITRATE_MULTIPLIER_VALUES = floatArrayOf(1.0f, 0.5f, 0.25f)
+ private val FPS_MODE_VALUES = intArrayOf(0, 30, 60)
+ private val TIME_LIMIT_VALUES_MS = intArrayOf(0, 5 * 60 * 1000, 10 * 60 * 1000, 30 * 60 * 1000, 60 * 60 * 1000)
+ private val FILE_SIZE_VALUES_BYTES = longArrayOf(0L, 10L shl 20, 100L shl 20, 500L shl 20, 1L shl 30, 15L shl 30)
fun createOptionList(displayManager: DisplayManager): List {
val connectedDisplays = getConnectedDisplays(displayManager)
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/domain/ScreenRecordingParameters.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/domain/ScreenRecordingParameters.kt
index b79d115adc3f5..cbbd0e567ea5b 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/domain/ScreenRecordingParameters.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/domain/ScreenRecordingParameters.kt
@@ -27,4 +27,9 @@ data class ScreenRecordingParameters(
val lowQuality: Boolean,
val longerDuration: Boolean,
val hevc: Boolean,
+ val resolutionMode: Int = 0,
+ val fpsMode: Int = 0,
+ val timeLimitMs: Int = 0,
+ val fileSizeBytes: Long = 0L,
+ val bitrateMultiplier: Float = 1.0f,
)
diff --git a/packages/SystemUI/src/com/android/systemui/screenrecord/domain/interactor/LegacyScreenRecordingStartStopInteractor.kt b/packages/SystemUI/src/com/android/systemui/screenrecord/domain/interactor/LegacyScreenRecordingStartStopInteractor.kt
index 4ff01b6600ba6..5f507a7af6852 100644
--- a/packages/SystemUI/src/com/android/systemui/screenrecord/domain/interactor/LegacyScreenRecordingStartStopInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenrecord/domain/interactor/LegacyScreenRecordingStartStopInteractor.kt
@@ -50,6 +50,11 @@ constructor(private val userContextProvider: UserContextProvider) :
lowQuality,
longerDuration,
hevc,
+ resolutionMode,
+ fpsMode,
+ timeLimitMs,
+ fileSizeBytes,
+ bitrateMultiplier,
)
},
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,
diff --git a/services/core/java/com/android/server/input/KeyGestureController.java b/services/core/java/com/android/server/input/KeyGestureController.java
index 01f6db63b604a..7292c30732aa5 100644
--- a/services/core/java/com/android/server/input/KeyGestureController.java
+++ b/services/core/java/com/android/server/input/KeyGestureController.java
@@ -1927,14 +1927,14 @@ public void handleKeyGestureEvent(@NonNull KeyGestureEvent event,
break;
case KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_SCREENSHOT:
if (complete) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_SCREENSHOT_SHORTCUT,
- new TakeScreenshotData(
- SCREENSHOT_KEY_OTHER,
- WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
- event.getDisplayId()
- )
- )
- );
+ mHandler.sendMessage(
+ mHandler.obtainMessage(
+ MSG_SCREENSHOT_SHORTCUT,
+ new TakeScreenshotData(
+ SCREENSHOT_KEY_OTHER,
+ WindowManager.TAKE_SCREENSHOT_FULLSCREEN,
+ event.getDisplayId()
+ )));
}
break;
case KeyGestureEvent.KEY_GESTURE_TYPE_SCREENSHOT_CHORD: