@@ -137,18 +137,14 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
137137 mListView .setOnItemLongClickListener (new AdapterView .OnItemLongClickListener () {
138138 @ Override
139139 public boolean onItemLongClick (AdapterView <?> parent , View view , int position , long id ) {
140- if (selectedPosition == position ) {
141- selectedPosition = - 1 ;
140+ if (mAdapter . isPositionSelected ( position ) ) {
141+ mAdapter . removeSelectedPosition ( position ) ;
142142 view .setBackgroundResource (0 );
143- restoreColorScheme ();
143+ if (mAdapter .selectedPositionsSize ()==0 )
144+ restoreColorScheme ();
144145 } else {
145- if (selectedView != null ) {
146- selectedView .setBackgroundResource (0 );
147- }
148- selectedView = view ;
149- selectedPosition = position ;
150- Log .d (TAG , "Position: " + selectedPosition );
151146 view .setBackgroundColor (ContextCompat .getColor (getActivity (), R .color .color_divider ));
147+ mAdapter .putSelectedPosition (position );
152148 changeColorScheme ();
153149 }
154150 return true ;
@@ -161,6 +157,21 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
161157 */
162158 @ Override
163159 public void onItemClick (AdapterView <?> parent , View view , int position , long id ) {
160+ if (mAdapter .selectedPositionsSize () > 0 ) {
161+ if (mAdapter .isPositionSelected (position )) {
162+ mAdapter .removeSelectedPosition (position );
163+ view .setBackgroundResource (0 );
164+ if (mAdapter .selectedPositionsSize () == 0 )
165+ restoreColorScheme ();
166+ }
167+ else {
168+ view .setBackgroundColor (ContextCompat .getColor (mToolkit , R .color .color_divider ));
169+ mAdapter .putSelectedPosition (position );
170+ Log .d (TAG , "Position: " + position );
171+ changeColorScheme ();
172+ }
173+ return ;
174+ }
164175 SavedApi apk = savedApis .get (position );
165176 File file = new File (apk .getFile ().getPath ());
166177 Intent intent = new Intent ();
@@ -307,29 +318,39 @@ public boolean onOptionsItemSelected(final MenuItem item) {
307318
308319 final MaterialDialog dialog = new MaterialDialog .Builder (activity )
309320 .title (R .string .dialog_delete_title )
310- .content (R .string .dialog_delete_msg )
311321 .positiveText (R .string .dialog_yes )
312322 .negativeText (R .string .dialog_no )
313323 .build ();
324+ if (mAdapter .selectedPositionsSize ()==1 )
325+ dialog .setContent (R .string .dialog_delete_msg );
326+ else
327+ dialog .setContent (R .string .dialog_delete_multiple );
314328
315329 dialog .getActionButton (DialogAction .POSITIVE ).setOnClickListener (new View .OnClickListener () {
316330 @ Override
317331 public void onClick (View v ) {
318332 dialog .dismiss ();
319- deleteItem ( selectedPosition );
333+ deleteItems ( );
320334 restoreSelectedView ();
321335 }
322336 });
323337 dialog .show ();
324338 break ;
325339 case R .id .action_share :
326340
327- SavedApi apk = savedApis .get (selectedPosition );
328- File file = new File (apk .getFile ().getPath ());
329- Uri fileUri = Uri .fromFile (file );
330- Intent sendIntent = new Intent (Intent .ACTION_SEND );
331- sendIntent .setType ("application/vnd.android.package-archive" );
332- sendIntent .putExtra (Intent .EXTRA_STREAM , fileUri );
341+ ArrayList <Integer > selectedPositions = mAdapter .getSelectedPositions ();
342+ ArrayList <Uri > uris = new ArrayList <>();
343+ Intent sendIntent = new Intent (Intent .ACTION_SEND_MULTIPLE );
344+ sendIntent .setType ("application/zip" );
345+ for (int selectedPosition : selectedPositions ) {
346+ if (selectedPosition != selectedPositions .get (0 ))
347+ selectedPosition --;
348+ SavedApi apk = savedApis .get (selectedPosition );
349+ File file = new File (apk .getFile ().getPath ());
350+ Uri fileUri = Uri .fromFile (file );
351+ uris .add (fileUri );
352+ }
353+ sendIntent .putParcelableArrayListExtra (Intent .EXTRA_STREAM , uris );
333354 startActivity (Intent .createChooser (sendIntent , null ));
334355 break ;
335356 case R .id .action_search :
@@ -385,6 +406,27 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
385406 InputMethodManager imm = (InputMethodManager ) getActivity ().getSystemService (Context .INPUT_METHOD_SERVICE );
386407 imm .showSoftInput (editSearch , InputMethodManager .SHOW_IMPLICIT );
387408 break ;
409+
410+ case R .id .action_select_all :
411+ for (int i =0 ;i <mAdapter .getCount ();i ++) {
412+ if (!mAdapter .isPositionSelected (i ))
413+ {
414+ mListView .getChildAt (i ).setBackgroundColor (ContextCompat .getColor (mToolkit , R .color .color_divider ));
415+ mAdapter .putSelectedPosition (i );
416+ changeColorScheme ();
417+ }
418+ }
419+ break ;
420+
421+ case R .id .action_unselect_all :
422+ for (int i =0 ;i <mAdapter .getCount ();i ++)
423+ if (mAdapter .isPositionSelected (i )) {
424+ mListView .getChildAt (i ).setBackgroundColor (0 );
425+ mAdapter .removeSelectedPosition (i );
426+ }
427+ restoreColorScheme ();
428+ break ;
429+
388430 default : //do nothing
389431 break ;
390432 }
@@ -394,27 +436,31 @@ public boolean onKey(View v, int keyCode, KeyEvent event) {
394436 /**
395437 * @brief Removes selected apk item
396438 */
397- private void deleteItem (int selectedPosition ) {
398- SavedApi apk = savedApis .get (selectedPosition );
399- File file = new File (apk .getFile ().getPath ());
400- boolean deleted = file .delete ();
401- if (deleted ) {
402- savedApis .remove (selectedPosition );
403- mAdapter .notifyDataSetChanged ();
404- setEmptyText ();
405- Toast .makeText (activity , "APK Successfully Deleted!" , Toast .LENGTH_SHORT ).show ();
406- } else {
407- Toast .makeText (activity , "APK Deletion Failed!" , Toast .LENGTH_SHORT ).show ();
439+ private void deleteItems () {
440+ ArrayList <Integer > selectedPositions = mAdapter .getSelectedPositions ();
441+ boolean deleted = false ;
442+ for (int selectedPosition : selectedPositions ) {
443+ if (selectedPosition != selectedPositions .get (0 ))
444+ selectedPosition --;
445+ SavedApi apk = savedApis .get (selectedPosition );
446+ File file = new File (apk .getFile ().getPath ());
447+ deleted = file .delete ();
448+ if (deleted ) {
449+ savedApis .remove (selectedPosition );
450+ mAdapter .notifyDataSetChanged ();
451+ setEmptyText ();
452+ }
408453 }
454+ if (deleted )
455+ Toast .makeText (activity , "Project Successfully Deleted!" , Toast .LENGTH_SHORT ).show ();
456+ else
457+ Toast .makeText (activity , "Project Deletion Failed!" , Toast .LENGTH_SHORT ).show ();
409458 }
410459
411460 /**
412461 * @brief Removes selected color from the selected ListView item when switching from edit mode to normal mode
413462 */
414463 private void restoreSelectedView () {
415- if (selectedView != null ) {
416- selectedView .setBackgroundResource (0 );
417- }
418464 restoreColorScheme ();
419465 }
420466
0 commit comments