Merge branch 'material_buttons' of https://github.com/owncloud/android into material_fab
authorAndy Scherzinger <info@andy-scherzinger.de>
Fri, 4 Sep 2015 11:43:36 +0000 (13:43 +0200)
committerAndy Scherzinger <info@andy-scherzinger.de>
Fri, 4 Sep 2015 11:43:36 +0000 (13:43 +0200)
Conflicts:
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

1  2 
build.gradle
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

diff --combined build.gradle
@@@ -24,7 -24,6 +24,7 @@@ dependencies 
      compile project(':owncloud-android-library')
      compile 'com.jakewharton:disklrucache:2.0.2'
      compile 'com.android.support:appcompat-v7:22.2.1'
 +    compile 'com.getbase:floatingactionbutton:1.10.0'
  }
  
  android {
              abortOnError false
          }
      }
-     compileOptions {
-         sourceCompatibility JavaVersion.VERSION_1_7
-         targetCompatibility JavaVersion.VERSION_1_7
-     }
      
      productFlavors {
      }
@@@ -77,6 -77,7 +77,7 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.lib.common.utils.Log_OC;
+ import com.owncloud.android.operations.CopyFileOperation;
  import com.owncloud.android.operations.CreateFolderOperation;
  import com.owncloud.android.operations.CreateShareOperation;
  import com.owncloud.android.operations.MoveFileOperation;
@@@ -134,6 -135,7 +135,7 @@@ public class FileDisplayActivity extend
      public static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
      public static final int ACTION_SELECT_MULTIPLE_FILES = 2;
      public static final int ACTION_MOVE_FILES = 3;
+     public static final int ACTION_COPY_FILES = 4;
  
      private static final String TAG = FileDisplayActivity.class.getSimpleName();
  
      private static final String TAG_SECOND_FRAGMENT = "SECOND_FRAGMENT";
  
      private OCFile mWaitingToPreview;
-     
      private boolean mSyncInProgress = false;
  
      private static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";
              Intent initObserversIntent = FileObserverService.makeInitIntent(this);
              startService(initObserversIntent);
          }
-         
          /// Load of saved instance state
          if(savedInstanceState != null) {
              mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(
              mWaitingToPreview = null;
              mSyncInProgress = false;
              mWaitingToSend = null;
-         }        
+         }
  
          /// USER INTERFACE
  
          // Inflate and set the layout view
          setContentView(R.layout.files);
-         
          // Navigation Drawer
          initDrawer();
  
      }
  
      /**
-      *  Called when the ownCloud {@link Account} associated to the Activity was just updated.
-      */ 
+      * Called when the ownCloud {@link Account} associated to the Activity was just updated.
+      */
      @Override
      protected void onAccountSet(boolean stateWasRecovered) {
          super.onAccountSet(stateWasRecovered);
                  if (file.isFolder()) {
                      startSyncFolderOperation(file, false);
                  }
-                 
              } else {
                  updateFragmentsVisibility(!file.isFolder());
                  updateActionBarTitleAndHomeButton(file.isFolder() ? null : file);
          transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
          transaction.commit();
      }
