Merge branch 'master' of https://github.com/owncloud/android into material_buttons
authorAndy Scherzinger <info@andy-scherzinger.de>
Fri, 4 Sep 2015 11:16:11 +0000 (13:16 +0200)
committerAndy Scherzinger <info@andy-scherzinger.de>
Fri, 4 Sep 2015 11:16:11 +0000 (13:16 +0200)
Conflicts:
res/layout/uploader_layout.xml

1  2 
res/layout/uploader_layout.xml
src/com/owncloud/android/ui/activity/FileActivity.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

            android:orientation="horizontal" >
  
                <android.support.v7.widget.AppCompatButton
++<<<<<<< HEAD
 +                  android:id="@+id/uploader_new_folder"
 +                      android:theme="@style/Button"
++=======
+                   android:id="@+id/uploader_cancel"
+                       style="@style/ownCloud.Button"
++>>>>>>> f787213cd1cae854c169d263d3636e1de4dffa94
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_weight="1"
-                   android:text="@string/uploader_btn_new_folder_text" />
+                   android:text="@string/common_cancel" />
  
                <android.support.v7.widget.AppCompatButton
                    android:id="@+id/uploader_choose_folder"
 -                      style="@style/ownCloud.Button"
 +                      android:theme="@style/Button.Primary"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
@@@ -363,7 -363,12 +363,7 @@@ public class FileActivity extends AppCo
  //        }
  
          // Display username in drawer
 -        Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
 -        if (account != null) {
 -            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -            int lastAtPos = account.name.lastIndexOf("@");
 -            username.setText(account.name.substring(0, lastAtPos));
 -        }
 +        setUsernameInDrawer(navigationDrawerLayout, AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()));
  
          // load slide menu items
          mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
      }
  
      /**
 +     * sets the given account name in the drawer in case the drawer is available. The account name
 +     * is shortened beginning from the @-sign in the username.
 +     *
 +     * @param navigationDrawerLayout the drawer layout to be used
 +     * @param account                the account to be set in the drawer
 +     */
 +    protected void setUsernameInDrawer(RelativeLayout navigationDrawerLayout, Account account) {
 +        if (navigationDrawerLayout != null && getAccount() != null) {
 +            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 +            int lastAtPos = account.name.lastIndexOf("@");
 +            username.setText(account.name.substring(0, lastAtPos));
 +        }
 +    }
 +
 +    /**
       * Updates title bar and home buttons (state and icon).
       *
       * Assumes that navigation drawer is NOT visible.
       */
      private void swapToDefaultAccount() {
          // default to the most recently used account
-         Account newAccount  = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
+         Account newAccount = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
          if (newAccount == null) {
              /// no account available: force account creation
              createFirstAccount();
      }
  
      /**
-      * @return  'True' when the Activity is finishing to enforce the setup of a new account.
+      * @return 'True' when the Activity is finishing to enforce the setup of a new account.
       */
      protected boolean isRedirectingToSetupAccount() {
          return mRedirectingToSetupAccount;
      }
  
  
      private void onCreateShareOperationFinish(CreateShareOperation operation,
                                                RemoteOperationResult result) {
          dismissLoadingDialog();
      /**
       * Dismiss loading dialog
       */
-     public void dismissLoadingDialog(){
+     public void dismissLoadingDialog() {
          Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
          if (frag != null) {
              LoadingDialog loading = (LoadingDialog) frag;
@@@ -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);
              setFile(file);
  
              if (mAccountWasSet) {
 -                RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
 -                if (navigationDrawerLayout != null && getAccount() != null) {
 -                    TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -                    int lastAtPos = getAccount().name.lastIndexOf("@");
 -                    username.setText(getAccount().name.substring(0, lastAtPos));
 -                }
 +                setUsernameInDrawer((RelativeLayout) findViewById(R.id.left_drawer), getAccount());
              }
  
              if (!stateWasRecovered) {
                  if (file.isFolder()) {
                      startSyncFolderOperation(file, false);
                  }
-                 
              } else {
                  updateFragmentsVisibility(!file.isFolder());
                  updateActionBarTitleAndHomeButton(file.isFolder() ? null : file);
          }
      }
  
 -
      private void createMinFragments() {
          OCFileListFragment listOfFiles = new OCFileListFragment();
          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
          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;
      }
              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);
      }
  
@@@ -4,6 -4,7 +4,7 @@@
   *   @author Bartek Przybylski\r
   *   @author Tobias Kaminsky\r
   *   @author David A. Velasco\r
+  *   @author masensio\r
   *   Copyright (C) 2011  Bartek Przybylski\r
   *   Copyright (C) 2015 ownCloud Inc.\r
   *\r
@@@ -192,7 -193,6 +193,7 @@@ public class FileListListAdapter extend
              switch (viewType){\r
                  case LIST_ITEM:\r
                      TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
 +                    TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);\r
                      TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
                      ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
  \r
  \r
                      checkBoxV.setVisibility(View.GONE);\r
  \r
 +                    fileSizeSeparatorV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
  \r
                              } else {\r
                                  if (parentList.isItemChecked(position)) {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_on_background);\r
 +                                            R.drawable.ic_checkbox_marked);\r
                                  } else {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_off_background);\r
 +                                            R.drawable.ic_checkbox_blank_outline);\r
                                  }\r
                                  checkBoxV.setVisibility(View.VISIBLE);\r
                              }\r
                          }\r
  \r
                      } else { //Folder\r
 +                        fileSizeSeparatorV.setVisibility(View.INVISIBLE);\r
                          fileSizeV.setVisibility(View.INVISIBLE);\r
                      }\r
  \r
                              task.execute(file);\r
                          }\r
                      }\r
\r
+                     if (file.getMimetype().equalsIgnoreCase("image/png")) {\r
+                         fileIcon.setBackgroundColor(mContext.getResources()\r
+                                 .getColor(R.color.background_color));\r
+                     }\r
\r
\r
                  } else {\r
                      fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(),\r
                              file.getFileName()));\r
  \r
              } else {\r
                  // Folder\r
\r
                  if (checkIfFileIsSharedWithMe(file)) {\r
                      fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
                  } else if (file.isShareByLink()) {\r