diff options
author | Patrick Dubroy <dubroy@google.com> | 2010-09-06 11:03:37 -0700 |
---|---|---|
committer | Patrick Dubroy <dubroy@google.com> | 2010-09-06 17:37:35 -0700 |
commit | 9f7aec8d4317d0407a41e12f236c962b225cb4c3 (patch) | |
tree | 345278548fa028325acdec41a8f4513b29df47df /src | |
parent | 39670182be72e981cc7c26d9099f6e9636d27411 (diff) | |
download | android_packages_apps_Trebuchet-9f7aec8d4317d0407a41e12f236c962b225cb4c3.tar.gz android_packages_apps_Trebuchet-9f7aec8d4317d0407a41e12f236c962b225cb4c3.tar.bz2 android_packages_apps_Trebuchet-9f7aec8d4317d0407a41e12f236c962b225cb4c3.zip |
Implement selection mode for All Apps with delete and info actions.
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher2/AllAppsPagedView.java | 49 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher2/PagedView.java | 37 |
3 files changed, 63 insertions, 25 deletions
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java index 0aa77245a..bdd7066f2 100644 --- a/src/com/android/launcher2/AllAppsPagedView.java +++ b/src/com/android/launcher2/AllAppsPagedView.java @@ -16,14 +16,14 @@ package com.android.launcher2; -import java.util.ArrayList; -import java.util.Collections; +import com.android.launcher.R; import android.content.ComponentName; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Rect; import android.util.AttributeSet; +import android.util.Log; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; @@ -33,7 +33,8 @@ import android.view.animation.AnimationUtils; import android.widget.Checkable; import android.widget.TextView; -import com.android.launcher.R; +import java.util.ArrayList; +import java.util.Collections; /** * An implementation of PagedView that populates the pages of the workspace @@ -46,6 +47,9 @@ public class AllAppsPagedView extends PagedView private static final String TAG = "AllAppsPagedView"; private static final boolean DEBUG = false; + private static final int MENU_DELETE_APP = 1; + private static final int MENU_APP_INFO = 2; + private Launcher mLauncher; private DragController mDragController; @@ -159,14 +163,19 @@ public class AllAppsPagedView extends PagedView // if we are already in a choice mode, then just change the selection if (v instanceof Checkable) { if (!isChoiceMode(CHOICE_MODE_NONE)) { + Checkable c = (Checkable) v; if (isChoiceMode(CHOICE_MODE_SINGLE)) { - // reset all the previously checked items if in single selection mode + // Uncheck all the other grandchildren, and toggle the clicked one + boolean wasChecked = c.isChecked(); resetCheckedGrandchildren(); + c.setChecked(!wasChecked); + } else { + c.toggle(); + } + if (getCheckedGrandchildren().size() == 0) { + endChoiceMode(); } - // then toggle this one - Checkable c = (Checkable) v; - c.toggle(); return; } } @@ -194,8 +203,6 @@ public class AllAppsPagedView extends PagedView return false; } - /* Uncomment this to enable selection mode with the action bar - // start the choice mode, and select the item that was long-pressed if (isChoiceMode(CHOICE_MODE_NONE)) { startChoiceMode(CHOICE_MODE_SINGLE, this); @@ -210,7 +217,6 @@ public class AllAppsPagedView extends PagedView Checkable c = (Checkable) v; c.toggle(); } - */ ApplicationInfo app = (ApplicationInfo) v.getTag(); app = new ApplicationInfo(app); @@ -391,15 +397,17 @@ public class AllAppsPagedView extends PagedView @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - mDragController.addDropTarget(this); - - // REST TO BE IMPLEMENTED BY PAT - mode.setTitle("Customization title goes here"); + mode.setTitle(R.string.cab_selection_text); + menu.add(0, MENU_APP_INFO, 0, R.string.cab_menu_app_info) + .setIcon(R.drawable.info_button); + menu.add(0, MENU_DELETE_APP, 0, R.string.cab_menu_delete_app) + .setIcon(R.drawable.delete_zone_selector); return true; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mDragController.addDropTarget(this); return true; } @@ -411,8 +419,17 @@ public class AllAppsPagedView extends PagedView @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - // TO BE IMPLEMENTED BY PAT - // get the checked grandchild, and handle the action here + final int id = item.getItemId(); + + // Assumes that we are in CHOICE_MODE_SINGLE + final View chosenView = (View) getSingleCheckedGrandchild(); + final ApplicationInfo appInfo = (ApplicationInfo) chosenView.getTag(); + + if (id == MENU_APP_INFO) { + mLauncher.startApplicationDetailsActivity(appInfo.componentName); + } else if (id == MENU_DELETE_APP) { + mLauncher.startApplicationUninstallActivity(appInfo.componentName); + } return false; } diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index bee69b90d..637f79fb7 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -1305,7 +1305,7 @@ public final class Launcher extends Activity @Override public boolean onCreateOptionsMenu(Menu menu) { - if (isWorkspaceLocked()) { + if (isWorkspaceLocked() || LauncherApplication.isScreenXLarge()) { return false; } diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index 48f42a1ca..df3f0ccad 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -16,9 +16,8 @@ package com.android.launcher2; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; +import com.android.launcher.R; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -26,7 +25,6 @@ import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; -import android.util.Log; import android.view.ActionMode; import android.view.MotionEvent; import android.view.VelocityTracker; @@ -40,7 +38,8 @@ import android.view.animation.AnimationUtils; import android.widget.Checkable; import android.widget.Scroller; -import com.android.launcher.R; +import java.util.ArrayList; +import java.util.HashMap; /** * An abstraction of the original Workspace which supports browsing through a @@ -104,6 +103,7 @@ public abstract class PagedView extends ViewGroup { protected static final int CHOICE_MODE_SINGLE = 1; // Multiple selection mode is not supported by all Launcher actions atm protected static final int CHOICE_MODE_MULTIPLE = 2; + private int mChoiceMode; private ActionMode mActionMode; @@ -1011,10 +1011,10 @@ public abstract class PagedView extends ViewGroup { protected void endChoiceMode() { if (!isChoiceMode(CHOICE_MODE_NONE)) { - mActionMode.finish(); - mActionMode = null; mChoiceMode = CHOICE_MODE_NONE; resetCheckedGrandchildren(); + mActionMode.finish(); + mActionMode = null; } } @@ -1030,7 +1030,7 @@ public abstract class PagedView extends ViewGroup { final int grandChildCount = layout.getChildCount(); for (int j = 0; j < grandChildCount; ++j) { final View v = layout.getChildAt(j); - if (v instanceof Checkable) { + if (v instanceof Checkable && ((Checkable) v).isChecked()) { checked.add((Checkable) v); } } @@ -1038,6 +1038,27 @@ public abstract class PagedView extends ViewGroup { return checked; } + /** + * If in CHOICE_MODE_SINGLE and an item is checked, returns that item. + * Otherwise, returns null. + */ + protected Checkable getSingleCheckedGrandchild() { + if (mChoiceMode == CHOICE_MODE_SINGLE) { + final int childCount = getChildCount(); + for (int i = 0; i < childCount; ++i) { + final PagedViewCellLayout layout = (PagedViewCellLayout) getChildAt(i); + final int grandChildCount = layout.getChildCount(); + for (int j = 0; j < grandChildCount; ++j) { + final View v = layout.getChildAt(j); + if (v instanceof Checkable && ((Checkable) v).isChecked()) { + return (Checkable) v; + } + } + } + } + return null; + } + protected void resetCheckedGrandchildren() { // loop through children, and set all of their children to _not_ be checked final ArrayList<Checkable> checked = getCheckedGrandchildren(); |