summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fyodor Kupolov <fkupolov@google.com> 2016-04-29 17:24:21 -0700
committer Fyodor Kupolov <fkupolov@google.com> 2016-04-29 17:27:16 -0700
commit4d01f61e7bb0d1f3a9ba598c6bc35df0b6a1a43f (patch)
treecdaad8d4aeeccb376a411079f732fe9acd9da292
parentede4fcea6b4fb5950b2a4eaf34b0fa6fa2f8a696 (diff)
Do not enforce unlocked state when there is no caller
Do not enforce unlocked state when running on the background thread. User can be in the stopping state or removed by the time the message is being processed. Bug: 28471878 Change-Id: I1862849661d93b424a07ea94e80563bea7a94ce5
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java12
1 files changed, 9 insertions, 3 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 7b9d44560563..c62689c22b0d 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -656,11 +656,15 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
private void ensureGroupStateLoadedLocked(int userId) {
- if (!mUserManager.isUserUnlockingOrUnlocked(userId)) {
+ ensureGroupStateLoadedLocked(userId, /* enforceUserUnlockingOrUnlocked */ true );
+ }
+
+ private void ensureGroupStateLoadedLocked(int userId, boolean enforceUserUnlockingOrUnlocked) {
+ if (enforceUserUnlockingOrUnlocked && !mUserManager.isUserUnlockingOrUnlocked(userId)) {
throw new IllegalStateException(
"User " + userId + " must be unlocked for widgets to be available");
}
- if (isProfileWithLockedParent(userId)) {
+ if (enforceUserUnlockingOrUnlocked && isProfileWithLockedParent(userId)) {
throw new IllegalStateException(
"Profile " + userId + " must have unlocked parent");
}
@@ -3945,7 +3949,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
@Override
public void run() {
synchronized (mLock) {
- ensureGroupStateLoadedLocked(mUserId);
+ // No need to enforce unlocked state when there is no caller. User can be in the
+ // stopping state or removed by the time the message is processed
+ ensureGroupStateLoadedLocked(mUserId, false /* enforceUserUnlockingOrUnlocked */ );
saveStateLocked(mUserId);
}
}