summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-08-01 15:45:49 -0700
committerSunny Goyal <sunnygoyal@google.com>2016-08-01 16:13:28 -0700
commit49f4f03dc8ed3925e80d379634e43eb24eea25b9 (patch)
tree5721d68b95e5741d058e28145d035d9b460a8524
parentf8d2a70e0fc00559266aaab078aaefde8e34f3a7 (diff)
downloadandroid_packages_apps_Trebuchet-49f4f03dc8ed3925e80d379634e43eb24eea25b9.tar.gz
android_packages_apps_Trebuchet-49f4f03dc8ed3925e80d379634e43eb24eea25b9.tar.bz2
android_packages_apps_Trebuchet-49f4f03dc8ed3925e80d379634e43eb24eea25b9.zip
Handling IllegalStateException which can be thrown by the system when the user is locked
Bug: 30411561 Change-Id: I0d7fc0aaecba01b1aaac95b98654f6e3ee090ce8
-rw-r--r--src/com/android/launcher3/LauncherModel.java33
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutManager.java10
2 files changed, 29 insertions, 14 deletions
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 89a68369b..9fddd3d8d 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -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;
}
}
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
index 36bb2b5df..05ab84361 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutManager.java
@@ -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;
}