• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.launcher3.popup;
2 
3 import android.content.Context;
4 import android.graphics.Rect;
5 import android.graphics.drawable.Drawable;
6 import android.os.Bundle;
7 import android.view.View;
8 
9 import com.android.launcher3.AbstractFloatingView;
10 import com.android.launcher3.InfoDropTarget;
11 import com.android.launcher3.ItemInfo;
12 import com.android.launcher3.Launcher;
13 import com.android.launcher3.R;
14 import com.android.launcher3.model.WidgetItem;
15 import com.android.launcher3.util.PackageUserKey;
16 import com.android.launcher3.util.Themes;
17 import com.android.launcher3.widget.WidgetsBottomSheet;
18 
19 import java.util.List;
20 
21 /**
22  * Represents a system shortcut for a given app. The shortcut should have a static label and
23  * icon, and an onClickListener that depends on the item that the shortcut services.
24  *
25  * Example system shortcuts, defined as inner classes, include Widgets and AppInfo.
26  */
27 public abstract class SystemShortcut {
28     private final int mIconResId;
29     private final int mLabelResId;
30 
SystemShortcut(int iconResId, int labelResId)31     public SystemShortcut(int iconResId, int labelResId) {
32         mIconResId = iconResId;
33         mLabelResId = labelResId;
34     }
35 
getIcon(Context context, int colorAttr)36     public Drawable getIcon(Context context, int colorAttr) {
37         Drawable icon = context.getResources().getDrawable(mIconResId, context.getTheme()).mutate();
38         icon.setTint(Themes.getAttrColor(context, colorAttr));
39         return icon;
40     }
41 
getLabel(Context context)42     public String getLabel(Context context) {
43         return context.getString(mLabelResId);
44     }
45 
getOnClickListener(final Launcher launcher, final ItemInfo itemInfo)46     public abstract View.OnClickListener getOnClickListener(final Launcher launcher,
47             final ItemInfo itemInfo);
48 
49     public static class Widgets extends SystemShortcut {
50 
Widgets()51         public Widgets() {
52             super(R.drawable.ic_widget, R.string.widget_button_text);
53         }
54 
55         @Override
getOnClickListener(final Launcher launcher, final ItemInfo itemInfo)56         public View.OnClickListener getOnClickListener(final Launcher launcher,
57                 final ItemInfo itemInfo) {
58             final List<WidgetItem> widgets = launcher.getWidgetsForPackageUser(new PackageUserKey(
59                     itemInfo.getTargetComponent().getPackageName(), itemInfo.user));
60             if (widgets == null) {
61                 return null;
62             }
63             return new View.OnClickListener() {
64                 @Override
65                 public void onClick(View view) {
66                     AbstractFloatingView.closeAllOpenViews(launcher);
67                     WidgetsBottomSheet widgetsBottomSheet =
68                             (WidgetsBottomSheet) launcher.getLayoutInflater().inflate(
69                                     R.layout.widgets_bottom_sheet, launcher.getDragLayer(), false);
70                     widgetsBottomSheet.populateAndShow(itemInfo);
71                 }
72             };
73         }
74     }
75 
76     public static class AppInfo extends SystemShortcut {
77         public AppInfo() {
78             super(R.drawable.ic_info_no_shadow, R.string.app_info_drop_target_label);
79         }
80 
81         @Override
82         public View.OnClickListener getOnClickListener(final Launcher launcher,
83                 final ItemInfo itemInfo) {
84             return new View.OnClickListener() {
85                 @Override
86                 public void onClick(View view) {
87                     Rect sourceBounds = launcher.getViewBounds(view);
88                     Bundle opts = launcher.getActivityLaunchOptions(view);
89                     InfoDropTarget.startDetailsActivityForInfo(itemInfo, launcher, null, sourceBounds, opts);
90                 }
91             };
92         }
93     }
94 }
95