summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/CustomizePagedView.java
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2010-09-26 17:26:45 -0700
committerWinson Chung <winsonc@google.com>2010-09-27 09:34:15 -0700
commitd0d43010c7a091b6ade407d30e490527a8d16120 (patch)
tree164907441c3ca3b84a08dc0da6ec12b4707c4635 /src/com/android/launcher2/CustomizePagedView.java
parent28750fba6a2d141eb9a1e566718c17236030b815 (diff)
downloadandroid_packages_apps_Trebuchet-d0d43010c7a091b6ade407d30e490527a8d16120.tar.gz
android_packages_apps_Trebuchet-d0d43010c7a091b6ade407d30e490527a8d16120.tar.bz2
android_packages_apps_Trebuchet-d0d43010c7a091b6ade407d30e490527a8d16120.zip
Adding tap-to-add behaviour to the customization drawer.
Change-Id: I5a0863a8df2a0b4855112eb29b40b6e7dd550db9
Diffstat (limited to 'src/com/android/launcher2/CustomizePagedView.java')
-rw-r--r--src/com/android/launcher2/CustomizePagedView.java148
1 files changed, 120 insertions, 28 deletions
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index 79b3e6f21..f6cff05ed 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -36,10 +36,15 @@ import android.graphics.drawable.Drawable;
import android.provider.LiveFolders;
import android.util.AttributeSet;
import android.util.Log;
+import android.view.ActionMode;
import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -51,7 +56,7 @@ import java.util.List;
public class CustomizePagedView extends PagedView
implements View.OnLongClickListener, View.OnClickListener,
- DragSource {
+ DragSource, ActionMode.Callback {
public enum CustomizationType {
WidgetCustomization,
@@ -313,6 +318,9 @@ public class CustomizePagedView extends PagedView
mCustomizationType = filterType;
setCurrentPage(0);
invalidatePageData();
+
+ // End the current choice mode so that we don't carry selections across tabs
+ endChoiceMode();
}
@Override
@@ -326,15 +334,43 @@ public class CustomizePagedView extends PagedView
return;
}
- final View animView = v;
+ // On certain pages, we allow single tap to mark items as selected so that they can be
+ // dropped onto the mini workspaces
+ switch (mCustomizationType) {
+ case WidgetCustomization:
+ case ApplicationCustomization:
+ case FolderCustomization:
+ case ShortcutCustomization:
+ if (isChoiceMode(CHOICE_MODE_NONE)) {
+ startChoiceMode(CHOICE_MODE_SINGLE, this);
+ }
+
+ if (v instanceof Checkable) {
+ final Checkable c = (Checkable) v;
+ final boolean wasChecked = c.isChecked();
+ resetCheckedGrandchildren();
+ c.setChecked(!wasChecked);
+
+ // End the current choice mode when we have no items selected
+ if (!c.isChecked()) {
+ endChoiceMode();
+ }
+ }
+ return;
+ default:
+ break;
+ }
+
+ // Otherwise, we just handle the single click here
switch (mCustomizationType) {
case WallpaperCustomization:
// animate some feedback to the long press
+ final View clickView = v;
animateClickFeedback(v, new Runnable() {
@Override
public void run() {
// add the shortcut
- ResolveInfo info = (ResolveInfo) animView.getTag();
+ ResolveInfo info = (ResolveInfo) clickView.getTag();
Intent createWallpapersIntent = new Intent(Intent.ACTION_SET_WALLPAPER);
ComponentName name = new ComponentName(info.activityInfo.packageName,
info.activityInfo.name);
@@ -342,6 +378,9 @@ public class CustomizePagedView extends PagedView
mLauncher.processWallpaper(createWallpapersIntent);
}
});
+ break;
+ default:
+ break;
}
}
@@ -351,46 +390,43 @@ public class CustomizePagedView extends PagedView
return false;
}
- final View animView = v;
- PendingAddItemInfo createItemInfo = new PendingAddItemInfo();
+ // End the current choice mode before we start dragging anything
+ if (isChoiceMode(CHOICE_MODE_SINGLE)) {
+ endChoiceMode();
+ }
+
+ PendingAddItemInfo createItemInfo;
switch (mCustomizationType) {
case WidgetCustomization:
// Get the icon as the drag representation
- final LinearLayout l = (LinearLayout) animView;
- final Drawable icon = ((ImageView) l.findViewById(R.id.icon)).getDrawable();
+ final LinearLayout l = (LinearLayout) v;
+ final Drawable icon = ((ImageView) l.findViewById(R.id.widget_preview)).getDrawable();
Bitmap b = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
icon.draw(c);
- AppWidgetProviderInfo appWidgetInfo = (AppWidgetProviderInfo) v.getTag();
- createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
- createItemInfo.componentName = appWidgetInfo.provider;
- mDragController.startDrag(v, b, this, createItemInfo, DragController.DRAG_ACTION_COPY, null);
+ createItemInfo = (PendingAddItemInfo) v.getTag();
+ mDragController.startDrag(v, b, this, createItemInfo, DragController.DRAG_ACTION_COPY,
+ null);
// Cleanup the icon
b.recycle();
return true;
case FolderCustomization:
- ResolveInfo resolveInfo = (ResolveInfo) animView.getTag();
- if (resolveInfo.labelRes == R.string.group_folder) {
- UserFolderInfo folderInfo = new UserFolderInfo();
- folderInfo.title = getResources().getText(R.string.folder_name);
+ if (v.getTag() instanceof UserFolderInfo) {
+ // The UserFolderInfo tag is only really used for live folders
+ UserFolderInfo folderInfo = (UserFolderInfo) v.getTag();
mDragController.startDrag(
v, this, folderInfo, DragController.DRAG_ACTION_COPY, null);
} else {
- createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER;
- createItemInfo.componentName = new ComponentName(
- resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
+ createItemInfo = (PendingAddItemInfo) v.getTag();
mDragController.startDrag(
v, this, createItemInfo, DragController.DRAG_ACTION_COPY, null);
}
return true;
case ShortcutCustomization:
- ResolveInfo info = (ResolveInfo) animView.getTag();
- createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
- createItemInfo.componentName = new ComponentName(
- info.activityInfo.packageName, info.activityInfo.name);
+ createItemInfo = (PendingAddItemInfo) v.getTag();
mDragController.startDrag(
v, this, createItemInfo, DragController.DRAG_ACTION_COPY, null);
return true;
@@ -550,21 +586,26 @@ public class CustomizePagedView extends PagedView
layout.removeAllViews();
for (int i = 0; i < count; ++i) {
AppWidgetProviderInfo info = (AppWidgetProviderInfo) list.get(i);
+ PendingAddItemInfo createItemInfo = new PendingAddItemInfo();
+ createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
+ createItemInfo.componentName = info.provider;
+
LinearLayout l = (LinearLayout) mInflater.inflate(
R.layout.customize_paged_view_widget, layout, false);
- l.setTag(info);
+ l.setTag(createItemInfo);
+ l.setOnClickListener(this);
l.setOnLongClickListener(this);
final Drawable icon = getWidgetIcon(info);
final int hSpan = mWorkspaceWidgetLayout.estimateCellHSpan(info.minWidth);
final int vSpan = mWorkspaceWidgetLayout.estimateCellHSpan(info.minHeight);
- ImageView image = (ImageView) l.findViewById(R.id.icon);
+ ImageView image = (ImageView) l.findViewById(R.id.widget_preview);
image.setMaxWidth(mMaxWidgetWidth);
image.setImageDrawable(icon);
- TextView name = (TextView) l.findViewById(R.id.name);
+ TextView name = (TextView) l.findViewById(R.id.widget_name);
name.setText(info.label);
- TextView dims = (TextView) l.findViewById(R.id.dims);
+ TextView dims = (TextView) l.findViewById(R.id.widget_dims);
dims.setText(mContext.getString(R.string.widget_dims_format, hSpan, vSpan));
layout.addView(l);
@@ -594,13 +635,39 @@ public class CustomizePagedView extends PagedView
layout.removeAllViews();
for (int i = startIndex; i < endIndex; ++i) {
ResolveInfo info = list.get(i);
+ PendingAddItemInfo createItemInfo = new PendingAddItemInfo();
+
PagedViewIcon icon = (PagedViewIcon) mInflater.inflate(
R.layout.customize_paged_view_item, layout, false);
icon.applyFromResolveInfo(info, mPackageManager, mPageViewIconCache);
- if (mCustomizationType == CustomizationType.WallpaperCustomization) {
+ switch (mCustomizationType) {
+ case WallpaperCustomization:
+ icon.setOnClickListener(this);
+ break;
+ case FolderCustomization:
+ if (info.labelRes != R.string.group_folder) {
+ createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_LIVE_FOLDER;
+ createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
+ info.activityInfo.name);
+ icon.setTag(createItemInfo);
+ } else {
+ UserFolderInfo folderInfo = new UserFolderInfo();
+ folderInfo.title = getResources().getText(R.string.folder_name);
+ icon.setTag(folderInfo);
+ }
icon.setOnClickListener(this);
- } else {
icon.setOnLongClickListener(this);
+ break;
+ case ShortcutCustomization:
+ createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
+ createItemInfo.componentName = new ComponentName(info.activityInfo.packageName,
+ info.activityInfo.name);
+ icon.setTag(createItemInfo);
+ icon.setOnClickListener(this);
+ icon.setOnLongClickListener(this);
+ break;
+ default:
+ break;
}
final int index = i - startIndex;
@@ -641,6 +708,7 @@ public class CustomizePagedView extends PagedView
PagedViewIcon icon = (PagedViewIcon) mInflater.inflate(
R.layout.all_apps_paged_view_application, layout, false);
icon.applyFromApplicationInfo(info, mPageViewIconCache);
+ icon.setOnClickListener(this);
icon.setOnLongClickListener(this);
final int index = i - startIndex;
@@ -719,10 +787,34 @@ public class CustomizePagedView extends PagedView
}
}
+ @Override
protected int getAssociatedLowerPageBound(int page) {
return 0;
}
+ @Override
protected int getAssociatedUpperPageBound(int page) {
return getChildCount();
}
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ mode.setTitle(R.string.cab_selection_text);
+ return true;
+ }
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ return true;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ endChoiceMode();
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return false;
+ }
+
}