summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher/AddAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher/AddAdapter.java')
-rw-r--r--src/com/android/launcher/AddAdapter.java493
1 files changed, 74 insertions, 419 deletions
diff --git a/src/com/android/launcher/AddAdapter.java b/src/com/android/launcher/AddAdapter.java
index 8eebe39d9..14107084e 100644
--- a/src/com/android/launcher/AddAdapter.java
+++ b/src/com/android/launcher/AddAdapter.java
@@ -16,456 +16,111 @@
package com.android.launcher;
-import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.BaseAdapter;
import android.widget.TextView;
-import android.widget.BaseExpandableListAdapter;
-import android.graphics.drawable.Drawable;
-import android.provider.LiveFolders;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
/**
- * Shows a list of all the items that can be added to the workspace.
+ * Adapter showing the types of items that can be added to a {@link Workspace}.
*/
-public final class AddAdapter extends BaseExpandableListAdapter {
- private static final int GROUP_APPLICATIONS = 0;
- private static final int GROUP_SHORTCUTS = 1;
- private static final int GROUP_WIDGETS = 2;
- private static final int GROUP_LIVE_FOLDERS = 3;
- private static final int GROUP_WALLPAPERS = 4;
-
- private final Intent mCreateShortcutIntent;
- private final Intent mCreateLiveFolderIntent;
- private Intent mSetWallpaperIntent;
+public class AddAdapter extends BaseAdapter {
+
+ private final Launcher mLauncher;
private final LayoutInflater mInflater;
- private Launcher mLauncher;
- private Group[] mGroups;
-
- /**
- * Abstract class representing one thing that can be added
- */
- public abstract class AddAction implements Runnable {
- protected final Context mContext;
-
- AddAction(Context context) {
- mContext = context;
- }
-
- Drawable getIcon(int resource) {
- return mContext.getResources().getDrawable(resource);
- }
-
- public abstract void bindView(View v);
- }
-
- /**
- * Class representing an action that will create set the wallpaper.
- */
- public class SetWallpaperAction extends CreateShortcutAction {
- SetWallpaperAction(Context context, ResolveInfo info) {
- super(context, info);
- }
-
- public void run() {
- Intent intent = new Intent(mSetWallpaperIntent);
- ActivityInfo activityInfo = mInfo.activityInfo;
- intent.setComponent(new ComponentName(activityInfo.applicationInfo.packageName,
- activityInfo.name));
- mLauncher.startActivity(intent);
- }
- }
+
+ private final ArrayList<ListItem> mItems = new ArrayList<ListItem>();
+
+ public static final int ITEM_APPLICATION = 0;
+ public static final int ITEM_SHORTCUT = 1;
+ public static final int ITEM_SEARCH = 2;
+ public static final int ITEM_GADGET = 3;
+ public static final int ITEM_LIVE_FOLDER = 4;
+ public static final int ITEM_FOLDER = 5;
+ public static final int ITEM_WALLPAPER = 6;
/**
- * Class representing an action that will create a specific type
- * of shortcut
+ * Specific item in our list.
*/
- public class CreateShortcutAction extends AddAction {
+ public class ListItem {
+ public final CharSequence text;
+ public final Drawable image;
+ public final int actionTag;
- ResolveInfo mInfo;
- private CharSequence mLabel;
- private Drawable mIcon;
-
- CreateShortcutAction(Context context, ResolveInfo info) {
- super(context);
- mInfo = info;
- }
-
- @Override
- public void bindView(View view) {
- ResolveInfo info = mInfo;
- TextView text = (TextView) view;
-
- PackageManager pm = mLauncher.getPackageManager();
-
- if (mLabel == null) {
- mLabel = info.loadLabel(pm);
- if (mLabel == null) {
- mLabel = info.activityInfo.name;
- }
+ public ListItem(Resources res, int textResourceId, int imageResourceId, int actionTag) {
+ text = res.getString(textResourceId);
+ if (imageResourceId != -1) {
+ image = res.getDrawable(imageResourceId);
+ } else {
+ image = null;
}
-
- if (mIcon == null) {
- mIcon = Utilities.createIconThumbnail(info.loadIcon(pm), mContext);
- }
-
- text.setText(mLabel);
- text.setCompoundDrawablesWithIntrinsicBounds(mIcon, null, null, null);
- }
-
- public void run() {
- Intent intent = new Intent(mCreateShortcutIntent);
- ActivityInfo activityInfo = mInfo.activityInfo;
- intent.setComponent(new ComponentName(activityInfo.applicationInfo.packageName,
- activityInfo.name));
- mLauncher.addShortcut(intent);
- }
- }
-
- /**
- * Class representing an action that will create a specific type
- * of live folder
- */
- public class CreateLiveFolderAction extends CreateShortcutAction {
- CreateLiveFolderAction(Context context, ResolveInfo info) {
- super(context, info);
- }
-
- @Override
- public void run() {
- Intent intent = new Intent(mCreateLiveFolderIntent);
- ActivityInfo activityInfo = mInfo.activityInfo;
- intent.setComponent(new ComponentName(activityInfo.applicationInfo.packageName,
- activityInfo.name));
- mLauncher.addLiveFolder(intent);
- }
- }
-
- /**
- * Class representing an action that will add a folder
- */
- public class CreateFolderAction extends AddAction {
- private Drawable mIcon;
-
- CreateFolderAction(Context context) {
- super(context);
- }
-
- @Override
- public void bindView(View view) {
- TextView text = (TextView) view;
- text.setText(R.string.add_folder);
- if (mIcon == null) mIcon = getIcon(R.drawable.ic_launcher_folder);
- text.setCompoundDrawablesWithIntrinsicBounds(mIcon, null, null, null);
- }
-
- public void run() {
- mLauncher.addFolder();
- }
- }
-
- /**
- * Class representing an action that will add a folder
- */
- public class CreateClockAction extends AddAction {
-
- CreateClockAction(Context context) {
- super(context);
- }
-
- @Override
- public void bindView(View view) {
- TextView text = (TextView) view;
- text.setText(R.string.add_clock);
- Drawable icon = getIcon(R.drawable.ic_launcher_alarmclock);
- text.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
- }
-
- public void run() {
- mLauncher.addClock();
- }
- }
-
- /**
- * Class representing an action that will add a PhotoFrame
- */
- public class CreatePhotoFrameAction extends AddAction {
- private Drawable mIcon;
-
- CreatePhotoFrameAction(Context context) {
- super(context);
- }
-
- @Override
- public void bindView(View view) {
- TextView text = (TextView) view;
- text.setText(R.string.add_photo_frame);
- if (mIcon == null) mIcon = getIcon(R.drawable.ic_launcher_gallery);
- text.setCompoundDrawablesWithIntrinsicBounds(mIcon, null, null, null);
- }
-
- public void run() {
- mLauncher.getPhotoForPhotoFrame();
- }
- }
-
-
- /**
- * Class representing an action that will add a Search widget
- */
- public class CreateSearchAction extends AddAction {
- private Drawable mIcon;
-
- CreateSearchAction(Context context) {
- super(context);
- }
-
- @Override
- public void bindView(View view) {
- TextView text = (TextView) view;
- text.setText(R.string.add_search);
- if (mIcon == null) mIcon = getIcon(R.drawable.ic_search_gadget);
- text.setCompoundDrawablesWithIntrinsicBounds(mIcon, null, null, null);
- }
-
- public void run() {
- mLauncher.addSearch();
+ this.actionTag = actionTag;
}
}
- private class Group {
- private String mName;
- private ArrayList<AddAction> mList;
-
- Group(String name) {
- mName = name;
- mList = new ArrayList<AddAction>();
- }
-
- void add(AddAction action) {
- mList.add(action);
- }
-
- int size() {
- return mList.size();
- }
-
- String getName() {
- return mName;
- }
-
- void run(int position) {
- mList.get(position).run();
- }
-
- void bindView(int childPosition, View view) {
- mList.get(childPosition).bindView(view);
- }
-
- public Object get(int childPosition) {
- return mList.get(childPosition);
- }
- }
-
- private class ApplicationsGroup extends Group {
- private final Launcher mLauncher;
- private final ArrayList<ApplicationInfo> mApplications;
-
- ApplicationsGroup(Launcher launcher, String name) {
- super(name);
- mLauncher = launcher;
- mApplications = Launcher.getModel().getApplications();
- }
-
- @Override
- int size() {
- return mApplications == null ? 0 : mApplications.size();
- }
-
- @Override
- void add(AddAction action) {
- }
-
- @Override
- void run(int position) {
- final ApplicationInfo info = mApplications.get(position);
- mLauncher.addApplicationShortcut(info);
- }
-
- @Override
- void bindView(int childPosition, View view) {
- TextView text = (TextView) view.findViewById(R.id.title);
-
- final ApplicationInfo info = mApplications.get(childPosition);
- text.setText(info.title);
- if (!info.filtered) {
- info.icon = Utilities.createIconThumbnail(info.icon, mLauncher);
- info.filtered = true;
- }
- text.setCompoundDrawablesWithIntrinsicBounds(info.icon, null, null, null);
- }
-
- @Override
- public Object get(int childPosition) {
- return mApplications.get(childPosition);
- }
- }
-
- public AddAdapter(Launcher launcher, boolean forFolder) {
- mCreateShortcutIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
- mCreateShortcutIntent.setComponent(null);
-
- mCreateLiveFolderIntent = new Intent(LiveFolders.ACTION_CREATE_LIVE_FOLDER);
- mCreateLiveFolderIntent.setComponent(null);
-
- mSetWallpaperIntent = new Intent(Intent.ACTION_SET_WALLPAPER);
- mSetWallpaperIntent.setComponent(null);
-
+ public AddAdapter(Launcher launcher) {
+ super();
+
mLauncher = launcher;
- mInflater = (LayoutInflater) launcher.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- mGroups = new Group[forFolder ? 2 : 5];
- final Group[] groups = mGroups;
- groups[GROUP_APPLICATIONS] = new ApplicationsGroup(mLauncher,
- mLauncher.getString(R.string.group_applications));
- groups[GROUP_SHORTCUTS] = new Group(mLauncher.getString(R.string.group_shortcuts));
- groups[GROUP_LIVE_FOLDERS] = new Group(mLauncher.getString(R.string.group_live_folders));
-
- if (!forFolder) {
- groups[GROUP_WALLPAPERS] = new Group(mLauncher.getString(R.string.group_wallpapers));
- groups[GROUP_SHORTCUTS].add(new CreateFolderAction(launcher));
- groups[GROUP_WIDGETS] = new Group(mLauncher.getString(R.string.group_widgets));
-
- final Group widgets = groups[GROUP_WIDGETS];
- widgets.add(new CreateClockAction(launcher));
- widgets.add(new CreatePhotoFrameAction(launcher));
- widgets.add(new CreateSearchAction(launcher));
- }
+ mInflater = (LayoutInflater) mLauncher.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- PackageManager packageManager = launcher.getPackageManager();
-
- List<ResolveInfo> list = findTargetsForIntent(mCreateShortcutIntent, packageManager);
- if (list != null && list.size() > 0) {
- int count = list.size();
- final Group shortcuts = groups[GROUP_SHORTCUTS];
- for (int i = 0; i < count; i++) {
- ResolveInfo resolveInfo = list.get(i);
- shortcuts.add(new CreateShortcutAction(launcher, resolveInfo));
- }
- }
-
- list = findTargetsForIntent(mCreateLiveFolderIntent, packageManager);
- if (list != null && list.size() > 0) {
- int count = list.size();
- final Group shortcuts = groups[GROUP_LIVE_FOLDERS];
- for (int i = 0; i < count; i++) {
- ResolveInfo resolveInfo = list.get(i);
- shortcuts.add(new CreateLiveFolderAction(launcher, resolveInfo));
- }
- }
-
- list = findTargetsForIntent(mSetWallpaperIntent, packageManager);
- if (list != null && list.size() > 0) {
- int count = list.size();
- final Group shortcuts = groups[GROUP_WALLPAPERS];
- for (int i = 0; i < count; i++) {
- ResolveInfo resolveInfo = list.get(i);
- shortcuts.add(new SetWallpaperAction(launcher, resolveInfo));
- }
- }
- }
-
- private List<ResolveInfo> findTargetsForIntent(Intent intent, PackageManager packageManager) {
- List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY);
- if (list != null) {
- int count = list.size();
- if (count > 1) {
- // Only display the first matches that are either of equal
- // priority or have asked to be default options.
- ResolveInfo firstInfo = list.get(0);
- for (int i=1; i<count; i++) {
- ResolveInfo resolveInfo = list.get(i);
- if (firstInfo.priority != resolveInfo.priority ||
- firstInfo.isDefault != resolveInfo.isDefault) {
- while (i < count) {
- list.remove(i);
- count--;
- }
- }
- }
- Collections.sort(list, new ResolveInfo.DisplayNameComparator(packageManager));
- }
- }
- return list;
- }
-
- public int getGroupCount() {
- return mGroups.length;
- }
-
- public int getChildrenCount(int groupPosition) {
- return mGroups[groupPosition].size();
- }
-
- public Object getGroup(int groupPosition) {
- return mGroups[groupPosition].getName();
- }
-
- public Object getChild(int groupPosition, int childPosition) {
- return mGroups[groupPosition].get(childPosition);
- }
-
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
-
- public long getChildId(int groupPosition, int childPosition) {
- return (groupPosition << 16) | childPosition;
- }
+ // Create default actions
+ Resources res = launcher.getResources();
+
+ mItems.add(new ListItem(res, R.string.group_applications,
+ R.drawable.ic_launcher_application, ITEM_APPLICATION));
+
+ mItems.add(new ListItem(res, R.string.group_shortcuts,
+ R.drawable.ic_launcher_empty, ITEM_SHORTCUT));
+
+ mItems.add(new ListItem(res, R.string.group_search,
+ R.drawable.ic_search_gadget, ITEM_SEARCH));
+
+ mItems.add(new ListItem(res, R.string.group_gadgets,
+ R.drawable.ic_launcher_gadget, ITEM_GADGET));
+
+ mItems.add(new ListItem(res, R.string.group_live_folders,
+ R.drawable.ic_launcher_empty, ITEM_LIVE_FOLDER));
+
+ mItems.add(new ListItem(res, R.string.group_folder,
+ R.drawable.ic_launcher_folder, ITEM_FOLDER));
+
+ mItems.add(new ListItem(res, R.string.group_wallpapers,
+ R.drawable.ic_launcher_gallery, ITEM_WALLPAPER));
- public boolean hasStableIds() {
- return true;
}
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- View view;
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ListItem item = (ListItem) getItem(position);
+
if (convertView == null) {
- view = mInflater.inflate(R.layout.create_shortcut_group_item, parent, false);
- } else {
- view = convertView;
+ convertView = mInflater.inflate(R.layout.add_list_item, parent, false);
}
- ((TextView) view).setText(mGroups[groupPosition].getName());
- return view;
+
+ TextView textView = (TextView) convertView;
+ textView.setTag(item);
+ textView.setText(item.text);
+ textView.setCompoundDrawablesWithIntrinsicBounds(item.image, null, null, null);
+
+ return convertView;
}
- public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
- View convertView, ViewGroup parent) {
- View view;
- if (convertView == null) {
- view = mInflater.inflate(R.layout.create_shortcut_list_item, parent, false);
- } else {
- view = convertView;
- }
- mGroups[groupPosition].bindView(childPosition, view);
- return view;
+ public int getCount() {
+ return mItems.size();
}
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
+ public Object getItem(int position) {
+ return mItems.get(position);
}
- void performAction(int groupPosition, int childPosition) {
- mGroups[groupPosition].run(childPosition);
+ public long getItemId(int position) {
+ return position;
}
+
}