diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index bf2a02dac6..01b1cde990 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2638,23 +2638,26 @@ public class Launcher extends Activity !intent.hasExtra(INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION); LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(this); UserManagerCompat userManager = UserManagerCompat.getInstance(this); - long serialNumber = intent.getLongExtra(AppInfo.EXTRA_PROFILE, 0); - UserHandleCompat user = serialNumber == 0 ? null : - userManager.getUserForSerialNumber(serialNumber); + UserHandleCompat user = null; + if (intent.hasExtra(AppInfo.EXTRA_PROFILE)) { + long serialNumber = intent.getLongExtra(AppInfo.EXTRA_PROFILE, -1); + user = userManager.getUserForSerialNumber(serialNumber); + } + + Bundle optsBundle = null; if (useLaunchAnimation) { ActivityOptions opts = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); - if (user == null || user.equals(UserHandleCompat.myUserHandle())) { - // Could be launching some bookkeeping activity - startActivity(intent, opts.toBundle()); - } else { - launcherApps.startActivityForProfile(intent.getComponent(), - intent.getSourceBounds(), - opts.toBundle(), user); - } + optsBundle = opts.toBundle(); + } + + if (user == null || user.equals(UserHandleCompat.myUserHandle())) { + // Could be launching some bookkeeping activity + startActivity(intent, optsBundle); } else { - startActivity(intent); + launcherApps.startActivityForProfile(intent.getComponent(), + intent.getSourceBounds(), optsBundle, user); } return true; } catch (SecurityException e) { diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 0725a652f7..79bc084248 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -114,7 +114,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mFavoritesObserver); } - + public void recreateWidgetPreviewDb() { if (mWidgetPreviewCacheDb != null) { mWidgetPreviewCacheDb.close(); @@ -127,6 +127,8 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { */ public void onTerminate() { sContext.unregisterReceiver(mModel); + final LauncherAppsCompat launcherApps = LauncherAppsCompat.getInstance(sContext); + launcherApps.removeOnAppsChangedListener(mModel); ContentResolver resolver = sContext.getContentResolver(); resolver.unregisterContentObserver(mFavoritesObserver); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index f0ffe1d4cc..8af0970415 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -902,7 +902,7 @@ public class LauncherModel extends BroadcastReceiver item.container = c.getInt(containerIndex); item.itemType = c.getInt(itemTypeIndex); item.screenId = c.getInt(screenIndex); - int serialNumber = c.getInt(profileIdIndex); + long serialNumber = c.getInt(profileIdIndex); item.user = userManager.getUserForSerialNumber(serialNumber); // Skip if user has been deleted. if (item.user != null) { @@ -1894,7 +1894,7 @@ public class LauncherModel extends BroadcastReceiver case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT: id = c.getLong(idIndex); intentDescription = c.getString(intentIndex); - int serialNumber = c.getInt(profileIdIndex); + long serialNumber = c.getInt(profileIdIndex); user = mUserManager.getUserForSerialNumber(serialNumber); if (user == null) { // User has been deleted remove the item.