From 4121d6bd7d7d23fa6dccaa73f53ff20884737f4a Mon Sep 17 00:00:00 2001 From: Kazuki Takise Date: Fri, 9 Sep 2022 17:35:46 +0900 Subject: [PATCH] Make ATMService#mUiContext mockable Some vendor-specific (lightweight) unit tests use the real class for ActivityRecord but mock ActivityTaskManagerService (e.g. ArcLaunchParamsModifierTest). The problem is that ActivityRecord directly accesses ATMService#mUiContext to get the DevicePolicyManager service and the property itself is marked as final, so this cannot be replaced with a mock and instantiating ActivityRecord fails. Bug: 244515960 Test: atest ArcLaunchParamsModifierTest Change-Id: I2fc015d9f3dc4ce88607355b8e2a2849c2ac7fb4 --- .../core/java/com/android/server/wm/ActivityRecord.java | 4 ++-- .../com/android/server/wm/ActivityTaskManagerService.java | 6 +++++- services/core/java/com/android/server/wm/DisplayPolicy.java | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index af22f803d87dd..6538ee3c2182e 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2120,7 +2120,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mActivityRecordInputSink = new ActivityRecordInputSink(this, sourceRecord); - updateEnterpriseThumbnailDrawable(mAtmService.mUiContext); + updateEnterpriseThumbnailDrawable(mAtmService.getUiContext()); } /** @@ -7433,7 +7433,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } final Rect frame = win.getRelativeFrame(); final Drawable thumbnailDrawable = task.mUserId == mWmService.mCurrentUserId - ? mAtmService.mUiContext.getDrawable(R.drawable.ic_account_circle) + ? mAtmService.getUiContext().getDrawable(R.drawable.ic_account_circle) : mEnterpriseThumbnailDrawable; final HardwareBuffer thumbnail = getDisplayContent().mAppTransition .createCrossProfileAppsThumbnail(thumbnailDrawable, frame); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index e99349621e740..75e24a89048be 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -346,7 +346,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { * This Context is themable and meant for UI display (AlertDialogs, etc.). The theme can * change at runtime. Use mContext for non-UI purposes. */ - final Context mUiContext; + private final Context mUiContext; final ActivityThread mSystemThread; H mH; UiHandler mUiHandler; @@ -1041,6 +1041,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } + Context getUiContext() { + return mUiContext; + } + UserManagerService getUserManager() { if (mUserManager == null) { IBinder b = ServiceManager.getService(Context.USER_SERVICE); diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 1636d9f76c1ca..b26de07461d6c 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -421,7 +421,7 @@ public class DisplayPolicy { mService = service; mContext = displayContent.isDefaultDisplay ? service.mContext : service.mContext.createDisplayContext(displayContent.getDisplay()); - mUiContext = displayContent.isDefaultDisplay ? service.mAtmService.mUiContext + mUiContext = displayContent.isDefaultDisplay ? service.mAtmService.getUiContext() : service.mAtmService.mSystemThread .getSystemUiContext(displayContent.getDisplayId()); mDisplayContent = displayContent;