-     
      private void initFragmentsWithFile() {
          if (getAccount() != null && getFile() != null) {
              /// First fragment
-             OCFileListFragment listOfFiles = getListOfFilesFragment(); 
+             OCFileListFragment listOfFiles = getListOfFilesFragment();
              if (listOfFiles != null) {
                  listOfFiles.listDirectory(getCurrentDir());
                  // TODO Enable when "On Device" is recovered
              } else {
                  Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
              }
-             
              /// Second fragment
-             OCFile file = getFile(); 
+             OCFile file = getFile();
              Fragment secondFragment = chooseInitialSecondFragment(file);
              if (secondFragment != null) {
                  setSecondFragment(secondFragment);
      private Fragment chooseInitialSecondFragment(OCFile file) {
          Fragment secondFragment = null;
          if (file != null && !file.isFolder()) {
-             if (file.isDown() && PreviewMediaFragment.canBePreviewed(file) 
+             if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)
                      && file.getLastSyncDateForProperties() > 0  // temporal fix
                      ) {
                  int startPlaybackPosition =
      /**
       * Replaces the second fragment managed by the activity with the received as
       * a parameter.
-      * 
-      * Assumes never will be more than two fragments managed at the same time. 
-      * 
-      * @param fragment      New second Fragment to set.
+      * <p/>
+      * Assumes never will be more than two fragments managed at the same time.
+      *
+      * @param fragment New second Fragment to set.
       */
      private void setSecondFragment(Fragment fragment) {
          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
          Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(
                  FileDisplayActivity.TAG_LIST_OF_FILES);
          if (listOfFiles != null) {
-             return (OCFileListFragment)listOfFiles;
+             return (OCFileListFragment) listOfFiles;
          }
          Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!");
          return null;
          Fragment second = getSupportFragmentManager().findFragmentByTag(
                  FileDisplayActivity.TAG_SECOND_FRAGMENT);
          if (second != null) {
-             return (FileFragment)second;
+             return (FileFragment) second;
          }
          return null;
      }
          boolean retval = true;
          switch (item.getItemId()) {
              case R.id.action_create_dir: {
 -                CreateFolderDialogFragment dialog =
 -                        CreateFolderDialogFragment.newInstance(getCurrentDir());
 -                dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
 +                createFolder();
                  break;
              }
              case R.id.action_sync_account: {
          return retval;
      }
  
 +    public void createFolder() {
 +        CreateFolderDialogFragment dialog =
 +                CreateFolderDialogFragment.newInstance(getCurrentDir());
 +        dialog.show(getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
 +    }
 +
 +    public void uploadLocalFilesSelected() {
 +        Intent action = new Intent(this, UploadFilesActivity.class);
 +        action.putExtra(
 +                UploadFilesActivity.EXTRA_ACCOUNT,
 +                getAccount()
 +        );
 +        startActivityForResult(action, ACTION_SELECT_MULTIPLE_FILES);
 +    }
 +
 +    public void uploadFromOtherAppsSelected() {
 +        Intent action = new Intent(Intent.ACTION_GET_CONTENT);
 +        action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
 +        //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
 +        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
 +            action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
 +        }
 +        startActivityForResult(
 +                Intent.createChooser(action, getString(R.string.upload_chooser_title)),
 +                ACTION_SELECT_CONTENT_FROM_APPS
 +        );
 +    }
 +
      private void startSynchronization() {
          Log_OC.d(TAG, "Got to start sync");
          if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
              requestMultipleUpload(data, resultCode);
  
          } else if (requestCode == ACTION_MOVE_FILES && resultCode == RESULT_OK){
+             final Intent fData = data;
+             final int fResultCode = resultCode;
+             getHandler().postDelayed(
+                     new Runnable() {
+                         @Override
+                         public void run() {
+                             requestMoveOperation(fData, fResultCode);
+                         }
+                     },
+                     DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+             );
+         } else if (requestCode == ACTION_COPY_FILES && resultCode == RESULT_OK) {
  
              final Intent fData = data;
-             final int fResultCode = resultCode; 
+             final int fResultCode = resultCode;
              getHandler().postDelayed(
-                 new Runnable() {
-                     @Override
-                     public void run() {
-                         requestMoveOperation(fData, fResultCode);
-                     }
-                 }, 
-                 DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+                     new Runnable() {
+                         @Override
+                         public void run() {
+                             requestCopyOperation(fData, fResultCode);
+                         }
+                     },
+                     DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
              );
  
          } else {
  
      /**
       * Request the operation for moving the file/folder from one path to another
-      * 
-      * @param data              Intent received
-      * @param resultCode        Result code received
+      *
+      * @param data       Intent received
+      * @param resultCode Result code received
       */
      private void requestMoveOperation(Intent data, int resultCode) {
          OCFile folderToMoveAt = (OCFile) data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
          getFileOperationsHelper().moveFile(folderToMoveAt, targetFile);
      }
  
+     /**
+      * Request the operation for copying the file/folder from one path to another
+      *
+      * @param data       Intent received
+      * @param resultCode Result code received
+      */
+     private void requestCopyOperation(Intent data, int resultCode) {
+         OCFile folderToMoveAt = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
+         OCFile targetFile = data.getParcelableExtra(FolderPickerActivity.EXTRA_FILE);
+         getFileOperationsHelper().copyFile(folderToMoveAt, targetFile);
+     }
      @Override
      public void onBackPressed() {
          if (!isDrawerOpen()){
  
          Log_OC.v(TAG, "onSaveInstanceState() end");
      }
-     
  
  
      @Override
          downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
          mDownloadFinishReceiver = new DownloadFinishReceiver();
          registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
-         
          Log_OC.v(TAG, "onResume() end");
      }
  
              unregisterReceiver(mDownloadFinishReceiver);
              mDownloadFinishReceiver = null;
          }
-         
          super.onPause();
          Log_OC.v(TAG, "onPause() end");
      }
                          accountName.equals(getAccount().name) && getStorageManager() != null);
      
                  if (sameAccount) {
-                     
                      if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
                          mSyncInProgress = true;
-                         
                      } else {
                          OCFile currentFile = (getFile() == null) ? null :
                                  getStorageManager().getFileByPath(getFile().getRemotePath());
                                              Toast.LENGTH_LONG)
                                  .show();
                              browseToRoot();
-                             
                          } else {
                              if (currentFile == null && !getFile().isFolder()) {
                                  // currently selected file was removed in the server, and now we
                              }
                              setFile(currentFile);
                          }
-                         
                          mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) &&
                                  !RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED
                                          .equals(event));
                          if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
                                      equals(event) &&
                                  /// TODO refactor and make common
-                                 synchResult != null && !synchResult.isSuccess() &&  
-                                 (synchResult.getCode() == ResultCode.UNAUTHORIZED   || 
-                                     synchResult.isIdPRedirection()                  ||
-                                     (synchResult.isException() && synchResult.getException() 
-                                             instanceof AuthenticatorException))) {
+                                 synchResult != null && !synchResult.isSuccess() &&
+                                 (synchResult.getCode() == ResultCode.UNAUTHORIZED ||
+                                         synchResult.isIdPRedirection() ||
+                                         (synchResult.isException() && synchResult.getException()
+                                                 instanceof AuthenticatorException))) {
  
  
                              try {
                      /*|| mRefreshSharesInProgress*/ //);
  
                      setBackgroundText();
-                         
                  }
-                 
                  if (synchResult != null) {
                      if (synchResult.getCode().equals(
                              RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
              }
          }
      }
-     
      /**
       * Show a text message on screen view for notifying user if content is
       * loading or folder is empty
      private class UploadFinishReceiver extends BroadcastReceiver {
          /**
           * Once the file upload has finished -> update view
-          *  @author David A. Velasco
+          *
+          * @author David A. Velasco
           * {@link BroadcastReceiver} to enable upload feedback in UI
           */
          @Override
                  String accountName = intent.getStringExtra(FileUploader.ACCOUNT_NAME);
                  boolean sameAccount = getAccount() != null && accountName.equals(getAccount().name);
                  OCFile currentDir = getCurrentDir();
-                 boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) && 
+                 boolean isDescendant = (currentDir != null) && (uploadedRemotePath != null) &&
                          (uploadedRemotePath.startsWith(currentDir.getRemotePath()));
