Merge "SurfaceView: Synchronize visibility changes with VRI frame" into sc-v2-dev
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 57ad989..131bfd3 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4178,15 +4178,20 @@
view.requestLayout();
view.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
+ private boolean mHandled = false;
@Override
public void onDraw() {
+ if (mHandled) {
+ return;
+ }
+ mHandled = true;
// Transfer the splash screen view from shell to client.
// Call syncTransferSplashscreenViewTransaction at the first onDraw so we can ensure
// the client view is ready to show and we can use applyTransactionOnDraw to make
// all transitions happen at the same frame.
syncTransferSplashscreenViewTransaction(
view, r.token, decorView, startingWindowLeash);
- view.postOnAnimation(() -> view.getViewTreeObserver().removeOnDrawListener(this));
+ view.post(() -> view.getViewTreeObserver().removeOnDrawListener(this));
}
});
}
diff --git a/core/java/android/view/BatchedInputEventReceiver.java b/core/java/android/view/BatchedInputEventReceiver.java
index 7023e4b..1ed12f7 100644
--- a/core/java/android/view/BatchedInputEventReceiver.java
+++ b/core/java/android/view/BatchedInputEventReceiver.java
@@ -17,6 +17,7 @@
package android.view;
import android.compat.annotation.UnsupportedAppUsage;
+import android.os.Handler;
import android.os.Looper;
/**
@@ -27,6 +28,13 @@
private Choreographer mChoreographer;
private boolean mBatchingEnabled;
private boolean mBatchedInputScheduled;
+ private final Handler mHandler;
+ private final Runnable mConsumeBatchedInputEvents = new Runnable() {
+ @Override
+ public void run() {
+ consumeBatchedInputEvents(-1);
+ }
+ };
@UnsupportedAppUsage
public BatchedInputEventReceiver(
@@ -34,6 +42,7 @@
super(inputChannel, looper);
mChoreographer = choreographer;
mBatchingEnabled = true;
+ mHandler = new Handler(looper);
}
@Override
@@ -57,10 +66,15 @@
* @hide
*/
public void setBatchingEnabled(boolean batchingEnabled) {
+ if (mBatchingEnabled == batchingEnabled) {
+ return;
+ }
+
mBatchingEnabled = batchingEnabled;
+ mHandler.removeCallbacks(mConsumeBatchedInputEvents);
if (!batchingEnabled) {
unscheduleBatchedInput();
- consumeBatchedInputEvents(-1);
+ mHandler.post(mConsumeBatchedInputEvents);
}
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 463ec2c..0e49cc9 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -138,20 +138,9 @@
private boolean mDisableBackgroundLayer = false;
/**
- * We use this lock in SOME cases when reading or writing SurfaceControl,
- * but use the following model so that the RenderThread can run locklessly
- * in the position up-date case.
- *
- * 1. UI Thread can read from mSurfaceControl (use in Transactions) without
- * holding the lock.
- * 2. UI Thread will hold the lock when writing to mSurfaceControl (calling release
- * or remove).
- * 3. Render thread will also hold the lock when writing to mSurfaceControl (e.g.
- * calling release from positionLost).
- * 3. RenderNode.PositionUpdateListener::positionChanged will only be called
- * when the UI thread is paused (blocked on the Render thread).
- * 4. positionChanged thus will not be required to hold the lock as the
- * UI thread is blocked, and the other writer is the RT itself.
+ * We use this lock to protect access to mSurfaceControl and
+ * SurfaceViewPositionUpdateListener#mPositionChangedTransaction. Both are accessed on the UI
+ * thread and the render thread.
*/
final Object mSurfaceControlLock = new Object();
final Rect mTmpRect = new Rect();
@@ -945,7 +934,9 @@
Transaction geometryTransaction) {
if (mPositionListener != null) {
mRenderNode.removePositionUpdateListener(mPositionListener);
- geometryTransaction = mPositionListener.getTransaction().merge(geometryTransaction);
+ synchronized (mSurfaceControlLock) {
+ geometryTransaction = mPositionListener.getTransaction().merge(geometryTransaction);
+ }
}
mPositionListener = new SurfaceViewPositionUpdateListener(surfaceWidth, surfaceHeight,
geometryTransaction);
@@ -1467,43 +1458,45 @@
if (mSurfaceControl == null) {
return;
}
- }
- if (mRTLastReportedPosition.left == left
- && mRTLastReportedPosition.top == top
- && mRTLastReportedPosition.right == right
- && mRTLastReportedPosition.bottom == bottom
- && mRTLastReportedSurfaceSize.x == mRtSurfaceWidth
- && mRTLastReportedSurfaceSize.y == mRtSurfaceHeight
- && !mPendingTransaction) {
- return;
- }
- try {
- if (DEBUG_POSITION) {
- Log.d(TAG, String.format(
- "%d updateSurfacePosition RenderWorker, frameNr = %d, "
- + "position = [%d, %d, %d, %d] surfaceSize = %dx%d",
- System.identityHashCode(SurfaceView.this), frameNumber,
- left, top, right, bottom, mRtSurfaceWidth, mRtSurfaceHeight));
+ if (mRTLastReportedPosition.left == left
+ && mRTLastReportedPosition.top == top
+ && mRTLastReportedPosition.right == right
+ && mRTLastReportedPosition.bottom == bottom
+ && mRTLastReportedSurfaceSize.x == mRtSurfaceWidth
+ && mRTLastReportedSurfaceSize.y == mRtSurfaceHeight
+ && !mPendingTransaction) {
+ return;
}
- mRTLastReportedPosition.set(left, top, right, bottom);
- mRTLastReportedSurfaceSize.set(mRtSurfaceWidth, mRtSurfaceHeight);
- onSetSurfacePositionAndScaleRT(mPositionChangedTransaction, mSurfaceControl,
- mRTLastReportedPosition.left /*positionLeft*/,
- mRTLastReportedPosition.top /*positionTop*/,
- mRTLastReportedPosition.width() / (float) mRtSurfaceWidth /*postScaleX*/,
- mRTLastReportedPosition.height() / (float) mRtSurfaceHeight /*postScaleY*/);
- if (mViewVisibility) {
- mPositionChangedTransaction.show(mSurfaceControl);
+ try {
+ if (DEBUG_POSITION) {
+ Log.d(TAG, String.format(
+ "%d updateSurfacePosition RenderWorker, frameNr = %d, "
+ + "position = [%d, %d, %d, %d] surfaceSize = %dx%d",
+ System.identityHashCode(SurfaceView.this), frameNumber,
+ left, top, right, bottom, mRtSurfaceWidth, mRtSurfaceHeight));
+ }
+ mRTLastReportedPosition.set(left, top, right, bottom);
+ mRTLastReportedSurfaceSize.set(mRtSurfaceWidth, mRtSurfaceHeight);
+ onSetSurfacePositionAndScaleRT(mPositionChangedTransaction, mSurfaceControl,
+ mRTLastReportedPosition.left /*positionLeft*/,
+ mRTLastReportedPosition.top /*positionTop*/,
+ mRTLastReportedPosition.width()
+ / (float) mRtSurfaceWidth /*postScaleX*/,
+ mRTLastReportedPosition.height()
+ / (float) mRtSurfaceHeight /*postScaleY*/);
+ if (mViewVisibility) {
+ mPositionChangedTransaction.show(mSurfaceControl);
+ }
+ final ViewRootImpl viewRoot = getViewRootImpl();
+ if (viewRoot != null) {
+ applyChildSurfaceTransaction_renderWorker(mPositionChangedTransaction,
+ viewRoot.mSurface, frameNumber);
+ }
+ applyOrMergeTransaction(mPositionChangedTransaction, frameNumber);
+ mPendingTransaction = false;
+ } catch (Exception ex) {
+ Log.e(TAG, "Exception from repositionChild", ex);
}
- final ViewRootImpl viewRoot = getViewRootImpl();
- if (viewRoot != null) {
- applyChildSurfaceTransaction_renderWorker(mPositionChangedTransaction,
- viewRoot.mSurface, frameNumber);
- }
- applyOrMergeTransaction(mPositionChangedTransaction, frameNumber);
- mPendingTransaction = false;
- } catch (Exception ex) {
- Log.e(TAG, "Exception from repositionChild", ex);
}
}
@@ -1526,18 +1519,18 @@
}
mRTLastReportedPosition.setEmpty();
mRTLastReportedSurfaceSize.set(-1, -1);
- if (mPendingTransaction) {
- Log.w(TAG, System.identityHashCode(SurfaceView.this)
- + "Pending transaction cleared.");
- mPositionChangedTransaction.clear();
- mPendingTransaction = false;
- }
/**
* positionLost can be called while UI thread is un-paused so we
* need to hold the lock here.
*/
synchronized (mSurfaceControlLock) {
+ if (mPendingTransaction) {
+ Log.w(TAG, System.identityHashCode(SurfaceView.this)
+ + "Pending transaction cleared.");
+ mPositionChangedTransaction.clear();
+ mPendingTransaction = false;
+ }
if (mSurfaceControl == null) {
return;
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index b427e8b..ad4f280 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -205,8 +205,10 @@
*
* @param displayId the ID of the display to notify.
* @param types the internal insets types of the bars are about to show transiently.
+ * @param isGestureOnSystemBar whether the gesture to show the transient bar was a gesture on
+ * one of the bars itself.
*/
- void showTransient(int displayId, in int[] types);
+ void showTransient(int displayId, in int[] types, boolean isGestureOnSystemBar);
/**
* Notifies System UI to abort the transient state of system bars, which prevents the bars being
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index acf7d39..bc324f4 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -319,7 +319,7 @@
<string name="permgrouplab_location" msgid="1858277002233964394">"الموقع الجغرافي"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"الوصول إلى موقع هذا الجهاز"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"التقويم"</string>
- <string name="permgroupdesc_calendar" msgid="6762751063361489379">"الوصول تقويمك"</string>
+ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"الوصول إلى تقويمك"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"إرسال رسائل قصيرة SMS وعرضها"</string>
<string name="permgrouplab_storage" msgid="1938416135375282333">"الملفات والوسائط"</string>
@@ -338,17 +338,17 @@
<string name="permgroupdesc_phone" msgid="270048070781478204">"إجراء مكالمات هاتفية وإدارتها"</string>
<string name="permgrouplab_sensors" msgid="9134046949784064495">"أجهزة استشعار الجسم"</string>
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"الوصول إلى بيانات المستشعر حول علاماتك الحيوية"</string>
- <string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"استرداد محتوى النافذة"</string>
- <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"فحص محتوى نافذة يتم التفاعل معها"</string>
- <string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"تفعيل الاستكشاف باللمس"</string>
+ <string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"استرداد محتوى النافذة:"</string>
+ <string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"فحص محتوى نافذة يتم التفاعل معها."</string>
+ <string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"تفعيل الاستكشاف باللمس:"</string>
<string name="capability_desc_canRequestTouchExploration" msgid="4394677060796752976">"سيتم قول العناصر التي تم النقر عليها بصوت عالٍ ويمكن استكشاف الشاشة باستخدام الإيماءات."</string>
- <string name="capability_title_canRequestFilterKeyEvents" msgid="2772371671541753254">"ملاحظة النص الذي تكتبه"</string>
+ <string name="capability_title_canRequestFilterKeyEvents" msgid="2772371671541753254">"ملاحظة النص الذي تكتبه:"</string>
<string name="capability_desc_canRequestFilterKeyEvents" msgid="2381315802405773092">"يتضمن بيانات شخصية مثل أرقام بطاقات الائتمان وكلمات المرور."</string>
- <string name="capability_title_canControlMagnification" msgid="7701572187333415795">"التحكم في تكبير الشاشة"</string>
+ <string name="capability_title_canControlMagnification" msgid="7701572187333415795">"التحكم في تكبير الشاشة:"</string>
<string name="capability_desc_canControlMagnification" msgid="2206586716709254805">"يمكنك التحكّم في مستوى تكبير/تصغير الشاشة وتحديد الموضع."</string>
<string name="capability_title_canPerformGestures" msgid="9106545062106728987">"تنفيذ إيماءات"</string>
<string name="capability_desc_canPerformGestures" msgid="6619457251067929726">"يمكن النقر والتمرير بسرعة والتصغير أو التكبير بإصبعين وتنفيذ إيماءات أخرى."</string>
- <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"إيماءات بصمات الإصبع"</string>
+ <string name="capability_title_canCaptureFingerprintGestures" msgid="1189053104594608091">"إيماءات بصمات الإصبع:"</string>
<string name="capability_desc_canCaptureFingerprintGestures" msgid="6861869337457461274">"يمكن أن تلتقط الإيماءات التي تم تنفيذها على جهاز استشعار بصمة الإصبع في الجهاز."</string>
<string name="capability_title_canTakeScreenshot" msgid="3895812893130071930">"أخذ لقطة شاشة"</string>
<string name="capability_desc_canTakeScreenshot" msgid="7762297374317934052">"يمكن أخذ لقطة شاشة."</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index d6b0e5a..0882875 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -609,7 +609,7 @@
<string name="fingerprint_or_screen_lock_dialog_default_subtitle" msgid="5195808203117992200">"Aurrera egiteko, erabili hatz-marka edo pantailaren blokeoa"</string>
<string-array name="fingerprint_error_vendor">
</string-array>
- <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"Arazoren bat izan da. Saiatu berriro."</string>
+ <string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"Arazo bat izan da. Saiatu berriro."</string>
<string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Hatz-markaren ikonoa"</string>
<string name="face_recalibrate_notification_name" msgid="7311163114750748686">"Aurpegi bidez desblokeatzeko eginbidea"</string>
<string name="face_recalibrate_notification_title" msgid="2524791952735579082">"Arazoak ditugu aurpegi bidez desblokeatzeko eginbidearekin"</string>
@@ -663,7 +663,7 @@
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Aurrera egiteko, erabili aurpegia edo pantailaren blokeoa"</string>
<string-array name="face_error_vendor">
</string-array>
- <string name="face_error_vendor_unknown" msgid="7387005932083302070">"Arazoren bat izan da. Saiatu berriro."</string>
+ <string name="face_error_vendor_unknown" msgid="7387005932083302070">"Arazo bat izan da. Saiatu berriro."</string>
<string name="face_icon_content_description" msgid="465030547475916280">"Aurpegiaren ikonoa"</string>
<string name="permlab_readSyncSettings" msgid="6250532864893156277">"irakurri sinkronizazio-ezarpenak"</string>
<string name="permdesc_readSyncSettings" msgid="1325658466358779298">"Kontu baten sinkronizazio-ezarpenak irakurtzeko baimena ematen die aplikazioei. Adibidez, Jendea aplikazioa konturen batekin sinkronizatuta dagoen zehatz dezake."</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index f780957..9bedb9f 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -303,21 +303,21 @@
<string name="user_owner_label" msgid="8628726904184471211">"प्रोफ़ाइल बदलकर निजी प्रोफ़ाइल पर जाएं"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"प्रोफ़ाइल बदलकर वर्क प्रोफ़ाइल पर जाएं"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"संपर्क"</string>
- <string name="permgroupdesc_contacts" msgid="9163927941244182567">"अपने संपर्कों को ऐक्सेस करने की"</string>
+ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"अपने संपर्कों को ऐक्सेस करें"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"जगह की जानकारी"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"इस डिवाइस की जगह तक पहुंचने दें"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"कैलेंडर"</string>
- <string name="permgroupdesc_calendar" msgid="6762751063361489379">"अपने कैलेंडर को ऐक्सेस करने"</string>
+ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"अपने कैलेंडर को ऐक्सेस करें"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"मैसेज (एसएमएस)"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"मैसेज (एसएमएस) भेजें और देखें"</string>
<string name="permgrouplab_storage" msgid="1938416135375282333">"फ़ाइलें और मीडिया"</string>
- <string name="permgroupdesc_storage" msgid="6351503740613026600">"अपने डिवाइस पर मौजूद फ़ोटो, मीडिया और फ़ाइलें ऐक्सेस करने की"</string>
+ <string name="permgroupdesc_storage" msgid="6351503740613026600">"अपने डिवाइस पर मौजूद फ़ोटो, मीडिया, और फ़ाइलें ऐक्सेस करें"</string>
<string name="permgrouplab_microphone" msgid="2480597427667420076">"माइक्रोफ़ोन"</string>
<string name="permgroupdesc_microphone" msgid="1047786732792487722">"ऑडियो रिकॉर्ड करें"</string>
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"शारीरिक गतिविधि"</string>
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"शारीरिक गतिविधि की जानकारी पा सकता है"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"कैमरा"</string>
- <string name="permgroupdesc_camera" msgid="7585150538459320326">"चित्र लेने और वीडियो रिकॉर्ड करने"</string>
+ <string name="permgroupdesc_camera" msgid="7585150538459320326">"फ़ोटो खीचें और वीडियो रिकॉर्ड करें"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"आस-पास मौजूद डिवाइस"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"आस-पास मौजूद डिवाइस खोजें और उनसे कनेक्ट करें"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"कॉल लॉग"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index b4cd162..4638307 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -226,9 +226,9 @@
<string name="reboot_to_update_title" msgid="2125818841916373708">"Pemutakhiran sistem Android"</string>
<string name="reboot_to_update_prepare" msgid="6978842143587422365">"Bersiap untuk memperbarui..."</string>
<string name="reboot_to_update_package" msgid="4644104795527534811">"Memproses pembaruan paket…"</string>
- <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Memulai kembali…"</string>
+ <string name="reboot_to_update_reboot" msgid="4474726009984452312">"Memulai ulang…"</string>
<string name="reboot_to_reset_title" msgid="2226229680017882787">"Kembalikan ke setelan pabrik"</string>
- <string name="reboot_to_reset_message" msgid="3347690497972074356">"Memulai kembali…"</string>
+ <string name="reboot_to_reset_message" msgid="3347690497972074356">"Memulai ulang…"</string>
<string name="shutdown_progress" msgid="5017145516412657345">"Sedang mematikan..."</string>
<string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"Tablet Anda akan dimatikan."</string>
<string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"Perangkat Android TV akan dimatikan."</string>
@@ -1351,7 +1351,7 @@
<string name="sim_done_button" msgid="6464250841528410598">"Selesai"</string>
<string name="sim_added_title" msgid="7930779986759414595">"Kartu SIM ditambahkan"</string>
<string name="sim_added_message" msgid="6602906609509958680">"Mulai ulang perangkat Anda untuk mengakses jaringan selular."</string>
- <string name="sim_restart_button" msgid="8481803851341190038">"Nyalakan Ulang"</string>
+ <string name="sim_restart_button" msgid="8481803851341190038">"Mulai Ulang"</string>
<string name="install_carrier_app_notification_title" msgid="5712723402213090102">"Aktifkan layanan seluler"</string>
<string name="install_carrier_app_notification_text" msgid="2781317581274192728">"Download aplikasi operator untuk mengaktifkan SIM baru"</string>
<string name="install_carrier_app_notification_text_app_name" msgid="4086877327264106484">"Download aplikasi <xliff:g id="APP_NAME">%1$s</xliff:g> untuk mengaktifkan SIM baru"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d60fdae..e8390da 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -303,29 +303,29 @@
<string name="user_owner_label" msgid="8628726904184471211">"Passa al profilo personale"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Passa a profilo di lavoro"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"Contatti"</string>
- <string name="permgroupdesc_contacts" msgid="9163927941244182567">"accedere ai contatti"</string>
+ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"Possono accedere ai contatti"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"Posizione"</string>
- <string name="permgroupdesc_location" msgid="1995955142118450685">"accedere alla posizione di questo dispositivo"</string>
+ <string name="permgroupdesc_location" msgid="1995955142118450685">"Possono accedere alla posizione di questo dispositivo"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"Calendario"</string>
- <string name="permgroupdesc_calendar" msgid="6762751063361489379">"accedere al calendario"</string>
+ <string name="permgroupdesc_calendar" msgid="6762751063361489379">"Possono accedere al calendario"</string>
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
- <string name="permgroupdesc_sms" msgid="5726462398070064542">"inviare e visualizzare SMS"</string>
- <string name="permgrouplab_storage" msgid="1938416135375282333">"File e contenuti multimediali"</string>
- <string name="permgroupdesc_storage" msgid="6351503740613026600">"accedere a foto, contenuti multimediali e file sul dispositivo"</string>
+ <string name="permgroupdesc_sms" msgid="5726462398070064542">"Possono inviare e visualizzare SMS"</string>
+ <string name="permgrouplab_storage" msgid="1938416135375282333">"File/contenuti multimediali"</string>
+ <string name="permgroupdesc_storage" msgid="6351503740613026600">"Possono accedere a foto, contenuti multimediali e file sul dispositivo"</string>
<string name="permgrouplab_microphone" msgid="2480597427667420076">"Microfono"</string>
- <string name="permgroupdesc_microphone" msgid="1047786732792487722">"registrare audio"</string>
+ <string name="permgroupdesc_microphone" msgid="1047786732792487722">"Possono registrare audio"</string>
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Attività fisica"</string>
- <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"Consente di accedere all\'attività fisica"</string>
+ <string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"Possono accedere all\'attività fisica"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"Fotocamera"</string>
- <string name="permgroupdesc_camera" msgid="7585150538459320326">"scattare foto e registrare video"</string>
+ <string name="permgroupdesc_camera" msgid="7585150538459320326">"Possono scattare foto e registrare video"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Dispositivi nelle vicinanze"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"Consente di rilevare dispositivi nelle vicinanze e di connettersi a tali dispositivi"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"Registri chiamate"</string>
- <string name="permgroupdesc_calllog" msgid="2026996642917801803">"leggere e modificare il registro chiamate del telefono"</string>
+ <string name="permgroupdesc_calllog" msgid="2026996642917801803">"Possono leggere e modificare il registro chiamate del telefono"</string>
<string name="permgrouplab_phone" msgid="570318944091926620">"Telefono"</string>
- <string name="permgroupdesc_phone" msgid="270048070781478204">"eseguire e gestire le telefonate"</string>
+ <string name="permgroupdesc_phone" msgid="270048070781478204">"Possono eseguire e gestire le telefonate"</string>
<string name="permgrouplab_sensors" msgid="9134046949784064495">"Sensori del corpo"</string>
- <string name="permgroupdesc_sensors" msgid="2610631290633747752">"accedere ai dati dei sensori relativi ai tuoi parametri vitali"</string>
+ <string name="permgroupdesc_sensors" msgid="2610631290633747752">"Possono accedere ai dati dei sensori relativi ai tuoi parametri vitali"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Recuperare contenuti della finestra"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Esamina i contenuti di una finestra con cui interagisci."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Attivare Esplora al tocco"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 87415b0..fcb0941 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1333,7 +1333,7 @@
<string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"הוגדר רינגטון שקט"</string>
<string name="volume_call" msgid="7625321655265747433">"עוצמת קול בשיחה"</string>
<string name="volume_bluetooth_call" msgid="2930204618610115061">"עוצמת הקול בשיחה ב-Bluetooth"</string>
- <string name="volume_alarm" msgid="4486241060751798448">"עוצמת קול של התראה"</string>
+ <string name="volume_alarm" msgid="4486241060751798448">"עוצמת הקול של השעון המעורר"</string>
<string name="volume_notification" msgid="6864412249031660057">"עוצמת הקול של ההתראות"</string>
<string name="volume_unknown" msgid="4041914008166576293">"עוצמת קול"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"עוצמת הקול של Bluetooth"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index f65ba48..913539b 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -303,7 +303,7 @@
<string name="user_owner_label" msgid="8628726904184471211">"개인 프로필로 전환"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"직장 프로필로 전환"</string>
<string name="permgrouplab_contacts" msgid="4254143639307316920">"연락처"</string>
- <string name="permgroupdesc_contacts" msgid="9163927941244182567">"주소록에 액세스"</string>
+ <string name="permgroupdesc_contacts" msgid="9163927941244182567">"연락처에 액세스"</string>
<string name="permgrouplab_location" msgid="1858277002233964394">"위치"</string>
<string name="permgroupdesc_location" msgid="1995955142118450685">"이 기기의 위치정보에 액세스"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"캘린더"</string>
@@ -1306,7 +1306,7 @@
<string name="ringtone_silent" msgid="397111123930141876">"없음"</string>
<string name="ringtone_picker_title" msgid="667342618626068253">"벨소리"</string>
<string name="ringtone_picker_title_alarm" msgid="7438934548339024767">"알람 소리"</string>
- <string name="ringtone_picker_title_notification" msgid="6387191794719608122">"알림 사운드"</string>
+ <string name="ringtone_picker_title_notification" msgid="6387191794719608122">"알림음"</string>
<string name="ringtone_unknown" msgid="5059495249862816475">"알 수 없음"</string>
<string name="wifi_available_sign_in" msgid="381054692557675237">"Wi-Fi 네트워크에 로그인"</string>
<string name="network_available_sign_in" msgid="1520342291829283114">"네트워크에 로그인"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index aeda707..d09e18e 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -317,7 +317,7 @@
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"ကိုယ်ခန္ဓာလှုပ်ရှားမှု"</string>
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"သင့်ကိုယ်ခန္ဓာလှုပ်ရှားမှုကို ဝင်ကြည့်ရန်"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"ကင်မရာ"</string>
- <string name="permgroupdesc_camera" msgid="7585150538459320326">"ဓာတ်ပုံ ရိုက်ပြီးနောက် ဗွီဒီယို မှတ်တမ်းတင်ရန်"</string>
+ <string name="permgroupdesc_camera" msgid="7585150538459320326">"ဓာတ်ပုံနှင့် ဗီဒီယို ရိုက်ကူးရန်"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"အနီးတစ်ဝိုက်ရှိ စက်များ"</string>
<string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"အနီးတစ်ဝိုက်ရှိ စက်များကို ရှာဖွေပြီးချိတ်ဆက်မည်"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"ခေါ်ဆိုမှတ်တမ်း"</string>
@@ -1696,12 +1696,12 @@
<string name="kg_reordering_delete_drop_target_text" msgid="2034358143731750914">"ဖယ်ရှားရန်"</string>
<string name="safe_media_volume_warning" product="default" msgid="3751676824423049994">"အသံကို အကြံပြုထားသည့် ပမာဏထက် မြှင့်ပေးရမလား?\n\nအသံကို မြင့်သည့် အဆင့်မှာ ကြာရှည်စွာ နားထောင်ခြင်းက သင်၏ နားကို ထိခိုက်စေနိုင်သည်။"</string>
<string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"အများသုံးစွဲနိုင်မှု ဖြတ်လမ်းလင့်ခ်ကို အသုံးပြုလိုပါသလား။"</string>
- <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ဖြတ်လမ်းလင့်ခ်ကို ဖွင့်ထားစဉ် အသံထိန်းခလုတ် နှစ်ခုစလုံးကို ၃ စက္ကန့်ခန့် ဖိထားခြင်းဖြင့် အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည်။"</string>
+ <string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"ဖြတ်လမ်းလင့်ခ်ကို ဖွင့်ထားစဉ် အသံထိန်းခလုတ် နှစ်ခုစလုံးကို ၃ စက္ကန့်ခန့် ဖိထားခြင်းဖြင့် အများသုံးနိုင်သည့် ဝန်ဆောင်မှုကို ဖွင့်နိုင်သည်။"</string>
<string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများအတွက် ဖြတ်လမ်းကို ဖွင့်မလား။"</string>
<string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"အသံခလုတ်နှစ်ခုလုံးကို စက္ကန့်အနည်းငယ် ဖိထားခြင်းက အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုများ ဖွင့်ပေးသည်။ ဤလုပ်ဆောင်ချက်က သင့်စက်အလုပ်လုပ်ပုံကို ပြောင်းလဲနိုင်သည်။\n\nလက်ရှိ ဝန်ဆောင်မှုများ-\n<xliff:g id="SERVICE">%1$s</xliff:g>\n\'ဆက်တင်များ > အများသုံးစွဲနိုင်မှု\' တွင် ရွေးထားသည့် ဝန်ဆောင်မှုများကို ပြောင်းနိုင်သည်။"</string>
<string name="accessibility_shortcut_multiple_service_list" msgid="2128323171922023762">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string>
<string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"<xliff:g id="SERVICE">%1$s</xliff:g> ဖြတ်လမ်းကို ဖွင့်မလား။"</string>
- <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"အသံခလုတ်နှစ်ခုလုံးကို စက္ကန့်အနည်းငယ် ဖိထားခြင်းက အများသုံးစွဲနိုင်မှုဆိုင်ရာ ဝန်ဆောင်မှုဖြစ်သော <xliff:g id="SERVICE">%1$s</xliff:g> ကို ဖွင့်ပေးသည်။ ဤလုပ်ဆောင်ချက်က သင့်စက်အလုပ်လုပ်ပုံကို ပြောင်းလဲနိုင်သည်။\n\nဤဖြတ်လမ်းလင့်ခ်ကို \'ဆက်တင်များ > အများသုံးစွဲနိုင်မှု\' တွင် နောက်ဝန်ဆောင်မှုတစ်ခုသို့ ပြောင်းနိုင်သည်။"</string>
+ <string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"အသံခလုတ်နှစ်ခုလုံးကို စက္ကန့်အနည်းငယ် ဖိထားခြင်းက အများသုံးနိုင်သည့် ဝန်ဆောင်မှုဖြစ်သော <xliff:g id="SERVICE">%1$s</xliff:g> ကို ဖွင့်ပေးသည်။ ဤလုပ်ဆောင်ချက်က သင့်စက်အလုပ်လုပ်ပုံကို ပြောင်းလဲနိုင်သည်။\n\nဤဖြတ်လမ်းလင့်ခ်ကို ဆက်တင်များ > အများသုံးနိုင်မှုတွင် နောက်ဝန်ဆောင်မှုတစ်ခုသို့ ပြောင်းနိုင်သည်။"</string>
<string name="accessibility_shortcut_on" msgid="5463618449556111344">"ဖွင့်ရန်"</string>
<string name="accessibility_shortcut_off" msgid="3651336255403648739">"မဖွင့်ပါနှင့်"</string>
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"ဖွင့်"</string>
@@ -1730,9 +1730,9 @@
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"အသံခလုတ်များကို ဖိထားသည်။ <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ဖွင့်လိုက်သည်။"</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"အသံခလုတ်များကို ဖိထားသည်။ <xliff:g id="SERVICE_NAME">%1$s</xliff:g> ပိတ်လိုက်သည်။"</string>
<string name="accessibility_shortcut_spoken_feedback" msgid="4228997042855695090">"<xliff:g id="SERVICE_NAME">%1$s</xliff:g> ကို သုံးရန် အသံအတိုးအလျှော့ ခလုတ်နှစ်ခုလုံးကို သုံးစက္ကန့်ကြာ ဖိထားပါ"</string>
- <string name="accessibility_button_prompt_text" msgid="8343213623338605305">"အများသုံးစွဲနိုင်မှု ခလုတ်ကို တို့သည့်အခါ အသုံးပြုမည့် ဝန်ဆောင်မှုကို ရွေးချယ်ပါ−"</string>
- <string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"အများသုံးစွဲနိုင်မှုလက်ဟန်ဖြင့် အသုံးပြုရန် ဝန်ဆောင်မှုတစ်ခုကို ရွေးပါ (ဖန်သားပြင်အောက်ခြေမှနေ၍ လက်နှစ်ချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပါ)-"</string>
- <string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"အများသုံးစွဲနိုင်မှုလက်ဟန်ဖြင့် အသုံးပြုရန် ဝန်ဆောင်မှုတစ်ခုကို ရွေးပါ (ဖန်သားပြင်အောက်ခြေမှနေ၍ လက်သုံးချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပါ)-"</string>
+ <string name="accessibility_button_prompt_text" msgid="8343213623338605305">"သုံးနိုင်မှုခလုတ်ကို တို့ပြီးလျှင် ဝန်ဆောင်မှုတစ်ခု ရွေးပါ−"</string>
+ <string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"သုံးနိုင်မှုလက်ဟန်ဖြင့် အသုံးပြုရန် ဝန်ဆောင်မှုတစ်ခုကို ရွေးပါ (ဖန်သားပြင်အောက်ခြေမှနေ၍ လက်နှစ်ချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပါ)-"</string>
+ <string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"သုံးနိုင်မှုလက်ဟန်ဖြင့် အသုံးပြုရန် ဝန်ဆောင်မှုတစ်ခုကို ရွေးပါ (ဖန်သားပြင်အောက်ခြေမှနေ၍ လက်သုံးချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပါ)-"</string>
<string name="accessibility_button_instructional_text" msgid="8853928358872550500">"ဝန်ဆောင်မှုများအကြား ပြောင်းရန် အများသုံးစွဲနိုင်မှုခလုတ်ကို ဖိထားပါ။"</string>
<string name="accessibility_gesture_instructional_text" msgid="9196230728837090497">"ဝန်ဆောင်မှုများအကြား ပြောင်းရန် လက်နှစ်ချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပြီး ဖိထားပါ။"</string>
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"ဝန်ဆောင်မှုများအကြား ပြောင်းရန် လက်သုံးချောင်းဖြင့် အပေါ်သို့ ပွတ်ဆွဲပြီး ဖိထားပါ။"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index b05c2da..9af41e1 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1375,7 +1375,7 @@
<string name="usb_midi_notification_title" msgid="7404506788950595557">"I-MIDI nge-USB ivuliwe"</string>
<string name="usb_accessory_notification_title" msgid="1385394660861956980">"Insiza ye-USB ixhunyiwe"</string>
<string name="usb_notification_message" msgid="4715163067192110676">"Thepha ngezinketho eziningi."</string>
- <string name="usb_power_notification_message" msgid="7284765627437897702">"Ishaja idivayisi exhunyiwe. Thepha ukuze uthole ezinye izinketho."</string>
+ <string name="usb_power_notification_message" msgid="7284765627437897702">"Ishaja idivayisi exhunyiwe. Thepha ukuze uthole okunye okungakhethwa."</string>
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Kutholwe isisetshenziswa se-analog yomsindo"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Idivayisi enamathiselwe kwi-imeyili ayihambisani nale foni. Thepha ukuze ufunde kabanzi."</string>
<string name="adb_active_notification_title" msgid="408390247354560331">"Ukulungisa iphutha le-USB kuxhunyiwe"</string>
diff --git a/libs/WindowManager/Shell/res/layout/compat_mode_hint.xml b/libs/WindowManager/Shell/res/layout/compat_mode_hint.xml
index 4ac972c..44b2f45 100644
--- a/libs/WindowManager/Shell/res/layout/compat_mode_hint.xml
+++ b/libs/WindowManager/Shell/res/layout/compat_mode_hint.xml
@@ -21,7 +21,7 @@
android:orientation="vertical"
android:clipToPadding="false"
android:paddingEnd="@dimen/compat_hint_padding_end"
- android:paddingBottom="5dp"
+ android:paddingBottom="8dp"
android:clickable="true">
<TextView
diff --git a/libs/WindowManager/Shell/res/layout/compat_ui_layout.xml b/libs/WindowManager/Shell/res/layout/compat_ui_layout.xml
index c99f3fe..dfaeeeb 100644
--- a/libs/WindowManager/Shell/res/layout/compat_ui_layout.xml
+++ b/libs/WindowManager/Shell/res/layout/compat_ui_layout.xml
@@ -33,8 +33,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
- android:layout_marginEnd="16dp"
- android:layout_marginBottom="16dp"
+ android:layout_marginEnd="@dimen/compat_button_margin"
+ android:layout_marginBottom="@dimen/compat_button_margin"
android:orientation="vertical">
<ImageButton
@@ -62,8 +62,10 @@
<ImageButton
android:id="@+id/size_compat_restart_button"
android:visibility="gone"
- android:layout_width="@dimen/size_compat_button_width"
- android:layout_height="@dimen/size_compat_button_height"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/compat_button_margin"
+ android:layout_marginBottom="@dimen/compat_button_margin"
android:src="@drawable/size_compat_restart_button_ripple"
android:background="@android:color/transparent"
android:contentDescription="@string/restart_button_description"/>
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index 8b32b38..ec0e9ea 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Bestuur"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Borrel is toegemaak."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tik om hierdie program te herbegin en maak volskerm oop."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerakwessies?\nTik om aan te pas"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nie opgelos nie?\nTik om terug te stel"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen kamerakwessies nie? Tik om toe te maak."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index 8b898c0..646a0d3 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ያቀናብሩ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"አረፋ ተሰናብቷል።"</string>
<string name="restart_button_description" msgid="5887656107651190519">"ይህን መተግበሪያ ዳግም ለማስነሳት መታ ያድርጉ እና ወደ ሙሉ ማያ ገጽ ይሂዱ።"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"የካሜራ ችግሮች አሉ?\nዳግም ለማበጀት መታ ያድርጉ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"አልተስተካከለም?\nለማህደር መታ ያድርጉ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ምንም የካሜራ ችግሮች የሉም? ለማሰናበት መታ ያድርጉ።"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml
index a9eafdd..a184fe4 100644
--- a/libs/WindowManager/Shell/res/values-ar/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ar/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"إدارة"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"تم إغلاق الفقاعة."</string>
<string name="restart_button_description" msgid="5887656107651190519">"انقر لإعادة تشغيل هذا التطبيق والانتقال إلى وضع ملء الشاشة."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"هل هناك مشاكل في الكاميرا؟\nانقر لإعادة الضبط."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ألم يتم حل المشكلة؟\nانقر للعودة"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"أليس هناك مشاكل في الكاميرا؟ انقر للإغلاق."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml
index a81d4e3..c58c025 100644
--- a/libs/WindowManager/Shell/res/values-as/strings.xml
+++ b/libs/WindowManager/Shell/res/values-as/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"পৰিচালনা কৰক"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল অগ্ৰাহ্য কৰা হৈছে"</string>
<string name="restart_button_description" msgid="5887656107651190519">"এপ্টো ৰিষ্টাৰ্ট কৰিবলৈ আৰু পূৰ্ণ স্ক্ৰীন ব্যৱহাৰ কৰিবলৈ টিপক।"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"কেমেৰাৰ কোনো সমস্যা হৈছে নেকি?\nপুনৰ খাপ খোৱাবলৈ টিপক"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এইটো সমাধান কৰা নাই নেকি?\nপূৰ্বাৱস্থালৈ নিবলৈ টিপক"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"কেমেৰাৰ কোনো সমস্যা নাই নেকি? অগ্ৰাহ্য কৰিবলৈ টিপক।"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index 45e3fdb..945f738 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"İdarə edin"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Qabarcıqdan imtina edilib."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Bu tətbiqi sıfırlayaraq tam ekrana keçmək üçün toxunun."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera problemi var?\nBərpa etmək üçün toxunun"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Düzəltməmisiniz?\nGeri qaytarmaq üçün toxunun"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera problemi yoxdur? Qapatmaq üçün toxunun."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
index c17b3c4..cac983b 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljajte"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da biste restartovali aplikaciju i prešli u režim celog ekrana."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Imate problema sa kamerom?\nDodirnite da biste ponovo uklopili"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije rešen?\nDodirnite da biste vratili"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema sa kamerom? Dodirnite da biste odbacili."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-be/strings.xml b/libs/WindowManager/Shell/res/values-be/strings.xml
index bcf7186..791bcef 100644
--- a/libs/WindowManager/Shell/res/values-be/strings.xml
+++ b/libs/WindowManager/Shell/res/values-be/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Кіраваць"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Усплывальнае апавяшчэнне адхілена."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Націсніце, каб перазапусціць гэту праграму і перайсці ў поўнаэкранны рэжым."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Праблемы з камерай?\nНацісніце, каб пераабсталяваць"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не ўдалося выправіць?\nНацісніце, каб аднавіць"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ніякіх праблем з камерай? Націсніце, каб адхіліць."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index 5f48744..2974b85 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Управление"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отхвърлено."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Докоснете, за да рестартирате това приложение в режим на цял екран."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблеми с камерата?\nДокоснете за ремонтиране"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблемът не се отстрани?\nДокоснете за връщане в предишното състояние"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нямате проблеми с камерата? Докоснете, за да отхвърлите."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index f96d65f..e359d46 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ম্যানেজ করুন"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"বাবল বাতিল করা হয়েছে।"</string>
<string name="restart_button_description" msgid="5887656107651190519">"এই অ্যাপ রিস্টার্ট করতে ট্যাপ করুন ও \'ফুল-স্ক্রিন\' মোড ব্যবহার করুন।"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ক্যামেরা সংক্রান্ত সমস্যা?\nরিফিট করতে ট্যাপ করুন"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"এখনও সমাধান হয়নি?\nরিভার্ট করার জন্য ট্যাপ করুন"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ক্যামেরা সংক্রান্ত সমস্যা নেই? বাতিল করতে ট্যাপ করুন।"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index 1e068c6..e3990e0 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljaj"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić je odbačen."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da ponovo pokrenete ovu aplikaciju i aktivirate prikaz preko cijelog ekrana."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s kamerom?\nDodirnite da ponovo namjestite"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nije popravljeno?\nDodirnite da vratite"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nema problema s kamerom? Dodirnite da odbacite."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings_tv.xml b/libs/WindowManager/Shell/res/values-bs/strings_tv.xml
index 8e301b0..9a655bb 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings_tv.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings_tv.xml
@@ -19,6 +19,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="notification_channel_tv_pip" msgid="2576686079160402435">"Slika u slici"</string>
<string name="pip_notification_unknown_title" msgid="2729870284350772311">"(Program bez naslova)"</string>
- <string name="pip_close" msgid="9135220303720555525">"Zatvori PIP"</string>
+ <string name="pip_close" msgid="9135220303720555525">"Zatvori sliku u slici"</string>
<string name="pip_fullscreen" msgid="7278047353591302554">"Cijeli ekran"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 97585ef..f3c2470 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gestiona"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"La bombolla s\'ha ignorat."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toca per reiniciar aquesta aplicació i passar a pantalla completa."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tens problemes amb la càmera?\nToca per resoldre\'ls"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"El problema no s\'ha resolt?\nToca per desfer els canvis"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No tens cap problema amb la càmera? Toca per ignorar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index 7a3a890..d1c9a46 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovat"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina byla zavřena."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Klepnutím aplikaci restartujete a přejdete na režim celé obrazovky"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s fotoaparátem?\nKlepnutím vyřešíte"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepomohlo to?\nKlepnutím se vrátíte"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Žádné problémy s fotoaparátem? Klepnutím zavřete."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml
index 4a025ba..94f9a7a 100644
--- a/libs/WindowManager/Shell/res/values-da/strings.xml
+++ b/libs/WindowManager/Shell/res/values-da/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen blev lukket."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tryk for at genstarte denne app, og gå til fuld skærm."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du problemer med dit kamera?\nTryk for at gendanne det oprindelige format"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Løste det ikke problemet?\nTryk for at fortryde"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen problemer med dit kamera? Tryk for at afvise."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index bacd512..d1851ea 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Verwalten"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble verworfen."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tippe, um die App im Vollbildmodus neu zu starten."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Probleme mit der Kamera?\nZum Anpassen tippen."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Das Problem ist nicht behoben?\nZum Rückgängigmachen tippen."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Keine Probleme mit der Kamera? Zum Schließen tippen."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index f306ba3..21d7474 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Διαχείριση"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Το συννεφάκι παραβλέφθηκε."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Πατήστε για επανεκκίνηση αυτής της εφαρμογής και ενεργοποίηση πλήρους οθόνης."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Προβλήματα με την κάμερα;\nΠατήστε για επιδιόρθωση."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Δεν διορθώθηκε;\nΠατήστε για επαναφορά."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Δεν αντιμετωπίζετε προβλήματα με την κάμερα; Πατήστε για παράβλεψη."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
index 1ffbd039..7ac28ea9 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
index 1ffbd039..7ac28ea9 100644
--- a/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rCA/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 1ffbd039..7ac28ea9 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
index 1ffbd039..7ac28ea9 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Manage"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubble dismissed."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tap to restart this app and go full screen."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Camera issues?\nTap to refit"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Didn’t fix it?\nTap to revert"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"No camera issues? Tap to dismiss."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
index 1ca7bfc..d8db8e1 100644
--- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Administrar"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Se descartó el cuadro."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Presiona para reiniciar esta app y acceder al modo de pantalla completa."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Tienes problemas con la cámara?\nPresiona para reajustarla"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se resolvió?\nPresiona para revertir los cambios"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No tienes problemas con la cámara? Presionar para descartar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index 3d46421..9a7d1c0 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionar"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbuja cerrada."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toca para reiniciar esta aplicación e ir a la pantalla completa."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"¿Problemas con la cámara?\nToca para reajustar"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"¿No se ha solucionado?\nToca para revertir"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"¿No hay problemas con la cámara? Toca para cerrar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index 4f5d563..9dfd6cf 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Halda"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Mullist loobuti."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Puudutage rakenduse taaskäivitamiseks ja täisekraanrežiimi aktiveerimiseks."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kas teil on kaameraprobleeme?\nPuudutage ümberpaigutamiseks."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Kas probleemi ei lahendatud?\nPuudutage ennistamiseks."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kas kaameraprobleeme pole? Puudutage loobumiseks."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index b76ccc8..210c441 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Kudeatu"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Baztertu da globoa."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Saka ezazu aplikazioa berrabiarazteko, eta ezarri pantaila osoko modua."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Arazoak dauzkazu kamerarekin?\nBerriro doitzeko, sakatu hau."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ez al da konpondu?\nLeheneratzeko, sakatu hau."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ez daukazu arazorik kamerarekin? Baztertzeko, sakatu hau."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index aef3c62..87c7f8b 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"مدیریت"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"حبابک رد شد."</string>
<string name="restart_button_description" msgid="5887656107651190519">"برای بازراهاندازی این برنامه و تغییر به حالت تمامصفحه، ضربه بزنید."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"دوربین مشکل دارد؟\nبرای تنظیم مجدد اندازه ضربه بزنید"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"مشکل برطرف نشد؟\nبرای برگرداندن ضربه بزنید"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"دوربین مشکلی ندارد؟ برای بستن ضربه بزنید."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index 5f76ba4..7b2ea03 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Ylläpidä"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Kupla ohitettu."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Napauta, niin sovellus käynnistyy uudelleen ja siirtyy koko näytön tilaan."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Onko kameran kanssa ongelmia?\nKorjaa napauttamalla"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Eikö ongelma ratkennut?\nKumoa napauttamalla"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ei ongelmia kameran kanssa? Hylkää napauttamalla."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
index e1843e7..338b8bb 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle ignorée."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Touchez pour redémarrer cette application et passer en plein écran."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo?\nTouchez pour réajuster"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu?\nTouchez pour rétablir"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo? Touchez pour ignorer."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index b3f3349..22d1d19 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gérer"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulle fermée."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Appuyez pour redémarrer cette application et activer le mode plein écran."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problèmes d\'appareil photo ?\nAppuyez pour réajuster"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problème non résolu ?\nAppuyez pour rétablir"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Aucun problème d\'appareil photo ? Appuyez pour ignorer."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index 3cdddf3..4bd70a1 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Xestionar"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ignorouse a burbulla."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toca o botón para reiniciar esta aplicación e abrila en pantalla completa."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Tes problemas coa cámara?\nToca para reaxustala"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Non se solucionaron os problemas?\nToca para reverter o seu tratamento"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Non hai problemas coa cámara? Tocar para ignorar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml
index 09d206e..81c5ba9 100644
--- a/libs/WindowManager/Shell/res/values-gu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gu/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"મેનેજ કરો"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"બબલ છોડી દેવાયો."</string>
<string name="restart_button_description" msgid="5887656107651190519">"આ ઍપ ફરીથી ચાલુ કરવા માટે ટૅપ કરીને પૂર્ણ સ્ક્રીન કરો."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"કૅમેરામાં સમસ્યાઓ છે?\nફરીથી ફિટ કરવા માટે ટૅપ કરો"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"સુધારો નથી થયો?\nપહેલાંના પર પાછું ફેરવવા માટે ટૅપ કરો"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"કૅમેરામાં કોઈ સમસ્યા નથી? છોડી દેવા માટે ટૅપ કરો."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index 0ce5114..56c3271 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"मैनेज करें"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल खारिज किया गया."</string>
<string name="restart_button_description" msgid="5887656107651190519">"इस ऐप्लिकेशन को रीस्टार्ट करने और फ़ुल स्क्रीन पर देखने के लिए टैप करें."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्या कैमरे से जुड़ी कोई समस्या है?\nफिर से फ़िट करने के लिए टैप करें"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"क्या समस्या ठीक नहीं हुई?\nपहले जैसा करने के लिए टैप करें"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्या कैमरे से जुड़ी कोई समस्या नहीं है? खारिज करने के लिए टैप करें."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hr/strings.xml b/libs/WindowManager/Shell/res/values-hr/strings.xml
index e8c83f1..d71bc1d 100644
--- a/libs/WindowManager/Shell/res/values-hr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hr/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblačić odbačen."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Dodirnite da biste ponovo pokrenuli tu aplikaciju i prikazali je na cijelom zaslonu."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi s fotoaparatom?\nDodirnite za popravak"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Problem nije riješen?\nDodirnite za vraćanje"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemate problema s fotoaparatom? Dodirnite za odbacivanje."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index 6d60513..a69f197 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Kezelés"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Buborék elvetve."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Koppintson az alkalmazás újraindításához és a teljes képernyős mód elindításához."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamerával kapcsolatos problémába ütközött?\nKoppintson a megoldáshoz."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nem sikerült a hiba kijavítása?\nKoppintson a visszaállításhoz."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nincsenek problémái kamerával? Koppintson az elvetéshez."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index f1ec076..e38285e 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Կառավարել"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ամպիկը փակվեց։"</string>
<string name="restart_button_description" msgid="5887656107651190519">"Հպեք՝ հավելվածը վերագործարկելու և լիաէկրան ռեժիմին անցնելու համար։"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Տեսախցիկի հետ կապված խնդիրնե՞ր կան։\nՀպեք՝ վերակարգավորելու համար։"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Չհաջողվե՞ց շտկել։\nՀպեք՝ փոփոխությունները չեղարկելու համար։"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Տեսախցիկի հետ կապված խնդիրներ չկա՞ն։ Փակելու համար հպեք։"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 62dfcb7..036acb8 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Kelola"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon ditutup."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Ketuk untuk memulai ulang aplikasi ini dan membuka layar penuh."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Masalah kamera?\nKetuk untuk memperbaiki"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tidak dapat diperbaiki?\nKetuk untuk mengembalikan"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tidak ada masalah kamera? Ketuk untuk menutup."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index feab362..2f98487 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Stjórna"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Blöðru lokað."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Ýttu til að endurræsa forritið og sýna það á öllum skjánum."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Myndavélavesen?\nÝttu til að breyta stærð"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ennþá vesen?\nÝttu til að afturkalla"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Ekkert myndavélavesen? Ýttu til að hunsa."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml
index bfcd385..e4da3939 100644
--- a/libs/WindowManager/Shell/res/values-it/strings.xml
+++ b/libs/WindowManager/Shell/res/values-it/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gestisci"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Fumetto ignorato."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tocca per riavviare l\'app e passare alla modalità a schermo intero."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemi con la fotocamera?\nTocca per risolverli"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Il problema non si è risolto?\nTocca per ripristinare"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nessun problema con la fotocamera? Tocca per ignorare."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index 7ef5035..99294f9 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ניהול"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"הבועה נסגרה."</string>
<string name="restart_button_description" msgid="5887656107651190519">"צריך להקיש כדי להפעיל מחדש את האפליקציה הזו ולעבור למסך מלא."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"בעיות במצלמה?\nאפשר להקיש כדי לבצע התאמה מחדש"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"הבעיה לא נפתרה?\nאפשר להקיש כדי לחזור לגרסה הקודמת"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"אין בעיות במצלמה? אפשר להקיש כדי לסגור."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ja/strings.xml b/libs/WindowManager/Shell/res/values-ja/strings.xml
index fb58abb..1ee606a 100644
--- a/libs/WindowManager/Shell/res/values-ja/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ja/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ふきだしが非表示になっています。"</string>
<string name="restart_button_description" msgid="5887656107651190519">"タップしてこのアプリを再起動すると、全画面表示になります。"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"カメラに関する問題の場合は、\nタップすると修正できます"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"修正されなかった場合は、\nタップすると元に戻ります"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"カメラに関する問題でない場合は、タップすると閉じます。"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml
index 297d9af..e8efa8d 100644
--- a/libs/WindowManager/Shell/res/values-ka/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ka/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"მართვა"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ბუშტი დაიხურა."</string>
<string name="restart_button_description" msgid="5887656107651190519">"შეეხეთ ამ აპის გადასატვირთად და გადადით სრულ ეკრანზე."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"კამერად პრობლემები აქვს?\nშეეხეთ გამოსასწორებლად"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"არ გამოსწორდა?\nშეეხეთ წინა ვერსიის დასაბრუნებლად"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"კამერას პრობლემები არ აქვს? შეეხეთ უარყოფისთვის."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index 7ca2f23..0c3f8f54 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Басқару"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Қалқыма хабар жабылды."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Бұл қолданбаны қайта қосып, толық экранға өту үшін түртіңіз."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада қателер шықты ма?\nЖөндеу үшін түртіңіз."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Жөнделмеді ме?\nҚайтару үшін түртіңіз."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада қателер шықпады ма? Жабу үшін түртіңіз."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml
index dae2293..e5ecf81 100644
--- a/libs/WindowManager/Shell/res/values-km/strings.xml
+++ b/libs/WindowManager/Shell/res/values-km/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"គ្រប់គ្រង"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"បានច្រានចោលសារលេចឡើង។"</string>
<string name="restart_button_description" msgid="5887656107651190519">"ចុចដើម្បីចាប់ផ្ដើមកម្មវិធីនេះឡើងវិញ រួចចូលប្រើពេញអេក្រង់។"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"មានបញ្ហាពាក់ព័ន្ធនឹងកាមេរ៉ាឬ?\nចុចដើម្បីដោះស្រាយ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"មិនបានដោះស្រាយបញ្ហានេះទេឬ?\nចុចដើម្បីត្រឡប់"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"មិនមានបញ្ហាពាក់ព័ន្ធនឹងកាមេរ៉ាទេឬ? ចុចដើម្បីច្រានចោល។"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml
index 72ba8ea..69a6df8 100644
--- a/libs/WindowManager/Shell/res/values-kn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kn/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ನಿರ್ವಹಿಸಿ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ಬಬಲ್ ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="restart_button_description" msgid="5887656107651190519">"ಈ ಆ್ಯಪ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಮತ್ತು ಪೂರ್ಣ ಸ್ಕ್ರೀನ್ನಲ್ಲಿ ನೋಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿವೆಯೇ?\nಮರುಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ಅದನ್ನು ಸರಿಪಡಿಸಲಿಲ್ಲವೇ?\nಹಿಂತಿರುಗಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ಕ್ಯಾಮರಾ ಸಮಸ್ಯೆಗಳಿಲ್ಲವೇ? ವಜಾಗೊಳಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index d99abc4..804b78c 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"관리"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"대화창을 닫았습니다."</string>
<string name="restart_button_description" msgid="5887656107651190519">"탭하여 이 앱을 다시 시작하고 전체 화면으로 이동합니다."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"카메라 문제가 있나요?\n해결하려면 탭하세요."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"해결되지 않았나요?\n되돌리려면 탭하세요."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"카메라에 문제가 없나요? 닫으려면 탭하세요."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index fe25161..c7e7a05 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Башкаруу"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Калкып чыкма билдирме жабылды."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Бул колдонмону өчүрүп күйгүзүп, толук экранга өтүү үчүн таптап коюңуз."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерада маселелер келип чыктыбы?\nОңдоо үчүн таптаңыз"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Оңдолгон жокпу?\nАртка кайтаруу үчүн таптаңыз"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерада маселе жокпу? Этибарга албоо үчүн таптаңыз."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index 786d837..a94507f 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ຈັດການ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ປິດ Bubble ໄສ້ແລ້ວ."</string>
<string name="restart_button_description" msgid="5887656107651190519">"ແຕະເພື່ອຣີສະຕາດແອັບນີ້ ແລະ ໃຊ້ແບບເຕັມຈໍ."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ?\nແຕະເພື່ອປັບໃໝ່"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ບໍ່ໄດ້ແກ້ໄຂມັນບໍ?\nແຕະເພື່ອແປງກັບຄືນ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ບໍ່ມີບັນຫາກ້ອງຖ່າຍຮູບບໍ? ແຕະເພື່ອປິດໄວ້."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lt/strings.xml b/libs/WindowManager/Shell/res/values-lt/strings.xml
index 32bdfc4..dae4d71 100644
--- a/libs/WindowManager/Shell/res/values-lt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lt/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Tvarkyti"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Debesėlio atsisakyta."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Palieskite, kad paleistumėte iš naujo šią programą ir įjungtumėte viso ekrano režimą."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Iškilo problemų dėl kameros?\nPalieskite, kad pritaikytumėte iš naujo"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nepavyko pataisyti?\nPalieskite, kad grąžintumėte"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nėra jokių problemų dėl kameros? Palieskite, kad atsisakytumėte."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index 5d0f318..564002d 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Pārvaldīt"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Burbulis ir noraidīts."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Pieskarieties, lai restartētu šo lietotni un pārietu pilnekrāna režīmā."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Vai ir problēmas ar kameru?\nPieskarieties, lai tās novērstu."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Vai problēma netika novērsta?\nPieskarieties, lai atjaunotu."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Vai nav problēmu ar kameru? Pieskarieties, lai nerādītu."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index 8c2e44c..a9b0019 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Управувајте"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Балончето е отфрлено."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Допрете за да ја рестартирате апликацијава и да ја отворите на цел екран."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми со камерата?\nДопрете за да се совпадне повторно"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не се поправи?\nДопрете за враќање"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нема проблеми со камерата? Допрете за отфрлање."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml
index 6c8883a..9326134 100644
--- a/libs/WindowManager/Shell/res/values-ml/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ml/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"മാനേജ് ചെയ്യുക"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ബബിൾ ഡിസ്മിസ് ചെയ്തു."</string>
<string name="restart_button_description" msgid="5887656107651190519">"ഈ ആപ്പ് റീസ്റ്റാർട്ട് ചെയ്ത് പൂർണ്ണ സ്ക്രീനിലേക്ക് മാറാൻ ടാപ്പ് ചെയ്യുക."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ക്യാമറ പ്രശ്നങ്ങളുണ്ടോ?\nശരിയാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"അത് പരിഹരിച്ചില്ലേ?\nപുനഃസ്ഥാപിക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ക്യാമറാ പ്രശ്നങ്ങളൊന്നുമില്ലേ? നിരസിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index d297923..8f21592 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Удирдах"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Бөмбөлгийг үл хэрэгссэн."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Энэ аппыг дахин эхлүүлж, бүтэн дэлгэцэд орохын тулд товшино уу."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Камерын асуудал гарсан уу?\nДахин тааруулахын тулд товшино уу"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Үүнийг засаагүй юу?\nБуцаахын тулд товшино уу"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Камерын асуудал байхгүй юу? Хаахын тулд товшино уу."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index 3d9b53c..936c252 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापित करा"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल डिसमिस केला."</string>
<string name="restart_button_description" msgid="5887656107651190519">"हे अॅप रीस्टार्ट करण्यासाठी आणि फुल स्क्रीन करण्यासाठी टॅप करा."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"कॅमेराशी संबंधित काही समस्या आहेत का?\nपुन्हा फिट करण्यासाठी टॅप करा"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"निराकरण झाले नाही?\nरिव्हर्ट करण्यासाठी कृपया टॅप करा"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"कॅमेराशी संबंधित कोणत्याही समस्या नाहीत का? डिसमिस करण्यासाठी टॅप करा."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ms/strings.xml b/libs/WindowManager/Shell/res/values-ms/strings.xml
index 0aafb59..15c122c 100644
--- a/libs/WindowManager/Shell/res/values-ms/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ms/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Urus"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Gelembung diketepikan."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Ketik untuk memulakan semula apl ini dan menggunakan skrin penuh."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Isu kamera?\nKetik untuk memuatkan semula"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Isu tidak dibetulkan?\nKetik untuk kembali"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Tiada isu kamera? Ketik untuk mengetepikan."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index 899c607..c54e3b3 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"စီမံရန်"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ပူဖောင်းကွက် ဖယ်လိုက်သည်။"</string>
<string name="restart_button_description" msgid="5887656107651190519">"ဤအက်ပ်ကို ပြန်စပြီး ဖန်သားပြင်အပြည့်လုပ်ရန် တို့ပါ။"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ကင်မရာပြဿနာလား။\nပြင်ဆင်ရန် တို့ပါ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ကောင်းမသွားဘူးလား။\nပြန်ပြောင်းရန် တို့ပါ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ကင်မရာပြဿနာ မရှိဘူးလား။ ပယ်ရန် တို့ပါ။"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index 60891d3..ae33f7a 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Administrer"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Boblen er avvist."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Trykk for å starte denne appen på nytt og vise den i fullskjerm."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Har du kameraproblemer?\nTrykk for å tilpasse"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Ble ikke problemet løst?\nTrykk for å gå tilbake"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Har du ingen kameraproblemer? Trykk for å lukke."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index 8bd6907..bbf247c 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"व्यवस्थापन गर्नुहोस्"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"बबल हटाइयो।"</string>
<string name="restart_button_description" msgid="5887656107651190519">"यो एप रिस्टार्ट गर्न ट्याप गर्नुहोस् र फुल स्क्रिन मोडमा जानुहोस्।"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"क्यामेरासम्बन्धी समस्या देखियो?\nसमस्या हल गर्न ट्याप गर्नुहोस्"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"समस्या हल भएन?\nपहिलेको जस्तै बनाउन ट्याप गर्नुहोस्"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"क्यामेरासम्बन्धी कुनै पनि समस्या छैन? खारेज गर्न ट्याप गर्नुहोस्।"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-nl/strings.xml b/libs/WindowManager/Shell/res/values-nl/strings.xml
index 3fddf34..6a4d310 100644
--- a/libs/WindowManager/Shell/res/values-nl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nl/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Beheren"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubbel gesloten."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tik om deze app opnieuw te starten en te openen op het volledige scherm."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Cameraproblemen?\nTik om opnieuw passend te maken."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Is dit geen oplossing?\nTik om terug te zetten."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Geen cameraproblemen? Tik om te sluiten."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index 217556e..09fe95b 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ପରିଚାଳନା କରନ୍ତୁ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ବବଲ୍ ଖାରଜ କରାଯାଇଛି।"</string>
<string name="restart_button_description" msgid="5887656107651190519">"ଏହି ଆପକୁ ରିଷ୍ଟାର୍ଟ କରି ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ।"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"କ୍ୟାମେରାରେ ସମସ୍ୟା ଅଛି?\nପୁଣି ଫିଟ କରିବାକୁ ଟାପ କରନ୍ତୁ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ଏହାର ସମାଧାନ ହୋଇନାହିଁ?\nଫେରିଯିବା ପାଇଁ ଟାପ କରନ୍ତୁ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"କ୍ୟାମେରାରେ କିଛି ସମସ୍ୟା ନାହିଁ? ଖାରଜ କରିବାକୁ ଟାପ କରନ୍ତୁ।"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pa/strings.xml b/libs/WindowManager/Shell/res/values-pa/strings.xml
index dc4dae1..3c7f373 100644
--- a/libs/WindowManager/Shell/res/values-pa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pa/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"ਪ੍ਰਬੰਧਨ ਕਰੋ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ਬਬਲ ਨੂੰ ਖਾਰਜ ਕੀਤਾ ਗਿਆ।"</string>
<string name="restart_button_description" msgid="5887656107651190519">"ਇਸ ਐਪ ਨੂੰ ਮੁੜ-ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਪੂਰੀ ਸਕ੍ਰੀਨ ਮੋਡ \'ਤੇ ਜਾਓ।"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਸਮੱਸਿਆਵਾਂ ਹਨ?\nਮੁੜ-ਫਿੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"ਕੀ ਇਹ ਠੀਕ ਨਹੀਂ ਹੋਈ?\nਵਾਪਸ ਉਹੀ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"ਕੀ ਕੈਮਰੇ ਸੰਬੰਧੀ ਕੋਈ ਸਮੱਸਿਆ ਨਹੀਂ ਹੈ? ਖਾਰਜ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index fccd138..cb89c39 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Zarządzaj"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Zamknięto dymek"</string>
<string name="restart_button_description" msgid="5887656107651190519">"Kliknij, by uruchomić tę aplikację ponownie i przejść w tryb pełnoekranowy."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemy z aparatem?\nKliknij, aby dopasować"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Naprawa się nie udała?\nKliknij, aby cofnąć"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Brak problemów z aparatem? Kliknij, aby zamknąć"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
index 5664030..73cf177 100644
--- a/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rBR/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar o app e usar tela cheia."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index abe6a01..8ea4c2f 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gerir"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão ignorado."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar esta app e ficar em ecrã inteiro."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmara?\nToque aqui para reajustar"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Não foi corrigido?\nToque para reverter"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nenhum problema com a câmara? Toque para ignorar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-pt/strings.xml b/libs/WindowManager/Shell/res/values-pt/strings.xml
index 5664030..73cf177 100644
--- a/libs/WindowManager/Shell/res/values-pt/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gerenciar"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balão dispensado."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Toque para reiniciar o app e usar tela cheia."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problemas com a câmera?\nToque para ajustar o enquadramento"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"O problema não foi corrigido?\nToque para reverter"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Não tem problemas com a câmera? Toque para dispensar."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 39dec90..eb77c6a 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Gestionați"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balonul a fost respins."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Atingeți ca să reporniți aplicația și să treceți în modul ecran complet."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Aveți probleme cu camera foto?\nAtingeți pentru a reîncadra"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nu ați remediat problema?\nAtingeți pentru a reveni"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nu aveți probleme cu camera foto? Atingeți pentru a închide."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml
index e3c2215..64de668 100644
--- a/libs/WindowManager/Shell/res/values-ru/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ru/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Настроить"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Всплывающий чат закрыт."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Нажмите, чтобы перезапустить приложение и перейти в полноэкранный режим."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблемы с камерой?\nНажмите, чтобы исправить."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Не помогло?\nНажмите, чтобы отменить изменения."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Нет проблем с камерой? Нажмите, чтобы закрыть."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml
index efaf1f3..8c3aae9 100644
--- a/libs/WindowManager/Shell/res/values-si/strings.xml
+++ b/libs/WindowManager/Shell/res/values-si/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"කළමනා කරන්න"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"බුබුල ඉවත දමා ඇත."</string>
<string name="restart_button_description" msgid="5887656107651190519">"මෙම යෙදුම යළි ඇරඹීමට සහ පූර්ණ තිරයට යාමට තට්ටු කරන්න."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"කැමරා ගැටලුද?\nයළි සවි කිරීමට තට්ටු කරන්න"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"එය විසඳුවේ නැතිද?\nප්රතිවර්තනය කිරීමට තට්ටු කරන්න"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"කැමරා ගැටලු නොමැතිද? ඉවත දැමීමට තට්ටු කරන්න"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml
index a827153..5dbe5ad 100644
--- a/libs/WindowManager/Shell/res/values-sk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sk/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Spravovať"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bublina bola zavretá."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Klepnutím reštartujete túto aplikáciu a prejdete do režimu celej obrazovky."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problémy s kamerou?\nKlepnutím znova upravte."</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nevyriešilo sa to?\nKlepnutím sa vráťte."</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nemáte problémy s kamerou? Klepnutím zatvoríte."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sl/strings.xml b/libs/WindowManager/Shell/res/values-sl/strings.xml
index 7437654..61155a9 100644
--- a/libs/WindowManager/Shell/res/values-sl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sl/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Upravljanje"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Oblaček je bil opuščen."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Dotaknite se za vnovični zagon te aplikacije in preklop v celozaslonski način."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Težave s fotoaparatom?\nDotaknite se za vnovično prilagoditev"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"To ni odpravilo težave?\nDotaknite se za povrnitev"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nimate težav s fotoaparatom? Dotaknite se za opustitev."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index bda10c8..8c11ea5 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Menaxho"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Flluska u hoq."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Trokit për ta rinisur këtë aplikacion dhe për të kaluar në ekranin e plotë."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Ka probleme me kamerën?\nTrokit për ta ripërshtatur"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Nuk u rregullua?\nTrokit për ta rikthyer"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Nuk ka probleme me kamerën? Trokit për ta shpërfillur."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index 98e13be..910108d 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Управљајте"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Облачић је одбачен."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Додирните да бисте рестартовали апликацију и прешли у режим целог екрана."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Имате проблема са камером?\nДодирните да бисте поново уклопили"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблем није решен?\nДодирните да бисте вратили"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немате проблема са камером? Додирните да бисте одбацили."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index 3080088..b3fa582 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Hantera"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bubblan ignorerades."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Tryck för att starta om appen i helskärmsläge."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Problem med kameran?\nTryck för att anpassa på nytt"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Löstes inte problemet?\nTryck för att återställa"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Inga problem med kameran? Tryck för att ignorera."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index 9fb7460..286b53c 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Dhibiti"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Umeondoa kiputo."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Gusa ili uzime na uwashe programu hii, kisha nenda kwenye skrini nzima."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Je, kuna hitilafu za kamera?\nGusa ili urekebishe"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Umeshindwa kurekebisha?\nGusa ili urejeshe nakala ya awali"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Je, hakuna hitilafu za kamera? Gusa ili uondoe."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index d7f17aa..b929a1c 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"நிர்வகி"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"குமிழ் நிராகரிக்கப்பட்டது."</string>
<string name="restart_button_description" msgid="5887656107651190519">"தட்டுவதன் மூலம் இந்த ஆப்ஸை மீண்டும் தொடங்கலாம், முழுத்திரையில் பார்க்கலாம்."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"கேமரா தொடர்பான சிக்கல்களா?\nமீண்டும் பொருத்த தட்டவும்"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"சிக்கல்கள் சரிசெய்யப்படவில்லையா?\nமாற்றியமைக்க தட்டவும்"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"கேமரா தொடர்பான சிக்கல்கள் எதுவும் இல்லையா? நிராகரிக்க தட்டவும்."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-te/strings.xml b/libs/WindowManager/Shell/res/values-te/strings.xml
index 4e421b5..84cf285a 100644
--- a/libs/WindowManager/Shell/res/values-te/strings.xml
+++ b/libs/WindowManager/Shell/res/values-te/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"మేనేజ్ చేయండి"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"బబుల్ విస్మరించబడింది."</string>
<string name="restart_button_description" msgid="5887656107651190519">"ఈ యాప్ను రీస్టార్ట్ చేయడానికి ట్యాప్ చేసి, ఆపై పూర్తి స్క్రీన్లోకి వెళ్లండి."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"కెమెరా సమస్యలు ఉన్నాయా?\nరీఫిట్ చేయడానికి ట్యాప్ చేయండి"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"దాని సమస్యను పరిష్కరించలేదా?\nపూర్వస్థితికి మార్చడానికి ట్యాప్ చేయండి"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"కెమెరా సమస్యలు లేవా? తీసివేయడానికి ట్యాప్ చేయండి."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml
index 52f94e6..f0d9362 100644
--- a/libs/WindowManager/Shell/res/values-th/strings.xml
+++ b/libs/WindowManager/Shell/res/values-th/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"จัดการ"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"ปิดบับเบิลแล้ว"</string>
<string name="restart_button_description" msgid="5887656107651190519">"แตะเพื่อรีสตาร์ทแอปนี้และแสดงแบบเต็มหน้าจอ"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"หากพบปัญหากับกล้อง\nแตะเพื่อแก้ไข"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"หากไม่ได้แก้ไข\nแตะเพื่อเปลี่ยนกลับ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"หากไม่พบปัญหากับกล้อง แตะเพื่อปิด"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml
index d7b671d..1c3b8f1 100644
--- a/libs/WindowManager/Shell/res/values-tl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tl/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Pamahalaan"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Na-dismiss na ang bubble."</string>
<string name="restart_button_description" msgid="5887656107651190519">"I-tap para i-restart ang app na ito at mag-full screen."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"May mga isyu sa camera?\nI-tap para i-refit"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Hindi ito naayos?\nI-tap para i-revert"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Walang isyu sa camera? I-tap para i-dismiss."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index c618f6c..41c6c89 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Yönet"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Balon kapatıldı."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Bu uygulamayı yeniden başlatmak ve tam ekrana geçmek için dokunun."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kameranızda sorun mu var?\nDüzeltmek için dokunun"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bu işlem sorunu düzeltmedi mi?\nİşlemi geri almak için dokunun"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kameranızda sorun yok mu? Kapatmak için dokunun."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index ec2e550..8094d5d 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Налаштувати"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Спливаюче сповіщення закрито."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Натисніть, щоб перезапустити додаток і перейти в повноекранний режим."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Проблеми з камерою?\nНатисніть, щоб пристосувати"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Проблему не вирішено?\nНатисніть, щоб скасувати зміни"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Немає проблем із камерою? Торкніться, щоб закрити."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index 18e1e51..0f6061e 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"نظم کریں"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"بلبلہ برخاست کر دیا گیا۔"</string>
<string name="restart_button_description" msgid="5887656107651190519">"یہ ایپ دوبارہ شروع کرنے کے لیے تھپتھپائیں اور پوری اسکرین پر جائیں۔"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"کیمرے کے مسائل؟\nدوبارہ فٹ کرنے کیلئے تھپتھپائیں"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"یہ حل نہیں ہوا؟\nلوٹانے کیلئے تھپتھپائیں"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"کوئی کیمرے کا مسئلہ نہیں ہے؟ برخاست کرنے کیلئے تھپتھپائیں۔"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml
index f6c7ed2..12fbd0f 100644
--- a/libs/WindowManager/Shell/res/values-uz/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uz/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Boshqarish"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Bulutcha yopildi."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Bu ilovani qaytadan ishga tushirish va butun ekranda ochish uchun bosing."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Kamera nosozmi?\nQayta moslash uchun bosing"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Tuzatilmadimi?\nQaytarish uchun bosing"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Kamera muammosizmi? Yopish uchun bosing."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index 1cab8e7..4623b6b 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Quản lý"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Đã đóng bong bóng."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Nhấn để khởi động lại ứng dụng này và xem ở chế độ toàn màn hình."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Có vấn đề với máy ảnh?\nHãy nhấn để sửa lỗi"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Bạn chưa khắc phục vấn đề?\nHãy nhấn để hủy bỏ"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Không có vấn đề với máy ảnh? Hãy nhấn để đóng."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
index dc12c4f..5936677 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已关闭对话泡。"</string>
<string name="restart_button_description" msgid="5887656107651190519">"点按即可重启此应用并进入全屏模式。"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相机有问题?\n点按即可整修"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"没有解决此问题?\n点按即可恢复"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相机没有问题?点按即可忽略。"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index fe114ac..55045371 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"對話氣泡已關閉。"</string>
<string name="restart_button_description" msgid="5887656107651190519">"輕按即可重新開啟此應用程式並放大至全螢幕。"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題?\n輕按即可修正"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未能修正問題?\n輕按即可還原"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機冇問題?㩒一下就可以即可閂咗佢。"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
index 0e4fc30..aa0bdd0 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"管理"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"已關閉泡泡。"</string>
<string name="restart_button_description" msgid="5887656107651190519">"輕觸即可重新啟動這個應用程式並進入全螢幕模式。"</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"相機有問題嗎?\n輕觸即可修正"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"未修正問題嗎?\n輕觸即可還原"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"相機沒問題嗎?輕觸即可關閉。"</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index f563f1f..688f36b 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -73,10 +73,7 @@
<string name="manage_bubbles_text" msgid="7730624269650594419">"Phatha"</string>
<string name="accessibility_bubble_dismissed" msgid="8367471990421247357">"Ibhamuza licashisiwe."</string>
<string name="restart_button_description" msgid="5887656107651190519">"Thepha ukuze uqale kabusha lolu hlelo lokusebenza uphinde uye kusikrini esigcwele."</string>
- <!-- no translation found for camera_compat_treatment_suggested_button_description (8103916969024076767) -->
- <skip />
- <!-- no translation found for camera_compat_treatment_applied_button_description (2944157113330703897) -->
- <skip />
- <!-- no translation found for camera_compat_dismiss_button_description (2795364433503817511) -->
- <skip />
+ <string name="camera_compat_treatment_suggested_button_description" msgid="8103916969024076767">"Izinkinga zekhamera?\nThepha ukuze uyilinganise kabusha"</string>
+ <string name="camera_compat_treatment_applied_button_description" msgid="2944157113330703897">"Akuyilungisanga?\nThepha ukuze ubuyele"</string>
+ <string name="camera_compat_dismiss_button_description" msgid="2795364433503817511">"Azikho izinkinga zekhamera? Thepha ukuze ucashise."</string>
</resources>
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index d338e3b..1c19a10 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -200,11 +200,8 @@
<!-- Size of user education views on large screens (phone is just match parent). -->
<dimen name="bubbles_user_education_width_large_screen">400dp</dimen>
- <!-- The width of the size compat restart button including padding. -->
- <dimen name="size_compat_button_width">80dp</dimen>
-
- <!-- The height of the size compat restart button including padding. -->
- <dimen name="size_compat_button_height">64dp</dimen>
+ <!-- Bottom and end margin for compat buttons. -->
+ <dimen name="compat_button_margin">16dp</dimen>
<!-- The radius of the corners of the compat hint bubble. -->
<dimen name="compat_hint_corner_radius">28dp</dimen>
@@ -212,8 +209,8 @@
<!-- The width of the compat hint point. -->
<dimen name="compat_hint_point_width">10dp</dimen>
- <!-- The end padding for the compat hint. Computed as (size_compat_button_width / 2
- - compat_hint_corner_radius - compat_hint_point_width /2). -->
+ <!-- The end padding for the compat hint. Computed as (compat button width (=48) / 2
+ + compat_button_margin - compat_hint_corner_radius - compat_hint_point_width / 2). -->
<dimen name="compat_hint_padding_end">7dp</dimen>
<!-- The width of the size compat hint. -->
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
index 92a3598..915c593 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipDismissTargetHandler.java
@@ -140,6 +140,7 @@
});
mMagnetizedPip = mMotionHelper.getMagnetizedPip();
+ mMagnetizedPip.clearAllTargets();
mMagneticTarget = mMagnetizedPip.addTarget(mTargetView, 0);
updateMagneticTargetSize();
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 5d9f290..6ff551a 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -1317,7 +1317,7 @@
return DEVICE_OUT_BLE_SPEAKER_NAME;
case DEVICE_OUT_DEFAULT:
default:
- return Integer.toString(device);
+ return "0x" + Integer.toHexString(device);
}
}
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 048039f..e429603 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -189,7 +189,7 @@
<item msgid="3075292553049300105">"Normal"</item>
<item msgid="1158955023692670059">"Ligera"</item>
<item msgid="5664310435707146591">"Muy ligera"</item>
- <item msgid="5491266922147715962">"A velocidad muy alta"</item>
+ <item msgid="5491266922147715962">"Muy rápida"</item>
<item msgid="7659240015901486196">"Rápida"</item>
<item msgid="7147051179282410945">"Muy rápida"</item>
<item msgid="581904787661470707">"A velocidad máxima"</item>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index de97437..808fbe9 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -524,7 +524,7 @@
<string name="time_unit_just_now" msgid="3006134267292728099">"Oraintxe"</string>
<string name="media_transfer_this_device_name" msgid="2716555073132169240">"Telefonoaren bozgorailua"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"Telefono hau"</string>
- <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Arazoren bat izan da konektatzean. Itzali gailua eta pitz ezazu berriro."</string>
+ <string name="profile_connect_timeout_subtext" msgid="4043408193005851761">"Arazo bat izan da konektatzean. Itzali gailua eta pitz ezazu berriro."</string>
<string name="media_transfer_wired_device_name" msgid="4447880899964056007">"Audio-gailu kableduna"</string>
<string name="help_label" msgid="3528360748637781274">"Laguntza eta iritziak"</string>
<string name="storage_category" msgid="2287342585424631813">"Biltegiratzea"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 017de6a..da9783d 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -192,7 +192,7 @@
<item msgid="5491266922147715962">"Nog sneller"</item>
<item msgid="7659240015901486196">"Heel erg snel"</item>
<item msgid="7147051179282410945">"Snelst"</item>
- <item msgid="581904787661470707">"Allerallersnelst"</item>
+ <item msgid="581904787661470707">"Allersnelst"</item>
</string-array>
<string name="choose_profile" msgid="343803890897657450">"Profiel kiezen"</string>
<string name="category_personal" msgid="6236798763159385225">"Persoonlijk"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
index 2b357c5..1e8cb9f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtilsInternal.java
@@ -38,6 +38,7 @@
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
+import android.util.Log;
import android.view.MenuItem;
import android.widget.TextView;
@@ -54,6 +55,7 @@
public class RestrictedLockUtilsInternal extends RestrictedLockUtils {
private static final String LOG_TAG = "RestrictedLockUtils";
+ private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG);
/**
* @return drawables for displaying with settings that are locked by a device admin.
@@ -92,14 +94,25 @@
}
final UserManager um = UserManager.get(context);
+ final UserHandle userHandle = UserHandle.of(userId);
final List<UserManager.EnforcingUser> enforcingUsers =
- um.getUserRestrictionSources(userRestriction, UserHandle.of(userId));
+ um.getUserRestrictionSources(userRestriction, userHandle);
if (enforcingUsers.isEmpty()) {
// Restriction is not enforced.
return null;
- } else if (enforcingUsers.size() > 1) {
- return EnforcedAdmin.createDefaultEnforcedAdminWithRestriction(userRestriction);
+ }
+ final int size = enforcingUsers.size();
+ if (size > 1) {
+ final EnforcedAdmin enforcedAdmin = EnforcedAdmin
+ .createDefaultEnforcedAdminWithRestriction(userRestriction);
+ enforcedAdmin.user = userHandle;
+ if (DEBUG) {
+ Log.d(LOG_TAG, "Multiple (" + size + ") enforcing users for restriction '"
+ + userRestriction + "' on user " + userHandle + "; returning default admin "
+ + "(" + enforcedAdmin + ")");
+ }
+ return enforcedAdmin;
}
final int restrictionSource = enforcingUsers.get(0).getUserRestrictionSource();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiRestrictionsCache.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiRestrictionsCache.java
new file mode 100644
index 0000000..7ffae40
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiRestrictionsCache.java
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ */
+
+package com.android.settingslib.wifi;
+
+import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.util.SparseArray;
+
+import androidx.annotation.VisibleForTesting;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This is a singleton class for Wi-Fi restrictions caching.
+ */
+public class WifiRestrictionsCache {
+ private static final String TAG = "WifiResCache";
+
+ /**
+ * Manages mapping between user ID and corresponding singleton {@link WifiRestrictionsCache}
+ * object.
+ */
+ @VisibleForTesting
+ protected static final SparseArray<WifiRestrictionsCache> sInstances = new SparseArray<>();
+
+ @VisibleForTesting
+ protected UserManager mUserManager;
+ @VisibleForTesting
+ protected Bundle mUserRestrictions;
+ @VisibleForTesting
+ protected final Map<String, Boolean> mRestrictions = new HashMap<>();
+
+ /**
+ * @return an instance of {@link WifiRestrictionsCache} object.
+ */
+ @NonNull
+ public static WifiRestrictionsCache getInstance(@NonNull Context context) {
+ final int requestUserId = context.getUserId();
+ WifiRestrictionsCache cache;
+ synchronized (sInstances) {
+ // We have same user context as request.
+ if (sInstances.indexOfKey(requestUserId) >= 0) {
+ return sInstances.get(requestUserId);
+ }
+ // Request by a new user context.
+ cache = new WifiRestrictionsCache(context);
+ sInstances.put(context.getUserId(), cache);
+ }
+ return cache;
+ }
+
+ /**
+ * Removes all the instances.
+ */
+ public static void clearInstance() {
+ synchronized (sInstances) {
+ for (int i = 0; i < sInstances.size(); i++) {
+ int key = sInstances.keyAt(i);
+ WifiRestrictionsCache cache = sInstances.get(key);
+ cache.clearRestrictions();
+ sInstances.remove(key);
+ }
+ sInstances.clear();
+ }
+ }
+
+ /**
+ * Constructor to create a singleton class for Wi-Fi restrictions cache.
+ *
+ * @param context The Context this is associated with.
+ */
+ protected WifiRestrictionsCache(@NonNull Context context) {
+ mUserManager = context.getSystemService(UserManager.class);
+ if (mUserManager != null) {
+ mUserRestrictions = mUserManager.getUserRestrictions();
+ }
+ }
+
+ /**
+ * @return the boolean value of the restrictions
+ */
+ public Boolean getRestriction(String key) {
+ if (mUserRestrictions == null) {
+ return false;
+ }
+ Boolean restriction;
+ synchronized (mRestrictions) {
+ if (mRestrictions.containsKey(key)) {
+ return mRestrictions.get(key);
+ }
+ restriction = mUserRestrictions.getBoolean(key);
+ mRestrictions.put(key, restriction);
+ }
+ return restriction;
+ }
+
+ /**
+ * Removes all the restrictions.
+ */
+ public void clearRestrictions() {
+ synchronized (mRestrictions) {
+ mRestrictions.clear();
+ }
+ }
+
+ /**
+ * @return Whether the user is allowed to config Wi-Fi.
+ */
+ public Boolean isConfigWifiAllowed() {
+ return !getRestriction(DISALLOW_CONFIG_WIFI);
+ }
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiRestrictionsCacheTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiRestrictionsCacheTest.java
new file mode 100644
index 0000000..404e0e8
--- /dev/null
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiRestrictionsCacheTest.java
@@ -0,0 +1,172 @@
+/*
+ * 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.
+ */
+
+package com.android.settingslib.wifi;
+
+import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.UserManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class WifiRestrictionsCacheTest {
+
+ private static final int USER_OWNER = 0;
+ private static final int USER_1 = 1;
+ private static final int USER_2 = 2;
+ private static final int USER_3 = 3;
+ private static final int USER_GUEST = 10;
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ UserManager mUserManager;
+ @Mock
+ Bundle mUserRestrictionsOwner;
+ @Mock
+ Bundle mUserRestrictionsGuest;
+
+ private Context mContext;
+ private WifiRestrictionsCache mWifiRestrictionsCacheOwner;
+ private WifiRestrictionsCache mWifiRestrictionsCacheGuest;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+
+ when(mContext.getUserId()).thenReturn(USER_OWNER);
+ when(mUserManager.getUserRestrictions()).thenReturn(mUserRestrictionsOwner);
+ when(mUserRestrictionsOwner.getBoolean(anyString())).thenReturn(false);
+ mWifiRestrictionsCacheOwner = WifiRestrictionsCache.getInstance(mContext);
+
+ when(mContext.getUserId()).thenReturn(USER_GUEST);
+ when(mUserManager.getUserRestrictions()).thenReturn(mUserRestrictionsGuest);
+ when(mUserRestrictionsGuest.getBoolean(anyString())).thenReturn(true);
+ mWifiRestrictionsCacheGuest = WifiRestrictionsCache.getInstance(mContext);
+ }
+
+ @After
+ public void tearDown() {
+ WifiRestrictionsCache.clearInstance();
+ }
+
+ @Test
+ public void getInstance_sameUserId_sameInstance() {
+ when(mContext.getUserId()).thenReturn(USER_OWNER);
+ WifiRestrictionsCache instance1 = WifiRestrictionsCache.getInstance(mContext);
+
+ WifiRestrictionsCache instance2 = WifiRestrictionsCache.getInstance(mContext);
+
+ assertThat(instance1).isEqualTo(instance2);
+ }
+
+ @Test
+ public void getInstance_diffUserId_diffInstance() {
+ when(mContext.getUserId()).thenReturn(USER_OWNER);
+ WifiRestrictionsCache instance1 = WifiRestrictionsCache.getInstance(mContext);
+
+ when(mContext.getUserId()).thenReturn(USER_GUEST);
+ WifiRestrictionsCache instance2 = WifiRestrictionsCache.getInstance(mContext);
+
+ assertThat(instance1).isNotEqualTo(instance2);
+ }
+
+ @Test
+ public void clearInstance_instanceShouldBeEmpty() {
+ WifiRestrictionsCache.clearInstance();
+
+ assertThat(WifiRestrictionsCache.sInstances.size()).isEqualTo(0);
+ }
+
+ @Test
+ public void getRestriction_firstTime_getFromSystem() {
+ Bundle userRestrictions = mock(Bundle.class);
+ WifiRestrictionsCache wifiRestrictionsCache = mockInstance(USER_1, userRestrictions);
+
+ wifiRestrictionsCache.getRestriction(DISALLOW_CONFIG_WIFI);
+
+ verify(userRestrictions).getBoolean(DISALLOW_CONFIG_WIFI);
+ }
+
+ @Test
+ public void getRestriction_secondTime_notGetFromSystem() {
+ Bundle userRestrictions = mock(Bundle.class);
+ WifiRestrictionsCache wifiRestrictionsCache = mockInstance(USER_2, userRestrictions);
+ // First time to get the restriction value
+ wifiRestrictionsCache.getRestriction(DISALLOW_CONFIG_WIFI);
+ reset(userRestrictions);
+
+ // Second time to get the restriction value
+ wifiRestrictionsCache.getRestriction(DISALLOW_CONFIG_WIFI);
+
+ verify(userRestrictions, never()).getBoolean(DISALLOW_CONFIG_WIFI);
+ }
+
+ @Test
+ public void clearRestrictions_shouldGetRestrictionFromSystemAgain() {
+ Bundle userRestrictions = mock(Bundle.class);
+ WifiRestrictionsCache wifiRestrictionsCache = mockInstance(USER_3, userRestrictions);
+ // First time to get the restriction value
+ wifiRestrictionsCache.getRestriction(DISALLOW_CONFIG_WIFI);
+ reset(userRestrictions);
+
+ // Clear the cache and then second time to get the restriction value
+ wifiRestrictionsCache.clearRestrictions();
+ wifiRestrictionsCache.getRestriction(DISALLOW_CONFIG_WIFI);
+
+ verify(userRestrictions).getBoolean(DISALLOW_CONFIG_WIFI);
+ }
+
+ @Test
+ public void isConfigWifiAllowed_ownerUser_returnTrue() {
+ assertThat(mWifiRestrictionsCacheOwner.isConfigWifiAllowed()).isTrue();
+ }
+
+ @Test
+ public void isConfigWifiAllowed_guestUser_returnFalse() {
+ assertThat(mWifiRestrictionsCacheGuest.isConfigWifiAllowed()).isFalse();
+ }
+
+ private WifiRestrictionsCache mockInstance(int userId, Bundle userRestrictions) {
+ when(mContext.getUserId()).thenReturn(userId);
+ when(mUserManager.getUserRestrictions()).thenReturn(userRestrictions);
+ return WifiRestrictionsCache.getInstance(mContext);
+ }
+}
diff --git a/packages/SystemUI/res-product/values-zu/strings.xml b/packages/SystemUI/res-product/values-zu/strings.xml
index e6c140a..8b79a22 100644
--- a/packages/SystemUI/res-product/values-zu/strings.xml
+++ b/packages/SystemUI/res-product/values-zu/strings.xml
@@ -40,7 +40,7 @@
<string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4682221342671290678">"Uzame ngokungalungile ukuvula ifoni izikhathi ezingu-<xliff:g id="NUMBER">%d</xliff:g>. Iphrofayela yomsebenzi izosuswa, okuzosusa yonke idatha yephrofayela."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="1860049973474855672">"Udwebe ngokungalungile iphethini yakho yokuvula ngezikhathi ezingu-<xliff:g id="NUMBER_0">%1$d</xliff:g>. Ngemuva kwemizamo engaphumelelanga kaningi engu-<xliff:g id="NUMBER_1">%2$d</xliff:g>, uzocelwa ukuthi uvule ithebulethi yakho usebenzisa i-akhawunti ye-imeyili.\n\nZama futhi kumasekhondi angu-<xliff:g id="NUMBER_2">%3$d</xliff:g>."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="44112553371516141">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%1$d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%2$d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google\n\n Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%3$d</xliff:g> imizuzwana."</string>
- <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Vula ifoni yakho ukuthola izinketho ezengeziwe"</string>
- <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Vula ithebulethi yakho ukuthola izinketho ezengeziwe"</string>
- <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Vula idivayisi yakho ukuthola izinketho ezengeziwe"</string>
+ <string name="global_action_lock_message" product="default" msgid="7092460751050168771">"Vula ifoni yakho ukuthola okunye okungakhethwa"</string>
+ <string name="global_action_lock_message" product="tablet" msgid="1024230056230539493">"Vula ithebulethi yakho ukuthola okunye okungakhethwa"</string>
+ <string name="global_action_lock_message" product="device" msgid="3165224897120346096">"Vula idivayisi yakho ukuthola okunye okungakhethwa"</string>
</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index e82e8f5..3c18a81 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -852,7 +852,7 @@
<string name="new_notification_image_content_description" msgid="6017506886810813123">"<xliff:g id="NAME">%1$s</xliff:g> erabiltzaileak irudi bat bidali du"</string>
<string name="new_status_content_description" msgid="6046637888641308327">"<xliff:g id="NAME">%1$s</xliff:g> erabiltzaileak egoera eguneratu du: <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="person_available" msgid="2318599327472755472">"Konektatuta"</string>
- <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Arazo bat gertatu da bateria-neurgailua irakurtzean"</string>
+ <string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Arazo bat izan da bateria-neurgailua irakurtzean"</string>
<string name="battery_state_unknown_notification_text" msgid="13720937839460899">"Informazio gehiago lortzeko, sakatu hau"</string>
<string name="qs_alarm_tile_no_alarm" msgid="4826472008616807923">"Ez da ezarri alarmarik"</string>
<string name="accessibility_fingerprint_label" msgid="5255731221854153660">"Hatz-marken sentsorea"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index e8c30e1..bffa966 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -647,7 +647,7 @@
<string name="accessibility_quick_settings_settings" msgid="7098489591715844713">"సెట్టింగ్లను తెరవండి."</string>
<string name="accessibility_quick_settings_expand" msgid="2609275052412521467">"శీఘ్ర సెట్టింగ్లను తెరవండి."</string>
<string name="accessibility_quick_settings_collapse" msgid="4674876336725041982">"శీఘ్ర సెట్టింగ్లను మూసివేయండి."</string>
- <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> వలె సైన్ ఇన్ చేశారు"</string>
+ <string name="accessibility_quick_settings_user" msgid="505821942882668619">"<xliff:g id="ID_1">%s</xliff:g> లాగా సైన్ ఇన్ చేశారు"</string>
<string name="accessibility_quick_settings_choose_user_action" msgid="4554388498186576087">"యూజర్ను ఎంపిక చేయండి"</string>
<string name="data_connection_no_internet" msgid="691058178914184544">"ఇంటర్నెట్ లేదు"</string>
<string name="accessibility_quick_settings_open_details" msgid="4879279912389052142">"వివరాలను తెరవండి."</string>
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LSShadeTransitionLog.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LSShadeTransitionLog.java
new file mode 100644
index 0000000..08d969b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LSShadeTransitionLog.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.log.dagger;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.android.systemui.log.LogBuffer;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+
+import javax.inject.Qualifier;
+
+/** A {@link LogBuffer} for lockscreen to shade transition events. */
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+public @interface LSShadeTransitionLog {
+}
diff --git a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
index 1f0de4e..64911af 100644
--- a/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
+++ b/packages/SystemUI/src/com/android/systemui/log/dagger/LogModule.java
@@ -52,6 +52,14 @@
return factory.create("NotifLog", 1000);
}
+ /** Provides a logging buffer for all logs for lockscreen to shade transition events. */
+ @Provides
+ @SysUISingleton
+ @LSShadeTransitionLog
+ public static LogBuffer provideLSShadeTransitionControllerBuffer(LogBufferFactory factory) {
+ return factory.create("LSShadeTransitionLog", 50);
+ }
+
/** Provides a logging buffer for all logs related to managing notification sections. */
@Provides
@SysUISingleton
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
index 963576b..d4acdd0 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java
@@ -228,6 +228,7 @@
private @Behavior int mBehavior;
private boolean mTransientShown;
+ private boolean mTransientShownFromGestureOnSystemBar;
private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
private LightBarController mLightBarController;
private final LightBarController mMainLightBarController;
@@ -872,6 +873,9 @@
+ windowStateToString(mNavigationBarWindowState));
pw.println(" mNavigationBarMode="
+ BarTransitions.modeToString(mNavigationBarMode));
+ pw.println(" mTransientShown=" + mTransientShown);
+ pw.println(" mTransientShownFromGestureOnSystemBar="
+ + mTransientShownFromGestureOnSystemBar);
dumpBarTransitions(pw, "mNavigationBarView", mNavigationBarView.getBarTransitions());
mNavigationBarView.dump(pw);
}
@@ -990,7 +994,8 @@
}
@Override
- public void showTransient(int displayId, @InternalInsetsType int[] types) {
+ public void showTransient(int displayId, @InternalInsetsType int[] types,
+ boolean isGestureOnSystemBar) {
if (displayId != mDisplayId) {
return;
}
@@ -999,6 +1004,7 @@
}
if (!mTransientShown) {
mTransientShown = true;
+ mTransientShownFromGestureOnSystemBar = isGestureOnSystemBar;
handleTransientChanged();
}
}
@@ -1017,12 +1023,14 @@
private void clearTransient() {
if (mTransientShown) {
mTransientShown = false;
+ mTransientShownFromGestureOnSystemBar = false;
handleTransientChanged();
}
}
private void handleTransientChanged() {
- mNavigationBarView.onTransientStateChanged(mTransientShown);
+ mNavigationBarView.onTransientStateChanged(mTransientShown,
+ mTransientShownFromGestureOnSystemBar);
final int barMode = barMode(mTransientShown, mAppearance);
if (updateBarMode(barMode) && mLightBarController != null) {
mLightBarController.onNavigationBarModeChanged(barMode);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
index 7adb7ac..5fbdd88 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarView.java
@@ -447,12 +447,17 @@
mRegionSamplingHelper.setWindowHasBlurs(hasBlurs);
}
- void onTransientStateChanged(boolean isTransient) {
+ void onTransientStateChanged(boolean isTransient, boolean isGestureOnSystemBar) {
mEdgeBackGestureHandler.onNavBarTransientStateChanged(isTransient);
// The visibility of the navigation bar buttons is dependent on the transient state of
// the navigation bar.
if (mNavBarOverlayController.isNavigationBarOverlayEnabled()) {
+ // Always allow the overlay if in non-gestural nav mode, otherwise, only allow showing
+ // the overlay if the user is swiping directly over a system bar
+ boolean allowNavBarOverlay = !QuickStepContract.isGesturalMode(mNavBarMode)
+ || isGestureOnSystemBar;
+ isTransient = isTransient && allowNavBarOverlay;
mNavBarOverlayController.setButtonState(isTransient, /* force */ false);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
index feda99f..c3f1b11 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/TaskbarDelegate.java
@@ -350,7 +350,7 @@
}
@Override
- public void showTransient(int displayId, int[] types) {
+ public void showTransient(int displayId, int[] types, boolean isGestureOnSystemBar) {
if (displayId != mDisplayId) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 5876703..0b06b35 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -343,11 +343,19 @@
String packageName) { }
/**
- * @see IStatusBar#showTransient(int, int[]).
+ * @see IStatusBar#showTransient(int, int[], boolean).
*/
default void showTransient(int displayId, @InternalInsetsType int[] types) { }
/**
+ * @see IStatusBar#showTransient(int, int[], boolean).
+ */
+ default void showTransient(int displayId, @InternalInsetsType int[] types,
+ boolean isGestureOnSystemBar) {
+ showTransient(displayId, types);
+ }
+
+ /**
* @see IStatusBar#abortTransient(int, int[]).
*/
default void abortTransient(int displayId, @InternalInsetsType int[] types) { }
@@ -1019,9 +1027,10 @@
}
@Override
- public void showTransient(int displayId, int[] types) {
+ public void showTransient(int displayId, int[] types, boolean isGestureOnSystemBar) {
synchronized (mLock) {
- mHandler.obtainMessage(MSG_SHOW_TRANSIENT, displayId, 0, types).sendToTarget();
+ mHandler.obtainMessage(MSG_SHOW_TRANSIENT, displayId, isGestureOnSystemBar ? 1 : 0,
+ types).sendToTarget();
}
}
@@ -1404,8 +1413,9 @@
case MSG_SHOW_TRANSIENT: {
final int displayId = msg.arg1;
final int[] types = (int[]) msg.obj;
+ final boolean isGestureOnSystemBar = msg.arg2 != 0;
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).showTransient(displayId, types);
+ mCallbacks.get(i).showTransient(displayId, types, isGestureOnSystemBar);
}
break;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
index 0fb08e4..029415b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
@@ -8,12 +8,13 @@
import android.content.res.Configuration
import android.os.SystemClock
import android.util.DisplayMetrics
+import android.util.IndentingPrintWriter
import android.util.MathUtils
import android.view.MotionEvent
import android.view.View
import android.view.ViewConfiguration
import androidx.annotation.VisibleForTesting
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent
+import com.android.systemui.Dumpable
import com.android.systemui.ExpandHelper
import com.android.systemui.Gefingerpoken
import com.android.systemui.R
@@ -22,23 +23,26 @@
import com.android.systemui.classifier.Classifier
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
import com.android.systemui.media.MediaHierarchyManager
import com.android.systemui.plugins.ActivityStarter.OnDismissAction
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.QS
+import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
import com.android.systemui.statusbar.notification.row.ExpandableView
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.KeyguardBypassController
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger.LockscreenUiEvent
+import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
import com.android.systemui.statusbar.phone.NotificationPanelViewController
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.StatusBar
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.util.Utils
+import java.io.FileDescriptor
+import java.io.PrintWriter
import javax.inject.Inject
private const val SPRING_BACK_ANIMATION_LENGTH_MS = 375L
@@ -51,19 +55,19 @@
@SysUISingleton
class LockscreenShadeTransitionController @Inject constructor(
private val statusBarStateController: SysuiStatusBarStateController,
- private val lockscreenGestureLogger: LockscreenGestureLogger,
+ private val logger: LSShadeTransitionLogger,
private val keyguardBypassController: KeyguardBypassController,
private val lockScreenUserManager: NotificationLockscreenUserManager,
private val falsingCollector: FalsingCollector,
private val ambientState: AmbientState,
- private val displayMetrics: DisplayMetrics,
private val mediaHierarchyManager: MediaHierarchyManager,
private val scrimController: ScrimController,
private val depthController: NotificationShadeDepthController,
private val context: Context,
configurationController: ConfigurationController,
- falsingManager: FalsingManager
-) {
+ falsingManager: FalsingManager,
+ dumpManager: DumpManager,
+) : Dumpable {
private var pulseHeight: Float = 0f
private var useSplitShade: Boolean = false
private lateinit var nsslController: NotificationStackScrollLayoutController
@@ -139,6 +143,23 @@
touchHelper.updateResources(context)
}
})
+ dumpManager.registerDumpable(this)
+ statusBarStateController.addCallback(object : StatusBarStateController.StateListener {
+ override fun onExpandedChanged(isExpanded: Boolean) {
+ // safeguard: When the panel is fully collapsed, let's make sure to reset.
+ // See b/198098523
+ if (!isExpanded) {
+ if (dragDownAmount != 0f && dragDownAnimator?.isRunning != true) {
+ logger.logDragDownAmountResetWhenFullyCollapsed()
+ dragDownAmount = 0f
+ }
+ if (pulseHeight != 0f && pulseHeightAnimator?.isRunning != true) {
+ logger.logPulseHeightNotResetWhenFullyCollapsed()
+ setPulseHeight(0f, animate = false)
+ }
+ }
+ }
+ })
}
private fun updateResources() {
@@ -182,19 +203,19 @@
*/
internal fun onDraggedDown(startingChild: View?, dragLengthY: Int) {
if (canDragDown()) {
+ val cancelRunnable = Runnable {
+ logger.logGoingToLockedShadeAborted()
+ setDragDownAmountAnimated(0f)
+ }
if (nsslController.isInLockedDownShade()) {
+ logger.logDraggedDownLockDownShade(startingChild)
statusBarStateController.setLeaveOpenOnKeyguardHide(true)
statusbar.dismissKeyguardThenExecute(OnDismissAction {
nextHideKeyguardNeedsNoAnimation = true
false
- },
- null /* cancelRunnable */, false /* afterKeyguardGone */)
+ }, cancelRunnable, false /* afterKeyguardGone */)
} else {
- lockscreenGestureLogger.write(
- MetricsEvent.ACTION_LS_SHADE,
- (dragLengthY / displayMetrics.density).toInt(),
- 0 /* velocityDp */)
- lockscreenGestureLogger.log(LockscreenUiEvent.LOCKSCREEN_PULL_SHADE_OPEN)
+ logger.logDraggedDown(startingChild, dragLengthY)
if (!ambientState.isDozing() || startingChild != null) {
// go to locked shade while animating the drag down amount from its current
// value
@@ -216,11 +237,11 @@
dragDownAmount = 0f
forceApplyAmount = false
}
- val cancelRunnable = Runnable { setDragDownAmountAnimated(0f) }
goToLockedShadeInternal(startingChild, animationHandler, cancelRunnable)
}
}
} else {
+ logger.logUnSuccessfulDragDown(startingChild)
setDragDownAmountAnimated(0f)
}
}
@@ -229,6 +250,7 @@
* Called by the touch helper when the drag down was aborted and should be reset.
*/
internal fun onDragDownReset() {
+ logger.logDragDownAborted()
nsslController.setDimmed(true /* dimmed */, true /* animated */)
nsslController.resetScrollPosition()
nsslController.resetCheckSnoozeLeavebehind()
@@ -246,10 +268,16 @@
/**
* Called by the touch helper when the drag down was started
*/
- internal fun onDragDownStarted() {
+ internal fun onDragDownStarted(startingChild: ExpandableView?) {
+ logger.logDragDownStarted(startingChild)
nsslController.cancelLongPress()
nsslController.checkSnoozeLeavebehind()
- dragDownAnimator?.cancel()
+ dragDownAnimator?.apply {
+ if (isRunning) {
+ logger.logAnimationCancelled(isPulse = false)
+ cancel()
+ }
+ }
}
/**
@@ -294,7 +322,7 @@
set(value) {
if (field != value || forceApplyAmount) {
field = value
- if (!nsslController.isInLockedDownShade() || forceApplyAmount) {
+ if (!nsslController.isInLockedDownShade() || field == 0f || forceApplyAmount) {
nsslController.setTransitionToFullShadeAmount(field)
notificationPanelController.setTransitionToFullShadeAmount(field,
false /* animate */, 0 /* delay */)
@@ -322,6 +350,7 @@
delay: Long = 0,
endlistener: (() -> Unit)? = null
) {
+ logger.logDragDownAnimation(target)
val dragDownAnimator = ValueAnimator.ofFloat(dragDownAmount, target)
dragDownAnimator.interpolator = Interpolators.FAST_OUT_SLOW_IN
dragDownAnimator.duration = SPRING_BACK_ANIMATION_LENGTH_MS
@@ -377,7 +406,9 @@
*/
@JvmOverloads
fun goToLockedShade(expandedView: View?, needsQSAnimation: Boolean = true) {
- if (statusBarStateController.state == StatusBarState.KEYGUARD) {
+ val isKeyguard = statusBarStateController.state == StatusBarState.KEYGUARD
+ logger.logTryGoToLockedShade(isKeyguard)
+ if (isKeyguard) {
val animationHandler: ((Long) -> Unit)?
if (needsQSAnimation) {
// Let's use the default animation
@@ -413,6 +444,7 @@
) {
if (statusbar.isShadeDisabled) {
cancelAction?.run()
+ logger.logShadeDisabledOnGoToLockedShade()
return
}
var userId: Int = lockScreenUserManager.getCurrentUserId()
@@ -451,9 +483,11 @@
}
cancelAction?.run()
}
+ logger.logShowBouncerOnGoToLockedShade()
statusbar.showBouncerWithDimissAndCancelIfKeyguard(onDismissAction, cancelHandler)
draggedDownEntry = entry
} else {
+ logger.logGoingToLockedShade(animationHandler != null)
statusBarStateController.setState(StatusBarState.SHADE_LOCKED)
// This call needs to be after updating the shade state since otherwise
// the scrimstate resets too early
@@ -473,6 +507,7 @@
* @param previousState which state were we in when we hid the keyguard?
*/
fun onHideKeyguard(delay: Long, previousState: Int) {
+ logger.logOnHideKeyguard()
if (animationHandlerOnKeyguardDismiss != null) {
animationHandlerOnKeyguardDismiss!!.invoke(delay)
animationHandlerOnKeyguardDismiss = null
@@ -495,6 +530,7 @@
* not triggered by gestures, e.g. when clicking on the shelf or expand button.
*/
private fun performDefaultGoToFullShadeAnimation(delay: Long) {
+ logger.logDefaultGoToFullShadeAnimation(delay)
notificationPanelController.animateToFullShade(delay)
animateAppear(delay)
}
@@ -531,6 +567,7 @@
* @param cancelled was the interaction cancelled and this is a reset?
*/
fun finishPulseAnimation(cancelled: Boolean) {
+ logger.logPulseExpansionFinished(cancelled)
if (cancelled) {
setPulseHeight(0f, animate = true)
} else {
@@ -543,7 +580,27 @@
* Notify this class that a pulse expansion is starting
*/
fun onPulseExpansionStarted() {
- pulseHeightAnimator?.cancel()
+ logger.logPulseExpansionStarted()
+ pulseHeightAnimator?.apply {
+ if (isRunning) {
+ logger.logAnimationCancelled(isPulse = true)
+ cancel()
+ }
+ }
+ }
+
+ override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
+ IndentingPrintWriter(pw, " ").let {
+ it.println("LSShadeTransitionController:")
+ it.increaseIndent()
+ it.println("pulseHeight: $pulseHeight")
+ it.println("useSplitShade: $useSplitShade")
+ it.println("dragDownAmount: $dragDownAmount")
+ it.println("isDragDownAnywhereEnabled: $isDragDownAnywhereEnabled")
+ it.println("isFalsingCheckNeeded: $isFalsingCheckNeeded")
+ it.println("hasPendingHandlerOnKeyguardDismiss: " +
+ "${animationHandlerOnKeyguardDismiss != null}")
+ }
}
}
@@ -623,7 +680,7 @@
captureStartingChild(initialTouchX, initialTouchY)
initialTouchY = y
initialTouchX = x
- dragDownCallback.onDragDownStarted()
+ dragDownCallback.onDragDownStarted(startingChild)
dragDownAmountOnStart = dragDownCallback.dragDownAmount
return startingChild != null || dragDownCallback.isDragDownAnywhereEnabled
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
index 761a203..ea51bd8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
@@ -24,15 +24,18 @@
import android.os.PowerManager
import android.os.PowerManager.WAKE_REASON_GESTURE
import android.os.SystemClock
+import android.util.IndentingPrintWriter
import android.view.MotionEvent
import android.view.VelocityTracker
import android.view.ViewConfiguration
+import com.android.systemui.Dumpable
import com.android.systemui.Gefingerpoken
import com.android.systemui.R
import com.android.systemui.animation.Interpolators
import com.android.systemui.classifier.Classifier.NOTIFICATION_DRAG_DOWN
import com.android.systemui.classifier.FalsingCollector
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
@@ -43,6 +46,8 @@
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.ConfigurationController
+import java.io.FileDescriptor
+import java.io.PrintWriter
import javax.inject.Inject
import kotlin.math.max
@@ -61,8 +66,9 @@
private val statusBarStateController: StatusBarStateController,
private val falsingManager: FalsingManager,
private val lockscreenShadeTransitionController: LockscreenShadeTransitionController,
- private val falsingCollector: FalsingCollector
-) : Gefingerpoken {
+ private val falsingCollector: FalsingCollector,
+ dumpManager: DumpManager
+) : Gefingerpoken, Dumpable {
companion object {
private val SPRING_BACK_ANIMATION_LENGTH_MS = 375
}
@@ -120,6 +126,7 @@
}
})
mPowerManager = context.getSystemService(PowerManager::class.java)
+ dumpManager.registerDumpable(this)
}
private fun initResources(context: Context) {
@@ -329,4 +336,17 @@
fun onStartedWakingUp() {
isWakingToShadeLocked = false
}
+
+ override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
+ IndentingPrintWriter(pw, " ").let {
+ it.println("PulseExpansionHandler:")
+ it.increaseIndent()
+ it.println("isExpanding: $isExpanding")
+ it.println("leavingLockscreen: $leavingLockscreen")
+ it.println("mPulsing: $mPulsing")
+ it.println("isWakingToShadeLocked: $isWakingToShadeLocked")
+ it.println("qsExpanded: $qsExpanded")
+ it.println("bouncerShowing: $bouncerShowing")
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LSShadeTransitionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LSShadeTransitionLogger.kt
new file mode 100644
index 0000000..4de78f5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LSShadeTransitionLogger.kt
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone
+
+import android.util.DisplayMetrics
+import android.view.View
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.LogLevel
+import com.android.systemui.log.dagger.LSShadeTransitionLog
+import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
+import com.android.systemui.statusbar.notification.row.ExpandableView
+import javax.inject.Inject
+
+private const val TAG = "LockscreenShadeTransitionController"
+
+class LSShadeTransitionLogger @Inject constructor(
+ @LSShadeTransitionLog private val buffer: LogBuffer,
+ private val lockscreenGestureLogger: LockscreenGestureLogger,
+ private val displayMetrics: DisplayMetrics
+) {
+ fun logUnSuccessfulDragDown(startingChild: View?) {
+ val entry = (startingChild as ExpandableNotificationRow?)?.entry
+ buffer.log(TAG, LogLevel.INFO, {
+ str1 = entry?.key ?: "no entry"
+ }, {
+ "Tried to drag down but can't drag down on $str1"
+ })
+ }
+
+ fun logDragDownAborted() {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "The drag down was reset"
+ })
+ }
+
+ fun logDragDownStarted(startingChild: ExpandableView?) {
+ val entry = (startingChild as ExpandableNotificationRow?)?.entry
+ buffer.log(TAG, LogLevel.INFO, {
+ str1 = entry?.key ?: "no entry"
+ }, {
+ "The drag down has started on $str1"
+ })
+ }
+
+ fun logDraggedDownLockDownShade(startingChild: View?) {
+ val entry = (startingChild as ExpandableNotificationRow?)?.entry
+ buffer.log(TAG, LogLevel.INFO, {
+ str1 = entry?.key ?: "no entry"
+ }, {
+ "Dragged down in locked down shade on $str1"
+ })
+ }
+
+ fun logDraggedDown(startingChild: View?, dragLengthY: Int) {
+ val entry = (startingChild as ExpandableNotificationRow?)?.entry
+ buffer.log(TAG, LogLevel.INFO, {
+ str1 = entry?.key ?: "no entry"
+ }, {
+ "Drag down succeeded on $str1"
+ })
+ // Do logging to event log not just our own buffer
+ lockscreenGestureLogger.write(
+ MetricsEvent.ACTION_LS_SHADE,
+ (dragLengthY / displayMetrics.density).toInt(),
+ 0 /* velocityDp */)
+ lockscreenGestureLogger.log(
+ LockscreenGestureLogger.LockscreenUiEvent.LOCKSCREEN_PULL_SHADE_OPEN)
+ }
+
+ fun logDefaultGoToFullShadeAnimation(delay: Long) {
+ buffer.log(TAG, LogLevel.DEBUG, {
+ long1 = delay
+ }, {
+ "Default animation started to full shade with delay $long1"
+ })
+ }
+
+ fun logTryGoToLockedShade(keyguard: Boolean) {
+ buffer.log(TAG, LogLevel.INFO, {
+ bool1 = keyguard
+ }, {
+ "Trying to go to locked shade " + if (bool1) "from keyguard" else "not from keyguard"
+ })
+ }
+
+ fun logShadeDisabledOnGoToLockedShade() {
+ buffer.log(TAG, LogLevel.WARNING, {}, {
+ "The shade was disabled when trying to go to the locked shade"
+ })
+ }
+
+ fun logShowBouncerOnGoToLockedShade() {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Showing bouncer when trying to go to the locked shade"
+ })
+ }
+
+ fun logGoingToLockedShade(customAnimationHandler: Boolean) {
+ buffer.log(TAG, LogLevel.INFO, {
+ bool1 = customAnimationHandler
+ }, {
+ "Going to locked shade " + if (customAnimationHandler) "with" else "without" +
+ " a custom handler"
+ })
+ }
+
+ fun logOnHideKeyguard() {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Notified that the keyguard is being hidden"
+ })
+ }
+
+ fun logPulseExpansionStarted() {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Pulse Expansion has started"
+ })
+ }
+
+ fun logPulseExpansionFinished(cancelled: Boolean) {
+ if (cancelled) {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Pulse Expansion is requested to cancel"
+ })
+ } else {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Pulse Expansion is requested to finish"
+ })
+ }
+ }
+
+ fun logDragDownAnimation(target: Float) {
+ buffer.log(TAG, LogLevel.DEBUG, {
+ double1 = target.toDouble()
+ }, {
+ "Drag down amount animating to " + double1
+ })
+ }
+
+ fun logAnimationCancelled(isPulse: Boolean) {
+ if (isPulse) {
+ buffer.log(TAG, LogLevel.DEBUG, {}, {
+ "Pulse animation cancelled"
+ })
+ } else {
+ buffer.log(TAG, LogLevel.DEBUG, {}, {
+ "drag down animation cancelled"
+ })
+ }
+ }
+
+ fun logDragDownAmountResetWhenFullyCollapsed() {
+ buffer.log(TAG, LogLevel.WARNING, {}, {
+ "Drag down amount stuck and reset after shade was fully collapsed"
+ })
+ }
+
+ fun logPulseHeightNotResetWhenFullyCollapsed() {
+ buffer.log(TAG, LogLevel.WARNING, {}, {
+ "Pulse height stuck and reset after shade was fully collapsed"
+ })
+ }
+
+ fun logGoingToLockedShadeAborted() {
+ buffer.log(TAG, LogLevel.INFO, {}, {
+ "Going to the Locked Shade has been aborted"
+ })
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java
index 3ce4472..c861f99 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarCommandQueueCallbacks.java
@@ -495,7 +495,8 @@
}
@Override
- public void showTransient(int displayId, @InternalInsetsType int[] types) {
+ public void showTransient(int displayId, @InternalInsetsType int[] types,
+ boolean isGestureOnSystemBar) {
if (displayId != mDisplayId) {
return;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
index af624ed..7089d09 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/CommandQueueTest.java
@@ -151,17 +151,17 @@
@Test
public void testShowTransient() {
int[] types = new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR};
- mCommandQueue.showTransient(DEFAULT_DISPLAY, types);
+ mCommandQueue.showTransient(DEFAULT_DISPLAY, types, true /* isGestureOnSystemBar */);
waitForIdleSync();
- verify(mCallbacks).showTransient(eq(DEFAULT_DISPLAY), eq(types));
+ verify(mCallbacks).showTransient(eq(DEFAULT_DISPLAY), eq(types), eq(true));
}
@Test
public void testShowTransientForSecondaryDisplay() {
int[] types = new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR};
- mCommandQueue.showTransient(SECONDARY_DISPLAY, types);
+ mCommandQueue.showTransient(SECONDARY_DISPLAY, types, true /* isGestureOnSystemBar */);
waitForIdleSync();
- verify(mCallbacks).showTransient(eq(SECONDARY_DISPLAY), eq(types));
+ verify(mCallbacks).showTransient(eq(SECONDARY_DISPLAY), eq(types), eq(true));
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
index 89435ae..01a214b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/LockscreenShadeTransitionControllerTest.kt
@@ -9,6 +9,8 @@
import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingCollector
+import com.android.systemui.dump.DumpManager
+import com.android.systemui.log.LogBuffer
import com.android.systemui.media.MediaHierarchyManager
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.qs.QS
@@ -18,7 +20,7 @@
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.phone.KeyguardBypassController
-import com.android.systemui.statusbar.phone.LockscreenGestureLogger
+import com.android.systemui.statusbar.phone.LSShadeTransitionLogger
import com.android.systemui.statusbar.phone.NotificationPanelViewController
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.phone.StatusBar
@@ -56,7 +58,8 @@
lateinit var transitionController: LockscreenShadeTransitionController
lateinit var row: ExpandableNotificationRow
@Mock lateinit var statusbarStateController: SysuiStatusBarStateController
- @Mock lateinit var lockscreenGestureLogger: LockscreenGestureLogger
+ @Mock lateinit var logger: LSShadeTransitionLogger
+ @Mock lateinit var dumpManager: DumpManager
@Mock lateinit var keyguardBypassController: KeyguardBypassController
@Mock lateinit var lockScreenUserManager: NotificationLockscreenUserManager
@Mock lateinit var falsingCollector: FalsingCollector
@@ -66,6 +69,7 @@
@Mock lateinit var scrimController: ScrimController
@Mock lateinit var configurationController: ConfigurationController
@Mock lateinit var falsingManager: FalsingManager
+ @Mock lateinit var buffer: LogBuffer
@Mock lateinit var notificationPanelController: NotificationPanelViewController
@Mock lateinit var nsslController: NotificationStackScrollLayoutController
@Mock lateinit var depthController: NotificationShadeDepthController
@@ -86,18 +90,18 @@
.addOverride(R.bool.config_use_split_notification_shade, false)
transitionController = LockscreenShadeTransitionController(
statusBarStateController = statusbarStateController,
- lockscreenGestureLogger = lockscreenGestureLogger,
+ logger = logger,
keyguardBypassController = keyguardBypassController,
lockScreenUserManager = lockScreenUserManager,
falsingCollector = falsingCollector,
ambientState = ambientState,
- displayMetrics = displayMetrics,
mediaHierarchyManager = mediaHierarchyManager,
scrimController = scrimController,
depthController = depthController,
context = context,
configurationController = configurationController,
- falsingManager = falsingManager
+ falsingManager = falsingManager,
+ dumpManager = dumpManager
)
whenever(nsslController.view).thenReturn(stackscroller)
whenever(nsslController.expandHelperCallback).thenReturn(expandHelperCallback)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java
index 01f5654..13989d3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NotificationPanelViewControllerTest.java
@@ -385,7 +385,8 @@
mStatusBarStateController,
mFalsingManager,
mLockscreenShadeTransitionController,
- new FalsingCollectorFake());
+ new FalsingCollectorFake(),
+ mDumpManager);
when(mKeyguardStatusViewComponentFactory.build(any()))
.thenReturn(mKeyguardStatusViewComponent);
when(mKeyguardStatusViewComponent.getKeyguardClockSwitchController())
diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
index b357c78..5679490 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
@@ -210,12 +210,6 @@
verify(mThemeOverlayApplier)
.applyCurrentUserOverlays(themeOverlays.capture(), any(), anyInt(), any());
- // Assert that we received the colors that we were expecting
- assertThat(themeOverlays.getValue().get(OVERLAY_CATEGORY_SYSTEM_PALETTE))
- .isEqualTo(new OverlayIdentifier("ffff0000"));
- assertThat(themeOverlays.getValue().get(OVERLAY_CATEGORY_ACCENT_COLOR))
- .isEqualTo(new OverlayIdentifier("ffff0000"));
-
// Should not change theme after changing wallpapers, if intent doesn't have
// WallpaperManager.EXTRA_FROM_FOREGROUND_APP set to true.
clearInvocations(mThemeOverlayApplier);
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index 9da6d52..8199d94 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -900,7 +900,7 @@
void unfreezeTemporarily(ProcessRecord app) {
if (mUseFreezer) {
synchronized (mProcLock) {
- if (app.mOptRecord.isFrozen()) {
+ if (app.mOptRecord.isFrozen() || app.mOptRecord.isPendingFreeze()) {
unfreezeAppLSP(app);
freezeAppAsyncLSP(app);
}
diff --git a/services/core/java/com/android/server/apphibernation/AppHibernationService.java b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
index 5cfcb4c..4d025c9 100644
--- a/services/core/java/com/android/server/apphibernation/AppHibernationService.java
+++ b/services/core/java/com/android/server/apphibernation/AppHibernationService.java
@@ -277,16 +277,16 @@
getContext().enforceCallingOrSelfPermission(
android.Manifest.permission.MANAGE_APP_HIBERNATION,
"Caller does not have MANAGE_APP_HIBERNATION permission.");
- userId = handleIncomingUser(userId, methodName);
- if (!checkUserStatesExist(userId, methodName)) {
+ final int realUserId = handleIncomingUser(userId, methodName);
+ if (!checkUserStatesExist(realUserId, methodName)) {
return;
}
synchronized (mLock) {
- final Map<String, UserLevelState> packageStates = mUserStates.get(userId);
+ final Map<String, UserLevelState> packageStates = mUserStates.get(realUserId);
final UserLevelState pkgState = packageStates.get(packageName);
if (pkgState == null) {
Slog.e(TAG, String.format("Package %s is not installed for user %s",
- packageName, userId));
+ packageName, realUserId));
return;
}
@@ -294,13 +294,17 @@
return;
}
+ pkgState.hibernated = isHibernating;
if (isHibernating) {
- hibernatePackageForUser(packageName, userId, pkgState);
+ mBackgroundExecutor.execute(() -> hibernatePackageForUser(packageName, realUserId));
} else {
- unhibernatePackageForUser(packageName, userId, pkgState);
+ mBackgroundExecutor.execute(
+ () -> unhibernatePackageForUser(packageName, realUserId));
+ pkgState.lastUnhibernatedMs = System.currentTimeMillis();
}
+
final UserLevelState stateSnapshot = new UserLevelState(pkgState);
- final int userIdSnapshot = userId;
+ final int userIdSnapshot = realUserId;
mBackgroundExecutor.execute(() -> {
FrameworkStatsLog.write(
FrameworkStatsLog.USER_LEVEL_HIBERNATION_STATE_CHANGED,
@@ -308,8 +312,8 @@
userIdSnapshot,
stateSnapshot.hibernated);
});
- List<UserLevelState> states = new ArrayList<>(mUserStates.get(userId).values());
- mUserDiskStores.get(userId).scheduleWriteHibernationStates(states);
+ List<UserLevelState> states = new ArrayList<>(mUserStates.get(realUserId).values());
+ mUserDiskStores.get(realUserId).scheduleWriteHibernationStates(states);
}
}
@@ -334,10 +338,12 @@
return;
}
if (state.hibernated != isHibernating) {
+ state.hibernated = isHibernating;
if (isHibernating) {
- hibernatePackageGlobally(packageName, state);
+ mBackgroundExecutor.execute(() -> hibernatePackageGlobally(packageName, state));
} else {
- unhibernatePackageGlobally(packageName, state);
+ state.savedByte = 0;
+ state.lastUnhibernatedMs = System.currentTimeMillis();
}
List<GlobalLevelState> states = new ArrayList<>(mGlobalHibernationStates.values());
mGlobalLevelHibernationDiskStore.scheduleWriteHibernationStates(states);
@@ -374,20 +380,16 @@
}
/**
- * Put an app into hibernation for a given user, allowing user-level optimizations to occur.
- *
- * @param pkgState package hibernation state
+ * Put an app into hibernation for a given user, allowing user-level optimizations to occur. Do
+ * not hold {@link #mLock} while calling this to avoid deadlock scenarios.
*/
- @GuardedBy("mLock")
- private void hibernatePackageForUser(@NonNull String packageName, int userId,
- @NonNull UserLevelState pkgState) {
+ private void hibernatePackageForUser(@NonNull String packageName, int userId) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackage");
final long caller = Binder.clearCallingIdentity();
try {
mIActivityManager.forceStopPackage(packageName, userId);
mIPackageManager.deleteApplicationCacheFilesAsUser(packageName, userId,
null /* observer */);
- pkgState.hibernated = true;
} catch (RemoteException e) {
throw new IllegalStateException(
"Failed to hibernate due to manager not being available", e);
@@ -398,16 +400,11 @@
}
/**
- * Remove a package from hibernation for a given user.
- *
- * @param pkgState package hibernation state
+ * Remove a package from hibernation for a given user. Do not hold {@link #mLock} while calling
+ * this.
*/
- @GuardedBy("mLock")
- private void unhibernatePackageForUser(@NonNull String packageName, int userId,
- UserLevelState pkgState) {
+ private void unhibernatePackageForUser(@NonNull String packageName, int userId) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackage");
- pkgState.hibernated = false;
- pkgState.lastUnhibernatedMs = System.currentTimeMillis();
final long caller = Binder.clearCallingIdentity();
// Deliver LOCKED_BOOT_COMPLETE AND BOOT_COMPLETE broadcast so app can re-register
// their alarms/jobs/etc.
@@ -458,29 +455,20 @@
}
/**
- * Put a package into global hibernation, optimizing its storage at a package / APK level.
+ * Put a package into global hibernation, optimizing its storage at a package / APK level. Do
+ * not hold {@link #mLock} while calling this.
*/
- @GuardedBy("mLock")
private void hibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "hibernatePackageGlobally");
+ long savedBytes = 0;
if (mOatArtifactDeletionEnabled) {
- state.savedByte = Math.max(
+ savedBytes = Math.max(
mPackageManagerInternal.deleteOatArtifactsOfPackage(packageName),
0);
}
- state.hibernated = true;
- Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
- }
-
- /**
- * Unhibernate a package from global hibernation.
- */
- @GuardedBy("mLock")
- private void unhibernatePackageGlobally(@NonNull String packageName, GlobalLevelState state) {
- Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "unhibernatePackageGlobally");
- state.hibernated = false;
- state.savedByte = 0;
- state.lastUnhibernatedMs = System.currentTimeMillis();
+ synchronized (mLock) {
+ state.savedByte = savedBytes;
+ }
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 5944a63..5288a04 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -239,6 +239,9 @@
//------------------------------------------------------------
/*package*/ void dump(PrintWriter pw, String prefix) {
+ pw.println("\n" + prefix + "BECOMING_NOISY_INTENT_DEVICES_SET=");
+ BECOMING_NOISY_INTENT_DEVICES_SET.forEach(device -> {
+ pw.print(" 0x" + Integer.toHexString(device)); });
pw.println("\n" + prefix + "Preferred devices for strategy:");
mPreferredDevices.forEach((strategy, device) -> {
pw.println(" " + prefix + "strategy:" + strategy + " device:" + device); });
@@ -1168,10 +1171,13 @@
state == AudioService.CONNECTION_STATE_CONNECTED
? MediaMetrics.Value.CONNECTED : MediaMetrics.Value.DISCONNECTED);
if (state != AudioService.CONNECTION_STATE_DISCONNECTED) {
+ Log.i(TAG, "not sending NOISY: state=" + state);
mmi.set(MediaMetrics.Property.DELAY_MS, 0).record(); // OK to return
return 0;
}
if (!BECOMING_NOISY_INTENT_DEVICES_SET.contains(device)) {
+ Log.i(TAG, "not sending NOISY: device=0x" + Integer.toHexString(device)
+ + " not in set " + BECOMING_NOISY_INTENT_DEVICES_SET);
mmi.set(MediaMetrics.Property.DELAY_MS, 0).record(); // OK to return
return 0;
}
@@ -1181,18 +1187,24 @@
if (((di.mDeviceType & AudioSystem.DEVICE_BIT_IN) == 0)
&& BECOMING_NOISY_INTENT_DEVICES_SET.contains(di.mDeviceType)) {
devices.add(di.mDeviceType);
+ Log.i(TAG, "NOISY: adding 0x" + Integer.toHexString(di.mDeviceType));
}
}
if (musicDevice == AudioSystem.DEVICE_NONE) {
musicDevice = mDeviceBroker.getDeviceForStream(AudioSystem.STREAM_MUSIC);
+ Log.i(TAG, "NOISY: musicDevice changing from NONE to 0x"
+ + Integer.toHexString(musicDevice));
}
// always ignore condition on device being actually used for music when in communication
// because music routing is altered in this case.
// also checks whether media routing if affected by a dynamic policy or mirroring
- if (((device == musicDevice) || mDeviceBroker.isInCommunication())
- && AudioSystem.isSingleAudioDeviceType(devices, device)
- && !mDeviceBroker.hasMediaDynamicPolicy()
+ final boolean inCommunication = mDeviceBroker.isInCommunication();
+ final boolean singleAudioDeviceType = AudioSystem.isSingleAudioDeviceType(devices, device);
+ final boolean hasMediaDynamicPolicy = mDeviceBroker.hasMediaDynamicPolicy();
+ if (((device == musicDevice) || inCommunication)
+ && singleAudioDeviceType
+ && !hasMediaDynamicPolicy
&& (musicDevice != AudioSystem.DEVICE_OUT_REMOTE_SUBMIX)) {
if (!mAudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0 /*not looking in past*/)
&& !mDeviceBroker.hasAudioFocusUsers()) {
@@ -1205,6 +1217,12 @@
}
mDeviceBroker.postBroadcastBecomingNoisy();
delay = AudioService.BECOMING_NOISY_DELAY_MS;
+ } else {
+ Log.i(TAG, "not sending NOISY: device:0x" + Integer.toHexString(device)
+ + " musicDevice:0x" + Integer.toHexString(musicDevice)
+ + " inComm:" + inCommunication
+ + " mediaPolicy:" + hasMediaDynamicPolicy
+ + " singleDevice:" + singleAudioDeviceType);
}
mmi.set(MediaMetrics.Property.DELAY_MS, delay).record();
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index d4c9b48..7cf60e8 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -9035,8 +9035,6 @@
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
- mAudioSystem.dump(pw);
-
sLifecycleLogger.dump(pw);
if (mAudioHandler != null) {
pw.println("\nMessage handler (watch for unhandled messages):");
@@ -9116,6 +9114,8 @@
pw.println("mHasSpatializerEffect:" + mHasSpatializerEffect);
pw.println("isSpatializerEnabled:" + isSpatializerEnabled());
pw.println("isSpatialAudioEnabled:" + isSpatialAudioEnabled());
+
+ mAudioSystem.dump(pw);
}
private void dumpSupportedSystemUsage(PrintWriter pw) {
diff --git a/services/core/java/com/android/server/audio/AudioSystemAdapter.java b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
index ac212ee..a2ba76b 100644
--- a/services/core/java/com/android/server/audio/AudioSystemAdapter.java
+++ b/services/core/java/com/android/server/audio/AudioSystemAdapter.java
@@ -524,11 +524,28 @@
* @param pw
*/
public void dump(PrintWriter pw) {
+ pw.println("\nAudioSystemAdapter:");
+ pw.println(" mDevicesForStreamCache:");
+ if (mDevicesForStreamCache != null) {
+ for (Integer stream : mDevicesForStreamCache.keySet()) {
+ pw.println("\t stream:" + stream + " device:"
+ + AudioSystem.getOutputDeviceName(mDevicesForStreamCache.get(stream)));
+ }
+ }
+ pw.println(" mDevicesForAttrCache:");
+ if (mDevicesForAttrCache != null) {
+ for (AudioAttributes attr : mDevicesForAttrCache.keySet()) {
+ pw.println("\t" + attr);
+ for (AudioDeviceAttributes devAttr : mDevicesForAttrCache.get(attr)) {
+ pw.println("\t\t" + devAttr);
+ }
+ }
+ }
+
if (!ENABLE_GETDEVICES_STATS) {
- // only stats in this dump
+ // only stats in the rest of this dump
return;
}
- pw.println("\nAudioSystemAdapter:");
for (int i = 0; i < NB_MEASUREMENTS; i++) {
pw.println(mMethodNames[i]
+ ": counter=" + mMethodCallCounter[i]
diff --git a/services/core/java/com/android/server/location/geofence/GeofenceManager.java b/services/core/java/com/android/server/location/geofence/GeofenceManager.java
index a52c9ce..5093f5d 100644
--- a/services/core/java/com/android/server/location/geofence/GeofenceManager.java
+++ b/services/core/java/com/android/server/location/geofence/GeofenceManager.java
@@ -131,8 +131,8 @@
return mPermitted;
}
- boolean onLocationPermissionsChanged(String packageName) {
- if (getIdentity().getPackageName().equals(packageName)) {
+ boolean onLocationPermissionsChanged(@Nullable String packageName) {
+ if (packageName == null || getIdentity().getPackageName().equals(packageName)) {
return onLocationPermissionsChanged();
}
@@ -242,7 +242,7 @@
mLocationPermissionsListener =
new LocationPermissionsHelper.LocationPermissionsListener() {
@Override
- public void onLocationPermissionsChanged(String packageName) {
+ public void onLocationPermissionsChanged(@Nullable String packageName) {
GeofenceManager.this.onLocationPermissionsChanged(packageName);
}
@@ -494,7 +494,7 @@
updateRegistrations(registration -> registration.getIdentity().getUserId() == userId);
}
- void onLocationPermissionsChanged(String packageName) {
+ void onLocationPermissionsChanged(@Nullable String packageName) {
updateRegistrations(registration -> registration.onLocationPermissionsChanged(packageName));
}
diff --git a/services/core/java/com/android/server/location/gnss/GnssListenerMultiplexer.java b/services/core/java/com/android/server/location/gnss/GnssListenerMultiplexer.java
index 5e6ae68..a540476 100644
--- a/services/core/java/com/android/server/location/gnss/GnssListenerMultiplexer.java
+++ b/services/core/java/com/android/server/location/gnss/GnssListenerMultiplexer.java
@@ -119,8 +119,8 @@
*/
protected void onGnssListenerUnregister() {}
- boolean onLocationPermissionsChanged(String packageName) {
- if (getIdentity().getPackageName().equals(packageName)) {
+ boolean onLocationPermissionsChanged(@Nullable String packageName) {
+ if (packageName == null || getIdentity().getPackageName().equals(packageName)) {
return onLocationPermissionsChanged();
}
@@ -197,7 +197,7 @@
mLocationPermissionsListener =
new LocationPermissionsHelper.LocationPermissionsListener() {
@Override
- public void onLocationPermissionsChanged(String packageName) {
+ public void onLocationPermissionsChanged(@Nullable String packageName) {
GnssListenerMultiplexer.this.onLocationPermissionsChanged(packageName);
}
@@ -390,7 +390,7 @@
updateRegistrations(registration -> registration.getIdentity().getUserId() == userId);
}
- private void onLocationPermissionsChanged(String packageName) {
+ private void onLocationPermissionsChanged(@Nullable String packageName) {
updateRegistrations(registration -> registration.onLocationPermissionsChanged(packageName));
}
diff --git a/services/core/java/com/android/server/location/injector/LocationPermissionsHelper.java b/services/core/java/com/android/server/location/injector/LocationPermissionsHelper.java
index 2df2101..557ecda 100644
--- a/services/core/java/com/android/server/location/injector/LocationPermissionsHelper.java
+++ b/services/core/java/com/android/server/location/injector/LocationPermissionsHelper.java
@@ -18,6 +18,7 @@
import static com.android.server.location.LocationPermissions.PERMISSION_NONE;
+import android.annotation.Nullable;
import android.location.util.identity.CallerIdentity;
import com.android.server.location.LocationPermissions;
@@ -36,9 +37,10 @@
public interface LocationPermissionsListener {
/**
- * Called when something has changed about location permissions for the given package.
+ * Called when something has changed about location permissions for the given package. A
+ * null package indicates this affects every package.
*/
- void onLocationPermissionsChanged(String packageName);
+ void onLocationPermissionsChanged(@Nullable String packageName);
/**
* Called when something has changed about location permissions for the given uid.
diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
index 3c5c5dd..9ed63b5 100644
--- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java
+++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java
@@ -528,8 +528,8 @@
}
@GuardedBy("mLock")
- final boolean onLocationPermissionsChanged(String packageName) {
- if (getIdentity().getPackageName().equals(packageName)) {
+ final boolean onLocationPermissionsChanged(@Nullable String packageName) {
+ if (packageName == null || getIdentity().getPackageName().equals(packageName)) {
return onLocationPermissionsChanged();
}
@@ -1373,7 +1373,7 @@
private final LocationPermissionsListener mLocationPermissionsListener =
new LocationPermissionsListener() {
@Override
- public void onLocationPermissionsChanged(String packageName) {
+ public void onLocationPermissionsChanged(@Nullable String packageName) {
LocationProviderManager.this.onLocationPermissionsChanged(packageName);
}
@@ -2366,7 +2366,7 @@
}
}
- private void onLocationPermissionsChanged(String packageName) {
+ private void onLocationPermissionsChanged(@Nullable String packageName) {
synchronized (mLock) {
updateRegistrations(
registration -> registration.onLocationPermissionsChanged(packageName));
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 7455cec..211f8d6 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -2686,7 +2686,7 @@
}
}
- private void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group,
+ void createNotificationChannelGroup(String pkg, int uid, NotificationChannelGroup group,
boolean fromApp, boolean fromListener) {
Objects.requireNonNull(group);
Objects.requireNonNull(pkg);
@@ -3734,7 +3734,8 @@
final int callingUid = Binder.getCallingUid();
NotificationChannelGroup groupToDelete =
- mPreferencesHelper.getNotificationChannelGroup(groupId, pkg, callingUid);
+ mPreferencesHelper.getNotificationChannelGroupWithChannels(
+ pkg, callingUid, groupId, false);
if (groupToDelete != null) {
// Preflight for allowability
final int userId = UserHandle.getUserId(callingUid);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
index cdab91b..411f3dc 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java
@@ -136,7 +136,8 @@
@Behavior int behavior, InsetsVisibilities requestedVisibilities, String packageName);
/** @see com.android.internal.statusbar.IStatusBar#showTransient */
- void showTransient(int displayId, @InternalInsetsType int[] types);
+ void showTransient(int displayId, @InternalInsetsType int[] types,
+ boolean isGestureOnSystemBar);
/** @see com.android.internal.statusbar.IStatusBar#abortTransient */
void abortTransient(int displayId, @InternalInsetsType int[] types);
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index b58ca1f..18b2a0e 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -540,11 +540,12 @@
}
@Override
- public void showTransient(int displayId, @InternalInsetsType int[] types) {
+ public void showTransient(int displayId, @InternalInsetsType int[] types,
+ boolean isGestureOnSystemBar) {
getUiState(displayId).showTransient(types);
if (mBar != null) {
try {
- mBar.showTransient(displayId, types);
+ mBar.showTransient(displayId, types, isGestureOnSystemBar);
} catch (RemoteException ex) { }
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index d1e9d6b..4054954 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -4165,10 +4165,10 @@
final SurfaceControl newParent = computeImeParent();
if (newParent != null && newParent != mInputMethodSurfaceParent) {
mInputMethodSurfaceParent = newParent;
- getPendingTransaction().reparent(mImeWindowsContainer.mSurfaceControl, newParent);
+ getSyncTransaction().reparent(mImeWindowsContainer.mSurfaceControl, newParent);
// When surface parent is removed, the relative layer will also be removed. We need to
// do a force update to make sure there is a layer set for the new parent.
- assignRelativeLayerForIme(getPendingTransaction(), true /* forceUpdate */);
+ assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */);
scheduleAnimation();
}
}
@@ -5009,8 +5009,11 @@
// exists so it get's layered above the starting window.
if (imeTarget != null && !(imeTarget.mActivityRecord != null
&& imeTarget.mActivityRecord.hasStartingWindow())) {
+ final WindowToken imeControlTargetToken =
+ mImeControlTarget != null && mImeControlTarget.getWindow() != null
+ ? mImeControlTarget.getWindow().mToken : null;
final boolean canImeTargetSetRelativeLayer = imeTarget.getSurfaceControl() != null
- && imeTarget == mImeControlTarget
+ && imeTarget.mToken == imeControlTargetToken
&& !imeTarget.inMultiWindowMode()
&& imeTarget.mToken.getActivity(app -> app.isAnimating(TRANSITION | PARENTS,
ANIMATION_TYPE_ALL & ~ANIMATION_TYPE_RECENTS)) == null;
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index d5d206a..ef3c5a3 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -429,7 +429,7 @@
WindowState targetBar = (msg.arg1 == MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS)
? getStatusBar() : getNavigationBar();
if (targetBar != null) {
- requestTransientBars(targetBar);
+ requestTransientBars(targetBar, true /* isGestureOnSystemBar */);
}
}
break;
@@ -480,26 +480,25 @@
// TODO(b/181821798) Migrate SystemGesturesPointerEventListener to use window context.
mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
new SystemGesturesPointerEventListener.Callbacks() {
+
@Override
public void onSwipeFromTop() {
synchronized (mLock) {
- if (mStatusBar != null) {
- requestTransientBars(mStatusBar);
- }
- checkAltBarSwipeForTransientBars(ALT_BAR_TOP,
- false /* allowForAllPositions */);
+ final WindowState bar = mStatusBar != null
+ ? mStatusBar
+ : findAltBarMatchingPosition(ALT_BAR_TOP);
+ requestTransientBars(bar, true /* isGestureOnSystemBar */);
}
}
@Override
public void onSwipeFromBottom() {
synchronized (mLock) {
- if (mNavigationBar != null
- && mNavigationBarPosition == NAV_BAR_BOTTOM) {
- requestTransientBars(mNavigationBar);
- }
- checkAltBarSwipeForTransientBars(ALT_BAR_BOTTOM,
- false /* allowForAllPositions */);
+ final WindowState bar = mNavigationBar != null
+ && mNavigationBarPosition == NAV_BAR_BOTTOM
+ ? mNavigationBar
+ : findAltBarMatchingPosition(ALT_BAR_BOTTOM);
+ requestTransientBars(bar, true /* isGestureOnSystemBar */);
}
}
@@ -509,13 +508,8 @@
synchronized (mLock) {
mDisplayContent.calculateSystemGestureExclusion(
excludedRegion, null /* outUnrestricted */);
- final boolean allowSideSwipe = mNavigationBarAlwaysShowOnSideGesture &&
- !mSystemGestures.currentGestureStartedInRegion(excludedRegion);
- if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_RIGHT
- || allowSideSwipe)) {
- requestTransientBars(mNavigationBar);
- }
- checkAltBarSwipeForTransientBars(ALT_BAR_RIGHT, allowSideSwipe);
+ requestTransientBarsForSideSwipe(excludedRegion, NAV_BAR_RIGHT,
+ ALT_BAR_RIGHT);
}
excludedRegion.recycle();
}
@@ -526,17 +520,33 @@
synchronized (mLock) {
mDisplayContent.calculateSystemGestureExclusion(
excludedRegion, null /* outUnrestricted */);
- final boolean allowSideSwipe = mNavigationBarAlwaysShowOnSideGesture &&
- !mSystemGestures.currentGestureStartedInRegion(excludedRegion);
- if (mNavigationBar != null && (mNavigationBarPosition == NAV_BAR_LEFT
- || allowSideSwipe)) {
- requestTransientBars(mNavigationBar);
- }
- checkAltBarSwipeForTransientBars(ALT_BAR_LEFT, allowSideSwipe);
+ requestTransientBarsForSideSwipe(excludedRegion, NAV_BAR_LEFT,
+ ALT_BAR_LEFT);
}
excludedRegion.recycle();
}
+ private void requestTransientBarsForSideSwipe(Region excludedRegion,
+ int navBarSide, int altBarSide) {
+ final WindowState barMatchingSide = mNavigationBar != null
+ && mNavigationBarPosition == navBarSide
+ ? mNavigationBar
+ : findAltBarMatchingPosition(altBarSide);
+ final boolean allowSideSwipe = mNavigationBarAlwaysShowOnSideGesture &&
+ !mSystemGestures.currentGestureStartedInRegion(excludedRegion);
+ if (barMatchingSide == null && !allowSideSwipe) {
+ return;
+ }
+
+ // Request transient bars on the matching bar, or any bar if we always allow
+ // side swipes to show the bars
+ final boolean isGestureOnSystemBar = barMatchingSide != null;
+ final WindowState bar = barMatchingSide != null
+ ? barMatchingSide
+ : findTransientNavOrAltBar();
+ requestTransientBars(bar, isGestureOnSystemBar);
+ }
+
@Override
public void onFling(int duration) {
if (mService.mPowerManagerInternal != null) {
@@ -686,21 +696,39 @@
mHandler.post(mGestureNavigationSettingsObserver::register);
}
- private void checkAltBarSwipeForTransientBars(@WindowManagerPolicy.AltBarPosition int pos,
- boolean allowForAllPositions) {
- if (mStatusBarAlt != null && (mStatusBarAltPosition == pos || allowForAllPositions)) {
- requestTransientBars(mStatusBarAlt);
+ /**
+ * Returns the first non-null alt bar window matching the given position.
+ */
+ private WindowState findAltBarMatchingPosition(@WindowManagerPolicy.AltBarPosition int pos) {
+ if (mStatusBarAlt != null && mStatusBarAltPosition == pos) {
+ return mStatusBarAlt;
}
- if (mNavigationBarAlt != null
- && (mNavigationBarAltPosition == pos || allowForAllPositions)) {
- requestTransientBars(mNavigationBarAlt);
+ if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) {
+ return mNavigationBarAlt;
}
- if (mClimateBarAlt != null && (mClimateBarAltPosition == pos || allowForAllPositions)) {
- requestTransientBars(mClimateBarAlt);
+ if (mClimateBarAlt != null && mClimateBarAltPosition == pos) {
+ return mClimateBarAlt;
}
- if (mExtraNavBarAlt != null && (mExtraNavBarAltPosition == pos || allowForAllPositions)) {
- requestTransientBars(mExtraNavBarAlt);
+ if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) {
+ return mExtraNavBarAlt;
}
+ return null;
+ }
+
+ /**
+ * Finds the first non-null nav bar to request transient for.
+ */
+ private WindowState findTransientNavOrAltBar() {
+ if (mNavigationBar != null) {
+ return mNavigationBar;
+ }
+ if (mNavigationBarAlt != null) {
+ return mNavigationBarAlt;
+ }
+ if (mExtraNavBarAlt != null) {
+ return mExtraNavBarAlt;
+ }
+ return null;
}
void systemReady() {
@@ -2622,8 +2650,8 @@
updateSystemBarAttributes();
}
- private void requestTransientBars(WindowState swipeTarget) {
- if (!mService.mPolicy.isUserSetupComplete()) {
+ private void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
+ if (swipeTarget == null || !mService.mPolicy.isUserSetupComplete()) {
// Swipe-up for navigation bar is disabled during setup
return;
}
@@ -2659,7 +2687,8 @@
if (controlTarget.canShowTransient()) {
// Show transient bars if they are hidden; restore position if they are visible.
- mDisplayContent.getInsetsPolicy().showTransient(SHOW_TYPES_FOR_SWIPE);
+ mDisplayContent.getInsetsPolicy().showTransient(SHOW_TYPES_FOR_SWIPE,
+ isGestureOnSystemBar);
controlTarget.showInsets(restorePositionTypes, false);
} else {
// Restore visibilities and positions of system bars.
@@ -2881,7 +2910,8 @@
// we're no longer on the Keyguard and the screen is ready. We can now request the bars.
mPendingPanicGestureUptime = 0;
if (!isNavBarEmpty(disableFlags)) {
- mDisplayContent.getInsetsPolicy().showTransient(SHOW_TYPES_FOR_PANIC);
+ mDisplayContent.getInsetsPolicy().showTransient(SHOW_TYPES_FOR_PANIC,
+ true /* isGestureOnSystemBar */);
}
}
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index 3d19f54..10ae152 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -159,7 +159,7 @@
return provider != null && provider.hasWindow() && !provider.getSource().isVisible();
}
- void showTransient(@InternalInsetsType int[] types) {
+ void showTransient(@InternalInsetsType int[] types, boolean isGestureOnSystemBar) {
boolean changed = false;
for (int i = types.length - 1; i >= 0; i--) {
final @InternalInsetsType int type = types[i];
@@ -176,8 +176,8 @@
StatusBarManagerInternal statusBarManagerInternal =
mPolicy.getStatusBarManagerInternal();
if (statusBarManagerInternal != null) {
- statusBarManagerInternal.showTransient(
- mDisplayContent.getDisplayId(), mShowingTransientTypes.toArray());
+ statusBarManagerInternal.showTransient(mDisplayContent.getDisplayId(),
+ mShowingTransientTypes.toArray(), isGestureOnSystemBar);
}
updateBarControlTarget(mFocusedWin);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index d0ca298..41e605b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -258,6 +258,7 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.UserManager.UserRestrictionSource;
import android.os.storage.StorageManager;
import android.permission.AdminPermissionControlParams;
import android.permission.IPermissionManager;
@@ -286,6 +287,7 @@
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AtomicFile;
+import android.util.DebugUtils;
import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.Pair;
@@ -13225,14 +13227,29 @@
try {
List<UserManager.EnforcingUser> sources = mUserManager
.getUserRestrictionSources(restriction, UserHandle.of(userId));
- if (sources == null || sources.isEmpty()) {
+ if (sources == null) {
// The restriction is not enforced.
return null;
- } else if (sources.size() > 1) {
+ }
+ int sizeBefore = sources.size();
+ if (sizeBefore > 1) {
+ Slogf.d(LOG_TAG, "getEnforcingAdminAndUserDetailsInternal(%d, %s): "
+ + "%d sources found, excluding those set by UserManager",
+ userId, restriction, sizeBefore);
+ sources = getDevicePolicySources(sources);
+ }
+ if (sources.isEmpty()) {
+ // The restriction is not enforced (or is just enforced by the system)
+ return null;
+ }
+
+ if (sources.size() > 1) {
// In this case, we'll show an admin support dialog that does not
// specify the admin.
// TODO(b/128928355): if this restriction is enforced by multiple DPCs, return
// the admin for the calling user.
+ Slogf.w(LOG_TAG, "getEnforcingAdminAndUserDetailsInternal(%d, %s): multiple "
+ + "sources for restriction %s on user %d", restriction, userId);
result = new Bundle();
result.putInt(Intent.EXTRA_USER_ID, userId);
return result;
@@ -13278,6 +13295,32 @@
}
/**
+ * Excludes restrictions imposed by UserManager.
+ */
+ private List<UserManager.EnforcingUser> getDevicePolicySources(
+ List<UserManager.EnforcingUser> sources) {
+ int sizeBefore = sources.size();
+ List<UserManager.EnforcingUser> realSources = new ArrayList<>(sizeBefore);
+ for (int i = 0; i < sizeBefore; i++) {
+ UserManager.EnforcingUser source = sources.get(i);
+ int type = source.getUserRestrictionSource();
+ if (type != UserManager.RESTRICTION_SOURCE_PROFILE_OWNER
+ && type != UserManager.RESTRICTION_SOURCE_DEVICE_OWNER) {
+ // TODO(b/128928355): add unit test
+ Slogf.d(LOG_TAG, "excluding source of type %s at index %d",
+ userRestrictionSourceToString(type), i);
+ continue;
+ }
+ realSources.add(source);
+ }
+ return realSources;
+ }
+
+ private static String userRestrictionSourceToString(@UserRestrictionSource int source) {
+ return DebugUtils.flagsToString(UserManager.class, "RESTRICTION_", source);
+ }
+
+ /**
* @param restriction The restriction enforced by admin. It could be any user restriction or
* policy like {@link DevicePolicyManager#POLICY_DISABLE_CAMERA} and
* {@link DevicePolicyManager#POLICY_DISABLE_SCREEN_CAPTURE}.
diff --git a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
index 5c7a580..1c49e6e 100644
--- a/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/apphibernation/AppHibernationServiceTest.java
@@ -146,12 +146,15 @@
}
@Test
- public void testSetHibernatingForUser_packageIsHibernating() {
+ public void testSetHibernatingForUser_packageIsHibernating() throws Exception {
// WHEN we hibernate a package for a user
mAppHibernationService.setHibernatingForUser(PACKAGE_NAME_1, USER_ID_1, true);
// THEN the package is marked hibernating for the user
assertTrue(mAppHibernationService.isHibernatingForUser(PACKAGE_NAME_1, USER_ID_1));
+ verify(mIActivityManager).forceStopPackage(PACKAGE_NAME_1, USER_ID_1);
+ verify(mIPackageManager).deleteApplicationCacheFilesAsUser(
+ eq(PACKAGE_NAME_1), eq(USER_ID_1), any());
}
@Test
@@ -204,6 +207,7 @@
// THEN the package is marked hibernating for the user
assertTrue(mAppHibernationService.isHibernatingGlobally(PACKAGE_NAME_1));
+ verify(mPackageManagerInternal).deleteOatArtifactsOfPackage(PACKAGE_NAME_1);
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java b/services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java
index 11554c7..6334e9d 100644
--- a/services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/uwb/UwbServiceImplTest.java
@@ -82,6 +82,8 @@
MockitoAnnotations.initMocks(this);
when(mUwbInjector.getVendorService()).thenReturn(mVendorService);
when(mUwbInjector.checkUwbRangingPermissionForDataDelivery(any(), any())).thenReturn(true);
+ when(mUwbInjector.isPersistedUwbStateEnabled()).thenReturn(true);
+ when(mUwbInjector.isAirplaneModeOn()).thenReturn(false);
when(mVendorService.asBinder()).thenReturn(mVendorServiceBinder);
mUwbServiceImpl = new UwbServiceImpl(mContext, mUwbInjector);
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index c994b41..e98d077 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -93,6 +93,7 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AlarmManager;
@@ -221,12 +222,15 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
import java.util.function.Consumer;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
+@SuppressLint("GuardedBy") // It's ok for this test to access guarded methods from the service.
public class NotificationManagerServiceTest extends UiServiceTestCase {
private static final String TEST_CHANNEL_ID = "NotificationManagerServiceTestChannelId";
private static final int UID_HEADLESS = 1000000;
@@ -2440,7 +2444,8 @@
.thenReturn(associations);
NotificationChannelGroup ncg = new NotificationChannelGroup("a", "b/c");
mService.setPreferencesHelper(mPreferencesHelper);
- when(mPreferencesHelper.getNotificationChannelGroup(eq(ncg.getId()), eq(PKG), anyInt()))
+ when(mPreferencesHelper.getNotificationChannelGroupWithChannels(
+ eq(PKG), anyInt(), eq(ncg.getId()), anyBoolean()))
.thenReturn(ncg);
reset(mListeners);
mBinderService.deleteNotificationChannelGroup(PKG, ncg.getId());
@@ -2450,6 +2455,56 @@
}
@Test
+ public void testDeleteChannelGroupChecksForFgses() throws Exception {
+ List<String> associations = new ArrayList<>();
+ associations.add("a");
+ when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid)))
+ .thenReturn(associations);
+ CountDownLatch latch = new CountDownLatch(2);
+ mService.createNotificationChannelGroup(
+ PKG, mUid, new NotificationChannelGroup("group", "group"), true, false);
+ new Thread(() -> {
+ NotificationChannel notificationChannel = new NotificationChannel("id", "id",
+ NotificationManager.IMPORTANCE_HIGH);
+ notificationChannel.setGroup("group");
+ ParceledListSlice<NotificationChannel> pls =
+ new ParceledListSlice(ImmutableList.of(notificationChannel));
+ try {
+ mBinderService.createNotificationChannelsForPackage(PKG, mUid, pls);
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ latch.countDown();
+ }).start();
+ new Thread(() -> {
+ try {
+ synchronized (this) {
+ wait(5000);
+ }
+ mService.createNotificationChannelGroup(PKG, mUid,
+ new NotificationChannelGroup("new", "new group"), true, false);
+ NotificationChannel notificationChannel =
+ new NotificationChannel("id", "id", NotificationManager.IMPORTANCE_HIGH);
+ notificationChannel.setGroup("new");
+ ParceledListSlice<NotificationChannel> pls =
+ new ParceledListSlice(ImmutableList.of(notificationChannel));
+ try {
+ mBinderService.createNotificationChannelsForPackage(PKG, mUid, pls);
+ mBinderService.deleteNotificationChannelGroup(PKG, "group");
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ latch.countDown();
+ }).start();
+
+ latch.await();
+ verify(mAmi).hasForegroundServiceNotification(anyString(), anyInt(), anyString());
+ }
+
+ @Test
public void testUpdateNotificationChannelFromPrivilegedListener_success() throws Exception {
mService.setPreferencesHelper(mPreferencesHelper);
List<String> associations = new ArrayList<>();
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
index 07d467b..ea5bf52 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsPolicyTest.java
@@ -291,7 +291,8 @@
assertFalse(mDisplayContent.getInsetsStateController().getRawInsetsState()
.getSource(ITYPE_NAVIGATION_BAR).isVisible());
- policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR});
+ policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR},
+ true /* isGestureOnSystemBar */);
waitUntilWindowAnimatorIdle();
final InsetsSourceControl[] controls =
mDisplayContent.getInsetsStateController().getControlsForDispatch(mAppWindow);
@@ -319,7 +320,8 @@
final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
doNothing().when(policy).startAnimation(anyBoolean(), any());
policy.updateBarControlTarget(mAppWindow);
- policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR});
+ policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR},
+ true /* isGestureOnSystemBar */);
waitUntilWindowAnimatorIdle();
final InsetsSourceControl[] controls =
mDisplayContent.getInsetsStateController().getControlsForDispatch(mAppWindow);
@@ -351,7 +353,8 @@
final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
doNothing().when(policy).startAnimation(anyBoolean(), any());
policy.updateBarControlTarget(mAppWindow);
- policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR});
+ policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR},
+ true /* isGestureOnSystemBar */);
waitUntilWindowAnimatorIdle();
InsetsSourceControl[] controls =
mDisplayContent.getInsetsStateController().getControlsForDispatch(mAppWindow);
@@ -402,7 +405,8 @@
final InsetsPolicy policy = spy(mDisplayContent.getInsetsPolicy());
doNothing().when(policy).startAnimation(anyBoolean(), any());
policy.updateBarControlTarget(app);
- policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR});
+ policy.showTransient(new int[]{ITYPE_STATUS_BAR, ITYPE_NAVIGATION_BAR},
+ true /* isGestureOnSystemBar */);
final InsetsSourceControl[] controls =
mDisplayContent.getInsetsStateController().getControlsForDispatch(app);
policy.updateBarControlTarget(app2);
diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
index f8c84df..94bc7f2 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InsetsStateControllerTest.java
@@ -332,7 +332,8 @@
assertTrue(rotatedState.getSource(ITYPE_STATUS_BAR).isVisible());
provider.getSource().setVisible(false);
- mDisplayContent.getInsetsPolicy().showTransient(new int[] { ITYPE_STATUS_BAR });
+ mDisplayContent.getInsetsPolicy().showTransient(new int[] { ITYPE_STATUS_BAR },
+ true /* isGestureOnSystemBar */);
assertTrue(mDisplayContent.getInsetsPolicy().isTransient(ITYPE_STATUS_BAR));
assertFalse(app.getInsetsState().getSource(ITYPE_STATUS_BAR).isVisible());
diff --git a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
index 049966c..4dffe7e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ZOrderingTests.java
@@ -428,6 +428,25 @@
assertWindowHigher(mImeWindow, imeAppTarget);
}
+ @Test
+ public void testAssignWindowLayers_ForImeOnPopupImeLayeringTarget() {
+ final WindowState imeAppTarget = createWindow(null, TYPE_APPLICATION,
+ mAppWindow.mActivityRecord, "imeAppTarget");
+ mDisplayContent.setImeInputTarget(imeAppTarget);
+ mDisplayContent.setImeLayeringTarget(imeAppTarget);
+ mDisplayContent.setImeControlTarget(imeAppTarget);
+
+ // Set a popup IME layering target and keeps the original IME control target behinds it.
+ final WindowState popupImeTargetWin = createWindow(imeAppTarget,
+ TYPE_APPLICATION_SUB_PANEL, mAppWindow.mActivityRecord, "popupImeTargetWin");
+ mDisplayContent.setImeLayeringTarget(popupImeTargetWin);
+ mDisplayContent.updateImeParent();
+
+ // Ime should on top of the popup IME layering target window.
+ mDisplayContent.assignChildLayers(mTransaction);
+ assertWindowHigher(mImeWindow, popupImeTargetWin);
+ }
+
@Test
public void testAssignWindowLayers_ForNegativelyZOrderedSubtype() {
diff --git a/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java b/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
index 0c65cc4..286cff9 100644
--- a/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
+++ b/services/usb/java/com/android/server/usb/UsbUserPermissionManager.java
@@ -688,6 +688,8 @@
String packageName,
PendingIntent pi,
int uid) {
+ boolean throwException = false;
+
// compare uid with packageName to foil apps pretending to be someone else
try {
ApplicationInfo aInfo = mContext.getPackageManager().getApplicationInfo(packageName, 0);
@@ -695,11 +697,13 @@
Slog.w(TAG, "package " + packageName
+ " does not match caller's uid " + uid);
EventLog.writeEvent(SNET_EVENT_LOG_ID, "180104273", -1, "");
- throw new IllegalArgumentException("package " + packageName
- + " not found");
+ throwException = true;
}
} catch (PackageManager.NameNotFoundException e) {
- throw new IllegalArgumentException("package " + packageName + " not found");
+ throwException = true;
+ } finally {
+ if (throwException)
+ throw new IllegalArgumentException("package " + packageName + " not found");
}
requestPermissionDialog(device, accessory, canBeDefault, packageName, uid, mContext, pi);
diff --git a/services/uwb/java/com/android/server/uwb/UwbInjector.java b/services/uwb/java/com/android/server/uwb/UwbInjector.java
index 64f1da1..a7a0500 100644
--- a/services/uwb/java/com/android/server/uwb/UwbInjector.java
+++ b/services/uwb/java/com/android/server/uwb/UwbInjector.java
@@ -21,10 +21,13 @@
import android.annotation.NonNull;
import android.content.AttributionSource;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.PermissionChecker;
import android.os.IBinder;
import android.os.ServiceManager;
+import android.provider.Settings;
+import android.uwb.AdapterState;
import android.uwb.IUwbAdapter;
@@ -80,4 +83,23 @@
mContext, UWB_RANGING, -1, attributionSource, message);
return permissionCheckResult == PERMISSION_GRANTED;
}
+
+ /** Returns true if UWB state saved in Settings is enabled. */
+ public boolean isPersistedUwbStateEnabled() {
+ final ContentResolver cr = mContext.getContentResolver();
+ try {
+ return Settings.Global.getInt(cr, Settings.Global.UWB_ENABLED)
+ == AdapterState.STATE_ENABLED_ACTIVE;
+ } catch (Settings.SettingNotFoundException e) {
+ Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED,
+ AdapterState.STATE_ENABLED_ACTIVE);
+ return true;
+ }
+ }
+
+ /** Returns true if airplane mode is turned on. */
+ public boolean isAirplaneModeOn() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
+ }
}
diff --git a/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java b/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java
index 4dd26a6..889e182 100644
--- a/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java
+++ b/services/uwb/java/com/android/server/uwb/UwbServiceImpl.java
@@ -18,13 +18,19 @@
import android.annotation.NonNull;
import android.content.AttributionSource;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Binder;
import android.os.IBinder;
import android.os.PersistableBundle;
import android.os.RemoteException;
+import android.provider.Settings;
import android.util.ArrayMap;
import android.util.Log;
+import android.uwb.AdapterState;
import android.uwb.IUwbAdapter;
import android.uwb.IUwbAdapterStateCallbacks;
import android.uwb.IUwbRangingCallbacks;
@@ -225,13 +231,20 @@
mVendorUwbAdapter = null;
}
- private synchronized IUwbAdapter getVendorUwbAdapter() throws IllegalStateException {
+ private synchronized IUwbAdapter getVendorUwbAdapter()
+ throws IllegalStateException, RemoteException {
if (mVendorUwbAdapter != null) return mVendorUwbAdapter;
mVendorUwbAdapter = mUwbInjector.getVendorService();
if (mVendorUwbAdapter == null) {
throw new IllegalStateException("No vendor service found!");
}
Log.i(TAG, "Retrieved vendor service");
+ long token = Binder.clearCallingIdentity();
+ try {
+ mVendorUwbAdapter.setEnabled(isEnabled());
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
linkToVendorServiceDeath();
return mVendorUwbAdapter;
}
@@ -239,6 +252,7 @@
UwbServiceImpl(@NonNull Context context, @NonNull UwbInjector uwbInjector) {
mContext = context;
mUwbInjector = uwbInjector;
+ registerAirplaneModeReceiver();
}
private void enforceUwbPrivilegedPermission() {
@@ -320,6 +334,34 @@
@Override
public synchronized void setEnabled(boolean enabled) throws RemoteException {
- getVendorUwbAdapter().setEnabled(enabled);
+ persistUwbState(enabled);
+ getVendorUwbAdapter().setEnabled(isEnabled());
+ }
+
+ private void persistUwbState(boolean enabled) {
+ final ContentResolver cr = mContext.getContentResolver();
+ int state = enabled ? AdapterState.STATE_ENABLED_ACTIVE : AdapterState.STATE_DISABLED;
+ Settings.Global.putInt(cr, Settings.Global.UWB_ENABLED, state);
+ }
+
+ private void registerAirplaneModeReceiver() {
+ mContext.registerReceiver(new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ handleAirplaneModeEvent();
+ }
+ }, new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
+ }
+
+ private void handleAirplaneModeEvent() {
+ try {
+ getVendorUwbAdapter().setEnabled(isEnabled());
+ } catch (RemoteException | IllegalStateException e) {
+ Log.e(TAG, "Unable to set UWB Adapter state.", e);
+ }
+ }
+
+ private boolean isEnabled() {
+ return mUwbInjector.isPersistedUwbStateEnabled() && !mUwbInjector.isAirplaneModeOn();
}
}
diff --git a/telephony/java/android/telephony/data/QosBearerFilter.java b/telephony/java/android/telephony/data/QosBearerFilter.java
index 54930d0..fdb61ba 100644
--- a/telephony/java/android/telephony/data/QosBearerFilter.java
+++ b/telephony/java/android/telephony/data/QosBearerFilter.java
@@ -18,6 +18,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.net.InetAddresses;
import android.net.LinkAddress;
import android.os.Parcel;
@@ -38,11 +39,10 @@
* @hide
*/
public final class QosBearerFilter implements Parcelable {
-
- private List<LinkAddress> localAddresses;
- private List<LinkAddress> remoteAddresses;
- private PortRange localPort;
- private PortRange remotePort;
+ private @NonNull List<LinkAddress> localAddresses;
+ private @NonNull List<LinkAddress> remoteAddresses;
+ private @Nullable PortRange localPort;
+ private @Nullable PortRange remotePort;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@@ -59,13 +59,12 @@
public static final int QOS_PROTOCOL_AH = android.hardware.radio.V1_6.QosProtocol.AH;
public static final int QOS_MIN_PORT = android.hardware.radio.V1_6.QosPortRange.MIN;
/**
- * Hardcoded inplace of android.hardware.radio.V1_6.QosPortRange.MAX as it
+ * Hardcoded in place of android.hardware.radio.V1_6.QosPortRange.MAX as it
* returns -1 due to uint16_t to int conversion in java. (TODO: Fix the HAL)
*/
public static final int QOS_MAX_PORT = 65535; // android.hardware.radio.V1_6.QosPortRange.MIN;
- @QosProtocol
- private int protocol;
+ private @QosProtocol int protocol;
private int typeOfServiceMask;
@@ -88,8 +87,7 @@
public static final int QOS_FILTER_DIRECTION_BIDIRECTIONAL =
android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;
- @QosBearerFilterDirection
- private int filterDirection;
+ private @QosBearerFilterDirection int filterDirection;
/**
* Specified the order in which the filter needs to be matched.
@@ -106,9 +104,10 @@
filterDirection = QOS_FILTER_DIRECTION_BIDIRECTIONAL;
}
- public QosBearerFilter(List<LinkAddress> localAddresses, List<LinkAddress> remoteAddresses,
- PortRange localPort, PortRange remotePort, int protocol, int tos,
- long flowLabel, long spi, int direction, int precedence) {
+ public QosBearerFilter(@NonNull List<LinkAddress> localAddresses,
+ @NonNull List<LinkAddress> remoteAddresses, @Nullable PortRange localPort,
+ @Nullable PortRange remotePort, @QosProtocol int protocol, int tos, long flowLabel,
+ long spi, @QosBearerFilterDirection int direction, int precedence) {
this.localAddresses = localAddresses;
this.remoteAddresses = remoteAddresses;
this.localPort = localPort;
@@ -121,19 +120,19 @@
this.precedence = precedence;
}
- public List<LinkAddress> getLocalAddresses() {
+ public @NonNull List<LinkAddress> getLocalAddresses() {
return localAddresses;
}
- public List<LinkAddress> getRemoteAddresses() {
+ public @NonNull List<LinkAddress> getRemoteAddresses() {
return remoteAddresses;
}
- public PortRange getLocalPortRange() {
+ public @Nullable PortRange getLocalPortRange() {
return localPort;
}
- public PortRange getRemotePortRange() {
+ public @Nullable PortRange getRemotePortRange() {
return remotePort;
}
@@ -327,8 +326,8 @@
&& localAddresses.containsAll(other.localAddresses)
&& remoteAddresses.size() == other.remoteAddresses.size()
&& remoteAddresses.containsAll(other.remoteAddresses)
- && localPort.equals(other.localPort)
- && remotePort.equals(other.remotePort)
+ && Objects.equals(localPort, other.localPort)
+ && Objects.equals(remotePort, other.remotePort)
&& protocol == other.protocol
&& typeOfServiceMask == other.typeOfServiceMask
&& flowLabel == other.flowLabel