diff options
author | Joe Onorato <joeo@android.com> | 2010-03-05 15:05:52 -0500 |
---|---|---|
committer | Joe Onorato <joeo@android.com> | 2010-03-10 13:42:32 -0800 |
commit | 64e6be78dc72e1a89fe8fb95c502586f9260df28 (patch) | |
tree | 3836e1dfd9891a5fc0b900b99f5158b7fa729c85 /src | |
parent | c36f2455aba21448a130b9a5e2a118a379745c37 (diff) | |
download | packages_apps_trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.zip packages_apps_trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.tar.gz packages_apps_trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.tar.bz2 |
Refactor the app updates so that it doesn't rely on the package name.
This will be needed for the upcoming change to update the icons with the
grayed out when the SD card goes away.
Diffstat (limited to 'src')
-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 1262880..0bb4ee9 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 f571eff..c329b6c 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 04f4040..a936f8b 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 903db1d..df2dd66 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 183dbf5..be448a8 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 8790fd7..228b7a5 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 d65a98c..cb4ba11 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); + } + } } } } |