-                 
                  if (sameAccount && isDescendant) {
                      refreshListOfFilesFragment();
                  }
-                 
                  boolean uploadWasFine = intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT,
                          false);
                  boolean renamedInUpload = getFile().getRemotePath().
                          equals(intent.getStringExtra(FileUploader.EXTRA_OLD_REMOTE_PATH));
-                 boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) || 
+                 boolean sameFile = getFile().getRemotePath().equals(uploadedRemotePath) ||
                          renamedInUpload;
                  FileFragment details = getSecondFragment();
-                 boolean detailFragmentIsShown = (details != null && 
+                 boolean detailFragmentIsShown = (details != null &&
                          details instanceof FileDetailFragment);
-                 
                  if (sameAccount && sameFile && detailFragmentIsShown) {
                      if (uploadWasFine) {
                          setFile(getStorageManager().getFileByPath(uploadedRemotePath));
                      if (renamedInUpload) {
                          String newName = (new File(uploadedRemotePath)).getName();
                          Toast msg = Toast.makeText(
-                                 context, 
+                                 context,
                                  String.format(
-                                         getString(R.string.filedetails_renamed_in_upload_msg), 
-                                         newName), 
+                                         getString(R.string.filedetails_renamed_in_upload_msg),
+                                         newName),
                                  Toast.LENGTH_LONG);
                          msg.show();
                      }
                      if (uploadWasFine || getFile().fileExists()) {
-                         ((FileDetailFragment)details).updateFileDetails(false, true);
+                         ((FileDetailFragment) details).updateFileDetails(false, true);
                      } else {
                          cleanSecondFragment();
                      }
-                     
                      // Force the preview if the file is an image
                      if (uploadWasFine && PreviewImageFragment.canBePreviewed(getFile())) {
                          startImagePreview(getFile());
                      removeStickyBroadcast(intent);
                  }
              }
-             
          }
