diff --git a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java index f450496b3b..729eea9834 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java +++ b/quickstep/src/com/android/launcher3/uioverrides/ApiWrapper.java @@ -17,10 +17,18 @@ package com.android.launcher3.uioverrides; import android.app.Person; +import android.appwidget.AppWidgetHost; import android.content.pm.ShortcutInfo; -import com.android.launcher3.Utilities; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.android.launcher3.Utilities; +import com.android.launcher3.widget.LauncherAppWidgetHost; + +/** + * A wrapper for the hidden API calls + */ public class ApiWrapper { public static final boolean TASKBAR_DRAWN_IN_PROCESS = true; @@ -29,4 +37,14 @@ public class ApiWrapper { Person[] persons = si.getPersons(); return persons == null ? Utilities.EMPTY_PERSON_ARRAY : persons; } + + /** + * Set the interaction handler for the host + * @param host AppWidgetHost that needs the interaction handler + * @param handler InteractionHandler for the views in the host + */ + public static void setHostInteractionHandler(@NonNull AppWidgetHost host, + @Nullable LauncherAppWidgetHost.LauncherWidgetInteractionHandler handler) { + host.setInteractionHandler(handler::onInteraction); + } } diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java index 08d147f7cf..2dde6b6148 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepInteractionHandler.java @@ -33,10 +33,12 @@ import com.android.launcher3.Utilities; import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.util.ActivityOptionsWrapper; +import com.android.launcher3.widget.LauncherAppWidgetHost; import com.android.launcher3.widget.LauncherAppWidgetHostView; /** Provides a Quickstep specific animation when launching an activity from an app widget. */ -class QuickstepInteractionHandler implements RemoteViews.InteractionHandler { +class QuickstepInteractionHandler implements + LauncherAppWidgetHost.LauncherWidgetInteractionHandler { private static final String TAG = "QuickstepInteractionHandler"; diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index 2bf6f123a0..23794b0e20 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -490,7 +490,8 @@ public class QuickstepLauncher extends Launcher { protected LauncherAppWidgetHost createAppWidgetHost() { LauncherAppWidgetHost appWidgetHost = super.createAppWidgetHost(); - appWidgetHost.setInteractionHandler(new QuickstepInteractionHandler(this)); + ApiWrapper.setHostInteractionHandler(appWidgetHost, + new QuickstepInteractionHandler(this)); return appWidgetHost; } diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHost.java b/src/com/android/launcher3/widget/LauncherAppWidgetHost.java index 3e80699f59..fff8fbb12a 100644 --- a/src/com/android/launcher3/widget/LauncherAppWidgetHost.java +++ b/src/com/android/launcher3/widget/LauncherAppWidgetHost.java @@ -18,6 +18,7 @@ package com.android.launcher3.widget; import static android.app.Activity.RESULT_CANCELED; +import android.app.PendingIntent; import android.appwidget.AppWidgetHost; import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetManager; @@ -28,6 +29,7 @@ import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.SparseArray; +import android.view.View; import android.widget.RemoteViews; import android.widget.Toast; @@ -80,6 +82,24 @@ public class LauncherAppWidgetHost extends AppWidgetHost { private IntConsumer mAppWidgetRemovedCallback = null; + /** + * This serves for the purpose of getting rid of the hidden API calling of InteractionHandler + */ + public interface LauncherWidgetInteractionHandler { + /** + * Invoked when the user performs an interaction on the View. + * + * @param view the View with which the user interacted + * @param pendingIntent the base PendingIntent associated with the view + * @param response the response to the interaction, which knows how to fill in the + * attached PendingIntent + */ + boolean onInteraction( + View view, + PendingIntent pendingIntent, + RemoteViews.RemoteResponse response); + } + public LauncherAppWidgetHost(Context context) { this(context, null); } diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java index c8b5e2fa37..ea0f5a3c5d 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/ApiWrapper.java @@ -17,10 +17,18 @@ package com.android.launcher3.uioverrides; import android.app.Person; +import android.appwidget.AppWidgetHost; import android.content.pm.ShortcutInfo; -import com.android.launcher3.Utilities; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.android.launcher3.Utilities; +import com.android.launcher3.widget.LauncherAppWidgetHost; + +/** + * A wrapper for the hidden API calls + */ public class ApiWrapper { public static final boolean TASKBAR_DRAWN_IN_PROCESS = false; @@ -28,4 +36,14 @@ public class ApiWrapper { public static Person[] getPersons(ShortcutInfo si) { return Utilities.EMPTY_PERSON_ARRAY; } + + /** + * Set the interaction handler for the host + * @param host AppWidgetHost that needs the interaction handler + * @param handler InteractionHandler for the views in the host + */ + public static void setHostInteractionHandler(@NonNull AppWidgetHost host, + @Nullable LauncherAppWidgetHost.LauncherWidgetInteractionHandler handler) { + // No-op + } }