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 00000000..f3d2e18b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/delete.png differ diff --git a/app/src/main/res/mipmap-mdpi/delete.png b/app/src/main/res/mipmap-mdpi/delete.png new file mode 100644 index 00000000..e66fba7e Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/delete.png differ 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 00000000..ca80a3b5 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/delete.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/delete.png b/app/src/main/res/mipmap-xxhdpi/delete.png new file mode 100644 index 00000000..1595bbcc Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/delete.png differ 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 00000000..8d322aa9 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/delete.png differ 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