-         
      }
  
  
      /**
       * Class waiting for broadcast events from the {@link FileDownloader} service.
-      * 
+      *
       * Updates the UI when a download is started or finished, provided that it is relevant for the
       * current folder.
       */
                              intent.getBooleanExtra(FileDownloader.EXTRA_DOWNLOAD_RESULT, false)
                      );
                  }
-     
                  if (mWaitingToSend != null) {
                      mWaitingToSend =
                              getStorageManager().getFileByPath(mWaitingToSend.getRemotePath());
                          sendDownloadedFile();
                      }
                  }
-             
              } finally {
                  if (intent != null) {
                      removeStickyBroadcast(intent);
                      accountName.equals(getAccount().name));
          }
      }
-     
-     
      public void browseToRoot() {
-         OCFileListFragment listOfFiles = getListOfFilesFragment(); 
+         OCFileListFragment listOfFiles = getListOfFilesFragment();
          if (listOfFiles != null) {  // should never be null, indeed
              OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
              listOfFiles.listDirectory(root);
  
      /**
       * {@inheritDoc}
-      * 
+      * <p/>
       * Updates action bar and second fragment, if in dual pane mode.
       */
      @Override
      }
  
      /**
-      * Shows the information of the {@link OCFile} received as a 
+      * Shows the information of the {@link OCFile} received as a
       * parameter in the second fragment.
-      * 
-      * @param file          {@link OCFile} whose details will be shown
+      *
+      * @param file {@link OCFile} whose details will be shown
       */
      @Override
      public void showDetails(OCFile file) {
          return new ListServiceConnection();
      }
  
-     /** Defines callbacks for service binding, passed to bindService() */
+     /**
+      * Defines callbacks for service binding, passed to bindService()
+      */
      private class ListServiceConnection implements ServiceConnection {
  
          @Override
                          if (!mWaitingToPreview.isDown()) {
                              requestForDownload();
                          }
-                 }
+                     }
  
              } else if (component.equals(new ComponentName(FileDisplayActivity.this,
                      FileUploader.class))) {
              }
              FileFragment secondFragment = getSecondFragment();
              if (secondFragment != null && secondFragment instanceof FileDetailFragment) {
-                 FileDetailFragment detailFragment = (FileDetailFragment)secondFragment;
+                 FileDetailFragment detailFragment = (FileDetailFragment) secondFragment;
                  detailFragment.listenForTransferProgress();
                  detailFragment.updateFileDetails(false, false);
              }
                  mUploaderBinder = null;
              }
          }
-     };    
+     }
  
      @Override
      public void onSavedCertificate() {
      /**
       * Updates the view associated to the activity after the finish of some operation over files
       * in the current account.
-      * 
-      * @param operation     Removal operation performed.
-      * @param result        Result of the removal.
+      *
+      * @param operation Removal operation performed.
+      * @param result    Result of the removal.
       */
      @Override
      public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
          super.onRemoteOperationFinish(operation, result);
-         
          if (operation instanceof RemoveFileOperation) {
              onRemoveFileOperationFinish((RemoveFileOperation) operation, result);
  
          } else if (operation instanceof RenameFileOperation) {
-             onRenameFileOperationFinish((RenameFileOperation)operation, result);
+             onRenameFileOperationFinish((RenameFileOperation) operation, result);
  
          } else if (operation instanceof SynchronizeFileOperation) {
-             onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+             onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
  
          } else if (operation instanceof CreateFolderOperation) {
-             onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
-             
+             onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
          } else if (operation instanceof CreateShareOperation) {
              onCreateShareOperationFinish((CreateShareOperation) operation, result);
-             
          } else if (operation instanceof UnshareLinkOperation) {
-             onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
-         
+             onUnshareLinkOperationFinish((UnshareLinkOperation) operation, result);
          } else if (operation instanceof MoveFileOperation) {
-             onMoveFileOperationFinish((MoveFileOperation)operation, result);
+             onMoveFileOperationFinish((MoveFileOperation) operation, result);
+         } else if (operation instanceof CopyFileOperation) {
+             onCopyFileOperationFinish((CopyFileOperation) operation, result);
          }
-         
      }
  
