From f5568e40bbad4c47c7913d03ab8eb7294bbcf1df Mon Sep 17 00:00:00 2001 From: intrigus Date: Mon, 23 Nov 2015 22:31:51 +0100 Subject: [PATCH] Remove SwipableListItem, instead use a contextual action bar, highlight selected items --- .../store/fragments/BasketFragment.java | 84 +++++++++++++------ .../robovm/store/views/SwipableListItem.java | 4 +- .../main/res/drawable/list_item_selector.xml | 7 ++ android/src/main/res/layout/basket_item.xml | 47 +---------- android/src/main/res/layout/product_cell.xml | 7 +- android/src/main/res/menu/context_menu.xml | 14 ++++ .../main/java/org/robovm/store/util/I18N.java | 2 +- .../main/resources/StringsBundle.properties | 3 +- .../resources/StringsBundle_de.properties | 3 +- .../resources/StringsBundle_en.properties | 3 +- 10 files changed, 97 insertions(+), 77 deletions(-) create mode 100644 android/src/main/res/drawable/list_item_selector.xml create mode 100644 android/src/main/res/menu/context_menu.xml diff --git a/android/src/main/java/org/robovm/store/fragments/BasketFragment.java b/android/src/main/java/org/robovm/store/fragments/BasketFragment.java index 0fc5265..303f7f7 100644 --- a/android/src/main/java/org/robovm/store/fragments/BasketFragment.java +++ b/android/src/main/java/org/robovm/store/fragments/BasketFragment.java @@ -18,8 +18,13 @@ import android.app.ListFragment; import android.content.Context; +import android.graphics.Color; import android.os.Bundle; +import android.util.SparseBooleanArray; +import android.view.ActionMode; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.*; @@ -79,6 +84,54 @@ public void onViewCreated(View view, Bundle savedInstanceState) { getListView().setDividerHeight(0); getListView().setDivider(null); setListAdapter(new GroceryListAdapter(view.getContext(), basket)); + getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL); + getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { + + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, + long id, boolean checked) { + mode.setTitle(getListView().getCheckedItemCount() + " " + getLocalizedString(Key.selected)); + /*if (getListView().getCheckedItemCount() == 1) { + TODO add ability to edit an item in the basket + mode.getMenu().findItem(R.id.edit_item).setVisible(true); + } else { + mode.getMenu().findItem(R.id.edit_item).setVisible(false); + }*/ + mode.getMenu().findItem(R.id.edit_item).setVisible(false); //Todo Remove this if todo above is done + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + + switch (item.getItemId()) { + case R.id.delete_item: + SparseBooleanArray selectedItems = getListView().getCheckedItemPositions(); + for (int i = (selectedItems.size() - 1); i >= 0; i--) { + if (selectedItems.valueAt(i)) { + ((GroceryListAdapter) getListView().getAdapter()).remove(selectedItems.keyAt(i)); + } + } + mode.finish(); + } + return false; + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mode.getMenuInflater().inflate(R.menu.context_menu, menu); + return true; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + }); + if (getListAdapter().getCount() == 0) { checkoutButton.setVisibility(View.INVISIBLE); } @@ -101,6 +154,11 @@ public long getItemId(int position) { return position; } + public void remove(int position){ + basket.remove(position); + notifyDataSetChanged(); + } + @Override public Object getItem(int position) { return basket.get(position).toString(); @@ -118,31 +176,6 @@ public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; // re-use an existing view, if one is available if (view == null) { view = LayoutInflater.from(context).inflate(R.layout.basket_item, parent, false); - ViewSwipeTouchListener swipper = ((SwipableListItem) view).getSwipeListener(); - final View finalView = view; - swipper.addEventListener(new ViewSwipeTouchListener.EventListener() { - @Override - public void onSwipeGestureBegin() { - parent.requestDisallowInterceptTouchEvent(true); - } - - @Override - public void onSwipeGestureEnd() { - parent.requestDisallowInterceptTouchEvent(false); - } - - @Override - public void onItemSwipped() { - // If view has already been processed, do nothing - if (finalView.getParent() == null) { - return; - } - int p = ((ListView) parent).getPositionForView(finalView); - Basket basket = RoboVMWebService.getInstance().getBasket(); - basket.remove(p); - notifyDataSetChanged(); - } - }); } ((TextView) view.findViewById(R.id.productTitle)).setText(order.getProduct().getName()); @@ -151,7 +184,6 @@ public void onItemSwipped() { ((TextView) view.findViewById(R.id.productSize)).setText(order.getSize().getName()); ImageView orderImage = (ImageView) view.findViewById(R.id.productImage); - orderImage.setImageResource(R.drawable.product_image); Images.setImageFromUrlAsync(orderImage, order.getColor().getImageUrls().get(0)); diff --git a/android/src/main/java/org/robovm/store/views/SwipableListItem.java b/android/src/main/java/org/robovm/store/views/SwipableListItem.java index 16e31cd..edf5d46 100644 --- a/android/src/main/java/org/robovm/store/views/SwipableListItem.java +++ b/android/src/main/java/org/robovm/store/views/SwipableListItem.java @@ -84,7 +84,9 @@ public View getMainContent() { } public View getSecondaryContent() { - return secondaryContent == null ? secondaryContent = findViewById(R.id.swipeAfter) : secondaryContent; + return null; + // The id 'swipeAfter' doesn't exist anymore + //return secondaryContent == null ? secondaryContent = findViewById(R.id.swipeAfter) : secondaryContent; } @Override diff --git a/android/src/main/res/drawable/list_item_selector.xml b/android/src/main/res/drawable/list_item_selector.xml new file mode 100644 index 0000000..25cf6c4 --- /dev/null +++ b/android/src/main/res/drawable/list_item_selector.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/android/src/main/res/layout/basket_item.xml b/android/src/main/res/layout/basket_item.xml index 808a3bc..52b0f69 100755 --- a/android/src/main/res/layout/basket_item.xml +++ b/android/src/main/res/layout/basket_item.xml @@ -1,16 +1,12 @@ - - + android:background="@drawable/list_item_selector" + android:id="@+id/swipeContent"> - - - - -