Merge pull request #669 from grecep/master
authorgrecep <grecep@users.noreply.github.com>
Wed, 29 Oct 2014 21:29:38 +0000 (22:29 +0100)
committergrecep <grecep@users.noreply.github.com>
Wed, 29 Oct 2014 21:29:38 +0000 (22:29 +0100)
Add "select all" option to photo (or other) upload screen

1  2 
src/com/owncloud/android/ui/activity/UploadFilesActivity.java
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@@ -34,15 -34,18 +34,18 @@@ import android.widget.TextView
  
  import com.actionbarsherlock.app.ActionBar;
  import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
+ import com.actionbarsherlock.internal.view.menu.ActionMenuItemView;
+ import com.actionbarsherlock.view.Menu;
+ import com.actionbarsherlock.view.MenuInflater;
  import com.actionbarsherlock.view.MenuItem;
  import com.owncloud.android.R;
 +import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
  import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
  import com.owncloud.android.ui.fragment.LocalFileListFragment;
  import com.owncloud.android.utils.DisplayUtils;
  import com.owncloud.android.utils.FileStorageUtils;
 -import com.owncloud.android.utils.Log_OC;
  
  
  /**
@@@ -73,6 -76,8 +76,8 @@@ public class UploadFilesActivity extend
      private static final String WAIT_DIALOG_TAG = "WAIT";
      private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE";
      
+     private boolean selectAllToggled = false;
+     private Menu menu;
      
      @Override
      public void onCreate(Bundle savedInstanceState) {
          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
          actionBar.setListNavigationCallbacks(mDirectories, this);
          
+         
          // wait dialog
          if (mCurrentDialog != null) {
              mCurrentDialog.dismiss();
              
          Log_OC.d(TAG, "onCreate() end");
      }
+     @Override
+     public boolean onCreateOptionsMenu(Menu menu) {
+         // Inflate the menu items for use in the action bar
+         MenuInflater inflater = getSherlock().getMenuInflater();
+         inflater.inflate(R.menu.file_select_all, menu);     
+         this.menu = menu;
+         return true;
+     }
+  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          boolean retval = true;
                  }
                  break;
              }
+             case R.id.actionbar_select_all:{
+                 if(selectAllToggled){
+                     toggleOffSelectAll();
+                 }else{
+                     toggleOnSelectAll(item);
+                 }
+                 break;
+             }
              default:
                  retval = super.onOptionsItemSelected(item);
          }
          return retval;
      }
+     public void toggleOffSelectAll(MenuItem item){
+         selectAllToggled = false;
+         item.setIcon(android.R.drawable.checkbox_off_background);
+         mFileListFragment.deselectAll();
+     }
+     public void toggleOffSelectAll(){
+         MenuItem item = menu.findItem(R.id.actionbar_select_all);
+         toggleOffSelectAll(item);
+     }
+     public void toggleOnSelectAll(MenuItem item){
+         selectAllToggled = true;
+         item.setIcon(android.R.drawable.checkbox_on_background);        
+         mFileListFragment.selectAll();
+     }
      
      @Override
      public boolean onNavigationItemSelected(int itemPosition, long itemId) {
              ActionBar actionBar = getSupportActionBar(); 
              actionBar.setDisplayHomeAsUpEnabled(false);
          } 
+         toggleOffSelectAll();
      }
  
      
       * {@inheritDoc}
       */
      @Override
-     public void onDirectoryClick(File directory) {
+     public void onDirectoryClick(File directory) { 
          pushDirname(directory);
          ActionBar actionBar = getSupportActionBar();
          actionBar.setDisplayHomeAsUpEnabled(true);
+         toggleOffSelectAll();
      }
      
      
  package com.owncloud.android.ui.fragment;
  
  import java.io.File;
 -
 -import com.owncloud.android.R;
 -import com.owncloud.android.ui.adapter.LocalFileListAdapter;
 -import com.owncloud.android.utils.Log_OC;
 -
 +import java.util.ArrayList;
  
  import android.app.Activity;
  import android.os.Bundle;
@@@ -31,10 -35,6 +31,10 @@@ import android.widget.AdapterView
  import android.widget.ImageView;
  import android.widget.ListView;
  
 +import com.owncloud.android.R;
 +import com.owncloud.android.lib.common.utils.Log_OC;
 +import com.owncloud.android.ui.adapter.LocalFileListAdapter;
 +
  
  /**
   * A Fragment that lists all files and folders in a given LOCAL path.
@@@ -78,7 -78,6 +78,7 @@@ public class LocalFileListFragment exte
          View v = super.onCreateView(inflater, container, savedInstanceState);
          getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
          disableSwipe(); // Disable pull refresh
 +        setMessageForEmptyList(getString(R.string.local_file_list_empty));
          Log_OC.i(TAG, "onCreateView() end");
          return v;
      }    
      public void onActivityCreated(Bundle savedInstanceState) {
          Log_OC.i(TAG, "onActivityCreated() start");
          
 -        super.onCreate(savedInstanceState);
 +        super.onActivityCreated(savedInstanceState);
          mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity());
          setListAdapter(mAdapter);
          
          Log_OC.i(TAG, "onActivityCreated() stop");
      }
      
+     public void selectAll(){
+         int numberOfFiles = mAdapter.getCount();
+         for(int i = 0; i < numberOfFiles; i++){
+             File file = (File) mAdapter.getItem(i);
+             if (file != null) {                
+                 if (!file.isDirectory()) {  
+                     /// Click on a file
+                     getListView().setItemChecked(i, true);                       
+                     // notify the change to the container Activity
+                     mContainerActivity.onFileClick(file);
+                 }
+             }
+         }
+     }
+     
+     public void deselectAll(){        
+         mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity());
+         setListAdapter(mAdapter);
+     }
      
      /**
       * Checks the file clicked over. Browses inside if it is a directory. Notifies the container activity in any case.
       */
      @Override
      public void onItemClick(AdapterView<?> l, View v, int position, long id) {
-         File file = (File) mAdapter.getItem(position); 
+         File file = (File) mAdapter.getItem(position);
+         
          if (file != null) {
              /// Click on a directory
              if (file.isDirectory()) {
                  listDirectory(file);
                  // notify the click to container Activity
                  mContainerActivity.onDirectoryClick(file);
 +                // save index and top position
 +                saveIndexAndTopPosition(position);
              
              } else {    /// Click on a file
                  ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
              parentDir = mDirectory.getParentFile();  // can be null
          }
          listDirectory(parentDir);
 +
 +        // restore index and top position
 +        restoreIndexAndTopPosition();
      }
  
      
       * @return      File paths to the files checked by the user.
       */
      public String[] getCheckedFilePaths() {
 -        String [] result = null;
 +        ArrayList<String> result = new ArrayList<String>();
          SparseBooleanArray positions = mList.getCheckedItemPositions();
          if (positions.size() > 0) {
 -            Log_OC.d(TAG, "Returning " + positions.size() + " selected files");
 -            result = new String[positions.size()];
 -            for (int i=0; i<positions.size(); i++) {
 -                result[i] = ((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath();
 +            for (int i = 0; i < positions.size(); i++) {
 +                if (positions.get(positions.keyAt(i)) == true) {
 +                    result.add(((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath());
 +                }
              }
 +
 +            Log_OC.d(TAG, "Returning " + result.size() + " selected files");
          }
 -        return result;
 +        return result.toArray(new String[result.size()]);
      }