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><appwidget-provider></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><receiver></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><receiver></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><receiver></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><receiver></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><receiver></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