From 4d01f61e7bb0d1f3a9ba598c6bc35df0b6a1a43f Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Fri, 29 Apr 2016 17:24:21 -0700 Subject: 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 --- .../com/android/server/appwidget/AppWidgetServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'services/appwidget/java') 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); } } -- cgit v1.2.3-59-g8ed1b