Fixing custom widgets support:
> Moving the definitions to xml so that it is easier to override in derivative projects
> Fixing verious bind and save logic for custom widgets
> Adding feature flag to easily disable custom widgets
Change-Id: I0e278bc7dd415713029364060ef10842da990be9
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 8d9c29f..76f5cda 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -136,6 +136,7 @@
import com.android.launcher3.widget.WidgetAddFlowHandler;
import com.android.launcher3.widget.WidgetHostViewLoader;
import com.android.launcher3.widget.WidgetsContainerView;
+import com.android.launcher3.widget.custom.CustomWidgetParser;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -296,15 +297,6 @@
// the press state and keep this reference to reset the press state when we return to launcher.
private BubbleTextView mWaitingForResume;
- protected static final HashMap<String, CustomAppWidget> sCustomAppWidgets =
- new HashMap<>();
-
- static {
- if (TestingUtils.ENABLE_CUSTOM_WIDGET_TEST) {
- TestingUtils.addDummyWidget(sCustomAppWidgets);
- }
- }
-
// Exiting spring loaded mode happens with a delay. This runnable object triggers the
// state transition. If another state transition happened during this delay,
// simply unregister this runnable.
@@ -1408,17 +1400,13 @@
appWidgetInfo = mAppWidgetManager.getLauncherAppWidgetInfo(appWidgetId);
}
- if (appWidgetInfo.isCustomWidget) {
- appWidgetId = LauncherAppWidgetInfo.CUSTOM_WIDGET_ID;
- }
-
LauncherAppWidgetInfo launcherInfo;
launcherInfo = new LauncherAppWidgetInfo(appWidgetId, appWidgetInfo.provider);
launcherInfo.spanX = itemInfo.spanX;
launcherInfo.spanY = itemInfo.spanY;
launcherInfo.minSpanX = itemInfo.minSpanX;
launcherInfo.minSpanY = itemInfo.minSpanY;
- launcherInfo.user = appWidgetInfo.getUser();
+ launcherInfo.user = appWidgetInfo.getProfile();
getModelWriter().addItemToDatabase(launcherInfo,
itemInfo.container, itemInfo.screenId, itemInfo.cellX, itemInfo.cellY);
@@ -1968,7 +1956,7 @@
*/
private void addAppWidgetFromDrop(PendingAddWidgetInfo info) {
AppWidgetHostView hostView = info.boundWidget;
- int appWidgetId;
+ final int appWidgetId;
WidgetAddFlowHandler addFlowHandler = info.getHandler();
if (hostView != null) {
// In the case where we've prebound the widget, we remove it from the DragLayer
@@ -1985,7 +1973,13 @@
} else {
// In this case, we either need to start an activity to get permission to bind
// the widget, or we need to start an activity to configure the widget, or both.
- appWidgetId = getAppWidgetHost().allocateAppWidgetId();
+ if (FeatureFlags.ENABLE_CUSTOM_WIDGETS &&
+ info.itemType == LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET) {
+ appWidgetId = CustomWidgetParser.getWidgetIdForCustomProvider(
+ this, info.componentName);
+ } else {
+ appWidgetId = getAppWidgetHost().allocateAppWidgetId();
+ }
Bundle options = info.bindOptions;
boolean success = mAppWidgetManager.bindAppWidgetIdIfAllowed(
@@ -3192,7 +3186,8 @@
(FolderInfo) item);
break;
}
- case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET: {
+ case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
+ case LauncherSettings.Favorites.ITEM_TYPE_CUSTOM_APPWIDGET: {
view = inflateAppWidget((LauncherAppWidgetInfo) item);
if (view == null) {
continue;
@@ -3882,14 +3877,6 @@
return super.onKeyShortcut(keyCode, event);
}
- public static CustomAppWidget getCustomAppWidget(String name) {
- return sCustomAppWidgets.get(name);
- }
-
- public static HashMap<String, CustomAppWidget> getCustomAppWidgets() {
- return sCustomAppWidgets;
- }
-
public static Launcher getLauncher(Context context) {
if (context instanceof Launcher) {
return (Launcher) context;