From d070e89396e250782c015bc993bcae6e7e03af7a Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Fri, 7 Jan 2011 20:50:37 -0800 Subject: Make AppWidgetService handle components enabling and disabling. Change-Id: Ie6b75cb90be38bbce694ccf2d5a342d7f0172fa4 --- .../java/com/android/server/AppWidgetService.java | 14 ++++++++++++-- tests/StatusBar/AndroidManifest.xml | 1 + .../src/com/android/statusbartest/PowerTest.java | 20 ++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java index ae408fccd8dc..22dd804f604b 100644 --- a/services/java/com/android/server/AppWidgetService.java +++ b/services/java/com/android/server/AppWidgetService.java @@ -144,6 +144,7 @@ class AppWidgetService extends IAppWidgetService.Stub // update the provider list. IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); + filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addDataScheme("package"); mContext.registerReceiver(mBroadcastReceiver, filter); @@ -643,6 +644,12 @@ class AppWidgetService extends IAppWidgetService.Stub } boolean addProviderLocked(ResolveInfo ri) { + if ((ri.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { + return false; + } + if (!ri.activityInfo.isEnabled()) { + return false; + } Provider p = parseProviderInfoXml(new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name), ri); if (p != null) { @@ -1160,6 +1167,7 @@ class AppWidgetService extends IAppWidgetService.Stub } } else { boolean added = false; + boolean changed = false; String pkgList[] = null; if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(action)) { pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); @@ -1178,14 +1186,16 @@ class AppWidgetService extends IAppWidgetService.Stub } pkgList = new String[] { pkgName }; added = Intent.ACTION_PACKAGE_ADDED.equals(action); + changed = Intent.ACTION_PACKAGE_CHANGED.equals(action); } if (pkgList == null || pkgList.length == 0) { return; } - if (added) { + if (added || changed) { synchronized (mAppWidgetIds) { Bundle extras = intent.getExtras(); - if (extras != null && extras.getBoolean(Intent.EXTRA_REPLACING, false)) { + if (changed || (extras != null && + extras.getBoolean(Intent.EXTRA_REPLACING, false))) { for (String pkgName : pkgList) { // The package was just upgraded updateProvidersForPackageLocked(pkgName); diff --git a/tests/StatusBar/AndroidManifest.xml b/tests/StatusBar/AndroidManifest.xml index ddb756b42539..81442bfc60a4 100644 --- a/tests/StatusBar/AndroidManifest.xml +++ b/tests/StatusBar/AndroidManifest.xml @@ -5,6 +5,7 @@ + diff --git a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java index 92d5bee00b06..31a1cf5ada32 100644 --- a/tests/StatusBar/src/com/android/statusbartest/PowerTest.java +++ b/tests/StatusBar/src/com/android/statusbartest/PowerTest.java @@ -26,6 +26,8 @@ import android.os.IBinder; import android.os.IPowerManager; import android.widget.ListView; import android.content.Intent; +import android.content.ComponentName; +import android.content.pm.PackageManager; import android.app.Notification; import android.app.NotificationManager; import android.app.StatusBarManager; @@ -66,6 +68,24 @@ public class PowerTest extends TestActivity return mTests; } private Test[] mTests = new Test[] { + new Test("Enable settings widget") { + public void run() { + PackageManager pm = getPackageManager(); + pm.setComponentEnabledSetting(new ComponentName("com.android.settings", + "com.android.settings.widget.SettingsAppWidgetProvider"), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); + + } + }, + new Test("Disable settings widget") { + public void run() { + PackageManager pm = getPackageManager(); + pm.setComponentEnabledSetting(new ComponentName("com.android.settings", + "com.android.settings.widget.SettingsAppWidgetProvider"), + PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); + + } + }, new Test("Enable proximity") { public void run() { mProx.acquire(); -- cgit v1.2.3-59-g8ed1b