Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0ff70a2 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Adding support for easily extending Launcher DragAndDrop support

Bug: 232165524
Test: Verified locally
Change-Id: I3b4f37bc9914de55330662edd678e6fdd0eafece
parent a04ddba5
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3.appprediction;
import static com.android.quickstep.InstantAppResolverImpl.COMPONENT_CLASS_MARKER;
import static com.android.quickstep.InstantAppResolverImpl.COMPONENT_CLASS_MARKER;


import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;


import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings;
@@ -38,8 +39,8 @@ public class InstantAppItemInfo extends AppInfo {
    }
    }


    @Override
    @Override
    public WorkspaceItemInfo makeWorkspaceItem() {
    public WorkspaceItemInfo makeWorkspaceItem(Context context) {
        WorkspaceItemInfo workspaceItemInfo = super.makeWorkspaceItem();
        WorkspaceItemInfo workspaceItemInfo = super.makeWorkspaceItem(context);
        workspaceItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
        workspaceItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
        workspaceItemInfo.status = WorkspaceItemInfo.FLAG_AUTOINSTALL_ICON
        workspaceItemInfo.status = WorkspaceItemInfo.FLAG_AUTOINSTALL_ICON
                | WorkspaceItemInfo.FLAG_RESTORE_STARTED
                | WorkspaceItemInfo.FLAG_RESTORE_STARTED
+2 −2
Original line number Original line Diff line number Diff line
@@ -85,7 +85,7 @@ public class PredictionUpdateTask extends BaseModelUpdateTask {
                        .filter(info -> user.equals(info.user) && cn.equals(info.componentName))
                        .filter(info -> user.equals(info.user) && cn.equals(info.componentName))
                        .map(ai -> {
                        .map(ai -> {
                            app.getIconCache().getTitleAndIcon(ai, false);
                            app.getIconCache().getTitleAndIcon(ai, false);
                            return ai.makeWorkspaceItem();
                            return ai.makeWorkspaceItem(context);
                        })
                        })
                        .findAny()
                        .findAny()
                        .orElseGet(() -> {
                        .orElseGet(() -> {
@@ -96,7 +96,7 @@ public class PredictionUpdateTask extends BaseModelUpdateTask {
                            }
                            }
                            AppInfo ai = new AppInfo(context, lai, user);
                            AppInfo ai = new AppInfo(context, lai, user);
                            app.getIconCache().getTitleAndIcon(ai, lai, false);
                            app.getIconCache().getTitleAndIcon(ai, lai, false);
                            return ai.makeWorkspaceItem();
                            return ai.makeWorkspaceItem(context);
                        });
                        });


                if (itemInfo == null) {
                if (itemInfo == null) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -460,7 +460,7 @@ public class QuickstepModelDelegate extends ModelDelegate {
                    AppInfo info = new AppInfo(lai, user, mUMS.isUserQuiet(user));
                    AppInfo info = new AppInfo(lai, user, mUMS.isUserQuiet(user));
                    mAppState.getIconCache().getTitleAndIcon(info, lai, false);
                    mAppState.getIconCache().getTitleAndIcon(info, lai, false);
                    mReadCount++;
                    mReadCount++;
                    return info.makeWorkspaceItem();
                    return info.makeWorkspaceItem(mAppState.getContext());
                }
                }
                case ITEM_TYPE_DEEP_SHORTCUT: {
                case ITEM_TYPE_DEEP_SHORTCUT: {
                    ShortcutKey key = ShortcutKey.fromIntent(intent, user);
                    ShortcutKey key = ShortcutKey.fromIntent(intent, user);
+2 −1
Original line number Original line Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.launcher3.shortcuts.DeepShortcutView;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.LauncherBindableItemsContainer;
import com.android.launcher3.util.LauncherBindableItemsContainer;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.ShortcutUtil;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.ActivityContext;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.SystemUiProxy;
@@ -136,7 +137,7 @@ public class TaskbarPopupController implements TaskbarControllers.LoggableTaskba
            return null;
            return null;
        }
        }
        ItemInfo item = (ItemInfo) icon.getTag();
        ItemInfo item = (ItemInfo) icon.getTag();
        if (!PopupContainerWithArrow.canShow(icon, item)) {
        if (!ShortcutUtil.supportsShortcuts(item)) {
            return null;
            return null;
        }
        }


+21 −16
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import androidx.annotation.UiThread;


import com.android.launcher3.accessibility.BaseAccessibilityDelegate;
import com.android.launcher3.accessibility.BaseAccessibilityDelegate;
import com.android.launcher3.dot.DotInfo;
import com.android.launcher3.dot.DotInfo;
import com.android.launcher3.dragndrop.DragOptions.PreDragCondition;
import com.android.launcher3.dragndrop.DraggableView;
import com.android.launcher3.dragndrop.DraggableView;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.graphics.IconShape;
import com.android.launcher3.graphics.IconShape;
@@ -65,12 +66,11 @@ import com.android.launcher3.icons.cache.HandlerRunnable;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.ItemInfoWithIcon;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.model.data.SearchActionItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.launcher3.popup.PopupContainerWithArrow;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.ShortcutUtil;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.BubbleTextHolder;
import com.android.launcher3.views.IconLabelDotView;
import com.android.launcher3.views.IconLabelDotView;


import java.text.NumberFormat;
import java.text.NumberFormat;
@@ -174,7 +174,6 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
    private HandlerRunnable mIconLoadRequest;
    private HandlerRunnable mIconLoadRequest;


    private boolean mEnableIconUpdateAnimation = false;
    private boolean mEnableIconUpdateAnimation = false;
    private BubbleTextHolder mBubbleTextHolder;


    public BubbleTextView(Context context) {
    public BubbleTextView(Context context) {
        this(context, null, 0);
        this(context, null, 0);
@@ -361,15 +360,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
        setDownloadStateContentDescription(info, info.getProgressLevel());
        setDownloadStateContentDescription(info, info.getProgressLevel());
    }
    }


    private void setItemInfo(ItemInfoWithIcon itemInfo) {
    protected void setItemInfo(ItemInfoWithIcon itemInfo) {
        setTag(itemInfo);
        setTag(itemInfo);
        if (mBubbleTextHolder != null) {
            mBubbleTextHolder.onItemInfoUpdated(itemInfo);
        }
    }

    public void setBubbleTextHolder(BubbleTextHolder bubbleTextHolder) {
        mBubbleTextHolder = bubbleTextHolder;
    }
    }


    @UiThread
    @UiThread
@@ -917,10 +909,8 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
            } else if (info instanceof WorkspaceItemInfo) {
            } else if (info instanceof WorkspaceItemInfo) {
                applyFromWorkspaceItem((WorkspaceItemInfo) info);
                applyFromWorkspaceItem((WorkspaceItemInfo) info);
                mActivity.invalidateParent(info);
                mActivity.invalidateParent(info);
            } else if (info instanceof PackageItemInfo) {
            } else if (info != null) {
                applyFromItemInfoWithIcon((PackageItemInfo) info);
                applyFromItemInfoWithIcon(info);
            } else if (info instanceof SearchActionItemInfo) {
                applyFromItemInfoWithIcon((SearchActionItemInfo) info);
            }
            }


            mDisableRelayout = false;
            mDisableRelayout = false;
@@ -1058,4 +1048,19 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver,
        args.put("count", notificationCount);
        args.put("count", notificationCount);
        return icuCountFormat.format(args);
        return icuCountFormat.format(args);
    }
    }

    /**
     * Starts a long press action and returns the corresponding pre-drag condition
     */
    public PreDragCondition startLongPressAction() {
        PopupContainerWithArrow popup = PopupContainerWithArrow.showForIcon(this);
        return popup != null ? popup.createPreDragCondition(true) : null;
    }

    /**
     * Returns true if the view can show long-press popup
     */
    public boolean canShowLongPressPopup() {
        return getTag() instanceof ItemInfo && ShortcutUtil.supportsShortcuts((ItemInfo) getTag());
    }
}
}
Loading