-     
      private void onCreateShareOperationFinish(CreateShareOperation operation,
                                                RemoteOperationResult result) {
          if (result.isSuccess()) {
          }
      }
  
-     
      private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
                                                RemoteOperationResult result) {
          if (result.isSuccess()) {
              refreshShowDetails();
              refreshListOfFilesFragment();
-             
          } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) {
              cleanSecondFragment();
              refreshListOfFilesFragment();
          }
      }
-     
      private void refreshShowDetails() {
          FileFragment details = getSecondFragment();
          if (details != null) {
              OCFile file = details.getFile();
              if (file != null) {
-                 file = getStorageManager().getFileByPath(file.getRemotePath()); 
+                 file = getStorageManager().getFileByPath(file.getRemotePath());
                  if (details instanceof PreviewMediaFragment) {
                      // Refresh  OCFile of the fragment
                      ((PreviewMediaFragment) details).updateFile(file);
                  } else {
                      showDetails(file);
-                 } 
+                 }
              }
              invalidateOptionsMenu();
-         } 
+         }
      }
-     
      /**
       * Updates the view associated to the activity after the finish of an operation trying to
       * remove a file.
      private void onRemoveFileOperationFinish(RemoveFileOperation operation,
                                               RemoteOperationResult result) {
          dismissLoadingDialog();
-         
          Toast msg = Toast.makeText(this,
                  ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
                  Toast.LENGTH_LONG); 
          msg.show();
-         
          if (result.isSuccess()) {
              OCFile removedFile = operation.getFile();
              FileFragment second = getSecondFragment();
              if (second != null && removedFile.equals(second.getFile())) {
                  if (second instanceof PreviewMediaFragment) {
-                     ((PreviewMediaFragment)second).stopPreview(true);
+                     ((PreviewMediaFragment) second).stopPreview(true);
                  }
                  setFile(getStorageManager().getFileById(removedFile.getParentId()));
                  cleanSecondFragment();
              }
          }
      }
-     
-     
      /**
-      * Updates the view associated to the activity after the finish of an operation trying to move a 
+      * Updates the view associated to the activity after the finish of an operation trying to move a
       * file.
-      * 
-      * @param operation     Move operation performed.
-      * @param result        Result of the move operation.
+      *
+      * @param operation Move operation performed.
+      * @param result    Result of the move operation.
       */
      private void onMoveFileOperationFinish(MoveFileOperation operation,
                                             RemoteOperationResult result) {
          } else {
              dismissLoadingDialog();
              try {
-                 Toast msg = Toast.makeText(FileDisplayActivity.this, 
-                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), 
-                         Toast.LENGTH_LONG); 
+                 Toast msg = Toast.makeText(FileDisplayActivity.this,
+                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+                         Toast.LENGTH_LONG);
                  msg.show();
  
              } catch (NotFoundException e) {
-                 Log_OC.e(TAG, "Error while trying to show fail message " , e);
+                 Log_OC.e(TAG, "Error while trying to show fail message ", e);
              }
          }
      }
  
