diff options
| author | Sihua Ma <sihua@google.com> | 2022-05-23 21:52:02 +0000 |
|---|---|---|
| committer | Sihua Ma <sihua@google.com> | 2022-10-31 20:47:38 +0000 |
| commit | 1037ad0c306dfd37299ac4b4eda11e1fb8e4cce5 (patch) | |
| tree | f6da736d83b443a2d9cddcd805e68571860b8489 /core/java/android/appwidget/AppWidgetManager.java | |
| parent | 1890e8adc1a529251d7e8a08a2cef5ceae360301 (diff) | |
Combining widget broadcasts
Combining broadcasts WIDGET_ENABLED and WIDGET_UPDATE into
WIDGET_ENABLE_AND_UPDATE to reduce response time at boot time
Test: Manually verified that some app widgets would function properly
Fix: 221890505
Change-Id: I6aff0f00464ec8628d2258d0d84dcd3c82258d57
(cherry picked from commit 1ae08fe75ebcfeab57b4fc3044bd69955044899e)
Merged-In: I6aff0f00464ec8628d2258d0d84dcd3c82258d57
Diffstat (limited to 'core/java/android/appwidget/AppWidgetManager.java')
| -rw-r--r-- | core/java/android/appwidget/AppWidgetManager.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java index a432b8dec2cb..fd9496947628 100644 --- a/core/java/android/appwidget/AppWidgetManager.java +++ b/core/java/android/appwidget/AppWidgetManager.java @@ -42,12 +42,15 @@ import android.os.Handler; import android.os.RemoteException; import android.os.UserHandle; import android.util.DisplayMetrics; +import android.util.Log; import android.widget.RemoteViews; import com.android.internal.appwidget.IAppWidgetService; +import com.android.internal.os.BackgroundThread; import java.util.Collections; import java.util.List; +import java.util.Objects; /** * Updates AppWidget state; gets information about installed AppWidget providers and other @@ -63,6 +66,7 @@ import java.util.List; @RequiresFeature(PackageManager.FEATURE_APP_WIDGETS) public class AppWidgetManager { + /** * Activity action to launch from your {@link AppWidgetHost} activity when you want to * pick an AppWidget to display. The AppWidget picker activity will be launched. @@ -332,6 +336,17 @@ public class AppWidgetManager { public static final String ACTION_APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE"; /** + * A combination broadcast of APPWIDGET_ENABLED and APPWIDGET_UPDATE. + * Sent during boot time and when the host is binding the widget for the very first time + * + * @hide + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @BroadcastBehavior(explicitOnly = true) + public static final String ACTION_APPWIDGET_ENABLE_AND_UPDATE = "android.appwidget.action" + + ".APPWIDGET_ENABLE_AND_UPDATE"; + + /** * Sent when the custom extras for an AppWidget change. * * <p class="note">This is a protected intent that can only be sent @@ -456,6 +471,8 @@ public class AppWidgetManager { public static final String ACTION_APPWIDGET_HOST_RESTORED = "android.appwidget.action.APPWIDGET_HOST_RESTORED"; + private static final String TAG = "AppWidgetManager"; + /** * An intent extra that contains multiple appWidgetIds. These are id values as * they were provided to the application during a recent restore from backup. It is @@ -511,6 +528,26 @@ public class AppWidgetManager { mPackageName = context.getOpPackageName(); mService = service; mDisplayMetrics = context.getResources().getDisplayMetrics(); + if (mService == null) { + return; + } + BackgroundThread.getExecutor().execute(() -> { + try { + mService.notifyProviderInheritance(getInstalledProvidersForPackage(mPackageName, + null) + .stream().filter(Objects::nonNull) + .map(info -> info.provider).filter(p -> { + try { + Class clazz = Class.forName(p.getClassName()); + return AppWidgetProvider.class.isAssignableFrom(clazz); + } catch (Exception e) { + return false; + } + }).toArray(ComponentName[]::new)); + } catch (Exception e) { + Log.e(TAG, "Nofity service of inheritance info", e); + } + }); } /** |
