summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/attention/AttentionManagerService.java27
1 files 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 f60d6b06f451..8f1befed354c 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<UserState> 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")