blob: 6f23e56b34740ba84af000218cf9384635cd281b [file] [log] [blame]
The Android Open Source Project31dd5032009-03-03 19:32:27 -08001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Daniel Sandler325dc232013-06-05 22:57:57 -040017package com.android.launcher3;
The Android Open Source Project31dd5032009-03-03 19:32:27 -080018
The Android Open Source Project7376fae2009-03-11 12:11:58 -070019import android.appwidget.AppWidgetHostView;
Michael Jurkaaf442092010-06-10 17:01:57 -070020import android.content.ComponentName;
Sunny Goyal86df1382016-08-10 15:03:22 -070021import android.content.Intent;
Sunny Goyal7c74e4a2016-12-15 15:53:17 -080022import android.os.Process;
Kenny Guyed131872014-04-30 03:02:21 +010023
Jon Miranda2b823f42017-05-02 18:36:18 -070024import com.android.launcher3.model.PackageItemInfo;
Sunny Goyal32f3dda2016-11-11 11:45:00 -080025import com.android.launcher3.util.ContentWriter;
The Android Open Source Project31dd5032009-03-03 19:32:27 -080026
27/**
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070028 * Represents a widget (either instantiated or about to be) in the Launcher.
The Android Open Source Project31dd5032009-03-03 19:32:27 -080029 */
Anjali Koppal7b168a12014-03-04 17:16:11 -080030public class LauncherAppWidgetInfo extends ItemInfo {
The Android Open Source Project31dd5032009-03-03 19:32:27 -080031
Sunny Goyal651077b2014-06-30 14:15:31 -070032 public static final int RESTORE_COMPLETED = 0;
33
34 /**
35 * This is set during the package backup creation.
36 */
Sunny Goyalff572272014-07-23 13:58:07 -070037 public static final int FLAG_ID_NOT_VALID = 1;
Sunny Goyal651077b2014-06-30 14:15:31 -070038
39 /**
Sunny Goyalff572272014-07-23 13:58:07 -070040 * Indicates that the provider is not available yet.
Sunny Goyal651077b2014-06-30 14:15:31 -070041 */
Sunny Goyalff572272014-07-23 13:58:07 -070042 public static final int FLAG_PROVIDER_NOT_READY = 2;
43
44 /**
45 * Indicates that the widget UI is not yet ready, and user needs to set it up again.
46 */
47 public static final int FLAG_UI_NOT_READY = 4;
Sunny Goyal651077b2014-06-30 14:15:31 -070048
The Android Open Source Project31dd5032009-03-03 19:32:27 -080049 /**
Sunny Goyal94485362014-09-18 16:13:58 -070050 * Indicates that the widget restore has started.
51 */
52 public static final int FLAG_RESTORE_STARTED = 8;
53
54 /**
Sunny Goyald478c832016-04-01 12:04:16 -070055 * Indicates that the widget has been allocated an Id. The id is still not valid, as it has
56 * not been bound yet.
57 */
58 public static final int FLAG_ID_ALLOCATED = 16;
59
60 /**
Sunny Goyal86df1382016-08-10 15:03:22 -070061 * Indicates that the widget does not need to show config activity, even if it has a
62 * configuration screen. It can also optionally have some extras which are sent during bind.
63 */
64 public static final int FLAG_DIRECT_CONFIG = 32;
65
66 /**
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070067 * Indicates that the widget hasn't been instantiated yet.
68 */
Sunny Goyal658058b2017-01-21 01:33:02 -080069 public static final int NO_ID = -1;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070070
71 /**
Adam Cohen59400422014-03-05 18:07:04 -080072 * Indicates that this is a locally defined widget and hence has no system allocated id.
73 */
74 static final int CUSTOM_WIDGET_ID = -100;
75
76 /**
Romain Guy629de3e2010-01-13 12:20:59 -080077 * Identifier for this widget when talking with
78 * {@link android.appwidget.AppWidgetManager} for updates.
The Android Open Source Project31dd5032009-03-03 19:32:27 -080079 */
Sunny Goyal04a324a2017-01-20 21:08:59 -080080 public int appWidgetId = NO_ID;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070081
Sunny Goyal6d02c7a2016-05-19 12:15:39 -070082 public ComponentName providerName;
Adam Cohended9f8d2010-11-03 13:25:16 -070083
Sunny Goyal651077b2014-06-30 14:15:31 -070084 /**
85 * Indicates the restore status of the widget.
86 */
Sunny Goyalf0ba8b72016-09-09 15:47:55 -070087 public int restoreStatus;
Sunny Goyal651077b2014-06-30 14:15:31 -070088
Sunny Goyal0fc1be12014-08-11 17:05:23 -070089 /**
90 * Indicates the installation progress of the widget provider
91 */
Sunny Goyalf0ba8b72016-09-09 15:47:55 -070092 public int installProgress = -1;
Sunny Goyal0fc1be12014-08-11 17:05:23 -070093
Sunny Goyal86df1382016-08-10 15:03:22 -070094 /**
95 * Optional extras sent during widget bind. See {@link #FLAG_DIRECT_CONFIG}.
96 */
97 public Intent bindOptions;
98
Jon Miranda2b823f42017-05-02 18:36:18 -070099 /**
100 * Nonnull for pending widgets. We use this to get the icon and title for the widget.
101 */
102 public PackageItemInfo pendingItemInfo;
103
Winson Chung211bac32012-05-15 13:43:57 -0700104 private boolean mHasNotifiedInitialWidgetSizeChanged;
105
Sunny Goyalf0ba8b72016-09-09 15:47:55 -0700106 public LauncherAppWidgetInfo(int appWidgetId, ComponentName providerName) {
Adam Cohen59400422014-03-05 18:07:04 -0800107 if (appWidgetId == CUSTOM_WIDGET_ID) {
108 itemType = LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET;
109 } else {
110 itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
111 }
112
Winson Chung11a49372012-04-27 15:12:38 -0700113 this.appWidgetId = appWidgetId;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -0700114 this.providerName = providerName;
115
116 // Since the widget isn't instantiated yet, we don't know these values. Set them to -1
117 // to indicate that they should be calculated based on the layout and minWidth/minHeight
118 spanX = -1;
119 spanY = -1;
Kenny Guyed131872014-04-30 03:02:21 +0100120 // We only support app widgets on current user.
Sunny Goyal7c74e4a2016-12-15 15:53:17 -0800121 user = Process.myUserHandle();
Sunny Goyal651077b2014-06-30 14:15:31 -0700122 restoreStatus = RESTORE_COMPLETED;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -0700123 }
124
Sunny Goyalf0ba8b72016-09-09 15:47:55 -0700125 /** Used for testing **/
126 public LauncherAppWidgetInfo() {
127 itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
128 }
129
Adam Cohen59400422014-03-05 18:07:04 -0800130 public boolean isCustomWidget() {
131 return appWidgetId == CUSTOM_WIDGET_ID;
132 }
133
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800134 @Override
Sunny Goyal658058b2017-01-21 01:33:02 -0800135 public void onAddToDatabase(ContentWriter writer) {
Sunny Goyal32f3dda2016-11-11 11:45:00 -0800136 super.onAddToDatabase(writer);
137 writer.put(LauncherSettings.Favorites.APPWIDGET_ID, appWidgetId)
138 .put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, providerName.flattenToString())
139 .put(LauncherSettings.Favorites.RESTORED, restoreStatus)
140 .put(LauncherSettings.Favorites.INTENT, bindOptions);
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800141 }
142
Winson Chung211bac32012-05-15 13:43:57 -0700143 /**
144 * When we bind the widget, we should notify the widget that the size has changed if we have not
145 * done so already (only really for default workspace widgets).
146 */
Sunny Goyal87af0fd2016-05-16 14:56:02 -0700147 void onBindAppWidget(Launcher launcher, AppWidgetHostView hostView) {
Adam Cohenaaa5c212012-10-05 18:14:31 -0700148 if (!mHasNotifiedInitialWidgetSizeChanged) {
Sunny Goyal25c2e3e2015-10-28 23:28:21 -0700149 AppWidgetResizeFrame.updateWidgetSizeRanges(hostView, launcher, spanX, spanY);
150 mHasNotifiedInitialWidgetSizeChanged = true;
Winson Chung211bac32012-05-15 13:43:57 -0700151 }
152 }
153
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800154 @Override
Sunny Goyal1edab712016-09-01 10:55:20 -0700155 protected String dumpProperties() {
156 return super.dumpProperties() + " appWidgetId=" + appWidgetId;
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800157 }
Joe Onorato9c1289c2009-08-17 11:03:03 -0400158
Sunny Goyald478c832016-04-01 12:04:16 -0700159 public final boolean isWidgetIdAllocated() {
160 return (restoreStatus & FLAG_ID_NOT_VALID) == 0 ||
161 (restoreStatus & FLAG_ID_ALLOCATED) == FLAG_ID_ALLOCATED;
Sunny Goyalff572272014-07-23 13:58:07 -0700162 }
163
164 public final boolean hasRestoreFlag(int flag) {
165 return (restoreStatus & flag) == flag;
Sunny Goyal651077b2014-06-30 14:15:31 -0700166 }
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800167}