Skip to content

Commit 1faec75

Browse files
committed
git push origin bug-fixesMerge branch 'codingblazer-multiselection_draft' into bug-fixes
2 parents 468f50b + 960f16d commit 1faec75

2 files changed

Lines changed: 106 additions & 24 deletions

File tree

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

Lines changed: 42 additions & 0 deletions
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

Lines changed: 64 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,18 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
102102
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
103103
@Override
104104
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
105-
if (selectedPosition == position) {
106-
selectedPosition = -1;
105+
if (mAdapter.isPositionSelected(position)) {
106+
mAdapter.removeSelectedPosition(position);
107107
view.setBackgroundResource(0);
108-
restoreColorScheme();
108+
if (mAdapter.selectedPositionsSize() == 0)
109+
restoreColorScheme();
109110
} else {
110-
if (selectedView != null) {
111-
selectedView.setBackgroundResource(0);
112-
}
113-
selectedView = view;
114-
selectedPosition = position;
115-
Log.d(TAG, "Position: " + selectedPosition);
116111
view.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.color_divider));
112+
mAdapter.putSelectedPosition(position);
117113
changeColorScheme();
118114
}
115+
116+
119117
return true;
120118
}
121119
});
@@ -126,6 +124,23 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
126124
*/
127125
@Override
128126
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
127+
if(mAdapter.selectedPositionsSize() > 0)
128+
{
129+
if(mAdapter.isPositionSelected(position)) {
130+
mAdapter.removeSelectedPosition(position);
131+
view.setBackgroundResource(0);
132+
if(mAdapter.selectedPositionsSize() == 0)
133+
restoreColorScheme();
134+
}
135+
else{
136+
view.setBackgroundColor(ContextCompat.getColor(mToolkit, R.color.color_divider));
137+
mAdapter.putSelectedPosition(position);
138+
Log.d(TAG, "Position: " + position);
139+
changeColorScheme();
140+
141+
}
142+
return ;
143+
}
129144
SavedProject project = draftProjects.get(position);
130145
Template[] templates = Template.values();
131146
for (int i = 0; i < templates.length; i++) {
@@ -262,6 +277,7 @@ public void onPrepareOptionsMenu(Menu menu) {
262277
/**
263278
* {@inheritDoc}
264279
*/
280+
265281
@Override
266282
public boolean onOptionsItemSelected(MenuItem item) {
267283
int id = item.getItemId();
@@ -281,11 +297,32 @@ public boolean onOptionsItemSelected(MenuItem item) {
281297
@Override
282298
public void onClick(View v) {
283299
dialogDelete.dismiss();
284-
deleteItem(selectedPosition);
300+
deleteItems();
285301
restoreSelectedView();
286302
}
287303
});
288304
break;
305+
306+
case R.id.action_select_all:
307+
for(int i=0;i<mAdapter.getCount();i++) {
308+
if (!mAdapter.isPositionSelected(i))
309+
{
310+
mListView.getChildAt(i).setBackgroundColor(ContextCompat.getColor(mToolkit, R.color.color_divider));
311+
mAdapter.putSelectedPosition(i);
312+
changeColorScheme();
313+
}
314+
}
315+
break;
316+
317+
case R.id.action_unselect_all:
318+
for(int i=0;i<mAdapter.getCount();i++)
319+
if(mAdapter.isPositionSelected(i)) {
320+
mListView.getChildAt(i).setBackgroundColor(0);
321+
mAdapter.removeSelectedPosition(i);
322+
}
323+
restoreColorScheme();
324+
break;
325+
289326
case R.id.action_delete_all:
290327

291328
final AlertDialog dialogDeleteAll = new AlertDialog.Builder(activity)
@@ -314,18 +351,24 @@ public void onClick(View v) {
314351
/**
315352
* @brief Removes selected project item
316353
*/
317-
private void deleteItem(int selectedPosition) {
318-
SavedProject project = draftProjects.get(selectedPosition);
319-
File file = new File(project.getFile().getPath());
320-
boolean deleted = file.delete();
321-
if (deleted) {
322-
draftProjects.remove(selectedPosition);
323-
mAdapter.notifyDataSetChanged();
324-
setEmptyText();
325-
Toast.makeText(activity, getResources().getString(R.string.draft_deleted), Toast.LENGTH_SHORT).show();
326-
} else {
327-
Toast.makeText(activity, getResources().getString(R.string.draft_deleted_failed), Toast.LENGTH_SHORT).show();
354+
private void deleteItems() {
355+
ArrayList<Integer> selectedPositions = mAdapter.getSelectedPositions();
356+
boolean deleted = false;
357+
for(int selectedPosition : selectedPositions) {
358+
SavedProject project = draftProjects.get(selectedPosition);
359+
File file = new File(project.getFile().getPath());
360+
deleted = file.delete();
361+
if (deleted) {
362+
draftProjects.remove(selectedPosition);
363+
mAdapter.removeSelectedPosition(selectedPosition);
364+
mAdapter.notifyDataSetChanged();
365+
setEmptyText();
366+
}
328367
}
368+
if(deleted)
369+
Toast.makeText(activity, "Project Successfully Deleted!", Toast.LENGTH_SHORT).show();
370+
else
371+
Toast.makeText(activity, "Project Deletion Failed!", Toast.LENGTH_SHORT).show();
329372
}
330373

331374
/**
@@ -352,9 +395,6 @@ private void deleteAllDrafts() {
352395
* @brief Removes selected color from the selected ListView item when switching from edit mode to normal mode
353396
*/
354397
private void restoreSelectedView() {
355-
if (selectedView != null) {
356-
selectedView.setBackgroundResource(0);
357-
}
358398
restoreColorScheme();
359399
}
360400
}

0 commit comments

Comments
 (0)