@@ -149,17 +149,19 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
149149 mListView .setOnItemLongClickListener (new AdapterView .OnItemLongClickListener () {
150150 @ Override
151151 public boolean onItemLongClick (AdapterView <?> parent , View view , int position , long id ) {
152- if (mAdapter .getSelectedPosition () == position ) {
153- mAdapter .setSelectedPosition (- 1 );
152+ if (mAdapter .isPositionSelected ( position ) ) {
153+ mAdapter .removeSelectedPosition ( position );
154154 view .setBackgroundResource (0 );
155155 restoreColorScheme ();
156+ if (mAdapter .selectedPositionsSize ()==0 )
157+ restoreColorScheme ();
156158 } else {
157159 if (selectedView != null ) {
158160 selectedView .setBackgroundResource (0 );
159161 }
160162 selectedView = view ;
161163 view .setBackgroundColor (ContextCompat .getColor (mToolkit , R .color .color_divider ));
162- mAdapter .setSelectedPosition (position );
164+ mAdapter .putSelectedPosition (position );
163165 Log .d (TAG , "Position: " + position );
164166 changeColorScheme ();
165167 }
@@ -173,6 +175,26 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
173175 */
174176 @ Override
175177 public void onItemClick (AdapterView <?> parent , View view , int position , long id ) {
178+
179+ if (mAdapter .selectedPositionsSize () > 0 )
180+ {
181+ if (mAdapter .isPositionSelected (position )) {
182+ mAdapter .removeSelectedPosition (position );
183+ view .setBackgroundResource (0 );
184+ if (mAdapter .selectedPositionsSize () == 0 )
185+ restoreColorScheme ();
186+ }
187+ else {
188+ selectedView = view ;
189+ view .setBackgroundColor (ContextCompat .getColor (mToolkit , R .color .color_divider ));
190+ mAdapter .putSelectedPosition (position );
191+ Log .d (TAG , "Position: " + position );
192+ changeColorScheme ();
193+
194+ }
195+ return ;
196+ }
197+
176198 SavedProject project = savedProjects .get (position );
177199 Template [] templates = Template .values ();
178200 for (int i = 0 ; i < templates .length ; i ++) {
@@ -331,31 +353,39 @@ public boolean onOptionsItemSelected(final MenuItem item) {
331353
332354 final MaterialDialog dialog = new MaterialDialog .Builder (activity )
333355 .title (R .string .dialog_delete_title )
334- .content (R .string .dialog_delete_msg )
335356 .positiveText (R .string .dialog_yes )
336357 .negativeText (R .string .dialog_no )
337358 .build ();
338359
360+ if (mAdapter .selectedPositionsSize ()==1 )
361+ dialog .setContent (R .string .dialog_delete_msg );
362+ else
363+ dialog .setContent (R .string .dialog_delete_multiple );
339364 dialog .getActionButton (DialogAction .POSITIVE ).setOnClickListener (new View .OnClickListener () {
340365 @ Override
341366 public void onClick (View v ) {
342367 dialog .dismiss ();
343- deleteItem ( mAdapter . getSelectedPosition () );
368+ deleteItems ( );
344369 restoreSelectedView ();
345370 }
346371 });
347372 dialog .show ();
348373 break ;
349374 case R .id .action_share :
350375
351- SavedProject project = savedProjects .get (mAdapter .getSelectedPosition ());
352- File file = new File (project .getFile ().getPath ());
353-
354- Uri fileUri = Uri .fromFile (file );
376+ ArrayList <Integer > selectedPositions = mAdapter .getSelectedPositions ();
355377 ArrayList <Uri > uris = new ArrayList <>();
356378 Intent sendIntent = new Intent (Intent .ACTION_SEND_MULTIPLE );
357379 sendIntent .setType ("application/zip" );
358- uris .add (fileUri );
380+ for (int selectedPosition : selectedPositions ) {
381+ if (selectedPosition != selectedPositions .get (0 ))
382+ selectedPosition --;
383+ SavedProject project = savedProjects .get (selectedPosition );
384+ File file = new File (project .getFile ().getPath ());
385+
386+ Uri fileUri = Uri .fromFile (file );
387+ uris .add (fileUri );
388+ }
359389 sendIntent .putParcelableArrayListExtra (Intent .EXTRA_STREAM , uris );
360390 startActivity (Intent .createChooser (sendIntent , null ));
361391 break ;
@@ -411,6 +441,27 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
411441 editSearch .requestFocus ();
412442 InputMethodManager imm = (InputMethodManager ) getActivity ().getSystemService (Context .INPUT_METHOD_SERVICE );
413443 imm .showSoftInput (editSearch , InputMethodManager .SHOW_IMPLICIT );
444+ break ;
445+
446+ case R .id .action_select_all :
447+ for (int i =0 ;i <mAdapter .getCount ();i ++) {
448+ if (!mAdapter .isPositionSelected (i ))
449+ {
450+ mListView .getChildAt (i ).setBackgroundColor (ContextCompat .getColor (mToolkit , R .color .color_divider ));
451+ mAdapter .putSelectedPosition (i );
452+ changeColorScheme ();
453+ }
454+ }
455+ break ;
456+
457+ case R .id .action_unselect_all :
458+ for (int i =0 ;i <mAdapter .getCount ();i ++)
459+ if (mAdapter .isPositionSelected (i )) {
460+ mListView .getChildAt (i ).setBackgroundColor (0 );
461+ mAdapter .removeSelectedPosition (i );
462+ }
463+ restoreColorScheme ();
464+ break ;
414465
415466 default : //do nothing
416467 break ;
@@ -421,19 +472,26 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
421472 /**
422473 * @brief Removes selected project item
423474 */
424- private void deleteItem (int selectedPosition ) {
425- SavedProject project = savedProjects .get (selectedPosition );
426- File file = new File (project .getFile ().getPath ());
427- boolean deleted = file .delete ();
428- if (deleted ) {
429- savedProjects .remove (selectedPosition );
430- mAdapter .setSelectedPosition (-1 );
431- mAdapter .notifyDataSetChanged ();
432- setEmptyText ();
475+
476+ private void deleteItems () {
477+ ArrayList <Integer > selectedPositions = mAdapter .getSelectedPositions ();
478+ boolean deleted = false ;
479+ for (int selectedPosition : selectedPositions ) {
480+ if (selectedPosition !=selectedPositions .get (0 ))selectedPosition --;
481+ SavedProject project = savedProjects .get (selectedPosition );
482+ File file = new File (project .getFile ().getPath ());
483+ deleted = file .delete ();
484+ if (deleted ) {
485+ savedProjects .remove (selectedPosition );
486+ mAdapter .removeSelectedPosition (selectedPosition );
487+ mAdapter .notifyDataSetChanged ();
488+ setEmptyText ();
489+ }
490+ }
491+ if (deleted )
433492 Toast .makeText (activity , "Project Successfully Deleted!" , Toast .LENGTH_SHORT ).show ();
434- } else {
493+ else
435494 Toast .makeText (activity , "Project Deletion Failed!" , Toast .LENGTH_SHORT ).show ();
436- }
437495 }
438496
439497 /**
0 commit comments