summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt4
-rw-r--r--core/java/android/appwidget/AppWidgetProviderInfo.java61
-rw-r--r--core/res/res/values/attrs.xml9
-rw-r--r--core/res/res/values/public.xml1
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java2
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) {