126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhampackage com.android.launcher3.popup;
226b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
3d690d68f976ce0394d28f83352f922f3cccab16bTony Wickhamimport android.content.Context;
4e3c59256794448c67e01333a9f5036559b1bd502Tonyimport android.graphics.Rect;
526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport android.graphics.drawable.Drawable;
6e3c59256794448c67e01333a9f5036559b1bd502Tonyimport android.os.Bundle;
726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport android.view.View;
826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
98897b4167e7f3761ce477cac7699093dcd0782daTony Wickhamimport com.android.launcher3.AbstractFloatingView;
1026b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.InfoDropTarget;
1126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.ItemInfo;
1226b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.Launcher;
1326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.R;
1426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.model.WidgetItem;
1526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport com.android.launcher3.util.PackageUserKey;
16343a77e609382bcb9b1d69ea235a9e6d779b719eTony Wickhamimport com.android.launcher3.widget.WidgetsBottomSheet;
1726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
1826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickhamimport java.util.List;
1926b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
201d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickhamimport static com.android.launcher3.userevent.nano.LauncherLogProto.Action;
211d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickhamimport static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType;
221d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickham
2326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham/**
2426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham * Represents a system shortcut for a given app. The shortcut should have a static label and
2526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham * icon, and an onClickListener that depends on the item that the shortcut services.
2626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham *
2726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham * Example system shortcuts, defined as inner classes, include Widgets and AppInfo.
2826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham */
291d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickhampublic abstract class SystemShortcut extends ItemInfo {
3026b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    private final int mIconResId;
3126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    private final int mLabelResId;
3226b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
3326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    public SystemShortcut(int iconResId, int labelResId) {
3426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        mIconResId = iconResId;
3526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        mLabelResId = labelResId;
3626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    }
3726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
38c66c3e2ba4876c9d383c1d7deddeee474f1c4859Tony Wickham    public Drawable getIcon(Context context) {
39c66c3e2ba4876c9d383c1d7deddeee474f1c4859Tony Wickham        return context.getResources().getDrawable(mIconResId, context.getTheme());
4026b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    }
4126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
42d690d68f976ce0394d28f83352f922f3cccab16bTony Wickham    public String getLabel(Context context) {
43d690d68f976ce0394d28f83352f922f3cccab16bTony Wickham        return context.getString(mLabelResId);
4426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    }
4526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
4626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    public abstract View.OnClickListener getOnClickListener(final Launcher launcher,
4726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            final ItemInfo itemInfo);
4826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
4926b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    public static class Widgets extends SystemShortcut {
5026b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
5126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        public Widgets() {
52b5ac4ed5ec47cd6018bb6575852e2ec69c3592e8Tony Wickham            super(R.drawable.ic_widget, R.string.widget_button_text);
5326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        }
5426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
5526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        @Override
5626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        public View.OnClickListener getOnClickListener(final Launcher launcher,
5726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                final ItemInfo itemInfo) {
5826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            final List<WidgetItem> widgets = launcher.getWidgetsForPackageUser(new PackageUserKey(
5926b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                    itemInfo.getTargetComponent().getPackageName(), itemInfo.user));
6026b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            if (widgets == null) {
6126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                return null;
6226b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            }
6326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            return new View.OnClickListener() {
6426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                @Override
6526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                public void onClick(View view) {
668897b4167e7f3761ce477cac7699093dcd0782daTony Wickham                    AbstractFloatingView.closeAllOpenViews(launcher);
67343a77e609382bcb9b1d69ea235a9e6d779b719eTony Wickham                    WidgetsBottomSheet widgetsBottomSheet =
68343a77e609382bcb9b1d69ea235a9e6d779b719eTony Wickham                            (WidgetsBottomSheet) launcher.getLayoutInflater().inflate(
69343a77e609382bcb9b1d69ea235a9e6d779b719eTony Wickham                                    R.layout.widgets_bottom_sheet, launcher.getDragLayer(), false);
70343a77e609382bcb9b1d69ea235a9e6d779b719eTony Wickham                    widgetsBottomSheet.populateAndShow(itemInfo);
711d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickham                    launcher.getUserEventDispatcher().logActionOnControl(Action.Touch.TAP,
721d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickham                            ControlType.WIDGETS_BUTTON, view);
7326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                }
7426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            };
7526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        }
7626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    }
7726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
7826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    public static class AppInfo extends SystemShortcut {
7926b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        public AppInfo() {
80d690d68f976ce0394d28f83352f922f3cccab16bTony Wickham            super(R.drawable.ic_info_no_shadow, R.string.app_info_drop_target_label);
8126b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        }
8226b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham
8326b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        @Override
8426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        public View.OnClickListener getOnClickListener(final Launcher launcher,
8526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                final ItemInfo itemInfo) {
8626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            return new View.OnClickListener() {
8726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                @Override
8826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                public void onClick(View view) {
89e3c59256794448c67e01333a9f5036559b1bd502Tony                    Rect sourceBounds = launcher.getViewBounds(view);
90e3c59256794448c67e01333a9f5036559b1bd502Tony                    Bundle opts = launcher.getActivityLaunchOptions(view);
91e3c59256794448c67e01333a9f5036559b1bd502Tony                    InfoDropTarget.startDetailsActivityForInfo(itemInfo, launcher, null, sourceBounds, opts);
921d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickham                    launcher.getUserEventDispatcher().logActionOnControl(Action.Touch.TAP,
931d0b0e25dcde8ff3abf3484871c72116581f70d8Tony Wickham                            ControlType.APPINFO_TARGET, view);
9426b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham                }
9526b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham            };
9626b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham        }
9726b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham    }
9826b1746593851e239bfff65ae7a69b809ad87b99Tony Wickham}
99