From cde84302d69443ab2423de1587f6889377f6a88f Mon Sep 17 00:00:00 2001 From: Alex Salo Date: Mon, 21 Jan 2019 15:31:07 -0800 Subject: [PATCH] Update AttentionManagerService 1. Change from onStopUser to onSwitchUser since onStopUser will actually never be called. 2. Add some checks in the cancelAttentionCheck() Bug: 111939367 Test: manually Change-Id: I155a3acb20ef7fcad693a0a319b097cf50a474d1 --- .../attention/AttentionManagerService.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/attention/AttentionManagerService.java b/services/core/java/com/android/server/attention/AttentionManagerService.java index f60d6b06f4514..8f1befed354c1 100644 --- a/services/core/java/com/android/server/attention/AttentionManagerService.java +++ b/services/core/java/com/android/server/attention/AttentionManagerService.java @@ -73,7 +73,6 @@ public class AttentionManagerService extends SystemService { private final Context mContext; private final PowerManager mPowerManager; - private final ActivityManager mActivityManager; private final Object mLock; @GuardedBy("mLock") private final SparseArray mUserStates = new SparseArray<>(); @@ -85,7 +84,6 @@ public class AttentionManagerService extends SystemService { super(context); mContext = Preconditions.checkNotNull(context); mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); - mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); mLock = new Object(); mAttentionHandler = new AttentionHandler(); } @@ -96,7 +94,7 @@ public class AttentionManagerService extends SystemService { } @Override - public void onStopUser(int userId) { + public void onSwitchUser(int userId) { cancelAndUnbindLocked(peekUserStateLocked(userId), AttentionService.ATTENTION_FAILURE_UNKNOWN); } @@ -201,11 +199,20 @@ public class AttentionManagerService extends SystemService { /** Cancels the specified attention check. */ public void cancelAttentionCheck(int requestCode) { - final UserState userState = getOrCreateCurrentUserStateLocked(); - try { - userState.mService.cancelAttentionCheck(requestCode); - } catch (RemoteException e) { - Slog.e(LOG_TAG, "Cannot call into the AttentionService"); + synchronized (mLock) { + final UserState userState = getOrCreateCurrentUserStateLocked(); + if (userState.mService == null) { + if (userState.mPendingAttentionCheck != null + && userState.mPendingAttentionCheck.mRequestCode == requestCode) { + userState.mPendingAttentionCheck = null; + } + return; + } + try { + userState.mService.cancelAttentionCheck(requestCode); + } catch (RemoteException e) { + Slog.e(LOG_TAG, "Cannot call into the AttentionService"); + } } } @@ -224,7 +231,7 @@ public class AttentionManagerService extends SystemService { @GuardedBy("mLock") private UserState getOrCreateCurrentUserStateLocked() { - return getOrCreateUserStateLocked(mActivityManager.getCurrentUser()); + return getOrCreateUserStateLocked(ActivityManager.getCurrentUser()); } @GuardedBy("mLock") @@ -239,7 +246,7 @@ public class AttentionManagerService extends SystemService { @GuardedBy("mLock") UserState peekCurrentUserStateLocked() { - return peekUserStateLocked(mActivityManager.getCurrentUser()); + return peekUserStateLocked(ActivityManager.getCurrentUser()); } @GuardedBy("mLock")