Skip to content

Commit 4dfc1da

Browse files
committedOct 31, 2016
multi-deletion and unselect all implemented from scratch
1 parent 90b8b70 commit 4dfc1da

File tree

2 files changed

+110
-25
lines changed

2 files changed

+110
-25
lines changed
 

‎source-code/app/src/main/java/org/buildmlearn/toolkit/adapter/DraftProjectAdapter.java

+42
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.buildmlearn.toolkit.adapter;
22

33
import android.content.Context;
4+
import android.support.v4.content.ContextCompat;
45
import android.view.LayoutInflater;
56
import android.view.View;
67
import android.view.ViewGroup;
@@ -11,7 +12,10 @@
1112
import org.buildmlearn.toolkit.views.TextViewPlus;
1213

1314
import java.util.ArrayList;
15+
import java.util.Collections;
16+
import java.util.HashMap;
1417
import java.util.Locale;
18+
import java.util.Map;
1519

1620
/**
1721
* Created by scopeinfinity on 10/3/16.
@@ -24,10 +28,12 @@ public class DraftProjectAdapter extends BaseAdapter {
2428

2529
private final Context mContext;
2630
private final ArrayList<SavedProject> data;
31+
private Map selectedPositions;
2732

2833
public DraftProjectAdapter(Context mContext, ArrayList<SavedProject> data) {
2934
this.mContext = mContext;
3035
this.data = data;
36+
selectedPositions=new HashMap();
3137
}
3238

3339
/**
@@ -57,6 +63,36 @@ public long getItemId(int i) {
5763
/**
5864
* {@inheritDoc}
5965
*/
66+
67+
public boolean isPositionSelected(int position)
68+
{
69+
return selectedPositions.containsKey(position);
70+
}
71+
72+
public void putSelectedPosition(int position) {
73+
selectedPositions.put(position,true);
74+
}
75+
76+
public ArrayList<Integer> getSelectedPositions()
77+
{
78+
ArrayList<Integer> positions = new ArrayList<>();
79+
for(Object key : selectedPositions.keySet())
80+
{
81+
positions.add((Integer)key);
82+
}
83+
Collections.sort(positions,Collections.reverseOrder());
84+
return positions;
85+
}
86+
87+
public void removeSelectedPosition(int position)
88+
{
89+
selectedPositions.remove(position);
90+
}
91+
92+
public int selectedPositionsSize()
93+
{
94+
return selectedPositions.size();
95+
}
6096
@Override
6197
public View getView(int position, View convertView, ViewGroup parent) {
6298
LayoutInflater mInflater;
@@ -72,6 +108,12 @@ public View getView(int position, View convertView, ViewGroup parent) {
72108
holder = (DraftHolder) convertView.getTag();
73109
}
74110

111+
if (selectedPositions.containsKey(position)) {
112+
convertView.setBackgroundColor(ContextCompat.getColor(mContext, R.color.color_divider));
113+
} else {
114+
convertView.setBackgroundColor(0);
115+
}
116+
75117
SavedProject projectData = getItem(position);
76118
holder.draftSubtitle.setText(String.format(Locale.ENGLISH, "Last Modified: %s", projectData.getTime()));
77119
holder.draftTitle.setText(String.format(Locale.ENGLISH, "Drafted on %s", projectData.getDate()));

‎source-code/app/src/main/java/org/buildmlearn/toolkit/fragment/DraftsFragment.java

+68-25
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,18 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
105105
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
106106
@Override
107107
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
108-
if (selectedPosition == position) {
109-
selectedPosition = -1;
108+
if (mAdapter.isPositionSelected(position)) {
109+
mAdapter.removeSelectedPosition(position);
110110
view.setBackgroundResource(0);
111-
restoreColorScheme();
111+
if (mAdapter.selectedPositionsSize() == 0)
112+
restoreColorScheme();
112113
} else {
113-
if (selectedView != null) {
114-
selectedView.setBackgroundResource(0);
115-
}
116-
selectedView = view;
117-
selectedPosition = position;
118-
Log.d(TAG, "Position: " + selectedPosition);
119114
view.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.color_divider));
115+
mAdapter.putSelectedPosition(position);
120116
changeColorScheme();
121117
}
118+
119+
122120
return true;
123121
}
124122
});
@@ -129,6 +127,23 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
129127
*/
130128
@Override
131129
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
130+
if(mAdapter.selectedPositionsSize() > 0)
131+
{
132+
if(mAdapter.isPositionSelected(position)) {
133+
mAdapter.removeSelectedPosition(position);
134+
view.setBackgroundResource(0);
135+
if(mAdapter.selectedPositionsSize() == 0)
136+
restoreColorScheme();
137+
}
138+
else{
139+
view.setBackgroundColor(ContextCompat.getColor(mToolkit, R.color.color_divider));
140+
mAdapter.putSelectedPosition(position);
141+
Log.d(TAG, "Position: " + position);
142+
changeColorScheme();
143+
144+
}
145+
return ;
146+
}
132147
SavedProject project = draftProjects.get(position);
133148
Template[] templates = Template.values();
134149
for (int i = 0; i < templates.length; i++) {
@@ -271,6 +286,7 @@ public void onPrepareOptionsMenu(Menu menu) {
271286
/**
272287
* {@inheritDoc}
273288
*/
289+
274290
@Override
275291
public boolean onOptionsItemSelected(MenuItem item) {
276292
int id = item.getItemId();
@@ -280,21 +296,45 @@ public boolean onOptionsItemSelected(MenuItem item) {
280296

281297
final MaterialDialog dialogDelete = new MaterialDialog.Builder(activity)
282298
.title(R.string.dialog_delete_title)
283-
.content(R.string.dialog_delete_msg)
284299
.positiveText(R.string.dialog_yes)
285300
.negativeText(R.string.dialog_no)
286301
.build();
302+
if(mAdapter.selectedPositionsSize()==1)
303+
dialogDelete.setContent(R.string.dialog_delete_msg);
304+
else
305+
dialogDelete.setContent(R.string.dialog_delete_multiple);
287306

288307
dialogDelete.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
289308
@Override
290309
public void onClick(View v) {
291310
dialogDelete.dismiss();
292-
deleteItem(selectedPosition);
311+
deleteItems();
293312
restoreSelectedView();
294313
}
295314
});
296315
dialogDelete.show();
297316
break;
317+
318+
case R.id.action_select_all:
319+
for(int i=0;i<mAdapter.getCount();i++) {
320+
if (!mAdapter.isPositionSelected(i))
321+
{
322+
mListView.getChildAt(i).setBackgroundColor(ContextCompat.getColor(mToolkit, R.color.color_divider));
323+
mAdapter.putSelectedPosition(i);
324+
changeColorScheme();
325+
}
326+
}
327+
break;
328+
329+
case R.id.action_unselect_all:
330+
for(int i=0;i<mAdapter.getCount();i++)
331+
if(mAdapter.isPositionSelected(i)) {
332+
mListView.getChildAt(i).setBackgroundColor(0);
333+
mAdapter.removeSelectedPosition(i);
334+
}
335+
restoreColorScheme();
336+
break;
337+
298338
case R.id.action_delete_all:
299339

300340
final MaterialDialog dialogDeleteAll = new MaterialDialog.Builder(activity)
@@ -323,18 +363,24 @@ public void onClick(View v) {
323363
/**
324364
* @brief Removes selected project item
325365
*/
326-
private void deleteItem(int selectedPosition) {
327-
SavedProject project = draftProjects.get(selectedPosition);
328-
File file = new File(project.getFile().getPath());
329-
boolean deleted = file.delete();
330-
if (deleted) {
331-
draftProjects.remove(selectedPosition);
332-
mAdapter.notifyDataSetChanged();
333-
setEmptyText();
334-
Toast.makeText(activity, getResources().getString(R.string.draft_deleted), Toast.LENGTH_SHORT).show();
335-
} else {
336-
Toast.makeText(activity, getResources().getString(R.string.draft_deleted_failed), Toast.LENGTH_SHORT).show();
366+
private void deleteItems() {
367+
ArrayList<Integer> selectedPositions = mAdapter.getSelectedPositions();
368+
boolean deleted = false;
369+
for(int selectedPosition : selectedPositions) {
370+
SavedProject project = draftProjects.get(selectedPosition);
371+
File file = new File(project.getFile().getPath());
372+
deleted = file.delete();
373+
if (deleted) {
374+
draftProjects.remove(selectedPosition);
375+
mAdapter.removeSelectedPosition(selectedPosition);
376+
mAdapter.notifyDataSetChanged();
377+
setEmptyText();
378+
}
337379
}
380+
if(deleted)
381+
Toast.makeText(activity, "Project Successfully Deleted!", Toast.LENGTH_SHORT).show();
382+
else
383+
Toast.makeText(activity, "Project Deletion Failed!", Toast.LENGTH_SHORT).show();
338384
}
339385

340386
/**
@@ -361,9 +407,6 @@ private void deleteAllDrafts() {
361407
* @brief Removes selected color from the selected ListView item when switching from edit mode to normal mode
362408
*/
363409
private void restoreSelectedView() {
364-
if (selectedView != null) {
365-
selectedView.setBackgroundResource(0);
366-
}
367410
restoreColorScheme();
368411
}
369412
}

0 commit comments

Comments
 (0)
Please sign in to comment.