From 5d9b2710daf1edadf1b6d5459ab129e3b1a1d4c0 Mon Sep 17 00:00:00 2001 From: Yuncheol Heo Date: Thu, 16 Apr 2020 17:31:32 -0700 Subject: [PATCH] Add currentUiModeSupportsErrorDialogs() into ActivityTaskManager. The method will be used in AnrTests to check if the system can support ANR Dialog or not. Bug: 149510025 Test: atest AnrTests Change-Id: I7a78be06fcf3c4882931aaea1d330b2cebdc2d84 --- api/test-current.txt | 1 + core/java/android/app/ActivityTaskManager.java | 12 ++++++++++++ .../server/wm/ActivityTaskManagerService.java | 9 +++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/api/test-current.txt b/api/test-current.txt index 8e8c8c4aa24f3..5a68ab9eb6945 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -126,6 +126,7 @@ package android.app { public class ActivityTaskManager { method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void clearLaunchParamsForPackages(java.util.List); + method public static boolean currentUiModeSupportsErrorDialogs(@NonNull android.content.Context); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public String listAllStacks(); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void moveTaskToStack(int, int, boolean); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean moveTopActivityToPinnedStack(int, android.graphics.Rect); diff --git a/core/java/android/app/ActivityTaskManager.java b/core/java/android/app/ActivityTaskManager.java index 1b941defba42d..1cc63da3db0a6 100644 --- a/core/java/android/app/ActivityTaskManager.java +++ b/core/java/android/app/ActivityTaskManager.java @@ -23,8 +23,10 @@ import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Rect; +import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; @@ -430,4 +432,14 @@ public class ActivityTaskManager { throw e.rethrowFromSystemServer(); } } + + /** Returns whether the current UI mode supports error dialogs (ANR, crash, etc). */ + public static boolean currentUiModeSupportsErrorDialogs(@NonNull Context context) { + final Configuration config = context.getResources().getConfiguration(); + int modeType = config.uiMode & Configuration.UI_MODE_TYPE_MASK; + return (modeType != Configuration.UI_MODE_TYPE_CAR + && !(modeType == Configuration.UI_MODE_TYPE_WATCH && Build.IS_USER) + && modeType != Configuration.UI_MODE_TYPE_TELEVISION + && modeType != Configuration.UI_MODE_TYPE_VR_HEADSET); + } } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 409e6ff998748..d8a7e36a27a2e 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -5400,14 +5400,11 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final boolean inputMethodExists = !(config.keyboard == Configuration.KEYBOARD_NOKEYS && config.touchscreen == Configuration.TOUCHSCREEN_NOTOUCH && config.navigation == Configuration.NAVIGATION_NONAV); - int modeType = config.uiMode & Configuration.UI_MODE_TYPE_MASK; - final boolean uiModeSupportsDialogs = (modeType != Configuration.UI_MODE_TYPE_CAR - && !(modeType == Configuration.UI_MODE_TYPE_WATCH && Build.IS_USER) - && modeType != Configuration.UI_MODE_TYPE_TELEVISION - && modeType != Configuration.UI_MODE_TYPE_VR_HEADSET); final boolean hideDialogsSet = Settings.Global.getInt(mContext.getContentResolver(), HIDE_ERROR_DIALOGS, 0) != 0; - mShowDialogs = inputMethodExists && uiModeSupportsDialogs && !hideDialogsSet; + mShowDialogs = inputMethodExists + && ActivityTaskManager.currentUiModeSupportsErrorDialogs(mContext) + && !hideDialogsSet; } private void updateFontScaleIfNeeded(@UserIdInt int userId) {