@@ -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