diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index cd4af5e8f1..ee711463d9 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -262,6 +262,14 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O } } + CellLayout.LayoutParams lp = (CellLayout.LayoutParams) mWidgetView.getLayoutParams(); + ItemInfo widgetInfo = (ItemInfo) mWidgetView.getTag(); + lp.cellX = lp.tmpCellX = widgetInfo.cellX; + lp.cellY = lp.tmpCellY = widgetInfo.cellY; + lp.cellHSpan = widgetInfo.spanX; + lp.cellVSpan = widgetInfo.spanY; + lp.isLockedToGrid = true; + // When we create the resize frame, we first mark all cells as unoccupied. The appropriate // cells (same if not resized, or different) will be marked as occupied when the resize // frame is dismissed. @@ -270,7 +278,7 @@ public class AppWidgetResizeFrame extends AbstractFloatingView implements View.O mLauncher.getStatsLogManager() .logger() .withInstanceId(logInstanceId) - .withItemInfo((ItemInfo) mWidgetView.getTag()) + .withItemInfo(widgetInfo) .log(LAUNCHER_WIDGET_RESIZE_STARTED); setOnKeyListener(this); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 1cfe7e0300..0da16b7e23 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1347,6 +1347,40 @@ public class Launcher extends StatefulActivity implements Launche prepareAppWidget(hostView, launcherInfo); mWorkspace.addInScreen(hostView, launcherInfo); announceForAccessibility(R.string.item_added_to_workspace); + + // Show the widget resize frame. + if (hostView instanceof LauncherAppWidgetHostView) { + final LauncherAppWidgetHostView launcherHostView = (LauncherAppWidgetHostView) hostView; + CellLayout cellLayout = getCellLayout(launcherInfo.container, launcherInfo.screenId); + if (mStateManager.getState() == NORMAL) { + // Show resize frame once the widget layout is drawn. + View.OnLayoutChangeListener onLayoutChangeListener = + new View.OnLayoutChangeListener() { + @Override + public void onLayoutChange(View view, int left, int top, int right, + int bottom, int oldLeft, int oldTop, int oldRight, + int oldBottom) { + AppWidgetResizeFrame.showForWidget(launcherHostView, cellLayout); + launcherHostView.removeOnLayoutChangeListener(this); + } + }; + launcherHostView.addOnLayoutChangeListener(onLayoutChangeListener); + // There is a small chance that the layout was already drawn before the layout + // change listener was registered, which means that the resize frame wouldn't be + // shown. Directly call requestLayout to force a layout change. + launcherHostView.requestLayout(); + } else { + mStateManager.addStateListener(new StateManager.StateListener() { + @Override + public void onStateTransitionComplete(LauncherState finalState) { + if (mPrevLauncherState == SPRING_LOADED && finalState == NORMAL) { + AppWidgetResizeFrame.showForWidget(launcherHostView, cellLayout); + mStateManager.removeStateListener(this); + } + } + }); + } + } } private void prepareAppWidget(AppWidgetHostView hostView, LauncherAppWidgetInfo item) { diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index b421b0e876..0c9c4630a4 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -102,6 +102,8 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { setResult(acceptConfig); if (acceptConfig) { + // Dismiss widget resize frame. + mDevice.pressHome(); Wait.atMost("", new WidgetSearchCondition(), DEFAULT_ACTIVITY_TIMEOUT, mLauncher); assertNotNull(mAppWidgetManager.getAppWidgetInfo(mWidgetId)); } else { diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index 714b11b18e..dad4f2b045 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -58,6 +58,8 @@ public class AddWidgetTest extends AbstractLauncherUiTest { openAllWidgets(). getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager())). dragToWorkspace(false, false); + // Dismiss widget resize frame. + mDevice.pressHome(); assertTrue(mActivityMonitor.itemExists( (info, view) -> info instanceof LauncherAppWidgetInfo &&