blob: 99210fd343673fb738414ce6c6cf4349cfe20541 [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;
The Android Open Source Project31dd5032009-03-03 19:32:27 -080021import android.content.ContentValues;
Kenny Guyed131872014-04-30 03:02:21 +010022import android.content.Context;
23
24import com.android.launcher3.compat.UserHandleCompat;
The Android Open Source Project31dd5032009-03-03 19:32:27 -080025
26/**
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070027 * Represents a widget (either instantiated or about to be) in the Launcher.
The Android Open Source Project31dd5032009-03-03 19:32:27 -080028 */
Anjali Koppal7b168a12014-03-04 17:16:11 -080029public class LauncherAppWidgetInfo extends ItemInfo {
The Android Open Source Project31dd5032009-03-03 19:32:27 -080030
Sunny Goyal651077b2014-06-30 14:15:31 -070031 public static final int RESTORE_COMPLETED = 0;
32
33 /**
34 * This is set during the package backup creation.
35 */
Sunny Goyalff572272014-07-23 13:58:07 -070036 public static final int FLAG_ID_NOT_VALID = 1;
Sunny Goyal651077b2014-06-30 14:15:31 -070037
38 /**
Sunny Goyalff572272014-07-23 13:58:07 -070039 * Indicates that the provider is not available yet.
Sunny Goyal651077b2014-06-30 14:15:31 -070040 */
Sunny Goyalff572272014-07-23 13:58:07 -070041 public static final int FLAG_PROVIDER_NOT_READY = 2;
42
43 /**
44 * Indicates that the widget UI is not yet ready, and user needs to set it up again.
45 */
46 public static final int FLAG_UI_NOT_READY = 4;
Sunny Goyal651077b2014-06-30 14:15:31 -070047
The Android Open Source Project31dd5032009-03-03 19:32:27 -080048 /**
Sunny Goyal94485362014-09-18 16:13:58 -070049 * Indicates that the widget restore has started.
50 */
51 public static final int FLAG_RESTORE_STARTED = 8;
52
53 /**
Sunny Goyald478c832016-04-01 12:04:16 -070054 * Indicates that the widget has been allocated an Id. The id is still not valid, as it has
55 * not been bound yet.
56 */
57 public static final int FLAG_ID_ALLOCATED = 16;
58
59 /**
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070060 * Indicates that the widget hasn't been instantiated yet.
61 */
62 static final int NO_ID = -1;
63
64 /**
Adam Cohen59400422014-03-05 18:07:04 -080065 * Indicates that this is a locally defined widget and hence has no system allocated id.
66 */
67 static final int CUSTOM_WIDGET_ID = -100;
68
69 /**
Romain Guy629de3e2010-01-13 12:20:59 -080070 * Identifier for this widget when talking with
71 * {@link android.appwidget.AppWidgetManager} for updates.
The Android Open Source Project31dd5032009-03-03 19:32:27 -080072 */
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070073 int appWidgetId = NO_ID;
74
Sunny Goyal6d02c7a2016-05-19 12:15:39 -070075 public ComponentName providerName;
Adam Cohended9f8d2010-11-03 13:25:16 -070076
Sunny Goyal651077b2014-06-30 14:15:31 -070077 /**
78 * Indicates the restore status of the widget.
79 */
80 int restoreStatus;
81
Sunny Goyal0fc1be12014-08-11 17:05:23 -070082 /**
83 * Indicates the installation progress of the widget provider
84 */
Sunny Goyale7b8cd92014-08-27 14:04:33 -070085 int installProgress = -1;
Sunny Goyal0fc1be12014-08-11 17:05:23 -070086
Winson Chung211bac32012-05-15 13:43:57 -070087 private boolean mHasNotifiedInitialWidgetSizeChanged;
88
Winson Chung11a49372012-04-27 15:12:38 -070089 LauncherAppWidgetInfo(int appWidgetId, ComponentName providerName) {
Adam Cohen59400422014-03-05 18:07:04 -080090 if (appWidgetId == CUSTOM_WIDGET_ID) {
91 itemType = LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET;
92 } else {
93 itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
94 }
95
Winson Chung11a49372012-04-27 15:12:38 -070096 this.appWidgetId = appWidgetId;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -070097 this.providerName = providerName;
98
99 // Since the widget isn't instantiated yet, we don't know these values. Set them to -1
100 // to indicate that they should be calculated based on the layout and minWidth/minHeight
101 spanX = -1;
102 spanY = -1;
Kenny Guyed131872014-04-30 03:02:21 +0100103 // We only support app widgets on current user.
104 user = UserHandleCompat.myUserHandle();
Sunny Goyal651077b2014-06-30 14:15:31 -0700105 restoreStatus = RESTORE_COMPLETED;
Patrick Dubroy6569f2c2010-07-12 14:25:18 -0700106 }
107
Adam Cohen59400422014-03-05 18:07:04 -0800108 public boolean isCustomWidget() {
109 return appWidgetId == CUSTOM_WIDGET_ID;
110 }
111
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800112 @Override
Kenny Guyed131872014-04-30 03:02:21 +0100113 void onAddToDatabase(Context context, ContentValues values) {
114 super.onAddToDatabase(context, values);
The Android Open Source Project7376fae2009-03-11 12:11:58 -0700115 values.put(LauncherSettings.Favorites.APPWIDGET_ID, appWidgetId);
Chris Wrend5e66bf2013-09-16 14:02:29 -0400116 values.put(LauncherSettings.Favorites.APPWIDGET_PROVIDER, providerName.flattenToString());
Sunny Goyalff572272014-07-23 13:58:07 -0700117 values.put(LauncherSettings.Favorites.RESTORED, restoreStatus);
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800118 }
119
Winson Chung211bac32012-05-15 13:43:57 -0700120 /**
121 * When we bind the widget, we should notify the widget that the size has changed if we have not
122 * done so already (only really for default workspace widgets).
123 */
Sunny Goyal87af0fd2016-05-16 14:56:02 -0700124 void onBindAppWidget(Launcher launcher, AppWidgetHostView hostView) {
Adam Cohenaaa5c212012-10-05 18:14:31 -0700125 if (!mHasNotifiedInitialWidgetSizeChanged) {
Sunny Goyal25c2e3e2015-10-28 23:28:21 -0700126 AppWidgetResizeFrame.updateWidgetSizeRanges(hostView, launcher, spanX, spanY);
127 mHasNotifiedInitialWidgetSizeChanged = true;
Winson Chung211bac32012-05-15 13:43:57 -0700128 }
129 }
130
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800131 @Override
132 public String toString() {
Daniel Sandler8802e962010-05-26 16:28:16 -0400133 return "AppWidget(id=" + Integer.toString(appWidgetId) + ")";
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800134 }
Joe Onorato9c1289c2009-08-17 11:03:03 -0400135
Sunny Goyald478c832016-04-01 12:04:16 -0700136 public final boolean isWidgetIdAllocated() {
137 return (restoreStatus & FLAG_ID_NOT_VALID) == 0 ||
138 (restoreStatus & FLAG_ID_ALLOCATED) == FLAG_ID_ALLOCATED;
Sunny Goyalff572272014-07-23 13:58:07 -0700139 }
140
141 public final boolean hasRestoreFlag(int flag) {
142 return (restoreStatus & flag) == flag;
Sunny Goyal651077b2014-06-30 14:15:31 -0700143 }
The Android Open Source Project31dd5032009-03-03 19:32:27 -0800144}