diff options
130 files changed, 885 insertions, 164 deletions
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index f08be4922495..e7cce068cf5f 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -319,6 +319,8 @@ message Atom { 217 [(log_from_module) = "permissioncontroller"]; PermissionAppsFragmentViewed permission_apps_fragment_viewed = 218 [(log_from_module) = "permissioncontroller"]; + ExclusionRectStateChanged exclusion_rect_state_changed = 223; + BackGesture back_gesture_reported_reported = 224; } // Pulled events will start at field 10000. @@ -2500,6 +2502,41 @@ message PhoneStateChanged { optional State state = 1; } +message BackGesture { + enum BackType { + DEFAULT_BACK_TYPE = 0; + COMPLETED = 1; + COMPLETED_REJECTED = 2; // successful because coming from rejected area + INCOMPLETE_EXCLUDED = 3; // would have been successful but in the exclusion area + INCOMPLETE = 4; + } + optional BackType type = 1; + + optional int32 y_coordinate = 2; // y coordinate for ACTION_DOWN event + enum WindowHorizontalLocation { + DEFAULT_LOCATION = 0; + LEFT = 1; + RIGHT = 2; + } + optional WindowHorizontalLocation x_location = 3; +} + +message ExclusionRectStateChanged { + optional string component_name = 1; // if not available, simply packageName + optional int32 requested_height = 2; // px + optional int32 rejected_height = 3; // px + + enum WindowHorizontalLocation { + DEFAULT_LOCATION = 0; + LEFT = 1; + RIGHT = 2; + } + optional WindowHorizontalLocation x_location = 4; + optional bool landscape = 5; + optional bool splitscreen = 6; + optional int32 duration_millis = 7; +} + message LauncherUIChanged { optional android.stats.launcher.LauncherAction action = 1; optional android.stats.launcher.LauncherState src_state = 2; diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java index 8508c2c95666..1725db046a95 100644 --- a/core/java/android/app/ActivityManagerInternal.java +++ b/core/java/android/app/ActivityManagerInternal.java @@ -120,17 +120,6 @@ public abstract class ActivityManagerInternal { public abstract void setHasOverlayUi(int pid, boolean hasOverlayUi); /** - * Sets if the given pid is currently running a remote animation, which is taken a signal for - * determining oom adjustment and scheduling behavior. - * - * @param pid The pid we are setting overlay UI for. - * @param runningRemoteAnimation True if the process is running a remote animation, false - * otherwise. - * @see RemoteAnimationAdapter - */ - public abstract void setRunningRemoteAnimation(int pid, boolean runningRemoteAnimation); - - /** * Called after the network policy rules are updated by * {@link com.android.server.net.NetworkPolicyManagerService} for a specific {@param uid} and * {@param procStateSeq}. diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 5ac13d8a067d..a0170dab9f04 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -206,10 +206,16 @@ public abstract class CameraMetadata<TKey> { continue; } - if (filterTags == null || Arrays.binarySearch(filterTags, - CameraMetadataNative.getTag(keyName, vendorId)) >= 0) { + + if (filterTags != null && Arrays.binarySearch(filterTags, + CameraMetadataNative.getTag(keyName, vendorId)) < 0) { + // ignore vendor keys not in filterTags + continue; + } + if (instance == null || instance.getProtected(k) != null) { keyList.add(k); } + } } diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index 1fd212df4469..ea50ae810535 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -338,6 +338,20 @@ public final class DeviceConfig { "system_gestures_excluded_by_pre_q_sticky_immersive"; /** + * The minimum duration between gesture exclusion logging for a given window in + * milliseconds. + * + * Events that happen in-between will be silently dropped. + * + * A non-positive value disables logging. + * + * @see android.provider.DeviceConfig#NAMESPACE_WINDOW_MANAGER + * @hide + */ + String KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS = + "system_gesture_exclusion_log_debounce_millis"; + + /** * Key for controlling which packages are explicitly blocked from running at refresh rates * higher than 60hz. * diff --git a/core/java/android/view/ISystemGestureExclusionListener.aidl b/core/java/android/view/ISystemGestureExclusionListener.aidl index a032625547d2..9c2f9a6a192c 100644 --- a/core/java/android/view/ISystemGestureExclusionListener.aidl +++ b/core/java/android/view/ISystemGestureExclusionListener.aidl @@ -28,7 +28,14 @@ oneway interface ISystemGestureExclusionListener { * Called when the system gesture exclusion for the given display changed. * @param displayId the display whose system gesture exclusion changed * @param systemGestureExclusion a {@code Region} where the app would like priority over the - * system gestures, in display coordinates. + * system gestures, in display coordinates. Certain restrictions + * might be applied such that apps don't get all the exclusions + * they request. + * @param systemGestureExclusionUnrestricted a {@code Region} where the app would like priority + * over the system gestures, in display coordinates, without + * any restrictions applied. Null if no restrictions have been + * applied. */ - void onSystemGestureExclusionChanged(int displayId, in Region systemGestureExclusion); + void onSystemGestureExclusionChanged(int displayId, in Region systemGestureExclusion, + in Region systemGestureExclusionUnrestricted); }
\ No newline at end of file diff --git a/core/java/android/view/RemoteAnimationAdapter.java b/core/java/android/view/RemoteAnimationAdapter.java index bc2fe545a8ac..c686440171a2 100644 --- a/core/java/android/view/RemoteAnimationAdapter.java +++ b/core/java/android/view/RemoteAnimationAdapter.java @@ -55,6 +55,7 @@ public class RemoteAnimationAdapter implements Parcelable { /** @see #getCallingPid */ private int mCallingPid; + private int mCallingUid; /** * @param runner The interface that gets notified when we actually need to start the animation. @@ -103,10 +104,11 @@ public class RemoteAnimationAdapter implements Parcelable { } /** - * To be called by system_server to keep track which pid is running this animation. + * To be called by system_server to keep track which pid and uid is running this animation. */ - public void setCallingPid(int pid) { + public void setCallingPidUid(int pid, int uid) { mCallingPid = pid; + mCallingUid = uid; } /** @@ -116,6 +118,13 @@ public class RemoteAnimationAdapter implements Parcelable { return mCallingPid; } + /** + * @return The uid of the process running the animation. + */ + public int getCallingUid() { + return mCallingUid; + } + @Override public int describeContents() { return 0; diff --git a/core/java/android/view/RemoteAnimationDefinition.java b/core/java/android/view/RemoteAnimationDefinition.java index 884cae440bed..da599efb6eee 100644 --- a/core/java/android/view/RemoteAnimationDefinition.java +++ b/core/java/android/view/RemoteAnimationDefinition.java @@ -118,9 +118,9 @@ public class RemoteAnimationDefinition implements Parcelable { * To be called by system_server to keep track which pid is running the remote animations inside * this definition. */ - public void setCallingPid(int pid) { + public void setCallingPidUid(int pid, int uid) { for (int i = mTransitionAnimationMap.size() - 1; i >= 0; i--) { - mTransitionAnimationMap.valueAt(i).adapter.setCallingPid(pid); + mTransitionAnimationMap.valueAt(i).adapter.setCallingPidUid(pid, uid); } } diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java index 9084f625f9cb..d48034b66266 100644 --- a/core/java/com/android/internal/widget/PointerLocationView.java +++ b/core/java/com/android/internal/widget/PointerLocationView.java @@ -53,6 +53,12 @@ public class PointerLocationView extends View implements InputDeviceListener, // to plot alongside the default one. Useful for testing and comparison purposes. private static final String ALT_STRATEGY_PROPERY_KEY = "debug.velocitytracker.alt"; + /** + * If set to a positive value between 1-255, shows an overlay with the approved (red) and + * rejected (blue) exclusions. + */ + private static final String GESTURE_EXCLUSION_PROP = "debug.pointerlocation.showexclusion"; + public static class PointerState { // Trace of previous points. private float[] mTraceX = new float[32]; @@ -138,8 +144,10 @@ public class PointerLocationView extends View implements InputDeviceListener, private final PointerCoords mTempCoords = new PointerCoords(); private final Region mSystemGestureExclusion = new Region(); + private final Region mSystemGestureExclusionRejected = new Region(); private final Path mSystemGestureExclusionPath = new Path(); private final Paint mSystemGestureExclusionPaint; + private final Paint mSystemGestureExclusionRejectedPaint; private final VelocityTracker mVelocity; private final VelocityTracker mAltVelocity; @@ -190,6 +198,10 @@ public class PointerLocationView extends View implements InputDeviceListener, mSystemGestureExclusionPaint.setARGB(25, 255, 0, 0); mSystemGestureExclusionPaint.setStyle(Paint.Style.FILL_AND_STROKE); + mSystemGestureExclusionRejectedPaint = new Paint(); + mSystemGestureExclusionRejectedPaint.setARGB(25, 0, 0, 255); + mSystemGestureExclusionRejectedPaint.setStyle(Paint.Style.FILL_AND_STROKE); + PointerState ps = new PointerState(); mPointers.add(ps); mActivePointerId = 0; @@ -263,6 +275,12 @@ public class PointerLocationView extends View implements InputDeviceListener, canvas.drawPath(mSystemGestureExclusionPath, mSystemGestureExclusionPaint); } + if (!mSystemGestureExclusionRejected.isEmpty()) { + mSystemGestureExclusionPath.reset(); + mSystemGestureExclusionRejected.getBoundaryPath(mSystemGestureExclusionPath); + canvas.drawPath(mSystemGestureExclusionPath, mSystemGestureExclusionRejectedPaint); + } + // Labels if (mActivePointerId >= 0) { final PointerState ps = mPointers.get(mActivePointerId); @@ -754,6 +772,9 @@ public class PointerLocationView extends View implements InputDeviceListener, } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } + final int alpha = systemGestureExclusionOpacity(); + mSystemGestureExclusionPaint.setAlpha(alpha); + mSystemGestureExclusionRejectedPaint.setAlpha(alpha); } else { mSystemGestureExclusion.setEmpty(); } @@ -805,7 +826,12 @@ public class PointerLocationView extends View implements InputDeviceListener, } private static boolean shouldShowSystemGestureExclusion() { - return SystemProperties.getBoolean("debug.pointerlocation.showexclusion", false); + return systemGestureExclusionOpacity() > 0; + } + + private static int systemGestureExclusionOpacity() { + int x = SystemProperties.getInt(GESTURE_EXCLUSION_PROP, 0); + return x >= 0 && x <= 255 ? x : 0; } // HACK @@ -928,12 +954,19 @@ public class PointerLocationView extends View implements InputDeviceListener, private ISystemGestureExclusionListener mSystemGestureExclusionListener = new ISystemGestureExclusionListener.Stub() { @Override - public void onSystemGestureExclusionChanged(int displayId, Region systemGestureExclusion) { + public void onSystemGestureExclusionChanged(int displayId, Region systemGestureExclusion, + Region systemGestureExclusionUnrestricted) { Region exclusion = Region.obtain(systemGestureExclusion); + Region rejected = Region.obtain(); + if (systemGestureExclusionUnrestricted != null) { + rejected.set(systemGestureExclusionUnrestricted); + rejected.op(exclusion, Region.Op.DIFFERENCE); + } Handler handler = getHandler(); if (handler != null) { handler.post(() -> { mSystemGestureExclusion.set(exclusion); + mSystemGestureExclusionRejected.set(rejected); exclusion.recycle(); invalidate(); }); diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 0816cc0cb594..10e851b3d630 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Stemboodskappe"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-oproepe"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Hoëprioriteit-SIM-status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Ander party het TTY-modus VOL versoek"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Ander party het TTY-modus GOD versoek"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Ander party het TTY-modus SOD versoek"</string> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 9ab7a53e3ab8..06654c4590ea 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"የድምጽ መልዕክቶች"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"የWi-Fi ጥሪ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"የሲም ሁኔታ"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ከፍተኛ ቅድሚያ ተሰጪ የሲም ኹናቴ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ቢጤ መልዕክት መጻጻፊያ ስልክ ሁነታ FULL ጠይቋል"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ቢጤ መልዕክት መጻጻፊያ ስልክ ሁነታ HCO ጠይቋል"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ቢጤ መልዕክት መጻጻፊያ ስልክ ሁነታ VCO ጠይቋል"</string> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 375592a9f52f..deb815cf42ea 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -99,6 +99,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"رسائل البريد الصوتي"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"الاتصال عبر Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"حالة شريحة SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"حالة شريحة SIM ذات أولوية"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"طلب النظير وضع TTY الكامل"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"طلب النظير وضع TTY على HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"طلب النظير وضع TTY على VCO"</string> diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 698921978c54..c53af2b3fa7e 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ভইচমেইলৰ বাৰ্তাসমূহ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ৱাই-ফাই কলিং"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ছিমৰ স্থিতি"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"উচ্চ অগ্ৰাধিকাৰযুক্ত ছিমৰ স্থিতি"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড FULLলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড HCOলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"নেটৱৰ্ক পীয়েৰে TTY ম\'ড VCO লৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে"</string> diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 7a3cc7aaef5b..a3a2f2a0ecff 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Səsli e-poçt mesajları"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi zəngi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Yüksək Prioritetli SIM statusu"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Eskpert TTY Rejimi FULL-u sorğuladı"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Ekspert TTY Rejimi HCO-nu sorğuladı"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Ekspert TTY Rejimi VCO-nu sorğuladı"</string> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 93d87fe2b303..61a2167b8860 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Pozivanje preko Wi-Fi mreže"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status SIM-a"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Obaveštenja SIM kartice sa statusom „visok prioritet“"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Korisnik zahteva POTPUN režim TTY"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Korisnik zahteva PRENOS ZVUKA za režim TTY"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Korisnik zahteva PRENOS GLASA za režim TTY"</string> diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 6823c44b21f8..cb6b3707b355 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Паведамленні галасавой пошты"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-тэлефанія"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Статус SIM-карты"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Стан SIM-карты з высокім прыярытэтам"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Аднарангавая прылада запытала рэжым TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Аднарангавая прылада запытала рэжым TTY НСО"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Аднарангавая прылада запытала рэжым TTY VCO"</string> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index b41d69d3f32c..7c44bcaedd93 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Съобщения в гласовата поща"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Обаждания през Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Състояние на SIM картата"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Състояние на SIM картата с висок приоритет"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Отсрещният потребител заяви пълен TTY режим (FULL)"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Отсрещният потребител заяви TTY режим с пренос на слух (HCO)"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Отсрещният потребител заяви TTY режим с пренос на глас (VCО)"</string> diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index 1889519ecd85..3d834d5922a6 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ভয়েসমেল মেসেজ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ওয়াই-ফাই কলিং"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"সিম কার্ডের স্টাটাস"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"উচ্চ প্রায়রিটি সিম স্ট্যাটাস"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"পির TTY মোড FULL অনুরোধ করেছে"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"পির TTY মোড HCO অনুরোধ করেছে"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"পির TTY মোড VCO অনুরোধ করেছে"</string> diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index cd0a1d5aaf7e..572b8eaec5eb 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Pozivanje putem WiFi-ja"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status SIM-a"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status visokog prioriteta SIM-a"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Ravnopravni uređaj zatražio načina rada TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Ravnopravni uređaj zatražio načina rada TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Ravnopravni uređaj zatražio načina rada TTY VCO"</string> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index b13f506da65f..f4b341c2283d 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Missatges de veu"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Trucades per Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Estat de la SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Estat de la SIM d\'alta prioritat"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"L\'altre dispositiu ha sol·licitat el mode TTY COMPLET."</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"L\'altre dispositiu ha sol·licitat el mode TTY HCO."</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"L\'altre dispositiu ha sol·licitat el mode TTY VCO."</string> @@ -572,9 +573,9 @@ <string name="face_acquired_recalibrate" msgid="8077949502893707539">"Torna a registrar la teva cara."</string> <string name="face_acquired_too_different" msgid="7663983770123789694">"Ja no es reconeix la teva cara. Torna-ho a provar."</string> <string name="face_acquired_too_similar" msgid="1508776858407646460">"És massa semblant; canvia de postura."</string> - <string name="face_acquired_pan_too_extreme" msgid="4581629343077288178">"Inclina el cap una mica menys."</string> - <string name="face_acquired_tilt_too_extreme" msgid="4019954263012496468">"Inclina el cap una mica menys."</string> - <string name="face_acquired_roll_too_extreme" msgid="6312973147689664409">"No inclinis tant el cap."</string> + <string name="face_acquired_pan_too_extreme" msgid="4581629343077288178">"No giris tant el cap."</string> + <string name="face_acquired_tilt_too_extreme" msgid="4019954263012496468">"No inclinis tant el cap."</string> + <string name="face_acquired_roll_too_extreme" msgid="6312973147689664409">"No giris tant el cap."</string> <string name="face_acquired_obscured" msgid="5357207702967893283">"Suprimeix qualsevol cosa que amagui la teva cara."</string> <string name="face_acquired_sensor_dirty" msgid="7905138627046865579">"Neteja la part superior de la pantalla, inclosa la barra negra"</string> <string-array name="face_acquired_vendor"> @@ -1482,7 +1483,7 @@ <string name="back_button_label" msgid="2300470004503343439">"Enrere"</string> <string name="next_button_label" msgid="1080555104677992408">"Següent"</string> <string name="skip_button_label" msgid="1275362299471631819">"Omet"</string> - <string name="no_matches" msgid="8129421908915840737">"Cap coincidència"</string> + <string name="no_matches" msgid="8129421908915840737">"No s\'ha trobat cap coincidència"</string> <string name="find_on_page" msgid="1946799233822820384">"Troba-ho a la pàgina"</string> <plurals name="matches_found" formatted="false" msgid="1210884353962081884"> <item quantity="other"><xliff:g id="INDEX">%d</xliff:g> de <xliff:g id="TOTAL">%d</xliff:g></item> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index a9413bdfaaba..d0d060723572 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Hlasové zprávy"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Volání přes Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Stav SIM karty"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Stav SIM karty: vysoká priorita"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Partner požádal o přechod na režim TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Partner požádal o přechod na režim TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Partner požádal o přechod na režim TTY VCO"</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 76dea804a645..ee5597f289bc 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talebeskeder"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-opkald"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM-kort med høj prioritet"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Den anden enhed har skiftet til FULD TTY-tilstand"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Den anden enhed har skiftet til TTY-tilstanden HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Den anden enhed har skiftet til TTY-tilstanden VCO"</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 754b01965ed2..ebca5d4faf2e 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mailboxnachrichten"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"WLAN-Telefonie"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status der SIM-Karte"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Benachrichtigungen mit hoher Priorität von der SIM-Karte"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer hat TTY-Modus \"Vollständig\" angefordert."</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer hat TTY-Modus \"HCO\" angefordert."</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer hat TTY-Modus \"VC\" angefordert."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 6d1306f4102f..d74bc5951d5e 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Μηνύματα αυτόματου τηλεφωνητή"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Κλήση Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Κατάσταση SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Κατάσταση SIM υψηλής προτεραιότητας"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Αίτημα peer για TTY ΠΛΗΡΗΣ Λειτουργία"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Αίτημα peer για TTY Λειτουργία HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Αίτημα peer για TTY Λειτουργία VCO"</string> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index c2a22ad2c466..f5a5698b5b61 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string> diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index 6cf284320cdb..47318862c76f 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index c2a22ad2c466..f5a5698b5b61 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index c2a22ad2c466..f5a5698b5b61 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi Calling"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string> diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index f62b3857b930..95ebcdc8c603 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemail messages"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi calling"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority SIM status"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer requested TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer requested TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer requested TTY Mode VCO"</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 5128f67bfb2c..7a22a8e454a1 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensajes del buzón de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Llamada con Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Estado de SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Notificaciones de prioridad alta sobre el estado de la SIM"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"El dispositivo del mismo nivel solicitó el modo TTY FULL."</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"El dispositivo del mismo nivel solicitó el modo TTY HCO."</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"El dispositivo del mismo nivel solicitó el modo TTY VCO."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 608a8515bcc3..ae7f38a18986 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensajes de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Llamada por Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Estado de la tarjeta SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Estado de SIM de alta prioridad"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Un dispositivo ha solicitado el modo TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Un dispositivo ha solicitado el modo TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Un dispositivo ha solicitado el modo TTY VCO"</string> diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index a78178c8fbf6..d3404a646301 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Kõnepostisõnumid"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"WiFi-kõned"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-kaardi olek"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Kõrge prioriteediga SIM-i olek"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Partner taotles TTY-režiimi TÄIELIK"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Partner taotles TTY-režiimi HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Partner taotles TTY-režiimi VCO"</string> diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index fb79545da1ce..a2a1b37118ec 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Erantzungailuko mezuak"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi bidezko deiak"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIMaren egoera"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM txartelaren lehentasun handiko jakinarazpenak"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Beste gailuak TTY osagarria FULL moduan erabiltzea eskatu du"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Beste gailuak TTY osagarria HCO moduan erabiltzea eskatu du"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Beste gailuak TTY osagarria VCO moduan erabiltzea eskatu du"</string> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index f79628756a02..7d86be9a8ecd 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"پیامهای پست صوتی"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"تماس ازطریق Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"وضعیت سیمکارت"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"وضعیت سیم با اولویت بالا"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"دستگاه مرتبط درخواست TTY حالت FULL کرد"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"دستگاه مرتبط درخواست TTY حالت HCO کرد"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"دستگاه مرتبط درخواست TTY حالت VCO کرد"</string> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 0b86b22ccb1e..0a6132d10a85 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Vastaajaviestit"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-puhelut"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-kortin tila"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Tärkeät SIM-ilmoitukset"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Toinen käyttäjä vaihtoi TTY-tilaksi TÄYSI"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Toinen käyttäjä vaihtoi TTY-tilaksi HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Toinen käyttäjä vaihtoi TTY-tilaksi VCO"</string> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index ca9121d470d3..8d12675b833d 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messages vocaux"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Appels Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"État de la carte SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"État SIM de priorité élevée"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Mode TTY COMPLET demandé par un pair"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Mode TTY HCO demandé par un pair"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Mode TTY VCO demandé par un pair"</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index ab1a928c15ad..c1cac17bbb74 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messages vocaux"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Appels Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"État de la carte SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Notifications prioritaires de la carte SIM"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Mode TTY demandé par l\'interlocuteur : COMPLET"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Mode TTY demandé par l\'interlocuteur : HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Mode TTY demandé par l\'interlocuteur : VCO"</string> diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 7a1b2659f4a2..6bdf045de2b6 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensaxes de correo de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por wifi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Estado da SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Estado da SIM con prioridade alta"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Outro dispositivo solicitou o modo TTY COMPLETO"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Outro dispositivo solicitou o modo TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Outro dispositivo solicitou o modo TTY VCO"</string> diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 880454a9cd5b..b2a9e781e2aa 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"વૉઇસમેઇલ સંદેશા"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"વાઇ-ફાઇ કૉલિંગ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"સિમનું સ્ટેટસ"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"સિમ કાર્ડનું ઉચ્ચ પ્રાધાન્યતાનું સ્ટેટસ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"પીઅરે TTY મોડ પૂર્ણની વિનંતી કરી"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"પીઅરે TTY મોડ HCO ની વિનંતી કરી"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"પીઅરે TTY મોડ VCO ની વિનંતી કરી"</string> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 60e0d495f678..e1bfe5eb2721 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"वॉइसमेल संदेश"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"वाई-फ़ाई कॉलिंग"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"सिम की स्थिति"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"सिम की ज़रूरी सूचनाओं की स्थिति"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"पीयर ने टेलीटाइपराइटर (TTY) मोड फ़ुल का अनुरोध किया"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"पीयर ने टेलीटाइपराइटर (TTY) मोड एचसीओ (HCO) का अनुरोध किया"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"पीयर ने टेलीटाइपराइटर (TTY) मोड वीसीओ (VCO) का अनुरोध किया"</string> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 35853d6ecbea..aca3b2d8098e 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Poruke govorne pošte"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi pozivi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status SIM-a"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status SIM-a visokog prioriteta"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Način TTY FULL koji zahtijeva paralelni uređaj"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Način TTY HCO koji zahtijeva paralelni uređaj"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Način TTY VCO koji zahtijeva paralelni uređaj"</string> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 1fbc3fe02105..ff91dcf7a466 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Hangpostaüzenetek"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-hívás"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-kártya állapota"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Elsődleges SIM-kártya állapota"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Partner által kért TTY-mód: FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Partner által kért TTY-mód: HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Partner által kért TTY-mód: VCO"</string> diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index 3377d3b48785..7ee4fb609b47 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ձայնային փոստի հաղորդագրություններ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Զանգեր Wi-Fi-ի միջոցով"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM քարտի կարգավիճակը"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM քարտի բարձր առաջնահերթության ծանուցումներ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Բաժանորդի սարքում ընտրված է հեռատիպի ԲՈԼՈՐԸ ռեժիմը"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Բաժանորդի սարքում ընտրված է հեռատիպի HCO ռեժիմը"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Բաժանորդի սարքում ընտրված է հեռատիպի VCO ռեժիմը"</string> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 07671b2c758a..48bd1751a13d 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Notifikasi pesan suara"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Panggilan Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status SIM prioritas tinggi"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Rekan meminta Mode TTY PENUH"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Rekan meminta Mode TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Rekan meminta Mode TTY VCO"</string> diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index c796dbffe527..b06a7f0714c6 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talhólfsskilaboð"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi símtöl"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Staða SIM-korts"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Áríðandi staða SIM-korts"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Jafningi bað um FULLA stillingu fjarrita"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Jafningi bað um HCO-stillingu fjarrita"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Jafningi bað um VCO-stillingu fjarrita"</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 45efc5ddf60b..98f5fb2a2cd3 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Messaggi vocali"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Chiamate Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Stato SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Stato SIM con priorità elevata"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer ha richiesto la modalità TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer ha richiesto la modalità TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer ha richiesto la modalità TTY VCO"</string> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index d792b5c6cede..00a37ebd6208 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"הודעות קוליות"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"שיחות Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"סטטוס SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"סטטוס התראות SIM בעדיפות גבוהה"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"העמית ביקש TTY במצב FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"העמית ביקש TTY במצב HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"העמית ביקש TTY במצב VCO"</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index b3ab20aa6d1f..7b1d8a5f9845 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ボイスメール メッセージ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM のステータス"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"高優先度: SIM のステータス"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ピアから、TTY モードを FULL にするようリクエストされました"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ピアから、TTYモードをHCOにするようリクエストされました"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ピアから、TTYモードをVCOにするようリクエストされました"</string> diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 9404f49f4fc6..896ad137dec9 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ხმოვანი ფოსტის შეტყობინებები"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"დარეკვა Wi-Fi-ს მეშვეობით"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM სტატუსი"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"მაღალპრიორიტეტული SIM სტატუსი"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"მოთხოვნილია კვანძი TTY რეჟიმი FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"მოთხოვნილია კვანძი TTY რეჟიმი HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"მოთხოვნილია კვანძი TTY რეჟიმი VCO"</string> diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index c3ea2a909d14..801e3777e24c 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Дауыстық пошта хабарлары"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi қоңыраулары"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM күйі"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM картасы туралы маңызды хабарландырулар"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Пир TTY режимі ТОЛЫҚ сұрады"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Пир TTY режимінің HCO сұрады"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Пир TTY режимінің VCO сұрады"</string> diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 28c097049b41..8bb03e061e7e 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"សារជាសំឡេង"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ការហៅទូរសព្ទតាម Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ស្ថានភាពស៊ីម"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ស្ថានភាពស៊ីមដែលមានអាទិភាពខ្ពស់"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ម៉ាស៊ីនកូនបានស្នើ TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ម៉ាស៊ីនកូនបានស្នើ TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ម៉ាស៊ីនកូនបានស្នើ TTY Mode VCO"</string> diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index 0331f863cb63..8e5ea6af10d0 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ಧ್ವನಿಮೇಲ್ ಸಂದೇಶಗಳು"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ಸಿಮ್ ಸ್ಥಿತಿ"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ಹೆಚ್ಚಿನ ಆದ್ಯತೆಯ ಸಿಮ್ ಸ್ಥಿತಿ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ಪೀರ್ ವಿನಂತಿಸಿಕೊಂಡ TTY ಮೋಡ್ VCO"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index c97f740c9da2..9d547ca682f3 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"음성사서함 메시지"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 통화"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM 상태"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"우선순위가 높은 SIM 상태"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"피어가 TTY 모드 FULL을 요청했습니다."</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"피어가 TTY 모드 HCO를 요청했습니다."</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"피어가 TTY 모드 VCO를 요청했습니다."</string> diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index e86ceb13f3d7..d3d1cd0f2953 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Үн почтасынын билдирүүлөрү"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi аркылуу чалуу"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-картанын абалы"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM картадагы өтө маанилүү билдирмелер"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer TTY режимин FULL кылууну суранды"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer TTY режимин HCO кылууну суранды"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer TTY режимин VCO кылууну суранды"</string> diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 17b015486e62..55747d0556f4 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ຂໍ້ຄວາມສຽງ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ການໂທ Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ສະຖານະ SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ສະຖານະ SIM ຄວາມສຳຄັນສູງ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ໂໝດ TTY ທີ່ເພື່ອນຂໍນັ້ນເຕັມແລ້ວ"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ໂໝດ TTY ທີ່ເພື່ອນຂໍ HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ໂໝດ TTY ທີ່ເພື່ອນຂໍ VCO"</string> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index caf8e4fce3b3..f0ce8621142c 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Balso pašto pranešimai"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"„Wi-Fi“ skambinimas"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM būsena"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Didelio prioriteto SIM kortelės būsena"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Lygiavertis naudotojas pateikė užklausą dėl TTY režimo FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Lygiavertis naudotojas pateikė užklausą dėl TTY režimo HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Lygiavertis naudotojas pateikė užklausą dėl TTY režimo VCO"</string> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index d71234ce1b66..bed07f26da80 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Balss pasta ziņojumi"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi zvani"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM kartes statuss"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Augstas prioritātes SIM kartes statuss"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Vienādranga ierīce pieprasīja teksta tālruņa režīmu FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Vienādranga ierīce pieprasīja teksta tālruņa režīmu HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Vienādranga ierīce pieprasīja teksta tālruņa režīmu VCO"</string> diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index d89fa9c03de0..530b0237e822 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Пораки од говорна пошта"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Повикување преку Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Статус на SIM-картичка"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Статус на SIM-известувања со висок приоритет"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Рамноправен уред го побара режимот на TTY „FULL“"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Рамноправен уред го побара режимот на TTY „HCO“"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Рамноправен уред го побара режимот на TTY „VCO“"</string> diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index 819d3f7e93ea..9ad8b1341567 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"വോയ്സ്മെയിൽ സന്ദേശങ്ങൾ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"വൈഫൈ കോളിംഗ്"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"സിം നില"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ഉയർന്ന മുൻഗണനയുള്ള സിം നില"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് \'ഫുൾ\'"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"പിയർ അഭ്യർത്ഥിച്ച TTY മോഡ് VCO"</string> diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index dd5dc11118b9..d5f358b20997 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Дуут шуудангийн мессеж"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi дуудлага"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM статус"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Өндөр ач холбогдолтой SIM-н статус"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Хандлагын цэгт хүсэлт тавьсан TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Хандлагын цэгт хүсэлт тавьсан TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Хандлагын цэгт хүсэлт тавьсан TTY Mode VCO"</string> diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index b39ac8453998..faafeb70df32 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"व्हॉइसमेल मेसेज"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"वाय-फाय कॉलिंग"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"सिम स्थिती"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"उच्च प्राधान्य सिम स्थिती"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"समवयस्क व्यक्तीने TTY मोड पूर्ण ची विनंती केली"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"समवयस्क व्यक्तीने TTY मोड HCO ची विनंती केली"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"समवयस्क व्यक्तीने TTY मोड VCO ची विनंती केली"</string> diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index b5f0ef58c634..b6743f4b257a 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesej mel suara"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Panggilan Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status SIM keutamaan tinggi"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Rakan meminta Mod TTY PENUH"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Rakan meminta Mod TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Rakan meminta Mod TTY VCO"</string> diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index 1387725c50c6..ad5aaca1a2b9 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"အသံမေးလ် မက်ဆေ့ဂျ်များ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi ခေါ်ဆိုမှု"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ဆင်းမ်ကဒ် အခြေအနေ"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"အထူးဦးစားပေး ဆင်းမ်ကတ်အခြေအနေ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"အခြားစက်မှ TTY မုဒ် FULL ပြုရန် တောင်းဆို၏"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"အခြားစက်မှ TTY မုဒ် HCO ပြုရန် တောင်းဆို၏"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"TTY မုဒ် VCO ပြုရန် အခြားစက်မှ တောင်းဆို၏"</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 3a3a999b7bc2..c6d16987c005 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Talepostmeldinger"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-anrop"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM-status"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM-status er satt til høy prioritet"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Motpart ba om TTY-modus FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Motpart ba om TTY-modus HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Motpart ba om TTY-modus VCO"</string> diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 7b0fbfc890d9..47392328f27f 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"भ्वाइस मेल सन्देशहरू"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi कल"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM को स्थिति"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"उच्च प्राथमिकता रहेको SIM को स्थिति"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"सहकर्मी अनुरोध गरियो। TTY मोड पूर्ण"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"सहकर्मी अनुरोध गरियो। TTY मोड HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"सहकर्मी अनुरोध गरियो। TTY मोड VCO"</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index cadbbfecbec0..fe53b2387f8c 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Voicemailberichten"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Bellen via wifi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Simkaartstatus"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Meldingen met hoge prioriteit voor de simkaartstatus"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Door peer aangevraagde TTY-modus VOL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Door peer aangevraagde TTY-modus HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Door peer aangevraagde TTY-modus VCO"</string> diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index 053b1cd8577d..ce40db3e71a8 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ଭଏସମେଲ୍ ମେସେଜ୍"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ୱାଇ-ଫାଇ କଲିଙ୍ଗ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM ଷ୍ଟାଟସ୍"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ଉଚ୍ଚ ପ୍ରାଥମିକତା SIM ସ୍ଥିତି"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ପୀଆର୍ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍ FULL ଅଟେ"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ପୀଅର୍ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍ HCO ଅଟେ"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ପୀଅର୍ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍ VCO ଅଟେ"</string> diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 7262dddbc92b..591ba0a9fcc3 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ਵੌਇਸਮੇਲ ਸੁਨੇਹੇ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"ਸਿਮ ਅਵਸਥਾ"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ਉੱਚ ਤਰਜੀਹੀ ਸਿਮ ਸਥਿਤੀ"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ਪੀਅਰ ਨੇ TTY Mode FULL ਦੀ ਬੇਨਤੀ ਕੀਤੀ"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ਪੀਅਰ ਨੇ TTY Mode HCO ਦੀ ਬੇਨਤੀ ਕੀਤੀ"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ਪੀਅਰ ਨੇ TTY Mode VCO ਦੀ ਬੇਨਤੀ ਕੀਤੀ"</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 4937ced8a16b..302f541e3f55 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Wiadomości poczty głosowej"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Połączenia przez Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Stan karty SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Stan karty SIM – wysoki priorytet"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Drugie urządzenie zażądało trybu „TTY pełny”"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Drugie urządzenie zażądało trybu „TTY HCO”"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Drugie urządzenie zażądało trybu „TTY VCO”"</string> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index a5068390066e..d0e1bc95e048 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens do correio de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status do chip"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status de prioridade alta do chip"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"TTD modo COMPLETO solicitado"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"TTD modo HCO solicitado"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"TTD modo VCO solicitado"</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 26f92c98f0d0..a4cbc3e13fed 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens de correio de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Estado do SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Estado do SIM de elevada prioridade"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"O par solicitou o modo COMPLETO de teletipo"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"O par solicitou o modo HCO de teletipo"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"O par solicitou o modo VCO de teletipo"</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index a5068390066e..d0e1bc95e048 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mensagens do correio de voz"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Chamadas por Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status do chip"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Status de prioridade alta do chip"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"TTD modo COMPLETO solicitado"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"TTD modo HCO solicitado"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"TTD modo VCO solicitado"</string> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index b29367f100f6..245864cb4cb5 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesaje din mesageria vocală"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Apelare prin Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Starea cardului SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Notificări de la SIM cu prioritate ridicată"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Cealaltă persoană a solicitat modul TTY cu setarea COMPLET"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Cealaltă persoană a solicitat modul TTY cu setarea HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Cealaltă persoană a solicitat modul TTY cu setarea VCO"</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index b363b33f59a9..29c2e124f4b8 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Голосовые сообщения"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Звонки по Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Статус SIM-карты"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Важные уведомления SIM-карты"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"На устройстве абонента выбран режим телетайпа \"ВСЕ\""</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"На устройстве абонента выбран режим телетайпа HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"На устройстве абонента выбран режим телетайпа VCO"</string> diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 18a3158815ec..65b899c10754 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"හඬ තැපැල් පණිවිඩ"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi ඇමතීම"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM තත්ත්වය"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"ඉහළ ප්රමුඛතා SIM තත්ත්වය"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"සම ඉල්ලීම් කළ TTY ප්රකාරය පූර්ණයි"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"සම ඉල්ලීම් කළ TTY ප්රකාරය HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"සම ඉල්ලීම් කළ TTY ප්රකාරය VCO"</string> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 50b591aa1385..ee04effced2b 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Správy hlasovej schránky"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Volanie cez Wi‑Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Stav SIM karty"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Stav SIM karty: vysoká priorita"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Používateľ, s ktorým komunikujete, požiadal o režim FULL textového telefónu"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Používateľ, s ktorým komunikujete, požiadal o režim HCO textového telefónu"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Používateľ, s ktorým komunikujete, požiadal o režim VCO textového telefónu"</string> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index af26aae6404c..bf5e88b1b2be 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Sporočila v odzivniku"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Klicanje prek Wi-Fi-ja"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Stanje kartice SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Stanje kartice SIM z visoko stopnjo prednosti"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Enakovredna naprava je zahtevala način TTY FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Enakovredna naprava je zahtevala način TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Enakovredna naprava je zahtevala način TTY VCO"</string> diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index fc4fd4fa13b3..77a83abb2bc8 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mesazhet e postës zanore"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Telefonata me Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Statusi i kartës SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Statusi i kartës SIM me përparësi të lartë"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Homologu yt kërkoi modalitet \"TTY\" të plotë"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Homologu kërkoi modalitet \"TTY\" të llojit \"HCO\""</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Homologu yt kërkoi modalitet \"TTY\" të llojit \"VCO\""</string> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index a8dc15e40856..a8a4c5c13d5e 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -96,6 +96,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Поруке говорне поште"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Позивање преко Wi-Fi мреже"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Статус SIM-а"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Обавештења SIM картице са статусом „висок приоритет“"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Корисник захтева ПОТПУН режим TTY"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Корисник захтева ПРЕНОС ЗВУКА за режим TTY"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Корисник захтева ПРЕНОС ГЛАСА за режим TTY"</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index c728bcc580f2..12143f490cd0 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Röstmeddelanden"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi-samtal"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status för SIM-kort"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM-aviseringar med hög prioritet"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Peer-enheten begärde texttelefonläget FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Peer-enheten begärde texttelefonläget HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Peer-enheten begärde texttelefonläget VCO"</string> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 9f18c45a3b2c..cded9f1097af 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ujumbe wa sauti"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Kupiga simu kupitia Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Hali ya SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Hali ya SIM ya kipaumbele cha juu"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Hali ya TTY iliyoombwa na mtandao mwenza KAMILI"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Hali ya TTY iliyoombwa na mtandao mwenza HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Hali ya TTY iliyoombwa na mtandao mwenza VCO"</string> @@ -363,7 +364,7 @@ <string name="permlab_enableCarMode" msgid="5684504058192921098">"Wezesha mtindo wa gari"</string> <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Inaruhusu programu kuwawezesha mtindo wa gari."</string> <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"funga programu zingine"</string> - <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Inaruhusu programu kukamilisha michakato ya usuli ya programu nyingine. Hii inaweza kusababisha programu nyingine kukoma kufanyakazi."</string> + <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Huruhusu programu kukamilisha michakato ya chinichini ya programu nyingine. Hii inaweza kusababisha programu nyingine kuacha kufanya kazi."</string> <string name="permlab_systemAlertWindow" msgid="7238805243128138690">"Programu hii inaweza kuonekana juu ya programu zingine"</string> <string name="permdesc_systemAlertWindow" msgid="2393776099672266188">"Programu hii inaweza kuonekana juu ya programu zingine au sehemu zingine za skrini. Hii huenda ikaathiri matumizi ya kawaida ya programu na kubadilisha jinsi ambavyo programu zingine zinavyoonekana."</string> <string name="permlab_runInBackground" msgid="7365290743781858803">"tumia chini chini"</string> diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index cac9afdd5fd5..fb815de04adf 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"குரலஞ்சல் செய்திகள்"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"வைஃபை அழைப்பு"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"சிம் நிலை"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"அதிக முன்னுரிமையுடைய சிம்மின் நிலை"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"TTY Mode FULLஐ இணைச் செயல்பாடு கோரியது"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"TTY Mode HCOஐ இணைச் செயல்பாடு கோரியது"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"TTY Mode VCOஐ இணைச் செயல்பாடு கோரியது"</string> diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 6a1f34c95fcb..776d39e1156e 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"వాయిస్ మెయిల్ సందేశాలు"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi కాలింగ్"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM స్థితి"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"అధిక ప్రాధాన్యత గల SIM స్థితి"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"అవతలి వారు FULL TTY మోడ్ని అభ్యర్థించారు"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"అవతలి వారు HCO TTY మోడ్ని అభ్యర్థించారు"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"అవతలి వారు VCO TTY మోడ్ని అభ్యర్థించారు"</string> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 3132529bea42..fdedffaea9a9 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"ข้อความเสียง"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"การโทรผ่าน Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"สถานะซิม"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"สถานะซิมลำดับความสำคัญสูง"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"อีกฝั่งหนึ่งขอโหมด TTY เป็น \"เต็ม\""</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"อีกฝั่งหนึ่งขอโหมด TTY เป็น \"HCO\""</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"อีกฝั่งหนึ่งขอโหมด TTY เป็น \"VCO\""</string> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index a56a12282505..c33e5611ce7a 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Mga mensahe sa voicemail"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Pagtawag gamit ang Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Status ng SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"High priority na status ng SIM"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Hiniling ng peer ang TTY Mode FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Hiniling ng peer ang TTY Mode HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Hiniling ng peer ang TTY Mode VCO"</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 34b6e5a011d2..7d69213ebe0c 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Sesli mesajlar"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Kablosuz çağrı"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM durumu"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Yüksek öncelikli SIM durumu"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Karşı taraf TTY Modunu TAM yaptı"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Karşı taraf TTY Modunu HCO yaptı"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Karşı taraf TTY Modunu VCO yaptı"</string> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 44058f51663c..13c89296c4bc 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -97,6 +97,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Повідомлення голосової пошти"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Дзвінки через Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Статус SIM-карти"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Високопріоритетні сповіщення із SIM-карти"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Пристрій змінив режим TTY на FULL"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Пристрій змінив режим TTY на HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Пристрій змінив режим TTY на VCO"</string> diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index 7766c76f3443..dba7f8f06f67 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"صوتی میل پیغامات"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi کالنگ"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM کا اسٹیٹس"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"اعلی ترجیحی SIM کی صورتحال"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"ہمسر نے TTY وضع مکمل کی درخواست کی"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"ہمسر نے TTY وضع HCO کی درخواست کی"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"ہمسر نے TTY وضع VCO کی درخواست کی"</string> diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index ac2c83740b7b..f06a0a029b98 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Ovozli xabarlar"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi chaqiruv"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM karta holati"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"SIM kartadagi muhim bildirishnomalar"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Teng huquqli ishtirokchi teletayp rejimini FULL (to‘liq) qilib o‘zgartirdi"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Teng huquqli ishtirokchi teletayp rejimini HCO (eshitadi, gapirolmaydi) qilib o‘zgartirdi"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Teng huquqli ishtirokchi teletayp rejimini VCO (gapiradi, eshitolmaydi) qilib o‘zgartirdi"</string> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 429861b07100..c5bd7cc026c0 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Thư thoại"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Gọi qua Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Trạng thái SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Trạng thái SIM có mức ưu tiên cao"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"TTY theo yêu cầu của thiết bị ngang hàng ở chế độ ĐẦY ĐỦ"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"TTY theo yêu cầu của thiết bị ngang hàng ở chế độ HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"TTY theo yêu cầu của thiết bị ngang hàng ở chế độ VCO"</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index 56b813714eed..487e4a020f2c 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"语音邮件"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"WLAN 通话"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM 卡状态"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"高优先顺序 SIM 卡状态"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"对方请求使用“TTY 完整”模式"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"对方请求使用“TTY HCO”模式"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"对方请求使用“TTY VCO”模式"</string> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index cce909a4e031..c634c68ba954 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"留言訊息"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM 卡狀態"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"重要 SIM 卡狀態"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"對方曾要求 TTY 完整模式"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"對方曾要求 TTY 模式 (HCO)"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"對方曾要求 TTY 模式 (VCO)"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index da7bc7fc2347..483d42fb4327 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"語音留言"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Wi-Fi 通話"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"SIM 卡狀態"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"高優先順序 SIM 卡狀態"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"通訊對象要求使用 TTY 的 FULL 模式"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"通訊對象要求使用 TTY 的 HCO 模式"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"通訊對象要求使用 TTY 的 VCO 模式"</string> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 2af33203bb62..9d19775f9af6 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -95,6 +95,7 @@ <string name="notification_channel_voice_mail" msgid="3954099424160511919">"Imilayezo yevoyisimeyili"</string> <string name="notification_channel_wfc" msgid="2130802501654254801">"Ukushaya kwe-Wi-Fi"</string> <string name="notification_channel_sim" msgid="4052095493875188564">"Isimo se-SIM"</string> + <string name="notification_channel_sim_high_prio" msgid="1787666807724243207">"Isimo se-SIM esiphezulu kakhulu"</string> <string name="peerTtyModeFull" msgid="6165351790010341421">"Umngani ucele imodi ye-TTY ephelele"</string> <string name="peerTtyModeHco" msgid="5728602160669216784">"Umngani ucele imodi ye-TTY HCO"</string> <string name="peerTtyModeVco" msgid="1742404978686538049">"Umngani ucele imodi ye-TTY VCO"</string> diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp index cfcba76d3af2..9e81dda662f7 100644 --- a/media/jni/android_media_ImageWriter.cpp +++ b/media/jni/android_media_ImageWriter.cpp @@ -126,7 +126,7 @@ private: Condition mCondition; std::deque<wp<Surface>> mQueue; - static const nsecs_t kWaitDuration = 20000000; // 20 ms + static const nsecs_t kWaitDuration = 500000000; // 500 ms }; sp<DetachThread> mThread; diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 7feacb469f81..fab724267e3f 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -958,6 +958,9 @@ <!-- Message shown when lock screen is tapped or face authentication fails. [CHAR LIMIT=60] --> <string name="keyguard_unlock">Swipe up to open</string> + <!-- Message shown when face authentication fails and the pin pad is visible. [CHAR LIMIT=60] --> + <string name="keyguard_retry">Swipe up to try again</string> + <!-- Text on keyguard screen and in Quick Settings footer indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=60] --> <string name="do_disclosure_generic">This device is managed by your organization</string> diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java index 9fdecfbd44a0..aeb0415c8c4c 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SystemGestureExclusionListenerCompat.java @@ -34,9 +34,11 @@ public abstract class SystemGestureExclusionListenerCompat { new ISystemGestureExclusionListener.Stub() { @Override public void onSystemGestureExclusionChanged(int displayId, - Region systemGestureExclusion) { + Region systemGestureExclusion, Region unrestrictedOrNull) { if (displayId == mDisplayId) { - onExclusionChanged(systemGestureExclusion); + Region unrestricted = (unrestrictedOrNull == null) + ? systemGestureExclusion : unrestrictedOrNull; + onExclusionChanged(systemGestureExclusion, unrestricted); } } }; @@ -47,11 +49,29 @@ public abstract class SystemGestureExclusionListenerCompat { } /** - * Called when the exclusion region has changed + * Called when the exclusion region has changed. + * + * TODO: remove, once all subclasses have migrated to + * {@link #onExclusionChanged(Region, Region)}. */ public abstract void onExclusionChanged(Region systemGestureExclusion); /** + * Called when the exclusion region has changed. + * + * @param systemGestureExclusion the system gesture exclusion to be applied + * @param systemGestureExclusionUnrestricted what would be the system gesture exclusion, if + * there were no restrictions being applied. For logging purposes only. + * + */ + public void onExclusionChanged(Region systemGestureExclusion, + Region systemGestureExclusionUnrestricted) { + // TODO: make abstract, once all subclasses have migrated away from + // onExclusionChanged(Region) + onExclusionChanged(systemGestureExclusion); + } + + /** * Registers the listener for getting exclusion rect changes. */ public void register() { diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java index 11d093f22840..10d132ad2763 100644 --- a/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java +++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextController.java @@ -400,8 +400,11 @@ public class CarrierTextController { } } + if (TextUtils.isEmpty(displayText)) displayText = joinNotEmpty(mSeparator, carrierNames); + displayText = updateCarrierTextWithSimIoError(displayText, carrierNames, subOrderBySlot, allSimsMissing); + boolean airplaneMode = false; // APM (airplane mode) != no carrier state. There are carrier services // (e.g. WFC = Wi-Fi calling) which may operate in APM. @@ -410,9 +413,6 @@ public class CarrierTextController { airplaneMode = true; } - if (TextUtils.isEmpty(displayText) && !airplaneMode) { - displayText = joinNotEmpty(mSeparator, carrierNames); - } final CarrierTextCallbackInfo info = new CarrierTextCallbackInfo( displayText, carrierNames, diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 109f270063d6..8f7070e814f6 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -844,11 +844,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { getCurrentUser()); } - // The face timeout message is not very actionable, let's ask the user to - // manually retry. - if (msgId == FaceManager.FACE_ERROR_TIMEOUT) { - errString = mContext.getString(R.string.keyguard_unlock); - } for (int i = 0; i < mCallbacks.size(); i++) { KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); if (cb != null) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 20069ead5e8d..4de42cc2e6c7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -40,8 +40,10 @@ import com.android.systemui.Prefs; import com.android.systemui.R; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; +import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile.SignalState; import com.android.systemui.qs.QSHost; +import com.android.systemui.qs.SignalTileView; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.NetworkController; @@ -78,6 +80,11 @@ public class CellularTile extends QSTileImpl<SignalState> { } @Override + public QSIconView createTileView(Context context) { + return new SignalTileView(context); + } + + @Override public DetailAdapter getDetailAdapter() { return mDetailAdapter; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 4be93df0e81a..bba64d96c0f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -562,11 +562,11 @@ public class KeyguardIndicationController implements StateListener, return; } - String message = mContext.getString(R.string.keyguard_unlock); if (mStatusBarKeyguardViewManager.isBouncerShowing()) { + String message = mContext.getString(R.string.keyguard_retry); mStatusBarKeyguardViewManager.showBouncerMessage(message, mInitialTextColorState); } else if (mKeyguardUpdateMonitor.isScreenOn()) { - showTransientIndication(message); + showTransientIndication(mContext.getString(R.string.keyguard_unlock)); hideTransientIndicationDelayed(BaseKeyguardCallback.HIDE_DELAY_MS); } } @@ -676,7 +676,11 @@ public class KeyguardIndicationController implements StateListener, return; } animatePadlockError(); - if (mStatusBarKeyguardViewManager.isBouncerShowing()) { + if (msgId == FaceManager.FACE_ERROR_TIMEOUT) { + // The face timeout message is not very actionable, let's ask the user to + // manually retry. + showSwipeUpToUnlock(); + } else if (mStatusBarKeyguardViewManager.isBouncerShowing()) { mStatusBarKeyguardViewManager.showBouncerMessage(errString, mInitialTextColorState); } else if (updateMonitor.isScreenOn()) { showTransientIndication(errString); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java index f9cdde8059d4..e0c6c55c2e59 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java @@ -103,7 +103,7 @@ public class EdgeBackGestureHandler implements DisplayListener { new ISystemGestureExclusionListener.Stub() { @Override public void onSystemGestureExclusionChanged(int displayId, - Region systemGestureExclusion) { + Region systemGestureExclusion, Region unrestrictedOrNull) { if (displayId == mDisplayId) { mMainExecutor.execute(() -> mExcludeRegion.set(systemGestureExclusion)); } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java index db45ad788bfc..0044ca7c0409 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextControllerTest.java @@ -36,6 +36,7 @@ import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Handler; +import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -65,6 +66,8 @@ import java.util.List; public class CarrierTextControllerTest extends SysuiTestCase { private static final CharSequence SEPARATOR = " \u2014 "; + private static final CharSequence INVALID_CARD_TEXT = "Invalid card"; + private static final CharSequence AIRPLANE_MODE_TEXT = "Airplane mode"; private static final String TEST_CARRIER = "TEST_CARRIER"; private static final String TEST_CARRIER_2 = "TEST_CARRIER_2"; private static final String TEST_GROUP_UUID = "59b5c870-fc4c-47a4-a99e-9db826b48b24"; @@ -106,6 +109,10 @@ public class CarrierTextControllerTest extends SysuiTestCase { mContext.addMockSystemService(ConnectivityManager.class, mConnectivityManager); mContext.addMockSystemService(TelephonyManager.class, mTelephonyManager); mContext.addMockSystemService(SubscriptionManager.class, mSubscriptionManager); + mContext.getOrCreateTestableResources().addOverride( + R.string.keyguard_sim_error_message_short, INVALID_CARD_TEXT); + mContext.getOrCreateTestableResources().addOverride( + R.string.airplane_mode, AIRPLANE_MODE_TEXT); mDependency.injectMockDependency(WakefulnessLifecycle.class); mDependency.injectTestDependency(Dependency.MAIN_HANDLER, new Handler(mTestableLooper.getLooper())); @@ -122,6 +129,53 @@ public class CarrierTextControllerTest extends SysuiTestCase { } @Test + public void testAirplaneMode() { + Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1); + reset(mCarrierTextCallback); + List<SubscriptionInfo> list = new ArrayList<>(); + list.add(TEST_SUBSCRIPTION); + when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(list); + when(mKeyguardUpdateMonitor.getSimState(0)).thenReturn(IccCardConstants.State.READY); + mKeyguardUpdateMonitor.mServiceStates = new HashMap<>(); + + mCarrierTextController.updateCarrierText(); + + ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor = + ArgumentCaptor.forClass( + CarrierTextController.CarrierTextCallbackInfo.class); + + mTestableLooper.processAllMessages(); + verify(mCarrierTextCallback).updateCarrierInfo(captor.capture()); + assertEquals(AIRPLANE_MODE_TEXT, captor.getValue().carrierText); + } + + @Test + public void testCardIOError() { + reset(mCarrierTextCallback); + List<SubscriptionInfo> list = new ArrayList<>(); + list.add(TEST_SUBSCRIPTION); + when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn(list); + when(mKeyguardUpdateMonitor.getSimState(0)).thenReturn(IccCardConstants.State.READY); + when(mKeyguardUpdateMonitor.getSimState(1)).thenReturn( + IccCardConstants.State.CARD_IO_ERROR); + mKeyguardUpdateMonitor.mServiceStates = new HashMap<>(); + + mCarrierTextController.mCallback.onSimStateChanged(3, 1, + IccCardConstants.State.CARD_IO_ERROR); + + ArgumentCaptor<CarrierTextController.CarrierTextCallbackInfo> captor = + ArgumentCaptor.forClass( + CarrierTextController.CarrierTextCallbackInfo.class); + + mTestableLooper.processAllMessages(); + verify(mCarrierTextCallback).updateCarrierInfo(captor.capture()); + assertEquals("TEST_CARRIER" + SEPARATOR + INVALID_CARD_TEXT, captor.getValue().carrierText); + // There's only one subscription in the list + assertEquals(1, captor.getValue().listOfCarriers.length); + assertEquals(TEST_CARRIER, captor.getValue().listOfCarriers[0]); + } + + @Test public void testWrongSlots() { reset(mCarrierTextCallback); when(mKeyguardUpdateMonitor.getSubscriptionInfo(anyBoolean())).thenReturn( diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 9ecb8d5c3126..c851c915d655 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -137,7 +137,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { mDependency.injectTestDependency( NotificationBlockingHelperManager.class, mBlockingHelperManager); - mDependency.injectTestDependency(StatusBarStateController.class, mBarState); + mDependency.injectTestDependency(SysuiStatusBarStateController.class, mBarState); mDependency.injectTestDependency(MetricsLogger.class, mMetricsLogger); mDependency.injectTestDependency(NotificationRemoteInputManager.class, mRemoteInputManager); @@ -163,7 +163,7 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { mock(DynamicPrivacyController.class), mock(ConfigurationController.class), mock(ActivityStarterDelegate.class), - mock(StatusBarStateController.class), + mock(SysuiStatusBarStateController.class), mHeadsUpManager, mKeyguardBypassController); mStackScroller = spy(mStackScrollerInternal); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 91ae156afdf5..2ddc72596e43 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8467,32 +8467,6 @@ public class ActivityManagerService extends IActivityManager.Stub } } - void setRunningRemoteAnimation(int pid, boolean runningRemoteAnimation) { - if (pid == Process.myPid()) { - Slog.wtf(TAG, "system can't run remote animation"); - return; - } - synchronized (ActivityManagerService.this) { - final ProcessRecord pr; - synchronized (mPidsSelfLocked) { - pr = mPidsSelfLocked.get(pid); - if (pr == null) { - Slog.w(TAG, "setRunningRemoteAnimation called on unknown pid: " + pid); - return; - } - } - if (pr.runningRemoteAnimation == runningRemoteAnimation) { - return; - } - pr.runningRemoteAnimation = runningRemoteAnimation; - if (DEBUG_OOM_ADJ) { - Slog.i(TAG, "Setting runningRemoteAnimation=" + pr.runningRemoteAnimation - + " for pid=" + pid); - } - updateOomAdjLocked(pr, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY); - } - } - public final void enterSafeMode() { synchronized(this) { // It only makes sense to do this before the system is ready @@ -17971,11 +17945,6 @@ public class ActivityManagerService extends IActivityManager.Stub } @Override - public void setRunningRemoteAnimation(int pid, boolean runningRemoteAnimation) { - ActivityManagerService.this.setRunningRemoteAnimation(pid, runningRemoteAnimation); - } - - @Override public List<ProcessMemoryState> getMemoryStateForProcesses() { List<ProcessMemoryState> processMemoryStates = new ArrayList<>(); synchronized (mPidsSelfLocked) { diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index 563b2f3bfb32..ea3084274ae0 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -20,6 +20,7 @@ import static android.app.ActivityManager.PROCESS_STATE_NONEXISTENT; import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST; import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ANR; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.ActivityManagerService.MY_PID; @@ -1348,6 +1349,25 @@ class ProcessRecord implements WindowProcessListener { } } + @Override + public void setRunningRemoteAnimation(boolean runningRemoteAnimation) { + if (pid == Process.myPid()) { + Slog.wtf(TAG, "system can't run remote animation"); + return; + } + synchronized (mService) { + if (this.runningRemoteAnimation == runningRemoteAnimation) { + return; + } + this.runningRemoteAnimation = runningRemoteAnimation; + if (DEBUG_OOM_ADJ) { + Slog.i(TAG, "Setting runningRemoteAnimation=" + runningRemoteAnimation + + " for pid=" + pid); + } + mService.updateOomAdjLocked(this, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY); + } + } + public long getInputDispatchingTimeout() { return mWindowProcessController.getInputDispatchingTimeout(); } diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java index 78a48dac6fb5..c45a314e39cc 100644 --- a/services/core/java/com/android/server/display/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/DisplayModeDirector.java @@ -728,6 +728,7 @@ public class DisplayModeDirector { private SensorManager mSensorManager; private Sensor mLightSensor; + private LightSensorEventListener mLightSensorListener = new LightSensorEventListener(); // Take it as low brightness before valid sensor data comes private float mAmbientLux = -1.0f; private AmbientFilter mAmbientFilter; @@ -907,19 +908,40 @@ public class DisplayModeDirector { mSensorManager.registerListener(mLightSensorListener, mLightSensor, LIGHT_SENSOR_RATE_MS * 1000, mHandler); } else { + mLightSensorListener.removeCallbacks(); mSensorManager.unregisterListener(mLightSensorListener); } } - private final SensorEventListener mLightSensorListener = new SensorEventListener() { + private final class LightSensorEventListener implements SensorEventListener { + final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS; + private float mLastSensorData; + @Override public void onSensorChanged(SensorEvent event) { + mLastSensorData = event.values[0]; + if (DEBUG) { + Slog.d(TAG, "On sensor changed: " + mLastSensorData); + } + + boolean zoneChanged = isDifferentZone(mLastSensorData, mAmbientLux); + if (zoneChanged && mLastSensorData < mAmbientLux) { + // Easier to see flicker at lower brightness environment. Forget the history to + // get immediate response. + mAmbientFilter.clear(); + } + long now = SystemClock.uptimeMillis(); - mAmbientFilter.addValue(now, event.values[0]); - mAmbientLux = mAmbientFilter.getEstimate(now); + mAmbientFilter.addValue(now, mLastSensorData); - synchronized (mLock) { - onBrightnessChangedLocked(); + mHandler.removeCallbacks(mInjectSensorEventRunnable); + processSensorData(now); + + if (zoneChanged && mLastSensorData > mAmbientLux) { + // Sensor may not report new event if there is no brightness change. + // Need to keep querying the temporal filter for the latest estimation, + // until enter in higher lux zone or is interrupted by a new sensor event. + mHandler.postDelayed(mInjectSensorEventRunnable, INJECT_EVENTS_INTERVAL_MS); } } @@ -927,6 +949,47 @@ public class DisplayModeDirector { public void onAccuracyChanged(Sensor sensor, int accuracy) { // Not used. } + + public void removeCallbacks() { + mHandler.removeCallbacks(mInjectSensorEventRunnable); + } + + private void processSensorData(long now) { + mAmbientLux = mAmbientFilter.getEstimate(now); + + synchronized (mLock) { + onBrightnessChangedLocked(); + } + } + + private boolean isDifferentZone(float lux1, float lux2) { + for (int z = 0; z < mAmbientBrightnessThresholds.length; z++) { + final float boundary = mAmbientBrightnessThresholds[z]; + + // Test each boundary. See if the current value and the new value are at + // different sides. + if ((lux1 <= boundary && lux2 > boundary) + || (lux1 > boundary && lux2 <= boundary)) { + return true; + } + } + + return false; + } + + private Runnable mInjectSensorEventRunnable = new Runnable() { + @Override + public void run() { + long now = SystemClock.uptimeMillis(); + // No need to really inject the last event into a temporal filter. + processSensorData(now); + + // Inject next event if there is a possible zone change. + if (isDifferentZone(mLastSensorData, mAmbientLux)) { + mHandler.postDelayed(mInjectSensorEventRunnable, INJECT_EVENTS_INTERVAL_MS); + } + } + }; }; private final class ScreenStateReceiver extends BroadcastReceiver { diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 8884821c770e..899f8022dc8d 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -2098,7 +2098,8 @@ public class PermissionManagerService { final PackageParser.Package pkg = mPackageManagerInt.getPackage(packageName); if (pkg == null || pkg.mExtras == null) { - throw new IllegalArgumentException("Unknown package: " + packageName); + Log.e(TAG, "Unknown package: " + packageName); + return; } final BasePermission bp; synchronized(mLock) { @@ -2239,7 +2240,8 @@ public class PermissionManagerService { final PackageParser.Package pkg = mPackageManagerInt.getPackage(packageName); if (pkg == null || pkg.mExtras == null) { - throw new IllegalArgumentException("Unknown package: " + packageName); + Log.e(TAG, "Unknown package: " + packageName); + return; } if (mPackageManagerInt.filterAppAccess(pkg, Binder.getCallingUid(), userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); diff --git a/services/core/java/com/android/server/power/AttentionDetector.java b/services/core/java/com/android/server/power/AttentionDetector.java index 56d839633ab5..4e9b724f528d 100644 --- a/services/core/java/com/android/server/power/AttentionDetector.java +++ b/services/core/java/com/android/server/power/AttentionDetector.java @@ -161,7 +161,7 @@ public class AttentionDetector { context.getContentResolver().registerContentObserver(Settings.System.getUriFor( Settings.System.ADAPTIVE_SLEEP), - false, new ContentObserver(new Handler()) { + false, new ContentObserver(new Handler(context.getMainLooper())) { @Override public void onChange(boolean selfChange) { updateEnabledFromSettings(context); diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index cfd3ae6ef594..aa49ba62f48b 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -2724,6 +2724,14 @@ public final class PowerManagerService extends SystemService return true; } } + + if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE + && mDisplayPowerRequest.dozeScreenState == Display.STATE_ON) { + // Although we are in DOZE and would normally allow the device to suspend, + // the doze service has explicitly requested the display to remain in the ON + // state which means we should hold the display suspend blocker. + return true; + } if (mScreenBrightnessBoostInProgress) { return true; } @@ -4858,7 +4866,8 @@ public final class PowerManagerService extends SystemService } } - private final class LocalService extends PowerManagerInternal { + @VisibleForTesting + final class LocalService extends PowerManagerInternal { @Override public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) { if (screenBrightness < PowerManager.BRIGHTNESS_DEFAULT diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 8a9dfc7569dc..747837bc933f 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -1462,16 +1462,18 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Nullable IRecentsAnimationRunner recentsAnimationRunner) { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "startRecentsActivity()"); final int callingPid = Binder.getCallingPid(); + final int callingUid = Binder.getCallingUid(); final long origId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { final ComponentName recentsComponent = mRecentTasks.getRecentsComponent(); final int recentsUid = mRecentTasks.getRecentsComponentUid(); + final WindowProcessController caller = getProcessController(callingPid, callingUid); // Start a new recents animation final RecentsAnimation anim = new RecentsAnimation(this, mStackSupervisor, getActivityStartController(), mWindowManager, intent, recentsComponent, - recentsUid, callingPid); + recentsUid, caller); if (recentsAnimationRunner == null) { anim.preloadRecentsActivity(); } else { @@ -4650,7 +4652,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public void registerRemoteAnimations(IBinder token, RemoteAnimationDefinition definition) { mAmInternal.enforceCallingPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS, "registerRemoteAnimations"); - definition.setCallingPid(Binder.getCallingPid()); + definition.setCallingPidUid(Binder.getCallingPid(), Binder.getCallingUid()); synchronized (mGlobalLock) { final ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r == null) { @@ -4670,7 +4672,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { RemoteAnimationAdapter adapter) { mAmInternal.enforceCallingPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS, "registerRemoteAnimationForNextActivityStart"); - adapter.setCallingPid(Binder.getCallingPid()); + adapter.setCallingPidUid(Binder.getCallingPid(), Binder.getCallingUid()); synchronized (mGlobalLock) { final long origId = Binder.clearCallingIdentity(); try { @@ -4687,7 +4689,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { RemoteAnimationDefinition definition) { mAmInternal.enforceCallingPermission(CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS, "registerRemoteAnimations"); - definition.setCallingPid(Binder.getCallingPid()); + definition.setCallingPidUid(Binder.getCallingPid(), Binder.getCallingUid()); synchronized (mGlobalLock) { final ActivityDisplay display = mRootActivityContainer.getActivityDisplay(displayId); if (display == null) { diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 6c577e150e54..f1a9e60d18aa 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -206,6 +206,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree boolean removed; // Information about an application starting window if displayed. + // Note: these are de-referenced before the starting window animates away. StartingData mStartingData; WindowState startingWindow; StartingSurface startingSurface; @@ -1243,6 +1244,21 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree return true; } + /** + * @return {@code true} if starting window is in app's hierarchy. + */ + boolean hasStartingWindow() { + if (startingDisplayed || mStartingData != null) { + return true; + } + for (int i = mChildren.size() - 1; i >= 0; i--) { + if (getChildAt(i).mAttrs.type == TYPE_APPLICATION_STARTING) { + return true; + } + } + return false; + } + @Override void addWindow(WindowState w) { super.addWindow(w); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a1b87605ac1f..e099a4f0c91c 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -67,6 +67,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_DREAM; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; +import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; @@ -137,6 +138,8 @@ import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREEN import static com.android.server.wm.WindowManagerService.WINDOW_FREEZE_TIMEOUT_DURATION; import static com.android.server.wm.WindowManagerService.dipToPixel; import static com.android.server.wm.WindowManagerService.logSurface; +import static com.android.server.wm.WindowState.EXCLUSION_LEFT; +import static com.android.server.wm.WindowState.EXCLUSION_RIGHT; import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP; import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING; import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW; @@ -330,6 +333,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private final RemoteCallbackList<ISystemGestureExclusionListener> mSystemGestureExclusionListeners = new RemoteCallbackList<>(); private final Region mSystemGestureExclusion = new Region(); + private boolean mSystemGestureExclusionWasRestricted = false; + private final Region mSystemGestureExclusionUnrestricted = new Region(); private int mSystemGestureExclusionLimit; /** @@ -4845,9 +4850,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo // // In the case where we have no IME target we assign it where it's base layer would // place it in the AboveAppWindowContainers. - if (imeTarget != null && !(imeTarget.inSplitScreenWindowingMode() - || imeTarget.mToken.isAppAnimating()) - && (imeTarget.getSurfaceControl() != null)) { + // + // Keep IME window in mAboveAppWindowsContainers as long as app's starting window exists + // so it get's layered above the starting window. + if (imeTarget != null + && !(imeTarget.mAppToken != null && imeTarget.mAppToken.hasStartingWindow()) + && (!(imeTarget.inSplitScreenWindowingMode() || imeTarget.mToken.isAppAnimating()) + && (imeTarget.getSurfaceControl() != null))) { mImeWindowsContainers.assignRelativeLayer(t, imeTarget.getSurfaceControl(), // TODO: We need to use an extra level on the app surface to ensure // this is always above SurfaceView but always below attached window. @@ -5135,16 +5144,21 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return false; } - final Region systemGestureExclusion = calculateSystemGestureExclusion(); + final Region systemGestureExclusion = Region.obtain(); + mSystemGestureExclusionWasRestricted = calculateSystemGestureExclusion( + systemGestureExclusion, mSystemGestureExclusionUnrestricted); try { if (mSystemGestureExclusion.equals(systemGestureExclusion)) { return false; } mSystemGestureExclusion.set(systemGestureExclusion); + final Region unrestrictedOrNull = mSystemGestureExclusionWasRestricted + ? mSystemGestureExclusionUnrestricted : null; for (int i = mSystemGestureExclusionListeners.beginBroadcast() - 1; i >= 0; --i) { try { mSystemGestureExclusionListeners.getBroadcastItem(i) - .onSystemGestureExclusionChanged(mDisplayId, systemGestureExclusion); + .onSystemGestureExclusionChanged(mDisplayId, systemGestureExclusion, + unrestrictedOrNull); } catch (RemoteException e) { Slog.e(TAG, "Failed to notify SystemGestureExclusionListener", e); } @@ -5156,8 +5170,22 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } + /** + * Calculates the system gesture exclusion. + * + * @param outExclusion will be set to the gesture exclusion region + * @param outExclusionUnrestricted will be set to the gesture exclusion region without + * any restrictions applied. + * @return whether any restrictions were applied, i.e. outExclusion and outExclusionUnrestricted + * differ. + */ @VisibleForTesting - Region calculateSystemGestureExclusion() { + boolean calculateSystemGestureExclusion(Region outExclusion, @Nullable + Region outExclusionUnrestricted) { + outExclusion.setEmpty(); + if (outExclusionUnrestricted != null) { + outExclusionUnrestricted.setEmpty(); + } final Region unhandled = Region.obtain(); unhandled.set(0, 0, mDisplayFrames.mDisplayWidth, mDisplayFrames.mDisplayHeight); @@ -5166,7 +5194,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo final Rect rightEdge = mInsetsStateController.getSourceProvider(TYPE_RIGHT_GESTURES) .getSource().getFrame(); - final Region global = Region.obtain(); final Region touchableRegion = Region.obtain(); final Region local = Region.obtain(); final int[] remainingLeftRight = @@ -5204,28 +5231,39 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo if (needsGestureExclusionRestrictions(w, mLastDispatchedSystemUiVisibility)) { // Processes the region along the left edge. - remainingLeftRight[0] = addToGlobalAndConsumeLimit(local, global, leftEdge, - remainingLeftRight[0]); + remainingLeftRight[0] = addToGlobalAndConsumeLimit(local, outExclusion, leftEdge, + remainingLeftRight[0], w, EXCLUSION_LEFT); // Processes the region along the right edge. - remainingLeftRight[1] = addToGlobalAndConsumeLimit(local, global, rightEdge, - remainingLeftRight[1]); + remainingLeftRight[1] = addToGlobalAndConsumeLimit(local, outExclusion, rightEdge, + remainingLeftRight[1], w, EXCLUSION_RIGHT); // Adds the middle (unrestricted area) final Region middle = Region.obtain(local); middle.op(leftEdge, Op.DIFFERENCE); middle.op(rightEdge, Op.DIFFERENCE); - global.op(middle, Op.UNION); + outExclusion.op(middle, Op.UNION); middle.recycle(); } else { - global.op(local, Op.UNION); + boolean loggable = needsGestureExclusionRestrictions(w, 0 /* lastSysUiVis */); + if (loggable) { + addToGlobalAndConsumeLimit(local, outExclusion, leftEdge, + Integer.MAX_VALUE, w, EXCLUSION_LEFT); + addToGlobalAndConsumeLimit(local, outExclusion, rightEdge, + Integer.MAX_VALUE, w, EXCLUSION_RIGHT); + } + outExclusion.op(local, Op.UNION); + } + if (outExclusionUnrestricted != null) { + outExclusionUnrestricted.op(local, Op.UNION); } unhandled.op(touchableRegion, Op.DIFFERENCE); }, true /* topToBottom */); local.recycle(); touchableRegion.recycle(); unhandled.recycle(); - return global; + return remainingLeftRight[0] < mSystemGestureExclusionLimit + || remainingLeftRight[1] < mSystemGestureExclusionLimit; } /** @@ -5243,31 +5281,57 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } /** + * @return Whether gesture exclusion area should be logged for the given window + */ + static boolean logsGestureExclusionRestrictions(WindowState win) { + if (win.mWmService.mSystemGestureExclusionLogDebounceTimeoutMillis <= 0) { + return false; + } + final WindowManager.LayoutParams attrs = win.getAttrs(); + final int type = attrs.type; + return type != TYPE_WALLPAPER + && type != TYPE_APPLICATION_STARTING + && type != TYPE_NAVIGATION_BAR + && (attrs.flags & FLAG_NOT_TOUCHABLE) == 0 + && needsGestureExclusionRestrictions(win, 0 /* sysUiVisibility */) + && win.getDisplayContent().mDisplayPolicy.hasSideGestures(); + } + + /** * Adds a local gesture exclusion area to the global area while applying a limit per edge. * * @param local The gesture exclusion area to add. * @param global The destination. * @param edge Only processes the part in that region. * @param limit How much limit in pixels we have. - * @return How much of the limit are remaining. + * @param win The WindowState that is being processed + * @param side The side that is being processed, either {@link WindowState#EXCLUSION_LEFT} or + * {@link WindowState#EXCLUSION_RIGHT} + * @return How much of the limit is remaining. */ private static int addToGlobalAndConsumeLimit(Region local, Region global, Rect edge, - int limit) { + int limit, WindowState win, int side) { final Region r = Region.obtain(local); r.op(edge, Op.INTERSECT); final int[] remaining = {limit}; + final int[] requestedExclusion = {0}; forEachRectReverse(r, rect -> { if (remaining[0] <= 0) { return; } final int height = rect.height(); + requestedExclusion[0] += height; if (height > remaining[0]) { rect.top = rect.bottom - remaining[0]; } remaining[0] -= height; global.op(rect, Op.UNION); }); + + final int grantedExclusion = limit - remaining[0]; + win.setLastExclusionHeights(side, requestedExclusion[0], grantedExclusion); + r.recycle(); return remaining[0]; } @@ -5282,10 +5346,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } if (!changed) { + final Region unrestrictedOrNull = mSystemGestureExclusionWasRestricted + ? mSystemGestureExclusionUnrestricted : null; // If updateSystemGestureExclusion changed the exclusion, it will already have // notified the listener. Otherwise, we'll do it here. try { - listener.onSystemGestureExclusionChanged(mDisplayId, mSystemGestureExclusion); + listener.onSystemGestureExclusionChanged(mDisplayId, mSystemGestureExclusion, + unrestrictedOrNull); } catch (RemoteException e) { Slog.e(TAG, "Failed to notify SystemGestureExclusionListener during register", e); } diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index cf87203893cf..ed7dbd05853a 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -478,9 +478,10 @@ public class DisplayPolicy { @Override public void onSwipeFromRight() { - final Region excludedRegion; + final Region excludedRegion = Region.obtain(); synchronized (mLock) { - excludedRegion = mDisplayContent.calculateSystemGestureExclusion(); + mDisplayContent.calculateSystemGestureExclusion( + excludedRegion, null /* outUnrestricted */); } final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture || mNavigationBarPosition == NAV_BAR_RIGHT; @@ -488,13 +489,15 @@ public class DisplayPolicy { && !mSystemGestures.currentGestureStartedInRegion(excludedRegion)) { requestTransientBars(mNavigationBar); } + excludedRegion.recycle(); } @Override public void onSwipeFromLeft() { - final Region excludedRegion; + final Region excludedRegion = Region.obtain(); synchronized (mLock) { - excludedRegion = mDisplayContent.calculateSystemGestureExclusion(); + mDisplayContent.calculateSystemGestureExclusion( + excludedRegion, null /* outUnrestricted */); } final boolean sideAllowed = mNavigationBarAlwaysShowOnSideGesture || mNavigationBarPosition == NAV_BAR_LEFT; @@ -502,6 +505,7 @@ public class DisplayPolicy { && !mSystemGestures.currentGestureStartedInRegion(excludedRegion)) { requestTransientBars(mNavigationBar); } + excludedRegion.recycle(); } @Override @@ -674,6 +678,10 @@ public class DisplayPolicy { return mHasStatusBar; } + boolean hasSideGestures() { + return mHasNavigationBar && mSideGestureInset > 0; + } + public boolean navigationBarCanMove() { return mNavigationBarCanMove; } diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java index 0a3e7a4860d5..036bef755a87 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimation.java +++ b/services/core/java/com/android/server/wm/RecentsAnimation.java @@ -33,6 +33,7 @@ import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_O import static com.android.server.wm.RecentsAnimationController.REORDER_MOVE_TO_TOP; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RECENTS_ANIMATIONS; +import android.annotation.Nullable; import android.app.ActivityOptions; import android.content.ComponentName; import android.content.Intent; @@ -60,7 +61,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, private final Intent mTargetIntent; private final ComponentName mRecentsComponent; private final int mRecentsUid; - private final int mCallingPid; + private final @Nullable WindowProcessController mCaller; private final int mUserId; private final int mTargetActivityType; @@ -76,7 +77,8 @@ class RecentsAnimation implements RecentsAnimationCallbacks, RecentsAnimation(ActivityTaskManagerService atm, ActivityStackSupervisor stackSupervisor, ActivityStartController activityStartController, WindowManagerService wm, - Intent targetIntent, ComponentName recentsComponent, int recentsUid, int callingPid) { + Intent targetIntent, ComponentName recentsComponent, int recentsUid, + @Nullable WindowProcessController caller) { mService = atm; mStackSupervisor = stackSupervisor; mDefaultDisplay = mService.mRootActivityContainer.getDefaultDisplay(); @@ -85,7 +87,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, mTargetIntent = targetIntent; mRecentsComponent = recentsComponent; mRecentsUid = recentsUid; - mCallingPid = callingPid; + mCaller = caller; mUserId = atm.getCurrentUserId(); mTargetActivityType = targetIntent.getComponent() != null && recentsComponent.equals(targetIntent.getComponent()) @@ -190,7 +192,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks, mStackSupervisor.getActivityMetricsLogger().notifyActivityLaunching(mTargetIntent); - mService.mH.post(() -> mService.mAmInternal.setRunningRemoteAnimation(mCallingPid, true)); + if (mCaller != null) { + mCaller.setRunningRecentsAnimation(true); + } mWindowManager.deferSurfaceLayout(); try { @@ -286,8 +290,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks, mService.stopAppSwitches(); } - mService.mH.post( - () -> mService.mAmInternal.setRunningRemoteAnimation(mCallingPid, false)); + if (mCaller != null) { + mCaller.setRunningRecentsAnimation(false); + } mWindowManager.inSurfaceTransaction(() -> { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, @@ -453,7 +458,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, /** * Called only when the animation should be canceled prior to starting. */ - private void notifyAnimationCancelBeforeStart(IRecentsAnimationRunner recentsAnimationRunner) { + static void notifyAnimationCancelBeforeStart(IRecentsAnimationRunner recentsAnimationRunner) { try { recentsAnimationRunner.onAnimationCanceled(false /* deferredWithScreenshot */); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java index b4bfedda94c7..a1bc406c4550 100644 --- a/services/core/java/com/android/server/wm/RemoteAnimationController.java +++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java @@ -129,7 +129,7 @@ class RemoteAnimationController implements DeathRecipient { writeStartDebugStatement(); } }); - sendRunningRemoteAnimation(true); + setRunningRemoteAnimation(true); } void cancelAnimation(String reason) { @@ -216,7 +216,7 @@ class RemoteAnimationController implements DeathRecipient { mService.closeSurfaceTransaction("RemoteAnimationController#finished"); } } - sendRunningRemoteAnimation(false); + setRunningRemoteAnimation(false); if (DEBUG_REMOTE_ANIMATIONS) Slog.i(TAG, "Finishing remote animation"); } @@ -235,12 +235,18 @@ class RemoteAnimationController implements DeathRecipient { } } - private void sendRunningRemoteAnimation(boolean running) { + private void setRunningRemoteAnimation(boolean running) { final int pid = mRemoteAnimationAdapter.getCallingPid(); + final int uid = mRemoteAnimationAdapter.getCallingUid(); if (pid == 0) { throw new RuntimeException("Calling pid of remote animation was null"); } - mService.sendSetRunningRemoteAnimation(pid, running); + final WindowProcessController wpc = mService.mAtmService.getProcessController(pid, uid); + if (wpc == null) { + Slog.w(TAG, "Unable to find process with pid=" + pid + " uid=" + uid); + return; + } + wpc.setRunningRemoteAnimation(running); } private void linkToDeathOfRunner() throws RemoteException { @@ -417,7 +423,7 @@ class RemoteAnimationController implements DeathRecipient { mHandler.removeCallbacks(mTimeoutRunnable); releaseFinishedCallback(); invokeAnimationCancelled(); - sendRunningRemoteAnimation(false); + setRunningRemoteAnimation(false); } } diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java index ac9028329023..a7b53688dbdc 100644 --- a/services/core/java/com/android/server/wm/SafeActivityOptions.java +++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java @@ -122,17 +122,20 @@ public class SafeActivityOptions { if (mOriginalOptions != null) { checkPermissions(intent, aInfo, callerApp, supervisor, mOriginalOptions, mOriginalCallingPid, mOriginalCallingUid); - setCallingPidForRemoteAnimationAdapter(mOriginalOptions, mOriginalCallingPid); + setCallingPidUidForRemoteAnimationAdapter(mOriginalOptions, mOriginalCallingPid, + mOriginalCallingUid); } if (mCallerOptions != null) { checkPermissions(intent, aInfo, callerApp, supervisor, mCallerOptions, mRealCallingPid, mRealCallingUid); - setCallingPidForRemoteAnimationAdapter(mCallerOptions, mRealCallingPid); + setCallingPidUidForRemoteAnimationAdapter(mCallerOptions, mRealCallingPid, + mRealCallingUid); } return mergeActivityOptions(mOriginalOptions, mCallerOptions); } - private void setCallingPidForRemoteAnimationAdapter(ActivityOptions options, int callingPid) { + private void setCallingPidUidForRemoteAnimationAdapter(ActivityOptions options, + int callingPid, int callingUid) { final RemoteAnimationAdapter adapter = options.getRemoteAnimationAdapter(); if (adapter == null) { return; @@ -141,7 +144,7 @@ public class SafeActivityOptions { Slog.wtf(TAG, "Safe activity options constructed after clearing calling id"); return; } - adapter.setCallingPid(callingPid); + adapter.setCallingPidUid(callingPid, callingUid); } /** diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 57f402c8fe9c..c108752c951a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -34,6 +34,7 @@ import static android.os.Process.myPid; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.provider.DeviceConfig.WindowManager.KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE; import static android.provider.DeviceConfig.WindowManager.KEY_SYSTEM_GESTURE_EXCLUSION_LIMIT_DP; +import static android.provider.DeviceConfig.WindowManager.KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS; import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; @@ -847,6 +848,16 @@ public class WindowManagerService extends IWindowManager.Stub int mSystemGestureExclusionLimitDp; boolean mSystemGestureExcludedByPreQStickyImmersive; + /** + * The minimum duration between gesture exclusion logging for a given window in + * milliseconds. + * + * Events that happen in-between will be silently dropped. + * + * A non-positive value disables logging. + */ + public long mSystemGestureExclusionLogDebounceTimeoutMillis; + public interface WindowChangeListener { public void windowsChanged(); public void focusChanged(); @@ -1146,6 +1157,9 @@ public class WindowManagerService extends IWindowManager.Stub mSystemGestureExclusionLimitDp = Math.max(MIN_GESTURE_EXCLUSION_LIMIT_DP, DeviceConfig.getInt(DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_SYSTEM_GESTURE_EXCLUSION_LIMIT_DP, 0)); + mSystemGestureExclusionLogDebounceTimeoutMillis = + DeviceConfig.getInt(DeviceConfig.NAMESPACE_WINDOW_MANAGER, + KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS, 0); mSystemGestureExcludedByPreQStickyImmersive = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_WINDOW_MANAGER, KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE, false); @@ -1163,6 +1177,10 @@ public class WindowManagerService extends IWindowManager.Stub mSystemGestureExcludedByPreQStickyImmersive = excludedByPreQSticky; mRoot.forAllDisplays(DisplayContent::updateSystemGestureExclusionLimit); } + + mSystemGestureExclusionLogDebounceTimeoutMillis = + DeviceConfig.getInt(DeviceConfig.NAMESPACE_WINDOW_MANAGER, + KEY_SYSTEM_GESTURE_EXCLUSION_LOG_DEBOUNCE_MILLIS, 0); } }); @@ -4556,7 +4574,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int SEAMLESS_ROTATION_TIMEOUT = 54; public static final int RESTORE_POINTER_ICON = 55; public static final int SET_HAS_OVERLAY_UI = 58; - public static final int SET_RUNNING_REMOTE_ANIMATION = 59; public static final int ANIMATION_FAILSAFE = 60; public static final int RECOMPUTE_FOCUS = 61; public static final int ON_POINTER_DOWN_OUTSIDE_FOCUS = 62; @@ -4935,10 +4952,6 @@ public class WindowManagerService extends IWindowManager.Stub mAmInternal.setHasOverlayUi(msg.arg1, msg.arg2 == 1); break; } - case SET_RUNNING_REMOTE_ANIMATION: { - mAmInternal.setRunningRemoteAnimation(msg.arg1, msg.arg2 == 1); - break; - } case ANIMATION_FAILSAFE: { synchronized (mGlobalLock) { if (mRecentsAnimationController != null) { @@ -7625,11 +7638,6 @@ public class WindowManagerService extends IWindowManager.Stub return mSurfaceBuilderFactory.make(s); } - void sendSetRunningRemoteAnimation(int pid, boolean runningRemoteAnimation) { - mH.obtainMessage(H.SET_RUNNING_REMOTE_ANIMATION, pid, runningRemoteAnimation ? 1 : 0) - .sendToTarget(); - } - void startSeamlessRotation() { // We are careful to reset this in case a window was removed before it finished // seamless rotation. diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index b6960f0d1fe6..4cb546f107c7 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -56,6 +56,7 @@ import android.util.ArraySet; import android.util.Log; import android.util.Slog; import android.util.proto.ProtoOutputStream; +import android.view.IRemoteAnimationRunner; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.HeavyWeightSwitcherActivity; @@ -176,6 +177,12 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio // Registered display id as a listener to override config change private int mDisplayId; + /** Whether our process is currently running a {@link RecentsAnimation} */ + private boolean mRunningRecentsAnimation; + + /** Whether our process is currently running a {@link IRemoteAnimationRunner} */ + private boolean mRunningRemoteAnimation; + public WindowProcessController(ActivityTaskManagerService atm, ApplicationInfo info, String name, int uid, int userId, Object owner, WindowProcessListener listener) { mInfo = info; @@ -1079,6 +1086,30 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio } } + void setRunningRecentsAnimation(boolean running) { + if (mRunningRecentsAnimation == running) { + return; + } + mRunningRecentsAnimation = running; + updateRunningRemoteOrRecentsAnimation(); + } + + void setRunningRemoteAnimation(boolean running) { + if (mRunningRemoteAnimation == running) { + return; + } + mRunningRemoteAnimation = running; + updateRunningRemoteOrRecentsAnimation(); + } + + private void updateRunningRemoteOrRecentsAnimation() { + + // Posting on handler so WM lock isn't held when we call into AM. + mAtm.mH.sendMessage(PooledLambda.obtainMessage( + WindowProcessListener::setRunningRemoteAnimation, mListener, + mRunningRecentsAnimation || mRunningRemoteAnimation)); + } + @Override public String toString() { return mOwner != null ? mOwner.toString() : null; diff --git a/services/core/java/com/android/server/wm/WindowProcessListener.java b/services/core/java/com/android/server/wm/WindowProcessListener.java index 527d54a40d03..23d7a6a9d293 100644 --- a/services/core/java/com/android/server/wm/WindowProcessListener.java +++ b/services/core/java/com/android/server/wm/WindowProcessListener.java @@ -17,6 +17,8 @@ package com.android.server.wm; import android.util.proto.ProtoOutputStream; +import android.view.IRemoteAnimationRunner; +import android.view.RemoteAnimationAdapter; /** * Interface used by the owner/creator of a process that owns windows to listen to changes from the @@ -60,4 +62,14 @@ public interface WindowProcessListener { /** App died :(...oh well */ void appDied(); void writeToProto(ProtoOutputStream proto, long fieldId); + + /** + * Sets if the process is currently running a remote animation, which is taken a signal for + * determining oom adjustment and scheduling behavior. + * + * @param runningRemoteAnimation True if the process is running a remote animation, false + * otherwise. + * @see RemoteAnimationAdapter + */ + void setRunningRemoteAnimation(boolean runningRemoteAnimation); } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f68d7c077e72..18cdc943b8c8 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -20,6 +20,8 @@ import static android.app.ActivityTaskManager.INVALID_STACK_ID; import static android.app.AppOpsManager.MODE_ALLOWED; import static android.app.AppOpsManager.MODE_DEFAULT; import static android.app.AppOpsManager.OP_NONE; +import static android.app.WindowConfiguration.isSplitScreenWindowingMode; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.os.PowerManager.DRAW_WAKE_LOCK; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.Display.DEFAULT_DISPLAY; @@ -80,6 +82,7 @@ import static com.android.server.policy.WindowManagerPolicy.TRANSIT_ENTER; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; import static com.android.server.wm.AnimationSpecProto.MOVE; +import static com.android.server.wm.DisplayContent.logsGestureExclusionRestrictions; import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_DOCKED_DIVIDER; import static com.android.server.wm.DragResizeMode.DRAG_RESIZE_MODE_FREEFORM; import static com.android.server.wm.IdentifierProto.HASH_CODE; @@ -174,6 +177,7 @@ import android.util.ArraySet; import android.util.DisplayMetrics; import android.util.MergedConfiguration; import android.util.Slog; +import android.util.StatsLog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; import android.view.Display; @@ -227,6 +231,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // to capture touch events in that area. static final int RESIZE_HANDLE_WIDTH_IN_DP = 30; + static final int EXCLUSION_LEFT = 0; + static final int EXCLUSION_RIGHT = 1; + final WindowManagerPolicy mPolicy; final Context mContext; final Session mSession; @@ -397,6 +404,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP */ private final List<Rect> mExclusionRects = new ArrayList<>(); + // 0 = left, 1 = right + private final int[] mLastRequestedExclusionHeight = {0, 0}; + private final int[] mLastGrantedExclusionHeight = {0, 0}; + private final long[] mLastExclusionLogUptimeMillis = {0, 0}; + + private boolean mLastShownChangedReported; + // If a window showing a wallpaper: the requested offset for the // wallpaper; if a wallpaper window: the currently applied offset. float mWallpaperX = -1; @@ -679,6 +693,20 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP && mAppToken != null && mAppToken.mTargetSdk < Build.VERSION_CODES.Q; } + void setLastExclusionHeights(int side, int requested, int granted) { + boolean changed = mLastGrantedExclusionHeight[side] != granted + || mLastRequestedExclusionHeight[side] != requested; + + if (changed) { + if (mLastShownChangedReported) { + logExclusionRestrictions(side); + } + + mLastGrantedExclusionHeight[side] = granted; + mLastRequestedExclusionHeight[side] = requested; + } + } + interface PowerManagerWrapper { void wakeUp(long time, @WakeReason int reason, String details); @@ -2957,6 +2985,49 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP mAnimatingExit = false; } + void onSurfaceShownChanged(boolean shown) { + if (mLastShownChangedReported == shown) { + return; + } + mLastShownChangedReported = shown; + + if (shown) { + initExclusionRestrictions(); + } else { + logExclusionRestrictions(EXCLUSION_LEFT); + logExclusionRestrictions(EXCLUSION_RIGHT); + } + } + + private void logExclusionRestrictions(int side) { + if (!logsGestureExclusionRestrictions(this) + || SystemClock.uptimeMillis() < mLastExclusionLogUptimeMillis[side] + + mWmService.mSystemGestureExclusionLogDebounceTimeoutMillis) { + // Drop the log if we have just logged; this is okay, because what we would have logged + // was true only for a short duration. + return; + } + + final long now = SystemClock.uptimeMillis(); + final long duration = now - mLastExclusionLogUptimeMillis[side]; + mLastExclusionLogUptimeMillis[side] = now; + + final int requested = mLastRequestedExclusionHeight[side]; + final int granted = mLastGrantedExclusionHeight[side]; + + StatsLog.write(StatsLog.EXCLUSION_RECT_STATE_CHANGED, + mAttrs.packageName, requested, requested - granted /* rejected */, + side + 1 /* Sides are 1-indexed in atoms.proto */, + (getConfiguration().orientation == ORIENTATION_LANDSCAPE), + isSplitScreenWindowingMode(getWindowingMode()), (int) duration); + } + + private void initExclusionRestrictions() { + final long now = SystemClock.uptimeMillis(); + mLastExclusionLogUptimeMillis[EXCLUSION_LEFT] = now; + mLastExclusionLogUptimeMillis[EXCLUSION_RIGHT] = now; + } + @Override public boolean isDefaultDisplay() { final DisplayContent displayContent = getDisplayContent(); diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index bef0f81e4dc1..53bbd7010b5d 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -507,6 +507,8 @@ class WindowSurfaceController { mService.updateNonSystemOverlayWindowsVisibilityIfNeeded(mAnimator.mWin, surfaceShown); + mAnimator.mWin.onSurfaceShownChanged(surfaceShown); + if (mWindowSession != null) { mWindowSession.onWindowSurfaceVisibilityChanged(this, mSurfaceShown, mWindowType); } diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java index 1bda412f2f89..88de250e4b0d 100644 --- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java @@ -23,7 +23,10 @@ import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; @@ -59,6 +62,7 @@ import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; +import android.view.Display; import androidx.test.InstrumentationRegistry; @@ -157,6 +161,10 @@ public class PowerManagerServiceTest { mResourcesSpy = spy(mContextSpy.getResources()); when(mContextSpy.getResources()).thenReturn(mResourcesSpy); + when(mDisplayManagerInternalMock.requestPowerState(any(), anyBoolean())).thenReturn(true); + } + + private PowerManagerService createService() { mService = new PowerManagerService(mContextSpy, new Injector() { @Override Notifier createNotifier(Looper looper, Context context, IBatteryStats batteryStats, @@ -166,7 +174,7 @@ public class PowerManagerServiceTest { @Override SuspendBlocker createSuspendBlocker(PowerManagerService service, String name) { - return mock(SuspendBlocker.class); + return super.createSuspendBlocker(service, name); } @Override @@ -191,6 +199,7 @@ public class PowerManagerServiceTest { return mAmbientDisplayConfigurationMock; } }); + return mService; } @After @@ -262,6 +271,7 @@ public class PowerManagerServiceTest { @Test public void testUpdatePowerScreenPolicy_UpdateDisplayPowerRequest() { + createService(); mService.updatePowerRequestFromBatterySaverPolicy(mDisplayPowerRequest); assertThat(mDisplayPowerRequest.lowPowerMode).isEqualTo(BATTERY_SAVER_ENABLED); assertThat(mDisplayPowerRequest.screenLowPowerBrightnessFactor) @@ -270,6 +280,7 @@ public class PowerManagerServiceTest { @Test public void testGetLastShutdownReasonInternal() { + createService(); SystemProperties.set(TEST_LAST_REBOOT_PROPERTY, "shutdown,thermal"); int reason = mService.getLastShutdownReasonInternal(TEST_LAST_REBOOT_PROPERTY); SystemProperties.set(TEST_LAST_REBOOT_PROPERTY, ""); @@ -278,6 +289,7 @@ public class PowerManagerServiceTest { @Test public void testGetDesiredScreenPolicy_WithVR() throws Exception { + createService(); // Brighten up the screen mService.setWakefulnessLocked(WAKEFULNESS_AWAKE, PowerManager.WAKE_REASON_UNKNOWN, 0); assertThat(mService.getDesiredScreenPolicyLocked()).isEqualTo( @@ -307,11 +319,13 @@ public class PowerManagerServiceTest { @Test public void testWakefulnessAwake_InitialValue() throws Exception { + createService(); assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE); } @Test public void testWakefulnessSleep_NoDozeSleepFlag() throws Exception { + createService(); // Start with AWAKE state startSystem(); assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE); @@ -324,6 +338,7 @@ public class PowerManagerServiceTest { @Test public void testWakefulnessAwake_AcquireCausesWakeup() throws Exception { + createService(); startSystem(); forceSleep(); @@ -355,6 +370,7 @@ public class PowerManagerServiceTest { @Test public void testWakefulnessAwake_IPowerManagerWakeUp() throws Exception { + createService(); startSystem(); forceSleep(); mService.getBinderServiceInstance().wakeUp(SystemClock.uptimeMillis(), @@ -369,6 +385,8 @@ public class PowerManagerServiceTest { @Test public void testWakefulnessAwake_ShouldWakeUpWhenPluggedIn() throws Exception { boolean powerState; + + createService(); startSystem(); forceSleep(); @@ -444,6 +462,7 @@ public class PowerManagerServiceTest { @Test public void testWakefulnessDoze_goToSleep() throws Exception { + createService(); // Start with AWAKE state startSystem(); assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE); @@ -457,6 +476,7 @@ public class PowerManagerServiceTest { @Test public void testWasDeviceIdleFor_true() { int interval = 1000; + createService(); mService.onUserActivity(); SystemClock.sleep(interval + 1 /* just a little more */); assertThat(mService.wasDeviceIdleForInternal(interval)).isTrue(); @@ -465,12 +485,14 @@ public class PowerManagerServiceTest { @Test public void testWasDeviceIdleFor_false() { int interval = 1000; + createService(); mService.onUserActivity(); assertThat(mService.wasDeviceIdleForInternal(interval)).isFalse(); } @Test public void testForceSuspend_putsDeviceToSleep() { + createService(); mService.systemReady(null); mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED); @@ -497,6 +519,8 @@ public class PowerManagerServiceTest { final int flags = PowerManager.PARTIAL_WAKE_LOCK; final String pkg = mContextSpy.getOpPackageName(); + createService(); + // Set up the Notification mock to keep track of the wakelocks that are currently // active or disabled. We'll use this to verify that wakelocks are disabled when // they should be. @@ -541,7 +565,54 @@ public class PowerManagerServiceTest { @Test public void testForceSuspend_forceSuspendFailurePropogated() { + createService(); when(mNativeWrapperMock.nativeForceSuspend()).thenReturn(false); assertThat(mService.getBinderServiceInstance().forceSuspend()).isFalse(); } + + @Test + public void testSetDozeOverrideFromDreamManager_triggersSuspendBlocker() throws Exception { + final String suspendBlockerName = "PowerManagerService.Display"; + final String tag = "acq_causes_wakeup"; + final String packageName = "pkg.name"; + final IBinder token = new Binder(); + + final boolean[] isAcquired = new boolean[1]; + doAnswer(inv -> { + if (suspendBlockerName.equals(inv.getArguments()[0])) { + isAcquired[0] = false; + } + return null; + }).when(mNativeWrapperMock).nativeReleaseSuspendBlocker(any()); + + doAnswer(inv -> { + if (suspendBlockerName.equals(inv.getArguments()[0])) { + isAcquired[0] = true; + } + return null; + }).when(mNativeWrapperMock).nativeAcquireSuspendBlocker(any()); + + // Need to create the service after we stub the mocks for this test because some of the + // mocks are used during the constructor. + createService(); + + // Start with AWAKE state + startSystem(); + assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_AWAKE); + assertTrue(isAcquired[0]); + + // Take a nap and verify we no longer hold the blocker + int flags = PowerManager.DOZE_WAKE_LOCK; + mService.getBinderServiceInstance().acquireWakeLock(token, flags, tag, packageName, + null /* workSource */, null /* historyTag */); + mService.getBinderServiceInstance().goToSleep(SystemClock.uptimeMillis(), + PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0); + assertThat(mService.getWakefulness()).isEqualTo(WAKEFULNESS_DOZING); + assertFalse(isAcquired[0]); + + // Override the display state by DreamManager and verify is reacquires the blocker. + mService.getLocalServiceInstance() + .setDozeOverrideFromDreamManager(Display.STATE_ON, PowerManager.BRIGHTNESS_DEFAULT); + assertTrue(isAcquired[0]); + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java index f60241846044..d1dc38273a28 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppTransitionTests.java @@ -207,7 +207,7 @@ public class AppTransitionTests extends WindowTestsBase { final RemoteAnimationAdapter adapter = new RemoteAnimationAdapter( runner, 100, 50, true /* changeNeedsSnapshot */); // RemoteAnimationController will tracking RemoteAnimationAdapter's caller with calling pid. - adapter.setCallingPid(123); + adapter.setCallingPidUid(123, 456); // Simulate activity finish flows to prepare app transition & set visibility, // make sure transition is set as expected. diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java index 7f35dac9611a..d9566a3c871d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenTests.java @@ -504,6 +504,21 @@ public class AppWindowTokenTests extends WindowTestsBase { assertEquals(stackBounds, mToken.getAnimationBounds(STACK_CLIP_BEFORE_ANIM)); } + @Test + public void testHasStartingWindow() { + final WindowManager.LayoutParams attrs = + new WindowManager.LayoutParams(TYPE_APPLICATION_STARTING); + final WindowTestUtils.TestWindowState startingWindow = createWindowState(attrs, mToken); + mToken.startingDisplayed = true; + mToken.addWindow(startingWindow); + assertTrue("Starting window should be present", mToken.hasStartingWindow()); + mToken.startingDisplayed = false; + assertTrue("Starting window should be present", mToken.hasStartingWindow()); + + mToken.removeChild(startingWindow); + assertFalse("Starting window should not be present", mToken.hasStartingWindow()); + } + private void assertHasStartingWindow(AppWindowToken atoken) { assertNotNull(atoken.startingSurface); assertNotNull(atoken.mStartingData); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index 7cd097ebdc2b..6889086680d4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -756,7 +756,8 @@ public class DisplayContentTests extends WindowTestsBase { final ISystemGestureExclusionListener.Stub verifier = new ISystemGestureExclusionListener.Stub() { @Override - public void onSystemGestureExclusionChanged(int displayId, Region actual) { + public void onSystemGestureExclusionChanged(int displayId, Region actual, + Region unrestricted) { Region expected = Region.obtain(); expected.set(10, 20, 30, 40); assertEquals(expected, actual); @@ -790,7 +791,14 @@ public class DisplayContentTests extends WindowTestsBase { final Region expected = Region.obtain(); expected.set(20, 30, 40, 50); - assertEquals(expected, dc.calculateSystemGestureExclusion()); + assertEquals(expected, calculateSystemGestureExclusion(dc)); + } + + private Region calculateSystemGestureExclusion(DisplayContent dc) { + Region out = Region.obtain(); + Region unrestricted = Region.obtain(); + dc.calculateSystemGestureExclusion(out, unrestricted); + return out; } @Test @@ -814,7 +822,7 @@ public class DisplayContentTests extends WindowTestsBase { win2.setHasSurface(true); final Region expected = Region.obtain(); - assertEquals(expected, dc.calculateSystemGestureExclusion()); + assertEquals(expected, calculateSystemGestureExclusion(dc)); } @Test @@ -839,7 +847,7 @@ public class DisplayContentTests extends WindowTestsBase { final Region expected = Region.obtain(); expected.set(dc.getBounds()); - assertEquals(expected, dc.calculateSystemGestureExclusion()); + assertEquals(expected, calculateSystemGestureExclusion(dc)); win.setHasSurface(false); } diff --git a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java index cb74c3e32252..74791e2ea97f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java @@ -79,7 +79,7 @@ public class RemoteAnimationControllerTest extends WindowTestsBase { when(mMockRunner.asBinder()).thenReturn(new Binder()); mAdapter = new RemoteAnimationAdapter(mMockRunner, 100, 50, true /* changeNeedsSnapshot */); - mAdapter.setCallingPid(123); + mAdapter.setCallingPidUid(123, 456); mWm.mH.runWithScissors(() -> mHandler = new TestHandler(null, mClock), 0); mController = new RemoteAnimationController(mWm, mAdapter, mHandler); } diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java index a7c84a1c28b4..8c56ffaa6314 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java @@ -23,12 +23,18 @@ import static com.android.server.wm.ActivityDisplay.POSITION_TOP; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import android.content.pm.ApplicationInfo; import android.platform.test.annotations.Presubmit; +import org.junit.Before; import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.Mockito; /** * Tests for the {@link WindowProcessController} class. @@ -39,43 +45,89 @@ import org.junit.Test; @Presubmit public class WindowProcessControllerTests extends ActivityTestsBase { + WindowProcessController mWpc; + WindowProcessListener mMockListener; + + @Before + public void setUp() { + mMockListener = mock(WindowProcessListener.class); + mWpc = new WindowProcessController( + mService, mock(ApplicationInfo.class), null, 0, -1, null, mMockListener); + } + @Test public void testDisplayConfigurationListener() { - final WindowProcessController wpc = new WindowProcessController( - mService, mock(ApplicationInfo.class), null, 0, -1, null, null); + //By default, the process should not listen to any display. - assertEquals(INVALID_DISPLAY, wpc.getDisplayId()); + assertEquals(INVALID_DISPLAY, mWpc.getDisplayId()); // Register to display 1 as a listener. TestActivityDisplay testActivityDisplay1 = createTestActivityDisplayInContainer(); - wpc.registerDisplayConfigurationListenerLocked(testActivityDisplay1); - assertTrue(testActivityDisplay1.containsListener(wpc)); - assertEquals(testActivityDisplay1.mDisplayId, wpc.getDisplayId()); + mWpc.registerDisplayConfigurationListenerLocked(testActivityDisplay1); + assertTrue(testActivityDisplay1.containsListener(mWpc)); + assertEquals(testActivityDisplay1.mDisplayId, mWpc.getDisplayId()); // Move to display 2. TestActivityDisplay testActivityDisplay2 = createTestActivityDisplayInContainer(); - wpc.registerDisplayConfigurationListenerLocked(testActivityDisplay2); - assertFalse(testActivityDisplay1.containsListener(wpc)); - assertTrue(testActivityDisplay2.containsListener(wpc)); - assertEquals(testActivityDisplay2.mDisplayId, wpc.getDisplayId()); + mWpc.registerDisplayConfigurationListenerLocked(testActivityDisplay2); + assertFalse(testActivityDisplay1.containsListener(mWpc)); + assertTrue(testActivityDisplay2.containsListener(mWpc)); + assertEquals(testActivityDisplay2.mDisplayId, mWpc.getDisplayId()); // Null ActivityDisplay will not change anything. - wpc.registerDisplayConfigurationListenerLocked(null); - assertTrue(testActivityDisplay2.containsListener(wpc)); - assertEquals(testActivityDisplay2.mDisplayId, wpc.getDisplayId()); + mWpc.registerDisplayConfigurationListenerLocked(null); + assertTrue(testActivityDisplay2.containsListener(mWpc)); + assertEquals(testActivityDisplay2.mDisplayId, mWpc.getDisplayId()); // Unregister listener will remove the wpc from registered displays. - wpc.unregisterDisplayConfigurationListenerLocked(); - assertFalse(testActivityDisplay1.containsListener(wpc)); - assertFalse(testActivityDisplay2.containsListener(wpc)); - assertEquals(INVALID_DISPLAY, wpc.getDisplayId()); + mWpc.unregisterDisplayConfigurationListenerLocked(); + assertFalse(testActivityDisplay1.containsListener(mWpc)); + assertFalse(testActivityDisplay2.containsListener(mWpc)); + assertEquals(INVALID_DISPLAY, mWpc.getDisplayId()); // Unregistration still work even if the display was removed. - wpc.registerDisplayConfigurationListenerLocked(testActivityDisplay1); - assertEquals(testActivityDisplay1.mDisplayId, wpc.getDisplayId()); + mWpc.registerDisplayConfigurationListenerLocked(testActivityDisplay1); + assertEquals(testActivityDisplay1.mDisplayId, mWpc.getDisplayId()); mRootActivityContainer.removeChild(testActivityDisplay1); - wpc.unregisterDisplayConfigurationListenerLocked(); - assertEquals(INVALID_DISPLAY, wpc.getDisplayId()); + mWpc.unregisterDisplayConfigurationListenerLocked(); + assertEquals(INVALID_DISPLAY, mWpc.getDisplayId()); + } + + @Test + public void testSetRunningRecentsAnimation() { + mWpc.setRunningRecentsAnimation(true); + mWpc.setRunningRecentsAnimation(false); + mService.mH.runWithScissors(() -> {}, 0); + + InOrder orderVerifier = Mockito.inOrder(mMockListener); + orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(true)); + orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(false)); + } + + @Test + public void testSetRunningRemoteAnimation() { + mWpc.setRunningRemoteAnimation(true); + mWpc.setRunningRemoteAnimation(false); + mService.mH.runWithScissors(() -> {}, 0); + + InOrder orderVerifier = Mockito.inOrder(mMockListener); + orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(true)); + orderVerifier.verify(mMockListener).setRunningRemoteAnimation(eq(false)); + } + + @Test + public void testSetRunningBothAnimations() { + mWpc.setRunningRemoteAnimation(true); + mWpc.setRunningRecentsAnimation(true); + + mWpc.setRunningRecentsAnimation(false); + mWpc.setRunningRemoteAnimation(false); + mService.mH.runWithScissors(() -> {}, 0); + + InOrder orderVerifier = Mockito.inOrder(mMockListener); + orderVerifier.verify(mMockListener, times(3)).setRunningRemoteAnimation(eq(true)); + orderVerifier.verify(mMockListener, times(1)).setRunningRemoteAnimation(eq(false)); + orderVerifier.verifyNoMoreInteractions(); } private TestActivityDisplay createTestActivityDisplayInContainer() { diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index cea4fafc7c18..3a4fe19233c0 100755 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -2678,12 +2678,20 @@ public class CarrierConfigManager { /** * Controls hysteresis time in milli seconds for which OpportunisticNetworkService - * will wait before switching data to a network. + * will wait before switching data to an opportunistic network. */ public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG = "opportunistic_network_data_switch_hysteresis_time_long"; /** + * Controls hysteresis time in milli seconds for which OpportunisticNetworkService + * will wait before switching data from opportunistic network to primary network. + * @hide + */ + public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG = + "opportunistic_network_data_switch_exit_hysteresis_time_long"; + + /** * Indicates zero or more emergency number prefix(es), because some carrier requires * if users dial an emergency number address with a specific prefix, the combination of the * prefix and the address is also a valid emergency number to dial. For example, an emergency @@ -3428,6 +3436,8 @@ public class CarrierConfigManager { sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG, 10000); /* Default value is 10 seconds. */ sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG, 10000); + /* Default value is 3 seconds. */ + sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG, 3000); sDefaults.putAll(Gps.getDefaults()); sDefaults.putAll(Wifi.getDefaults()); sDefaults.putIntArray(KEY_CDMA_ENHANCED_ROAMING_INDICATOR_FOR_HOME_NETWORK_INT_ARRAY, diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 976cd0c577e4..7477c3e29448 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -2417,6 +2417,10 @@ public class TelephonyManager { * registered operator or the cell nearby, if available. * . * <p> + * Note: In multi-sim, this returns a shared emergency network country iso from other + * subscription if the subscription used to create the TelephonyManager doesn't camp on + * a network due to some reason (e.g. pin/puk locked), or sim is absent in the corresponding + * slot. * Note: Result may be unreliable on CDMA networks (use {@link #getPhoneType()} to determine * if on a CDMA network). */ diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java index 511adf6ad65b..19d07242132b 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -22,6 +22,7 @@ import android.hardware.radio.V1_4.EmergencyNumberSource; import android.hardware.radio.V1_4.EmergencyServiceCategory; import android.os.Parcel; import android.os.Parcelable; +import android.telephony.CarrierConfigManager; import android.telephony.PhoneNumberUtils; import android.telephony.Rlog; @@ -301,6 +302,9 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu * The character in the number string is only the dial pad * character('0'-'9', '*', '+', or '#'). For example: 911. * + * If the number starts with carrier prefix, the carrier prefix is configured in + * {@link CarrierConfigManager#KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY}. + * * @return the dialing number. */ public @NonNull String getNumber() { |