diff options
Diffstat (limited to 'services/appwidget/java')
| -rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 12 |
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); } } |