+     /**
+      * Updates the view associated to the activity after the finish of an operation trying to copy a
+      * file.
+      *
+      * @param operation Copy operation performed.
+      * @param result    Result of the copy operation.
+      */
+     private void onCopyFileOperationFinish(CopyFileOperation operation, RemoteOperationResult result) {
+         if (result.isSuccess()) {
+             dismissLoadingDialog();
+             refreshListOfFilesFragment();
+         } else {
+             dismissLoadingDialog();
+             try {
+                 Toast msg = Toast.makeText(FileDisplayActivity.this,
+                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+                         Toast.LENGTH_LONG);
+                 msg.show();
+             } catch (NotFoundException e) {
+                 Log_OC.e(TAG, "Error while trying to show fail message ", e);
+             }
+         }
+     }
  
      /**
       * Updates the view associated to the activity after the finish of an operation trying to rename
                          renamedFile.equals(details.getFile())) {
                      ((PreviewMediaFragment) details).updateFile(renamedFile);
                      if (PreviewMediaFragment.canBePreviewed(renamedFile)) {
-                         int position = ((PreviewMediaFragment)details).getPosition();
+                         int position = ((PreviewMediaFragment) details).getPosition();
                          startMediaPreview(renamedFile, position, true);
                      } else {
                          getFileOperationsHelper().openFile(renamedFile);
                      }
                  }
              }
-             
              if (getStorageManager().getFileById(renamedFile.getParentId()).equals(getCurrentDir())){
                  refreshListOfFilesFragment();
              }
                      ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
                      Toast.LENGTH_LONG); 
              msg.show();
-             
              if (result.isSslRecoverableException()) {
                  mLastSslUntrustedServerResult = result;
                  showUntrustedCertDialog(mLastSslUntrustedServerResult);
          } else {
              dismissLoadingDialog();
              try {
-                 Toast msg = Toast.makeText(FileDisplayActivity.this, 
-                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), 
-                         Toast.LENGTH_LONG); 
+                 Toast msg = Toast.makeText(FileDisplayActivity.this,
+                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+                         Toast.LENGTH_LONG);
                  msg.show();
  
              } catch (NotFoundException e) {
-                 Log_OC.e(TAG, "Error while trying to show fail message " , e);
+                 Log_OC.e(TAG, "Error while trying to show fail message ", e);
              }
          }
      }
  
-     
      /**
       * {@inheritDoc}
       */
          if (details != null && details instanceof FileDetailFragment &&
                  file.equals(details.getFile()) ) {
              if (downloading || uploading) {
-                 ((FileDetailFragment)details).updateFileDetails(file, getAccount());
+                 ((FileDetailFragment) details).updateFileDetails(file, getAccount());
              } else {
                  if (!file.fileExists()) {
                      cleanSecondFragment();
                  } else {
-                     ((FileDetailFragment)details).updateFileDetails(false, true);
+                     ((FileDetailFragment) details).updateFileDetails(false, true);
                  }
              }
          }
-             
      }
  
  
          }
          return null;
      }
-     
      public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
-         long currentSyncTime = System.currentTimeMillis(); 
-         
+         long currentSyncTime = System.currentTimeMillis();
          mSyncInProgress = true;
-                 
          // perform folder synchronization
          RemoteOperation synchFolderOp = new RefreshFolderOperation( folder,
                  currentSyncTime,
      }
  
      /**
-      * Show untrusted cert dialog 
+      * Show untrusted cert dialog
       */
      public void showUntrustedCertDialog(RemoteOperationResult result) {
          // Show a dialog with the certificate info
          FragmentTransaction ft = fm.beginTransaction();
          dialog.show(ft, DIALOG_UNTRUSTED_CERT);
      }
-     
      private void requestForDownload(OCFile file) {
          Account account = getAccount();
          if (!mDownloaderBinder.isDownloading(account, mWaitingToPreview)) {
              startService(i);
          }
      }
-     
-     private void sendDownloadedFile(){
+     private void sendDownloadedFile() {
          getFileOperationsHelper().sendDownloadedFile(mWaitingToSend);
          mWaitingToSend = null;
      }
  
-     
      /**
       * Requests the download of the received {@link OCFile} , updates the UI
       * to monitor the download progress and prepares the activity to send the file
       * when the download finishes.
-      * 
-      * @param file          {@link OCFile} to download and preview.
+      *
+      * @param file {@link OCFile} to download and preview.
       */
      public void startDownloadForSending(OCFile file) {
          mWaitingToSend = file;
          requestForDownload(mWaitingToSend);
-         boolean hasSecondFragment = (getSecondFragment()!= null);
+         boolean hasSecondFragment = (getSecondFragment() != null);
          updateFragmentsVisibility(hasSecondFragment);
      }
-     
      /**
       * Opens the image gallery showing the image {@link OCFile} received as parameter.
-      * 
-      * @param file                      Image {@link OCFile} to show.
+      *
+      * @param file Image {@link OCFile} to show.
       */
      public void startImagePreview(OCFile file) {
          Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);
          showDetailsIntent.putExtra(EXTRA_FILE, file);
          showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
          startActivity(showDetailsIntent);
-         
      }
  
      /**
       * Stars the preview of an already down media {@link OCFile}.
-      * 
+      *
       * @param file                      Media {@link OCFile} to preview.
       * @param startPlaybackPosition     Media position where the playback will be started,
       *                                  in milliseconds.
       * Requests the download of the received {@link OCFile} , updates the UI
       * to monitor the download progress and prepares the activity to preview
       * or open the file when the download finishes.
-      * 
-      * @param file          {@link OCFile} to download and preview.
+      *
+      * @param file {@link OCFile} to download and preview.
       */
      public void startDownloadForPreview(OCFile file) {
          Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount());
  
      public void cancelTransference(OCFile file) {
          getFileOperationsHelper().cancelTransference(file);
-         if (mWaitingToPreview != null && 
+         if (mWaitingToPreview != null &&
                  mWaitingToPreview.getRemotePath().equals(file.getRemotePath())) {
              mWaitingToPreview = null;
          }
          }
      }
  
