summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2010-03-05 15:05:52 -0500
committerJoe Onorato <joeo@android.com>2010-03-10 13:42:32 -0800
commit64e6be78dc72e1a89fe8fb95c502586f9260df28 (patch)
tree3836e1dfd9891a5fc0b900b99f5158b7fa729c85 /src/com/android/launcher2
parentc36f2455aba21448a130b9a5e2a118a379745c37 (diff)
downloadandroid_packages_apps_Trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.tar.gz
android_packages_apps_Trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.tar.bz2
android_packages_apps_Trebuchet-64e6be78dc72e1a89fe8fb95c502586f9260df28.zip
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/com/android/launcher2')
-rw-r--r--src/com/android/launcher2/AllApps2D.java2
-rw-r--r--src/com/android/launcher2/AllApps3D.java2
-rw-r--r--src/com/android/launcher2/AllAppsView.java2
-rw-r--r--src/com/android/launcher2/Launcher.java12
-rw-r--r--src/com/android/launcher2/LauncherApplication.java4
-rw-r--r--src/com/android/launcher2/LauncherModel.java70
-rw-r--r--src/com/android/launcher2/Workspace.java86
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);
+ }
+ }
}
}
}