diff --git a/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java b/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java index 4f889c05bc..023486fa04 100644 --- a/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java +++ b/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java @@ -43,6 +43,7 @@ import com.android.launcher3.keyboard.FocusIndicatorHelper.SimpleFocusIndicatorH import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.ItemInfoWithIcon; import com.android.launcher3.model.data.WorkspaceItemInfo; +import com.android.launcher3.touch.ItemLongClickListener; import com.android.launcher3.views.ActivityContext; import java.util.ArrayList; @@ -65,6 +66,7 @@ public class PredictionRowView private FloatingHeaderView mParent; private boolean mPredictionsEnabled = false; + private OnLongClickListener mOnIconLongClickListener = ItemLongClickListener.INSTANCE_ALL_APPS; public PredictionRowView(@NonNull Context context) { this(context, null); @@ -174,6 +176,15 @@ public class PredictionRowView applyPredictionApps(); } + /** + * Sets the long click listener for predictions for any future predictions. + * + * Existing predictions in the container are not updated with this new callback. + */ + public void setOnIconLongClickListener(OnLongClickListener onIconLongClickListener) { + mOnIconLongClickListener = onIconLongClickListener; + } + @Override public void onDeviceProfileChanged(DeviceProfile dp) { mNumPredictedAppsPerRow = dp.numShownAllAppsColumns; @@ -191,7 +202,7 @@ public class PredictionRowView BubbleTextView icon = (BubbleTextView) inflater.inflate( R.layout.all_apps_icon, this, false); icon.setOnClickListener(mActivityContext.getItemOnClickListener()); - icon.setOnLongClickListener(mActivityContext.getAllAppsItemLongClickListener()); + icon.setOnLongClickListener(mOnIconLongClickListener); icon.setLongPressTimeoutFactor(1f); icon.setOnFocusChangeListener(mFocusHelper); diff --git a/quickstep/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictionsImpl.java b/quickstep/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictionsImpl.java index b982688ce7..8720bd8f26 100644 --- a/quickstep/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictionsImpl.java +++ b/quickstep/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictionsImpl.java @@ -18,7 +18,9 @@ package com.android.launcher3.secondarydisplay; import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT; import android.content.Context; +import android.view.View; +import com.android.launcher3.allapps.ActivityAllAppsContainerView; import com.android.launcher3.appprediction.AppsDividerView; import com.android.launcher3.appprediction.PredictionRowView; import com.android.launcher3.model.BgDataModel; @@ -54,4 +56,12 @@ public final class SecondaryDisplayPredictionsImpl extends SecondaryDisplayPredi .findFixedRowByType(PredictionRowView.class) .setPredictedApps(item.items); } + + @Override + public void setLongClickListener(ActivityAllAppsContainerView appsView, + View.OnLongClickListener onIconLongClickListener) { + appsView.getFloatingHeaderView() + .findFixedRowByType(PredictionRowView.class) + .setOnIconLongClickListener(onIconLongClickListener); + } } diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java index a851734341..01342affb6 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewController.java @@ -20,6 +20,7 @@ import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.appprediction.AppsDividerView; +import com.android.launcher3.appprediction.PredictionRowView; import com.android.launcher3.taskbar.NavbarButtonsViewController; import com.android.launcher3.taskbar.TaskbarControllers; import com.android.launcher3.taskbar.TaskbarStashController; @@ -53,6 +54,7 @@ final class TaskbarAllAppsViewController { mOverlayController = taskbarControllers.taskbarOverlayController; mSlideInView.init(new TaskbarAllAppsCallbacks()); + setUpIconLongClick(); setUpAppDivider(); setUpTaskbarStashing(); } @@ -67,6 +69,15 @@ final class TaskbarAllAppsViewController { mSlideInView.close(animate); } + private void setUpIconLongClick() { + mAppsView.setOnIconLongClickListener( + mContext.getDragController()::startDragOnLongClick); + mAppsView.getFloatingHeaderView() + .findFixedRowByType(PredictionRowView.class) + .setOnIconLongClickListener( + mContext.getDragController()::startDragOnLongClick); + } + private void setUpAppDivider() { mAppsView.getFloatingHeaderView() .findFixedRowByType(AppsDividerView.class) diff --git a/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java b/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java index 64cc47c739..cfcc1a070b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayContext.java @@ -125,11 +125,6 @@ public class TaskbarOverlayContext extends BaseTaskbarContext { return mTaskbarContext.getItemOnClickListener(); } - @Override - public View.OnLongClickListener getAllAppsItemLongClickListener() { - return mDragController::startDragOnLongClick; - } - @Override public PopupDataProvider getPopupDataProvider() { return mTaskbarContext.getPopupDataProvider(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 849db28e20..66c76ca597 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -194,7 +194,6 @@ import com.android.launcher3.states.RotationHelper; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.touch.AllAppsSwipeController; -import com.android.launcher3.touch.ItemLongClickListener; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.ActivityResultInfo; import com.android.launcher3.util.ActivityTracker; @@ -3373,9 +3372,4 @@ public class Launcher extends StatefulActivity public boolean areFreeformTasksVisible() { return false; // Base launcher does not track freeform tasks } - - @Override - public View.OnLongClickListener getAllAppsItemLongClickListener() { - return ItemLongClickListener.INSTANCE_ALL_APPS; - } } diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index da1bcd7fcc..9dc82bdd98 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -892,6 +892,15 @@ public class ActivityAllAppsContainerView container.put(R.id.work_tab_state_id, state); } + /** + * Sets the long click listener for icons + */ + public void setOnIconLongClickListener(OnLongClickListener listener) { + for (AdapterHolder holder : mAH) { + holder.mAdapter.setOnIconLongClickListener(listener); + } + } + public AllAppsStore getAppsStore() { return mAllAppsStore; } diff --git a/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java b/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java index be0a898531..72a01958fd 100644 --- a/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java +++ b/src/com/android/launcher3/allapps/BaseAllAppsAdapter.java @@ -15,7 +15,10 @@ */ package com.android.launcher3.allapps; +import static com.android.launcher3.touch.ItemLongClickListener.INSTANCE_ALL_APPS; + import android.content.Context; +import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -24,6 +27,7 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; import com.android.launcher3.BubbleTextView; @@ -135,24 +139,31 @@ public abstract class BaseAllAppsAdapter ex protected final LayoutInflater mLayoutInflater; protected final OnClickListener mOnIconClickListener; - protected final OnLongClickListener mOnIconLongClickListener; + protected OnLongClickListener mOnIconLongClickListener = INSTANCE_ALL_APPS; protected OnFocusChangeListener mIconFocusListener; private final int mExtraTextHeight; public BaseAllAppsAdapter(T activityContext, LayoutInflater inflater, AlphabeticalAppsList apps, SearchAdapterProvider adapterProvider) { + Resources res = activityContext.getResources(); mActivityContext = activityContext; mApps = apps; mLayoutInflater = inflater; mOnIconClickListener = mActivityContext.getItemOnClickListener(); - mOnIconLongClickListener = mActivityContext.getAllAppsItemLongClickListener(); mAdapterProvider = adapterProvider; mExtraTextHeight = Utilities.calculateTextHeight( mActivityContext.getDeviceProfile().allAppsIconTextSizePx); } + /** + * Sets the long click listener for icons + */ + public void setOnIconLongClickListener(@Nullable OnLongClickListener listener) { + mOnIconLongClickListener = listener; + } + /** Checks if the passed viewType represents all apps divider. */ public static boolean isDividerViewType(int viewType) { return isViewType(viewType, VIEW_TYPE_MASK_DIVIDER); diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java index e751730a10..458f137949 100644 --- a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java +++ b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayLauncher.java @@ -72,7 +72,7 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity implements BgDataModel.Callbacks, DragController.DragListener { private LauncherModel mModel; - private SecondaryDragLayer mDragLayer; + private BaseDragLayer mDragLayer; private SecondaryDragController mDragController; private ActivityAllAppsContainerView mAppsView; private View mAppsButton; @@ -314,6 +314,10 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity } } + public SecondaryDisplayPredictions getSecondaryDisplayPredictions() { + return mSecondaryDisplayPredictions; + } + @Override public StringCache getStringCache() { return mStringCache; @@ -333,11 +337,6 @@ public class SecondaryDisplayLauncher extends BaseDraggingActivity return this::onIconClicked; } - @Override - public View.OnLongClickListener getAllAppsItemLongClickListener() { - return mDragLayer::onIconLongClicked; - } - private void onIconClicked(View v) { // Make sure that rogue clicks don't get through while allapps is launching, or after the // view has detached (it's possible for this to happen if the view is removed mid touch). diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictions.java b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictions.java index a58916ad80..21c50d38e8 100644 --- a/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictions.java +++ b/src/com/android/launcher3/secondarydisplay/SecondaryDisplayPredictions.java @@ -16,8 +16,10 @@ package com.android.launcher3.secondarydisplay; import android.content.Context; +import android.view.View; import com.android.launcher3.R; +import com.android.launcher3.allapps.ActivityAllAppsContainerView; import com.android.launcher3.model.BgDataModel; import com.android.launcher3.util.ResourceBasedOverride; @@ -45,4 +47,12 @@ public class SecondaryDisplayPredictions implements ResourceBasedOverride { */ public void setPredictedApps(BgDataModel.FixedContainerItems item) { } + + /** + * Set long click listener for predicted apps in top of app drawer. + */ + public void setLongClickListener( + ActivityAllAppsContainerView appsView, + View.OnLongClickListener onIconLongClickListener) { + } } diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java index 717164e0ed..87afcabdf8 100644 --- a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java +++ b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java @@ -79,6 +79,9 @@ public class SecondaryDragLayer extends BaseDragLayer mAllAppsButton = findViewById(R.id.all_apps_button); mAppsView = findViewById(R.id.apps_view); + mAppsView.setOnIconLongClickListener(this::onIconLongClicked); + mActivity.getSecondaryDisplayPredictions() + .setLongClickListener(mAppsView, this::onIconLongClicked); // Setup workspace mWorkspace = findViewById(R.id.workspace_grid); mPinnedAppsAdapter = new PinnedAppsAdapter(mActivity, mAppsView.getAppsStore(), @@ -176,7 +179,7 @@ public class SecondaryDragLayer extends BaseDragLayer return mPinnedAppsAdapter; } - boolean onIconLongClicked(View v) { + private boolean onIconLongClicked(View v) { if (!(v instanceof BubbleTextView)) { return false; } diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java index 84ea87118c..d04f5e2d30 100644 --- a/src/com/android/launcher3/views/ActivityContext.java +++ b/src/com/android/launcher3/views/ActivityContext.java @@ -239,11 +239,6 @@ public interface ActivityContext { }; } - /** Long-click callback used for All Apps items. */ - default View.OnLongClickListener getAllAppsItemLongClickListener() { - return v -> false; - } - @Nullable default PopupDataProvider getPopupDataProvider() { return null;