From 42529d81ab009c04bbf89aafcda1d069366ddbc3 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 14 Jul 2016 11:50:51 +0200 Subject: [PATCH] allow selecting multiple items --- .../filemanager/fragments/ItemsFragment.java | 49 +++++++++++++++++- app/src/main/res/drawable-v21/selector.xml | 17 ++++++ app/src/main/res/drawable/selector.xml | 5 ++ app/src/main/res/layout/items_fragment.xml | 1 + app/src/main/res/layout/list_item.xml | 1 + app/src/main/res/menu/cab.xml | 9 ++++ app/src/main/res/mipmap-hdpi/delete.png | Bin 0 -> 296 bytes app/src/main/res/mipmap-mdpi/delete.png | Bin 0 -> 191 bytes app/src/main/res/mipmap-xhdpi/delete.png | Bin 0 -> 256 bytes app/src/main/res/mipmap-xxhdpi/delete.png | Bin 0 -> 447 bytes app/src/main/res/mipmap-xxxhdpi/delete.png | Bin 0 -> 243 bytes app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/strings.xml | 1 + 13 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable-v21/selector.xml create mode 100644 app/src/main/res/drawable/selector.xml create mode 100644 app/src/main/res/menu/cab.xml create mode 100644 app/src/main/res/mipmap-hdpi/delete.png create mode 100644 app/src/main/res/mipmap-mdpi/delete.png create mode 100644 app/src/main/res/mipmap-xhdpi/delete.png create mode 100644 app/src/main/res/mipmap-xxhdpi/delete.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/delete.png diff --git a/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java b/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java index f6f0e17d..fec9d06f 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/fragments/ItemsFragment.java @@ -7,7 +7,10 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AlertDialog; +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.view.WindowManager; @@ -35,7 +38,7 @@ import butterknife.ButterKnife; import butterknife.OnClick; public class ItemsFragment extends android.support.v4.app.Fragment - implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { + implements AdapterView.OnItemClickListener, SwipeRefreshLayout.OnRefreshListener, ListView.MultiChoiceModeListener { @BindView(R.id.items_list) ListView mListView; @BindView(R.id.items_swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; @@ -44,6 +47,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment private String mPath; private boolean mShowHidden; + private int mSelectedItemsCnt; @Nullable @Override @@ -84,6 +88,7 @@ public class ItemsFragment extends android.support.v4.app.Fragment final ItemsAdapter adapter = new ItemsAdapter(getContext(), mItems); mListView.setAdapter(adapter); mListView.setOnItemClickListener(this); + mListView.setMultiChoiceModeListener(this); } public void setListener(ItemInteractionListener listener) { @@ -216,6 +221,48 @@ public class ItemsFragment extends android.support.v4.app.Fragment return type + "/*"; } + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { + if (checked) { + mSelectedItemsCnt++; + } else { + mSelectedItemsCnt--; + } + + if (mSelectedItemsCnt > 0) { + mode.setTitle(String.valueOf(mSelectedItemsCnt)); + } + + mode.invalidate(); + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mode.getMenuInflater().inflate(R.menu.cab, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + switch (item.getItemId()) { + case R.id.cab_delete: + mode.finish(); + return true; + default: + return false; + } + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mSelectedItemsCnt = 0; + } + public interface ItemInteractionListener { void itemClicked(String path); } diff --git a/app/src/main/res/drawable-v21/selector.xml b/app/src/main/res/drawable-v21/selector.xml new file mode 100644 index 00000000..4d61c7b4 --- /dev/null +++ b/app/src/main/res/drawable-v21/selector.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/selector.xml b/app/src/main/res/drawable/selector.xml new file mode 100644 index 00000000..1277703b --- /dev/null +++ b/app/src/main/res/drawable/selector.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/items_fragment.xml b/app/src/main/res/layout/items_fragment.xml index 83f68238..32e65d4f 100644 --- a/app/src/main/res/layout/items_fragment.xml +++ b/app/src/main/res/layout/items_fragment.xml @@ -14,6 +14,7 @@ android:id="@+id/items_list" android:layout_width="match_parent" android:layout_height="wrap_content" + android:choiceMode="multipleChoiceModal" android:clipToPadding="false" android:paddingLeft="@dimen/activity_margin"/> diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml index afc3f13e..9c29b86b 100644 --- a/app/src/main/res/layout/list_item.xml +++ b/app/src/main/res/layout/list_item.xml @@ -4,6 +4,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" + android:foreground="@drawable/selector" android:paddingRight="@dimen/activity_margin"> + + + diff --git a/app/src/main/res/mipmap-hdpi/delete.png b/app/src/main/res/mipmap-hdpi/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2e18b855f6ceaa1db04b24341a53c5a4bc5c6 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSc;uILpXq-h9ji|$mcBZh%9Dc z;5!1sj8nDwq=AB`JY5_^B3j>0-^hE&fyZ^fpsa@hOY?=zY}GDr4)VQ}V2M)mXr7R9 zaBz0rEc~1_YVy=&y5zAWchM2%KgOLkEQ7vtu{d? zl#z+Luod!(ujMqmxaQgkR2Ir49urRBEos~y(a9I#zUk2SlmyjG4nJ z@ErkR#;MwT(m=sPPZ!4!kIuJKH}W>+Fy<(R3HoQaH3KbU@O1TaS?83{1OOFwJY)a> literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/delete.png b/app/src/main/res/mipmap-xhdpi/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..ca80a3b5ab8ef12ce18ed68d166331acb4130da9 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCmSQK*5Dp-y;YjHK@;M7UB8wRq z_>O=u<5X=vX`tXDPZ!6KjK;S&4TYK<1Y82I9e!YFIZ2LT{SwA!xe0+wCmyy+p8hNT z+$H-2;WkEwx~3(bg_En_PwssjtbD6&;;D+nkZj#8x#6};q!@pcKa9=@t(A7opMUjw zJu}M=!3S;)(u{d%jA;J@rnN_<)4#LKv6|O8i~Ib($y=tEy!^574nJ z@ErkR#;MwT(hLlYiJmTwAr*7p-nR8)3Y2JlSll}|x`175#)a2PId>L{O!{&8HQxrq zbq7>4+GV&66xE)kr0q-Oy05-4d7t%n-o|JHA)v_yrnkkng>N&rjn}?CJ@|dH$hP#| zynJ7ie%HMEJLT5V%3HNuS~j=m$v(PwdqQ_^ed!#-jJ6+jrX|HdA~-Pt}wc=*2->~iI8_x81HJH66KeHmv$AT zg=c&6PZATpcldtJ`P}>Bc9A!Z9{V=;ZROK>UjMJ>?Dn*pTB7^X>(b06lV6qA{k-ta nI$bmKVpO$!p)N3F5?)IuE$jAp*s+!g$Ybzy^>bP0l+XkK4Em=4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/delete.png b/app/src/main/res/mipmap-xxxhdpi/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..8d322aa9baba09c58b0058760fb7d53a392b63a1 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%xcgc6quuhE&{od*w9mAp-%|!1oIz zUAkW?IxdlN5p^sPGLtM@^D{+9cy9DT>q|G5dQ4KuY+ck{{`y~aU3Uxr^X+awlIm)m zLim6tF)Yw+SYp*L31Z?03ltA1m;Rr_zhgPmvYG>yq8FYs_ibEqHvUn-r*1=DgDFx+ z?bd02*59bTR4g&(=Y(kztIpQ%Z4JJY^zZNE9?f4`+x0ysZP__5=_$iXi`hvQAj>>m L{an^LB{Ts5t^ZVx literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b95ecaad..68099771 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,6 @@ @color/colorPrimary #33000000 + #08000000 + #11000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c49a5f61..fa451f77 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,7 @@ File The name contains invalid characters An unknown error occurred + Delete About