-     private void sortByDate(boolean ascending){
+     private void sortByDate(boolean ascending) {
          getListOfFilesFragment().sortByDate(ascending);
      }
  
-     private void sortBySize(boolean ascending){
+     private void sortBySize(boolean ascending) {
          getListOfFilesFragment().sortBySize(ascending);
      }
  
-     private void sortByName(boolean ascending){
+     private void sortByName(boolean ascending) {
          getListOfFilesFragment().sortByName(ascending);
      }
  
@@@ -36,10 -36,7 +36,10 @@@ import android.widget.GridView
  import android.widget.ListAdapter;
  import android.widget.ListView;
  import android.widget.TextView;
 +import android.widget.Toast;
  
 +import com.getbase.floatingactionbutton.FloatingActionButton;
 +import com.getbase.floatingactionbutton.FloatingActionsMenu;
  import com.owncloud.android.R;
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.ui.ExtendedListView;
@@@ -67,11 -64,6 +67,11 @@@ public class ExtendedListFragment exten
      private SwipeRefreshLayout mRefreshGridLayout;
      private SwipeRefreshLayout mRefreshEmptyLayout;
      private TextView mEmptyListMessage;
 +
 +    private FloatingActionsMenu fabMain;
 +    private FloatingActionButton fabUpload;
 +    private FloatingActionButton fabMkdir;
 +    private FloatingActionButton fabUploadFromApp;
      
      // Save the state of the scroll in browsing
      private ArrayList<Integer> mIndexes;
@@@ -79,8 -71,8 +79,8 @@@
      private ArrayList<Integer> mTops;
      private int mHeightCell = 0;
  
-     private OnEnforceableRefreshListener mOnRefreshListener = null;
-     
+     private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null;
      protected AbsListView mCurrentListView;
      private ExtendedListView mListView;
      private View mListFooterView;
          return mCurrentListView;
      }
  
 +    public FloatingActionButton getFabUpload() {
 +        return fabUpload;
 +    }
 +
 +    public FloatingActionButton getFabUploadFromApp() {
 +        return fabUploadFromApp;
 +    }
 +
 +    public FloatingActionButton getFabMkdir() {
 +        return fabMkdir;
 +    }
 +
 +    public FloatingActionsMenu getFabMain() {
 +        return fabMain;
 +    }
  
      protected void switchToGridView() {
          if ((mCurrentListView == mListView)) {
  
          mCurrentListView = mListView;   // list as default
  
 +        fabMain = (FloatingActionsMenu) v.findViewById(R.id.fab_main);
 +        fabUpload = (FloatingActionButton) v.findViewById(R.id.fab_upload);
 +        fabMkdir = (FloatingActionButton) v.findViewById(R.id.fab_mkdir);
 +        fabUploadFromApp = (FloatingActionButton) v.findViewById(R.id.fab_upload_from_app);
 +
          return v;
      }
  
      }
  
      /**
 +     * Disables FAB.
 +     *
 +     * Sets the 'visibility' state of the FAB contained in the fragment.
 +     *
 +     * When 'false' is set, FAB visibility is set to View.GONE programatically,
 +     *
 +     * @param   enabled     Desired visibility for the FAB.
 +     */
 +    public void setFabEnabled(boolean enabled) {
 +        if(enabled) {
 +            fabMain.setVisibility(View.VISIBLE);
 +        } else {
 +            fabMain.setVisibility(View.GONE);
 +        }
 +    }
 +
 +    /**
       * Set message for empty list view
       */
      public void setMessageForEmptyList(String message) {
          mRefreshEmptyLayout.setRefreshing(false);
  
          if (mOnRefreshListener != null) {
-             mOnRefreshListener.onRefresh(ignoreETag);
+             mOnRefreshListener.onRefresh();
          }
      }