diff options
| -rw-r--r-- | api/current.txt | 4 | ||||
| -rw-r--r-- | core/java/android/appwidget/AppWidgetProviderInfo.java | 61 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 9 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 | ||||
| -rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 2 |
5 files changed, 55 insertions, 22 deletions
diff --git a/api/current.txt b/api/current.txt index f16ff1406e82..a86d0d2e1ec5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -1505,6 +1505,7 @@ package android { field public static final deprecated int weekSeparatorLineColor = 16843590; // 0x1010346 field public static final int weightSum = 16843048; // 0x1010128 field public static final int widgetCategory = 16843716; // 0x10103c4 + field public static final int widgetFeatures = 16844153; // 0x1010579 field public static final int widgetLayout = 16843243; // 0x10101eb field public static final int width = 16843097; // 0x1010159 field public static final int windowActionBar = 16843469; // 0x10102cd @@ -7348,6 +7349,8 @@ package android.appwidget { field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1 field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2 field public static final int WIDGET_CATEGORY_SEARCHBOX = 4; // 0x4 + field public static final int WIDGET_FEATURE_HIDE_FROM_PICKER = 2; // 0x2 + field public static final int WIDGET_FEATURE_RECONFIGURABLE = 1; // 0x1 field public int autoAdvanceViewId; field public android.content.ComponentName configure; field public int icon; @@ -7363,6 +7366,7 @@ package android.appwidget { field public int resizeMode; field public int updatePeriodMillis; field public int widgetCategory; + field public int widgetFeatures; } } diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index fd1b0e0274b1..75ce4fbb60c7 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -17,15 +17,17 @@ package android.appwidget; import android.annotation.NonNull; +import android.app.PendingIntent; +import android.content.ComponentName; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.ResourceId; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.content.ComponentName; import android.os.UserHandle; import android.util.DisplayMetrics; import android.util.TypedValue; @@ -69,6 +71,23 @@ public class AppWidgetProviderInfo implements Parcelable { public static final int WIDGET_CATEGORY_SEARCHBOX = 4; /** + * The widget can be reconfigured anytime after it is bound by starting the + * {@link #configure} activity. + * + * @see #widgetFeatures + */ + public static final int WIDGET_FEATURE_RECONFIGURABLE = 1; + + /** + * The widget is added directly by the app, and the host may hide this widget when providing + * the user with the list of available widgets to choose from. + * + * @see AppWidgetManager#requestPinAppWidget(ComponentName, Bundle, PendingIntent) + * @see #widgetFeatures + */ + public static final int WIDGET_FEATURE_HIDE_FROM_PICKER = 2; + + /** * Identity of this AppWidget component. This component should be a {@link * android.content.BroadcastReceiver}, and it will be sent the AppWidget intents * {@link android.appwidget as described in the AppWidget package documentation}. @@ -209,6 +228,15 @@ public class AppWidgetProviderInfo implements Parcelable { */ public int widgetCategory; + /** + * Flags indicating various features supported by the widget. These are hints to the widget + * host, and do not actually change the behavior of the widget. + * + * @see #WIDGET_FEATURE_RECONFIGURABLE + * @see #WIDGET_FEATURE_HIDE_FROM_PICKER + */ + public int widgetFeatures; + /** @hide */ public ActivityInfo providerInfo; @@ -221,9 +249,7 @@ public class AppWidgetProviderInfo implements Parcelable { */ @SuppressWarnings("deprecation") public AppWidgetProviderInfo(Parcel in) { - if (0 != in.readInt()) { - this.provider = new ComponentName(in); - } + this.provider = in.readTypedObject(ComponentName.CREATOR); this.minWidth = in.readInt(); this.minHeight = in.readInt(); this.minResizeWidth = in.readInt(); @@ -231,16 +257,15 @@ public class AppWidgetProviderInfo implements Parcelable { this.updatePeriodMillis = in.readInt(); this.initialLayout = in.readInt(); this.initialKeyguardLayout = in.readInt(); - if (0 != in.readInt()) { - this.configure = new ComponentName(in); - } + this.configure = in.readTypedObject(ComponentName.CREATOR); this.label = in.readString(); this.icon = in.readInt(); this.previewImage = in.readInt(); this.autoAdvanceViewId = in.readInt(); this.resizeMode = in.readInt(); this.widgetCategory = in.readInt(); - this.providerInfo = in.readParcelable(null); + this.providerInfo = in.readTypedObject(ActivityInfo.CREATOR); + this.widgetFeatures = in.readInt(); } /** @@ -308,13 +333,8 @@ public class AppWidgetProviderInfo implements Parcelable { @Override @SuppressWarnings("deprecation") - public void writeToParcel(android.os.Parcel out, int flags) { - if (this.provider != null) { - out.writeInt(1); - this.provider.writeToParcel(out, flags); - } else { - out.writeInt(0); - } + public void writeToParcel(Parcel out, int flags) { + out.writeTypedObject(this.provider, flags); out.writeInt(this.minWidth); out.writeInt(this.minHeight); out.writeInt(this.minResizeWidth); @@ -322,19 +342,15 @@ public class AppWidgetProviderInfo implements Parcelable { out.writeInt(this.updatePeriodMillis); out.writeInt(this.initialLayout); out.writeInt(this.initialKeyguardLayout); - if (this.configure != null) { - out.writeInt(1); - this.configure.writeToParcel(out, flags); - } else { - out.writeInt(0); - } + out.writeTypedObject(this.configure, flags); out.writeString(this.label); out.writeInt(this.icon); out.writeInt(this.previewImage); out.writeInt(this.autoAdvanceViewId); out.writeInt(this.resizeMode); out.writeInt(this.widgetCategory); - out.writeParcelable(this.providerInfo, flags); + out.writeTypedObject(this.providerInfo, flags); + out.writeInt(this.widgetFeatures); } @Override @@ -357,6 +373,7 @@ public class AppWidgetProviderInfo implements Parcelable { that.resizeMode = this.resizeMode; that.widgetCategory = this.widgetCategory; that.providerInfo = this.providerInfo; + that.widgetFeatures = this.widgetFeatures; return that; } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index faf3c2f1ec22..51ffa6007ae0 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -7571,6 +7571,15 @@ <flag name="keyguard" value="0x2" /> <flag name="searchbox" value="0x4" /> </attr> + <!-- Flags indicating various features supported by the widget. These are hints to the + widget host, and do not actually change the behavior of the widget. --> + <attr name="widgetFeatures" format="integer"> + <!-- The widget can be reconfigured anytime after it is bound --> + <flag name="reconfigurable" value="0x1" /> + <!-- The widget is added directly by the app, and does not need to appear in + the global list of available widgets --> + <flag name="hide_from_picker" value="0x2" /> + </attr> </declare-styleable> <!-- =============================== --> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index d79df353f7c7..373a65664695 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2858,6 +2858,7 @@ <public name="versionMajor" /> <!-- @hide @SystemApi --> <public name="isVrOnly"/> + <public name="widgetFeatures" /> </public-group> <public-group type="style" first-id="0x010302e0"> diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 6c154389526f..b446209790ad 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -2506,6 +2506,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku info.widgetCategory = sa.getInt( com.android.internal.R.styleable.AppWidgetProviderInfo_widgetCategory, AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN); + info.widgetFeatures = sa.getInt( + com.android.internal.R.styleable.AppWidgetProviderInfo_widgetFeatures, 0); sa.recycle(); } catch (IOException | PackageManager.NameNotFoundException | XmlPullParserException e) { |