diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java index bb25b6d418..9792300c8b 100644 --- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java +++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java @@ -423,11 +423,16 @@ public class LauncherAccessibilityDelegate extends BaseAccessibilityDelegate workspace = mContext.getWorkspace(); - workspace.post( - () -> workspace.snapToPage(workspace.getPageIndexForScreenId(screenId)) - ); - mContext.addPendingItem(info, LauncherSettings.Favorites.CONTAINER_DESKTOP, - screenId, coordinates, info.spanX, info.spanY); + workspace.post(() -> { + workspace.snapToPage(workspace.getPageIndexForScreenId(screenId)); + workspace.setOnPageTransitionEndCallback(() -> { + mContext.addPendingItem(info, LauncherSettings.Favorites.CONTAINER_DESKTOP, + screenId, coordinates, info.spanX, info.spanY); + if (finishCallback != null) { + finishCallback.accept(/* success= */ true); + } + }); + }); } else if (item instanceof WorkspaceItemInfo) { WorkspaceItemInfo info = ((WorkspaceItemInfo) item).clone(); mContext.getModelWriter().addItemToDatabase(info, diff --git a/src/com/android/launcher3/widget/BaseWidgetSheet.java b/src/com/android/launcher3/widget/BaseWidgetSheet.java index 76ffbbd572..c17ae0910a 100644 --- a/src/com/android/launcher3/widget/BaseWidgetSheet.java +++ b/src/com/android/launcher3/widget/BaseWidgetSheet.java @@ -20,6 +20,7 @@ import static com.android.launcher3.Flags.enableCategorizedWidgetSuggestions; import static com.android.launcher3.Flags.enableUnfoldedTwoPanePicker; import static com.android.launcher3.Flags.enableWidgetTapToAdd; import static com.android.launcher3.LauncherPrefs.WIDGETS_EDUCATION_TIP_SEEN; +import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_ADD_BUTTON_TAP; import android.content.Context; import android.graphics.Canvas; @@ -32,6 +33,7 @@ import android.view.View.OnLongClickListener; import android.view.WindowInsets; import android.view.animation.Interpolator; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.core.view.ViewCompat; @@ -45,7 +47,6 @@ import com.android.launcher3.LauncherPrefs; import com.android.launcher3.PendingAddItemInfo; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.popup.PopupDataProvider; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; @@ -55,6 +56,8 @@ import com.android.launcher3.util.window.WindowManagerProxy; import com.android.launcher3.views.AbstractSlideInView; import com.android.launcher3.views.ArrowTipView; +import java.util.concurrent.atomic.AtomicBoolean; + /** * Base class for various widgets popup */ @@ -163,12 +166,25 @@ public abstract class BaseWidgetSheet extends AbstractSlideInView /** * Click handler for tap to add button. */ - public void addWidget(PendingAddItemInfo info) { + private void addWidget(@NonNull PendingAddItemInfo info) { + // Using a boolean flag here to make sure the callback is only run once. This should never + // happen because we close the sheet and it will be reconstructed the next time it is + // needed. + final AtomicBoolean hasRun = new AtomicBoolean(false); + addOnCloseListener(() -> { + if (!hasRun.get()) { + Launcher.getLauncher(mActivityContext).getAccessibilityDelegate().addToWorkspace( + info, /*accessibility=*/ false, + /*finishCallback=*/ (success) -> { + mActivityContext.getStatsLogManager() + .logger() + .withItemInfo(info) + .log(LAUNCHER_WIDGET_ADD_BUTTON_TAP); + }); + hasRun.set(true); + } + }); handleClose(true); - Launcher.getLauncher(mActivityContext).getAccessibilityDelegate() - .addToWorkspace(info, /*accessibility=*/ false, /*finishCallback=*/ null); - mActivityContext.getStatsLogManager().logger().withItemInfo(info).log( - StatsLogManager.LauncherEvent.LAUNCHER_WIDGET_ADD_BUTTON_TAP); } @Override