From ba9c37f41c41121a38d5a52232953d4b103e9471 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 30 Aug 2013 14:11:37 -0700 Subject: Fixing missing workspace screens. (Bug 10512285) - Also skipping apps that are disabled (Regression, Bug 10444606) Change-Id: I175d0188615cbd378166e14ac2f7afb6295fe886 --- src/com/android/launcher3/LauncherModel.java | 73 +++++++++++++++++++--------- 1 file changed, 51 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 8ca580ace..1c98522bc 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1014,19 +1014,21 @@ public class LauncherModel extends BroadcastReceiver { } cr.bulkInsert(uri, values); - // Dump the sBgWorkspaceScreens - Launcher.addDumpLog(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens - pre clear", true); - for (Long l : sBgWorkspaceScreens) { - Launcher.addDumpLog(TAG, "10249126\t- " + l, true); - } + synchronized (sBgLock) { + // Dump the sBgWorkspaceScreens + Launcher.addDumpLog(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens - pre clear", true); + for (Long l : sBgWorkspaceScreens) { + Launcher.addDumpLog(TAG, "10249126\t- " + l, true); + } - sBgWorkspaceScreens.clear(); - sBgWorkspaceScreens.addAll(screensCopy); + sBgWorkspaceScreens.clear(); + sBgWorkspaceScreens.addAll(screensCopy); - // Dump the sBgWorkspaceScreens - Launcher.addDumpLog(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens - post clear", true); - for (Long l : sBgWorkspaceScreens) { - Launcher.addDumpLog(TAG, "10249126\t- " + l, true); + // Dump the sBgWorkspaceScreens + Launcher.addDumpLog(TAG, "10249126 - updateWorkspaceScreenOrder - sBgWorkspaceScreens - post clear", true); + for (Long l : sBgWorkspaceScreens) { + Launcher.addDumpLog(TAG, "10249126\t- " + l, true); + } } } }; @@ -1272,7 +1274,7 @@ public class LauncherModel extends BroadcastReceiver { orderedScreens.put(rank, screenId); } catch (Exception e) { - Log.w(TAG, "Desktop items loading interrupted - invalid screens: ", e); + Launcher.addDumpLog(TAG, "Desktop items loading interrupted - invalid screens: " + e, true); } } } finally { @@ -1337,6 +1339,7 @@ public class LauncherModel extends BroadcastReceiver { isUpgradePath = loadWorkspace(); synchronized (LoaderTask.this) { if (mStopped) { + Launcher.addDumpLog(TAG, "10249126 - loadAndBindWorkspace() stopped", true); return isUpgradePath; } mWorkspaceLoaded = true; @@ -1498,6 +1501,7 @@ public class LauncherModel extends BroadcastReceiver { public void stopLocked() { synchronized (LoaderTask.this) { + Launcher.addDumpLog(TAG, "10249126 - STOPPED", true); mStopped = true; this.notify(); } @@ -1622,6 +1626,18 @@ public class LauncherModel extends BroadcastReceiver { return true; } + /** Clears all the sBg data structures */ + private void clearSBgDataStructures() { + synchronized (sBgLock) { + sBgWorkspaceItems.clear(); + sBgAppWidgets.clear(); + sBgFolders.clear(); + sBgItemsIdMap.clear(); + sBgDbIconCache.clear(); + sBgWorkspaceScreens.clear(); + } + } + /** Returns whether this is an upgradge path */ private boolean loadWorkspace() { final long t = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0; @@ -1644,12 +1660,7 @@ public class LauncherModel extends BroadcastReceiver { boolean loadedOldDb = LauncherAppState.getLauncherProvider().justLoadedOldDb(); synchronized (sBgLock) { - sBgWorkspaceItems.clear(); - sBgAppWidgets.clear(); - sBgFolders.clear(); - sBgItemsIdMap.clear(); - sBgDbIconCache.clear(); - sBgWorkspaceScreens.clear(); + clearSBgDataStructures(); Launcher.addDumpLog(TAG, "10249126 - loadWorkspace()", true); final ArrayList itemsToRemove = new ArrayList(); @@ -1701,6 +1712,7 @@ public class LauncherModel extends BroadcastReceiver { long id; Intent intent; + Launcher.addDumpLog(TAG, "10249126 - Num rows: " + c.getCount(), true); while (!mStopped && c.moveToNext()) { try { int itemType = c.getInt(itemTypeIndex); @@ -1890,7 +1902,7 @@ public class LauncherModel extends BroadcastReceiver { break; } } catch (Exception e) { - Log.w(TAG, "Desktop items loading interrupted:", e); + Launcher.addDumpLog(TAG, "Desktop items loading interrupted: " + e, true); } } } finally { @@ -1899,6 +1911,13 @@ public class LauncherModel extends BroadcastReceiver { } } + // Break early if we've stopped loading + if (mStopped) { + Launcher.addDumpLog(TAG, "10249126 - loadWorkspace() - Stopped", true); + clearSBgDataStructures(); + return false; + } + if (itemsToRemove.size() > 0) { ContentProviderClient client = contentResolver.acquireContentProviderClient( LauncherSettings.Favorites.CONTENT_URI); @@ -2150,9 +2169,11 @@ public class LauncherModel extends BroadcastReceiver { Launcher.addDumpLog(TAG, "10249126 - bindWorkspaceScreens()", true); // Dump the orderedScreens - Launcher.addDumpLog(TAG, "10249126 - orderedScreens", true); - for (Long l : sBgWorkspaceScreens) { - Launcher.addDumpLog(TAG, "10249126\t- " + l, true); + synchronized (sBgLock) { + Launcher.addDumpLog(TAG, "10249126 - orderedScreens", true); + for (Long l : sBgWorkspaceScreens) { + Launcher.addDumpLog(TAG, "10249126\t- " + l, true); + } } final Runnable r = new Runnable() { @@ -2238,6 +2259,7 @@ public class LauncherModel extends BroadcastReceiver { * Binds all loaded data to actual views on the main thread. */ private void bindWorkspace(int synchronizeBindPage, final boolean isUpgradePath) { + Launcher.addDumpLog(TAG, "10249126 - bindWorkspace(" + synchronizeBindPage + ", " + isUpgradePath + ")", true); final long t = SystemClock.uptimeMillis(); Runnable r; @@ -2666,6 +2688,13 @@ public class LauncherModel extends BroadcastReceiver { } try { + // Skip if the application is disabled + PackageInfo pi = pm.getPackageInfo(cn.getPackageName(), 0); + if (!pi.applicationInfo.enabled) { + return false; + } + + // Check the activity return (pm.getActivityInfo(cn, 0) != null); } catch (NameNotFoundException e) { return false; -- cgit v1.2.3