diff options
-rw-r--r-- | src/com/android/launcher2/AllApps2D.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher2/AllApps3D.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher2/AllAppsView.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherApplication.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 70 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 86 |
7 files changed, 113 insertions, 65 deletions
diff --git a/src/com/android/launcher2/AllApps2D.java b/src/com/android/launcher2/AllApps2D.java index 1262880fc..0bb4ee95f 100644 --- a/src/com/android/launcher2/AllApps2D.java +++ b/src/com/android/launcher2/AllApps2D.java @@ -279,7 +279,7 @@ public class AllApps2D mAppsAdapter.notifyDataSetChanged(); } - public void updateApps(String packageName, ArrayList<ApplicationInfo> list) { + public void updateApps(ArrayList<ApplicationInfo> list) { // Just remove and add, because they may need to be re-sorted. removeApps(list); addApps(list); diff --git a/src/com/android/launcher2/AllApps3D.java b/src/com/android/launcher2/AllApps3D.java index f571effea..c329b6c39 100644 --- a/src/com/android/launcher2/AllApps3D.java +++ b/src/com/android/launcher2/AllApps3D.java @@ -772,7 +772,7 @@ public class AllApps3D extends RSSurfaceView } } - public void updateApps(String packageName, ArrayList<ApplicationInfo> list) { + public void updateApps(ArrayList<ApplicationInfo> list) { // Just remove and add, because they may need to be re-sorted. removeApps(list); addApps(list); diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java index 04f40403a..a936f8b57 100644 --- a/src/com/android/launcher2/AllAppsView.java +++ b/src/com/android/launcher2/AllAppsView.java @@ -39,7 +39,7 @@ public interface AllAppsView { public void removeApps(ArrayList<ApplicationInfo> list); - public void updateApps(String packageName, ArrayList<ApplicationInfo> list); + public void updateApps(ArrayList<ApplicationInfo> list); public void dumpState(); } diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 903db1d00..df2dd6655 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -2055,7 +2055,7 @@ public final class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ - public void bindPackageAdded(ArrayList<ApplicationInfo> apps) { + public void bindAppsAdded(ArrayList<ApplicationInfo> apps) { removeDialog(DIALOG_CREATE_SHORTCUT); mAllAppsGrid.addApps(apps); } @@ -2065,10 +2065,10 @@ public final class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ - public void bindPackageUpdated(String packageName, ArrayList<ApplicationInfo> apps) { + public void bindAppsUpdated(ArrayList<ApplicationInfo> apps) { removeDialog(DIALOG_CREATE_SHORTCUT); - mWorkspace.updateShortcutsForPackage(packageName); - mAllAppsGrid.updateApps(packageName, apps); + mWorkspace.updateShortcuts(apps); + mAllAppsGrid.updateApps(apps); } /** @@ -2076,9 +2076,9 @@ public final class Launcher extends Activity * * Implementation of the method from LauncherModel.Callbacks. */ - public void bindPackageRemoved(String packageName, ArrayList<ApplicationInfo> apps) { + public void bindAppsRemoved(ArrayList<ApplicationInfo> apps) { removeDialog(DIALOG_CREATE_SHORTCUT); - mWorkspace.removeItemsForPackage(packageName); + mWorkspace.removeItems(apps); mAllAppsGrid.removeApps(apps); } diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java index 183dbf571..be448a891 100644 --- a/src/com/android/launcher2/LauncherApplication.java +++ b/src/com/android/launcher2/LauncherApplication.java @@ -43,6 +43,10 @@ public class LauncherApplication extends Application { filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); registerReceiver(mModel, filter); + filter = new IntentFilter(); + filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); + filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); + registerReceiver(mModel, filter); // Register for changes to the favorites ContentResolver resolver = getContentResolver(); diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index 8790fd7bd..228b7a59f 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -82,9 +82,9 @@ public class LauncherModel extends BroadcastReceiver { public void finishBindingItems(); public void bindAppWidget(LauncherAppWidgetInfo info); public void bindAllApplications(ArrayList<ApplicationInfo> apps); - public void bindPackageAdded(ArrayList<ApplicationInfo> apps); - public void bindPackageUpdated(String packageName, ArrayList<ApplicationInfo> apps); - public void bindPackageRemoved(String packageName, ArrayList<ApplicationInfo> apps); + public void bindAppsAdded(ArrayList<ApplicationInfo> apps); + public void bindAppsUpdated(ArrayList<ApplicationInfo> apps); + public void bindAppsRemoved(ArrayList<ApplicationInfo> apps); } LauncherModel(LauncherApplication app, IconCache iconCache) { @@ -291,11 +291,11 @@ public class LauncherModel extends BroadcastReceiver { * ACTION_PACKAGE_CHANGED. */ public void onReceive(Context context, Intent intent) { + Log.d(TAG, "onReceive intent=" + intent); + // Use the app as the context. context = mApp; - final String packageName = intent.getData().getSchemeSpecificPart(); - ArrayList<ApplicationInfo> added = null; ArrayList<ApplicationInfo> removed = null; ArrayList<ApplicationInfo> modified = null; @@ -308,26 +308,48 @@ public class LauncherModel extends BroadcastReceiver { } final String action = intent.getAction(); - final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); - if (packageName == null || packageName.length() == 0) { - // they sent us a bad intent - return; - } + if (Intent.ACTION_PACKAGE_CHANGED.equals(action) + || Intent.ACTION_PACKAGE_REMOVED.equals(action) + || Intent.ACTION_PACKAGE_ADDED.equals(action)) { + final String packageName = intent.getData().getSchemeSpecificPart(); + final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false); - if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { - mAllAppsList.updatePackage(context, packageName); - } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { - if (!replacing) { - mAllAppsList.removePackage(packageName); + if (packageName == null || packageName.length() == 0) { + // they sent us a bad intent + return; } - // else, we are replacing the package, so a PACKAGE_ADDED will be sent - // later, we will update the package at this time - } else { - if (!replacing) { - mAllAppsList.addPackage(context, packageName); - } else { + + if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { mAllAppsList.updatePackage(context, packageName); + } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) { + if (!replacing) { + mAllAppsList.removePackage(packageName); + } + // else, we are replacing the package, so a PACKAGE_ADDED will be sent + // later, we will update the package at this time + } else if (Intent.ACTION_PACKAGE_ADDED.equals(action)) { + if (!replacing) { + mAllAppsList.addPackage(context, packageName); + } else { + mAllAppsList.updatePackage(context, packageName); + } + } + } else { + if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { + String packages[] = intent.getStringArrayExtra( + Intent.EXTRA_CHANGED_PACKAGE_LIST); + if (packages == null || packages.length == 0) { + return; + } + Log.d(TAG, "they're back! " + packages); + } else if (Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action)) { + String packages[] = intent.getStringArrayExtra( + Intent.EXTRA_CHANGED_PACKAGE_LIST); + if (packages == null || packages.length == 0) { + return; + } + Log.d(TAG, "they're gone! " + packages); } } @@ -357,7 +379,7 @@ public class LauncherModel extends BroadcastReceiver { final ArrayList<ApplicationInfo> addedFinal = added; mHandler.post(new Runnable() { public void run() { - callbacks.bindPackageAdded(addedFinal); + callbacks.bindAppsAdded(addedFinal); } }); } @@ -365,7 +387,7 @@ public class LauncherModel extends BroadcastReceiver { final ArrayList<ApplicationInfo> modifiedFinal = modified; mHandler.post(new Runnable() { public void run() { - callbacks.bindPackageUpdated(packageName, modifiedFinal); + callbacks.bindAppsUpdated(modifiedFinal); } }); } @@ -373,7 +395,7 @@ public class LauncherModel extends BroadcastReceiver { final ArrayList<ApplicationInfo> removedFinal = removed; mHandler.post(new Runnable() { public void run() { - callbacks.bindPackageRemoved(packageName, removedFinal); + callbacks.bindAppsRemoved(removedFinal); } }); } diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index d65a98cd6..cb4ba1145 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -43,6 +43,7 @@ import android.widget.Scroller; import android.widget.TextView; import java.util.ArrayList; +import java.util.HashSet; import com.android.launcher.R; @@ -1223,11 +1224,17 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag mAllowLongPress = allowLongPress; } - void removeItemsForPackage(final String packageName) { + void removeItems(final ArrayList<ApplicationInfo> apps) { final int count = getChildCount(); final PackageManager manager = getContext().getPackageManager(); final AppWidgetManager widgets = AppWidgetManager.getInstance(getContext()); + final HashSet<String> packageNames = new HashSet<String>(); + final int appCount = apps.size(); + for (int i = 0; i < appCount; i++) { + packageNames.add(apps.get(i).componentName.getPackageName()); + } + for (int i = 0; i < count; i++) { final CellLayout layout = (CellLayout) getChildAt(i); @@ -1244,17 +1251,17 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag if (tag instanceof ShortcutInfo) { final ShortcutInfo info = (ShortcutInfo) tag; - // We need to check for ACTION_MAIN otherwise getComponent() might - // return null for some shortcuts (for instance, for shortcuts to - // web pages.) final Intent intent = info.intent; final ComponentName name = intent.getComponent(); - if (Intent.ACTION_MAIN.equals(intent.getAction()) && - name != null && packageName.equals(name.getPackageName())) { - // TODO: This should probably be done on a worker thread - LauncherModel.deleteItemFromDatabase(mLauncher, info); - childrenToRemove.add(view); + if (Intent.ACTION_MAIN.equals(intent.getAction()) && name != null) { + for (String packageName: packageNames) { + if (packageName.equals(name.getPackageName())) { + // TODO: This should probably be done on a worker thread + LauncherModel.deleteItemFromDatabase(mLauncher, info); + childrenToRemove.add(view); + } + } } } else if (tag instanceof UserFolderInfo) { final UserFolderInfo info = (UserFolderInfo) tag; @@ -1268,12 +1275,16 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag final Intent intent = appInfo.intent; final ComponentName name = intent.getComponent(); - if (Intent.ACTION_MAIN.equals(intent.getAction()) && - name != null && packageName.equals(name.getPackageName())) { - toRemove.add(appInfo); - // TODO: This should probably be done on a worker thread - LauncherModel.deleteItemFromDatabase(mLauncher, appInfo); - removedFromFolder = true; + if (Intent.ACTION_MAIN.equals(intent.getAction()) && name != null) { + for (String packageName: packageNames) { + if (packageName.equals(name.getPackageName())) { + toRemove.add(appInfo); + // TODO: This should probably be done on a worker thread + LauncherModel.deleteItemFromDatabase( + mLauncher, appInfo); + removedFromFolder = true; + } + } } } @@ -1288,21 +1299,27 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag final ProviderInfo providerInfo = manager.resolveContentProvider( uri.getAuthority(), 0); - if (providerInfo == null || - packageName.equals(providerInfo.packageName)) { - // TODO: This should probably be done on a worker thread - LauncherModel.deleteItemFromDatabase(mLauncher, info); - childrenToRemove.add(view); + if (providerInfo == null) { + for (String packageName: packageNames) { + if (packageName.equals(providerInfo.packageName)) { + // TODO: This should probably be done on a worker thread + LauncherModel.deleteItemFromDatabase(mLauncher, info); + childrenToRemove.add(view); + } + } } } else if (tag instanceof LauncherAppWidgetInfo) { final LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) tag; final AppWidgetProviderInfo provider = widgets.getAppWidgetInfo(info.appWidgetId); - if (provider == null || - packageName.equals(provider.provider.getPackageName())) { - // TODO: This should probably be done on a worker thread - LauncherModel.deleteItemFromDatabase(mLauncher, info); - childrenToRemove.add(view); + if (provider == null) { + for (String packageName: packageNames) { + if (packageName.equals(provider.provider.getPackageName())) { + // TODO: This should probably be done on a worker thread + LauncherModel.deleteItemFromDatabase(mLauncher, info); + childrenToRemove.add(view); + } + } } } } @@ -1325,7 +1342,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag } } - void updateShortcutsForPackage(String packageName) { + void updateShortcuts(ArrayList<ApplicationInfo> apps) { final PackageManager pm = mLauncher.getPackageManager(); final int count = getChildCount(); @@ -1343,12 +1360,17 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag final Intent intent = info.intent; final ComponentName name = intent.getComponent(); if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && - Intent.ACTION_MAIN.equals(intent.getAction()) && name != null && - packageName.equals(name.getPackageName())) { - - info.setIcon(mIconCache.getIcon(info.intent)); - ((TextView) view).setCompoundDrawablesWithIntrinsicBounds(null, - new FastBitmapDrawable(info.getIcon(mIconCache)), null, null); + Intent.ACTION_MAIN.equals(intent.getAction()) && name != null) { + final int appCount = apps.size(); + for (int k=0; k<appCount; k++) { + ApplicationInfo app = apps.get(k); + if (app.componentName.equals(name)) { + info.setIcon(mIconCache.getIcon(info.intent)); + ((TextView)view).setCompoundDrawablesWithIntrinsicBounds(null, + new FastBitmapDrawable(info.getIcon(mIconCache)), + null, null); + } + } } } } |