Handling IllegalStateException which can be thrown by the system when the user is locked

Bug: 30411561
Change-Id: I0d7fc0aaecba01b1aaac95b98654f6e3ee090ce8
This commit is contained in:
Sunny Goyal
2016-08-01 15:45:49 -07:00
parent f8d2a70e0f
commit 49f4f03dc8
2 changed files with 29 additions and 14 deletions
+24 -9
View File
@@ -1729,17 +1729,24 @@ public class LauncherModel extends BroadcastReceiver
quietMode.put(serialNo, mUserManager.isQuietModeEnabled(user));
boolean userUnlocked = mUserManager.isUserUnlocked(user);
unlockedUsers.put(serialNo, userUnlocked);
// We can only query for shortcuts when the user is unlocked.
if (userUnlocked) {
List<ShortcutInfoCompat> pinnedShortcuts = mDeepShortcutManager
.queryForPinnedShortcuts(null, user);
for (ShortcutInfoCompat shortcut : pinnedShortcuts) {
shortcutKeyToPinnedShortcuts.put(ShortcutKey.fromInfo(shortcut),
shortcut);
List<ShortcutInfoCompat> pinnedShortcuts =
mDeepShortcutManager.queryForPinnedShortcuts(null, user);
if (mDeepShortcutManager.wasLastCallSuccess()) {
for (ShortcutInfoCompat shortcut : pinnedShortcuts) {
shortcutKeyToPinnedShortcuts.put(ShortcutKey.fromInfo(shortcut),
shortcut);
}
} else {
// Shortcut manager can fail due to some race condition when the
// lock state changes too frequently. For the purpose of the loading
// shortcuts, consider the user is still locked.
userUnlocked = false;
}
}
unlockedUsers.put(serialNo, userUnlocked);
}
ShortcutInfo info;
@@ -3383,9 +3390,17 @@ public class LauncherModel extends BroadcastReceiver
HashMap<ShortcutKey, ShortcutInfoCompat> pinnedShortcuts = new HashMap<>();
if (isUserUnlocked) {
for (ShortcutInfoCompat shortcut :
mDeepShortcutManager.queryForPinnedShortcuts(null, mUser)) {
pinnedShortcuts.put(ShortcutKey.fromInfo(shortcut), shortcut);
List<ShortcutInfoCompat> shortcuts =
mDeepShortcutManager.queryForPinnedShortcuts(null, mUser);
if (mDeepShortcutManager.wasLastCallSuccess()) {
for (ShortcutInfoCompat shortcut : shortcuts) {
pinnedShortcuts.put(ShortcutKey.fromInfo(shortcut), shortcut);
}
} else {
// Shortcut manager can fail due to some race condition when the lock state
// changes too frequently. For the purpose of the update,
// consider it as still locked.
isUserUnlocked = false;
}
}
@@ -105,7 +105,7 @@ public class DeepShortcutManager {
try {
mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser());
mWasLastCallSuccess = true;
} catch (SecurityException e) {
} catch (SecurityException|IllegalStateException e) {
Log.w(TAG, "Failed to unpin shortcut", e);
mWasLastCallSuccess = false;
}
@@ -127,7 +127,7 @@ public class DeepShortcutManager {
try {
mLauncherApps.pinShortcuts(packageName, pinnedIds, user.getUser());
mWasLastCallSuccess = true;
} catch (SecurityException e) {
} catch (SecurityException|IllegalStateException e) {
Log.w(TAG, "Failed to pin shortcut", e);
mWasLastCallSuccess = false;
}
@@ -142,7 +142,7 @@ public class DeepShortcutManager {
mLauncherApps.startShortcut(packageName, id, sourceBounds,
startActivityOptions, user.getUser());
mWasLastCallSuccess = true;
} catch (SecurityException e) {
} catch (SecurityException|IllegalStateException e) {
Log.e(TAG, "Failed to start shortcut", e);
mWasLastCallSuccess = false;
}
@@ -157,7 +157,7 @@ public class DeepShortcutManager {
shortcutInfo.getShortcutInfo(), density);
mWasLastCallSuccess = true;
return icon;
} catch (SecurityException e) {
} catch (SecurityException|IllegalStateException e) {
Log.e(TAG, "Failed to get shortcut icon", e);
mWasLastCallSuccess = false;
}
@@ -208,7 +208,7 @@ public class DeepShortcutManager {
try {
shortcutInfos = mLauncherApps.getShortcuts(q, user.getUser());
mWasLastCallSuccess = true;
} catch (SecurityException e) {
} catch (SecurityException|IllegalStateException e) {
Log.e(TAG, "Failed to query for shortcuts", e);
mWasLastCallSuccess = false;
}