19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectpackage android.appwidget;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyalimport android.annotation.IntDef;
208e1d299da27da534b508b1da51ebe351a689cefaSvetoslavimport android.annotation.NonNull;
21f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyalimport android.app.PendingIntent;
22f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyalimport android.content.ComponentName;
23976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.content.Context;
24976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.content.pm.ActivityInfo;
25976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.content.pm.PackageManager;
269553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinskiimport android.content.res.ResourceId;
27976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.content.res.Resources;
28976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.graphics.drawable.Drawable;
29f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyalimport android.os.Bundle;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
32976e8bd2017d0263216c62111454438cc0f130e3Svetoslavimport android.os.UserHandle;
33970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyalimport android.util.DisplayMetrics;
34970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyalimport android.util.TypedValue;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyalimport java.lang.annotation.Retention;
37363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyalimport java.lang.annotation.RetentionPolicy;
38363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
40c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * Describes the meta data for an installed AppWidget provider.  The fields in this class
41c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project * correspond to the fields in the <code>&lt;appwidget-provider&gt;</code> xml tag.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
43c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Projectpublic class AppWidgetProviderInfo implements Parcelable {
44d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen
45d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    /**
46d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * Widget is not resizable.
47d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     */
48d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    public static final int RESIZE_NONE             = 0;
49d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    /**
50d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * Widget is resizable in the horizontal axis only.
51d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     */
52d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    public static final int RESIZE_HORIZONTAL       = 1;
53d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    /**
54d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * Widget is resizable in the vertical axis only.
55d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     */
56d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    public static final int RESIZE_VERTICAL         = 2;
57d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    /**
58d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * Widget is resizable in both the horizontal and vertical axes.
59d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     */
60d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    public static final int RESIZE_BOTH = RESIZE_HORIZONTAL | RESIZE_VERTICAL;
61d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen
62363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    /** @hide */
63363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
64363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            RESIZE_HORIZONTAL,
65363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            RESIZE_VERTICAL,
66363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    })
67363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @Retention(RetentionPolicy.SOURCE)
68363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    public @interface ResizeModeFlags {}
69363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
710aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * Indicates that the widget can be displayed on the home screen. This is the default value.
720aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     */
730aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    public static final int WIDGET_CATEGORY_HOME_SCREEN = 1;
740aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen
750aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    /**
760aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * Indicates that the widget can be displayed on the keyguard.
770aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     */
780aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    public static final int WIDGET_CATEGORY_KEYGUARD = 2;
790aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen
800aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    /**
81ee0b12161ab8563378e33e9d694d15ed1a757a26Winson Chung     * Indicates that the widget can be displayed within a space reserved for the search box.
82f7bca430d9356c26d6df222d2c90bc7668262f6bWinson Chung     */
83ee0b12161ab8563378e33e9d694d15ed1a757a26Winson Chung    public static final int WIDGET_CATEGORY_SEARCHBOX = 4;
84f7bca430d9356c26d6df222d2c90bc7668262f6bWinson Chung
85363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    /** @hide */
86363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
87363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            WIDGET_CATEGORY_HOME_SCREEN,
88363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            WIDGET_CATEGORY_KEYGUARD,
89363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            WIDGET_CATEGORY_SEARCHBOX,
90363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    })
91363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @Retention(RetentionPolicy.SOURCE)
92363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    public @interface CategoryFlags {}
93363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal
94f7bca430d9356c26d6df222d2c90bc7668262f6bWinson Chung    /**
95f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * The widget can be reconfigured anytime after it is bound by starting the
96f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * {@link #configure} activity.
97f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     *
98f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * @see #widgetFeatures
99f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     */
100f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    public static final int WIDGET_FEATURE_RECONFIGURABLE = 1;
101f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal
102f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    /**
103f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * The widget is added directly by the app, and the host may hide this widget when providing
104f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * the user with the list of available widgets to choose from.
105f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     *
106f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * @see AppWidgetManager#requestPinAppWidget(ComponentName, Bundle, PendingIntent)
107f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * @see #widgetFeatures
108f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     */
109f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    public static final int WIDGET_FEATURE_HIDE_FROM_PICKER = 2;
110f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal
111363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    /** @hide */
112363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @IntDef(flag = true, prefix = { "FLAG_" }, value = {
113363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            WIDGET_FEATURE_RECONFIGURABLE,
114363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal            WIDGET_FEATURE_HIDE_FROM_PICKER,
115363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    })
116363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @Retention(RetentionPolicy.SOURCE)
117363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    public @interface FeatureFlags {}
118363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal
119f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    /**
120c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * Identity of this AppWidget component.  This component should be a {@link
121c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * android.content.BroadcastReceiver}, and it will be sent the AppWidget intents
122c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * {@link android.appwidget as described in the AppWidget package documentation}.
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:name</code> attribute in
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName provider;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1301bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * The default height of the widget when added to a host, in dp. The widget will get
1311bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * at least this width, and will often be given more, depending on the host.
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:minWidth</code> attribute in
134c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget meta-data file.
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int minWidth;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1391bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * The default height of the widget when added to a host, in dp. The widget will get
1401bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * at least this height, and will often be given more, depending on the host.
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:minHeight</code> attribute in
143c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget meta-data file.
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int minHeight;
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1481bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * Minimum width (in dp) which the widget can be resized to. This field has no effect if it
1491bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * is greater than minWidth or if horizontal resizing isn't enabled (see {@link #resizeMode}).
1501bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     *
1511bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * <p>This field corresponds to the <code>android:minResizeWidth</code> attribute in
1521bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * the AppWidget meta-data file.
1531bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     */
1541bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen    public int minResizeWidth;
1551bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen
1561bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen    /**
1571bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * Minimum height (in dp) which the widget can be resized to. This field has no effect if it
1581bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * is greater than minHeight or if vertical resizing isn't enabled (see {@link #resizeMode}).
1591bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     *
1601bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * <p>This field corresponds to the <code>android:minResizeHeight</code> attribute in
1611bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     * the AppWidget meta-data file.
1621bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen     */
1631bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen    public int minResizeHeight;
1641bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen
1651bfaf561b7c09388311f1834f17e057739cf587aAdam Cohen    /**
166c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * How often, in milliseconds, that this AppWidget wants to be updated.
167c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * The AppWidget manager may place a limit on how often a AppWidget is updated.
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:updatePeriodMillis</code> attribute in
170c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget meta-data file.
171851da848e97d9a1ec23a89ff0e200c301f32d690Joe Onorato     *
172851da848e97d9a1ec23a89ff0e200c301f32d690Joe Onorato     * <p class="note"><b>Note:</b> Updates requested with <code>updatePeriodMillis</code>
173851da848e97d9a1ec23a89ff0e200c301f32d690Joe Onorato     * will not be delivered more than once every 30 minutes.</p>
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int updatePeriodMillis;
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
178c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * The resource id of the initial layout for this AppWidget.  This should be
179c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * displayed until the RemoteViews for the AppWidget is available.
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:initialLayout</code> attribute in
182c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget meta-data file.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int initialLayout;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1870aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * The resource id of the initial layout for this AppWidget when it is displayed on keyguard.
1880aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * This parameter only needs to be provided if the widget can be displayed on the keyguard,
1890aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * see {@link #widgetCategory}.
1900aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     *
1910aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * <p>This field corresponds to the <code>android:initialKeyguardLayout</code> attribute in
1920aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * the AppWidget meta-data file.
1930aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     */
1940aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    public int initialKeyguardLayout;
1950aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen
1960aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    /**
197c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * The activity to launch that will configure the AppWidget.
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This class name of field corresponds to the <code>android:configure</code> attribute in
200c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget meta-data file.  The package name always corresponds to the package containing
201c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * the AppWidget provider.
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName configure;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
206976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * The label to display to the user in the AppWidget picker.
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
208976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @deprecated Use {@link #loadLabel(android.content.pm.PackageManager)}.
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
210976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    @Deprecated
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String label;
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
214976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * The icon to display for this AppWidget in the AppWidget picker. If not supplied in the
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * xml, the application icon will be used.
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>This field corresponds to the <code>android:icon</code> attribute in
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int icon;
221a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen
222d2671e1fcf1d7f1b8e25a2615d514cf3c26b6a9cRomain Guy    /**
223a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen     * The view id of the AppWidget subview which should be auto-advanced by the widget's host.
2249611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     *
2259611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     * <p>This field corresponds to the <code>android:autoAdvanceViewId</code> attribute in
2269611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     * the AppWidget meta-data file.
227a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen     */
228a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen    public int autoAdvanceViewId;
229a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen
230d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy    /**
231d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     * A preview of what the AppWidget will look like after it's configured.
232d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     * If not supplied, the AppWidget's icon will be used.
233d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     *
234d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     * <p>This field corresponds to the <code>android:previewImage</code> attribute in
235d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     * the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
236d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy     */
2378a985d24ce9a38f40ed88fecbdcd0e75e3a68f44John Spurlock    public int previewImage;
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen    /**
240d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * The rules by which a widget can be resized. See {@link #RESIZE_NONE},
241d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * {@link #RESIZE_NONE}, {@link #RESIZE_HORIZONTAL},
242d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     * {@link #RESIZE_VERTICAL}, {@link #RESIZE_BOTH}.
2439611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     *
2449611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     * <p>This field corresponds to the <code>android:resizeMode</code> attribute in
2459611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen     * the AppWidget meta-data file.
246d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen     */
247363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @ResizeModeFlags
2489611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen    public int resizeMode;
249d2e20de64b6de8b6391c63e2f5b02ce7698bf4bfAdam Cohen
2500aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    /**
2510aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * Determines whether this widget can be displayed on the home screen, the keyguard, or both.
2520aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * A widget which is displayed on both needs to ensure that it follows the design guidelines
2530aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * for both widget classes. This can be achieved by querying the AppWidget options in its
2540aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * widget provider's update method.
2550aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     *
2560aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * <p>This field corresponds to the <code>widgetCategory</code> attribute in
2570aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     * the AppWidget meta-data file.
2580aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen     */
259363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @CategoryFlags
2600aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen    public int widgetCategory;
2610aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen
262f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    /**
263f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * Flags indicating various features supported by the widget. These are hints to the widget
264f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * host, and do not actually change the behavior of the widget.
265f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     *
266f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * @see #WIDGET_FEATURE_RECONFIGURABLE
267f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     * @see #WIDGET_FEATURE_HIDE_FROM_PICKER
268f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal     */
269363fa2d5fbcc143ddd607be7485a5712a12675e7Sunny Goyal    @FeatureFlags
270f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    public int widgetFeatures;
271f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal
272976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    /** @hide */
273976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    public ActivityInfo providerInfo;
274976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
275c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public AppWidgetProviderInfo() {
276976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
280c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * Unflatten the AppWidgetProviderInfo from a parcel.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
282976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    @SuppressWarnings("deprecation")
283c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public AppWidgetProviderInfo(Parcel in) {
284f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        this.provider = in.readTypedObject(ComponentName.CREATOR);
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.minWidth = in.readInt();
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.minHeight = in.readInt();
287324afba161ae5b802e38f89c9015d8306ea3ddd1Adam Cohen        this.minResizeWidth = in.readInt();
288324afba161ae5b802e38f89c9015d8306ea3ddd1Adam Cohen        this.minResizeHeight = in.readInt();
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.updatePeriodMillis = in.readInt();
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.initialLayout = in.readInt();
2910aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen        this.initialKeyguardLayout = in.readInt();
292f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        this.configure = in.readTypedObject(ComponentName.CREATOR);
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.label = in.readString();
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.icon = in.readInt();
295d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy        this.previewImage = in.readInt();
296a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen        this.autoAdvanceViewId = in.readInt();
2979611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen        this.resizeMode = in.readInt();
2980aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen        this.widgetCategory = in.readInt();
299f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        this.providerInfo = in.readTypedObject(ActivityInfo.CREATOR);
300f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        this.widgetFeatures = in.readInt();
301976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    }
302976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
303976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    /**
304976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * Loads the localized label to display to the user in the AppWidget picker.
305976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *
306976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @param packageManager Package manager instance for loading resources.
307976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @return The label for the current locale.
308976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     */
309976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    public final String loadLabel(PackageManager packageManager) {
310976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        CharSequence label = providerInfo.loadLabel(packageManager);
311976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        if (label != null) {
312976e8bd2017d0263216c62111454438cc0f130e3Svetoslav            return label.toString().trim();
313976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        }
314976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        return null;
315976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    }
316976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
317976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    /**
318976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * Loads the icon to display for this AppWidget in the AppWidget picker. If not
319976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * supplied in the xml, the application icon will be used. A client can optionally
320976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * provide a desired density such as {@link android.util.DisplayMetrics#DENSITY_LOW}
321976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * {@link android.util.DisplayMetrics#DENSITY_MEDIUM}, etc. If no density is
322976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * provided, the density of the current display will be used.
323976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * <p>
324976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * The loaded icon corresponds to the <code>android:icon</code> attribute in
325976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
326976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * </p>
327976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *
328976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @param context Context for accessing resources.
329976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @param density The optional desired density as per
330976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *         {@link android.util.DisplayMetrics#densityDpi}.
331c71c42fdb2ee54a419dc8eb0a5f4f82532b16c0cSvetoslav     * @return The provider icon.
332976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     */
3338e1d299da27da534b508b1da51ebe351a689cefaSvetoslav    public final Drawable loadIcon(@NonNull Context context, int density) {
334092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal        return loadDrawable(context, density, providerInfo.getIconResource(), true);
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
337976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    /**
338976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * Loads a preview of what the AppWidget will look like after it's configured.
339092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal     * A client can optionally provide a desired density such as
340092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal     * {@link android.util.DisplayMetrics#DENSITY_LOW}
341976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * {@link android.util.DisplayMetrics#DENSITY_MEDIUM}, etc. If no density is
342976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * provided, the density of the current display will be used.
343976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * <p>
344976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * The loaded image corresponds to the <code>android:previewImage</code> attribute
345976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * in the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
346976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * </p>
347976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *
348976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @param context Context for accessing resources.
349976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @param density The optional desired density as per
350976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *         {@link android.util.DisplayMetrics#densityDpi}.
3510308d9a8608b2ddfbff9e4464d61f5b0719f4b44Sunny Goyal     * @return The widget preview image or null if preview image is not available.
352976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     */
3538e1d299da27da534b508b1da51ebe351a689cefaSvetoslav    public final Drawable loadPreviewImage(@NonNull Context context, int density) {
354092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal        return loadDrawable(context, density, previewImage, false);
355976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    }
356976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
357976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    /**
358976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * Gets the user profile in which the provider resides.
359976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     *
360976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     * @return The hosting user profile.
361976e8bd2017d0263216c62111454438cc0f130e3Svetoslav     */
362976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    public final UserHandle getProfile() {
363976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        return new UserHandle(UserHandle.getUserId(providerInfo.applicationInfo.uid));
364976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    }
365976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
366976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    @Override
367976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    @SuppressWarnings("deprecation")
368f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal    public void writeToParcel(Parcel out, int flags) {
369f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        out.writeTypedObject(this.provider, flags);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeInt(this.minWidth);
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeInt(this.minHeight);
372324afba161ae5b802e38f89c9015d8306ea3ddd1Adam Cohen        out.writeInt(this.minResizeWidth);
373324afba161ae5b802e38f89c9015d8306ea3ddd1Adam Cohen        out.writeInt(this.minResizeHeight);
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeInt(this.updatePeriodMillis);
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeInt(this.initialLayout);
3760aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen        out.writeInt(this.initialKeyguardLayout);
377f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        out.writeTypedObject(this.configure, flags);
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeString(this.label);
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeInt(this.icon);
380d2db2a579440608453994b64eb5b425840f5307aPatrick Dubroy        out.writeInt(this.previewImage);
381a02fdf1ba03fad71cc80a89dfc74b17456d5b4a5Adam Cohen        out.writeInt(this.autoAdvanceViewId);
3829611f2ea6c962c7eb05a2841d06656745f524097Adam Cohen        out.writeInt(this.resizeMode);
3830aa2d42e87e4a1ed5b83f356690e465d6a3587ccAdam Cohen        out.writeInt(this.widgetCategory);
384f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        out.writeTypedObject(this.providerInfo, flags);
385f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        out.writeInt(this.widgetFeatures);
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3883ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen    @Override
389976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    @SuppressWarnings("deprecation")
3903ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen    public AppWidgetProviderInfo clone() {
3913ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        AppWidgetProviderInfo that = new AppWidgetProviderInfo();
3923ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.provider = this.provider == null ? null : this.provider.clone();
3933ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.minWidth = this.minWidth;
3943ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.minHeight = this.minHeight;
3953ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.minResizeWidth = this.minResizeHeight;
3963ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.minResizeHeight = this.minResizeHeight;
3973ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.updatePeriodMillis = this.updatePeriodMillis;
398180cfd5feb4fe415d04494bf00f2013896f93b77Adam Cohen        that.initialLayout = this.initialLayout;
3993ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.initialKeyguardLayout = this.initialKeyguardLayout;
4003ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.configure = this.configure == null ? null : this.configure.clone();
4013ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.label = this.label == null ? null : this.label.substring(0);
4023ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.icon = this.icon;
4033ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.previewImage = this.previewImage;
4043ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.autoAdvanceViewId = this.autoAdvanceViewId;
4053ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        that.resizeMode = this.resizeMode;
406976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        that.widgetCategory = this.widgetCategory;
407976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        that.providerInfo = this.providerInfo;
408f5e0fd78fd0165e7bf69dff32fec5467b001ea7cSunny Goyal        that.widgetFeatures = this.widgetFeatures;
4093ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen        return that;
4103ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen    }
4113ff2d867d46067132890a5a6ad68be8a4314d7f6Adam Cohen
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
416092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal    private Drawable loadDrawable(Context context, int density, int resourceId,
417092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal            boolean loadDefaultIcon) {
418976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        try {
419976e8bd2017d0263216c62111454438cc0f130e3Svetoslav            Resources resources = context.getPackageManager().getResourcesForApplication(
420976e8bd2017d0263216c62111454438cc0f130e3Svetoslav                    providerInfo.applicationInfo);
4219553fb3240f6d2e52012f94fb59271348a07b94dAdam Lesinski            if (ResourceId.isValid(resourceId)) {
422360182156a8e188534620de1e804993a6458470dAdam Lesinski                if (density < 0) {
423360182156a8e188534620de1e804993a6458470dAdam Lesinski                    density = 0;
424976e8bd2017d0263216c62111454438cc0f130e3Svetoslav                }
425360182156a8e188534620de1e804993a6458470dAdam Lesinski                return resources.getDrawableForDensity(resourceId, density, null);
426976e8bd2017d0263216c62111454438cc0f130e3Svetoslav            }
427976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
428976e8bd2017d0263216c62111454438cc0f130e3Svetoslav            /* ignore */
429976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        }
430092e19627467ddfb2647e36cec464952cd2a7abbSunny Goyal        return loadDefaultIcon ? providerInfo.loadIcon(context.getPackageManager()) : null;
431976e8bd2017d0263216c62111454438cc0f130e3Svetoslav    }
432976e8bd2017d0263216c62111454438cc0f130e3Svetoslav
4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
434970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal     * @hide
435970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal     */
436970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal    public void updateDimensions(DisplayMetrics displayMetrics) {
437970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal        // Converting complex to dp.
438970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal        minWidth = TypedValue.complexToDimensionPixelSize(minWidth, displayMetrics);
439970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal        minHeight = TypedValue.complexToDimensionPixelSize(minHeight, displayMetrics);
440970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal        minResizeWidth = TypedValue.complexToDimensionPixelSize(minResizeWidth, displayMetrics);
441970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal        minResizeHeight = TypedValue.complexToDimensionPixelSize(minResizeHeight, displayMetrics);
442970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal    }
443970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal
444970d4b462652cab66ce34da551d089f385bf39d8Sunny Goyal    /**
445c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project     * Parcelable.Creator that instantiates AppWidgetProviderInfo objects
4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
447c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    public static final Parcelable.Creator<AppWidgetProviderInfo> CREATOR
448c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project            = new Parcelable.Creator<AppWidgetProviderInfo>()
4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
450c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        public AppWidgetProviderInfo createFromParcel(Parcel parcel)
4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {
452c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project            return new AppWidgetProviderInfo(parcel);
4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
455c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        public AppWidgetProviderInfo[] newArray(int size)
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        {
457c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project            return new AppWidgetProviderInfo[size];
4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
462976e8bd2017d0263216c62111454438cc0f130e3Svetoslav        return "AppWidgetProviderInfo(" + getProfile() + '/' + provider + ')';
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
465