Merge branch 'develop' into refresh_folder_contents_when_browsed_into
authormasensio <masensio@solidgear.es>
Tue, 24 Sep 2013 12:57:45 +0000 (14:57 +0200)
committermasensio <masensio@solidgear.es>
Tue, 24 Sep 2013 12:57:45 +0000 (14:57 +0200)
1  2 
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

  package com.owncloud.android.ui.activity;
  
  import java.io.File;
 +import java.io.IOException;
  
  import android.accounts.Account;
 +import android.accounts.AuthenticatorException;
 +import android.accounts.OperationCanceledException;
  import android.app.AlertDialog;
  import android.app.ProgressDialog;
  import android.app.Dialog;
@@@ -45,6 -42,7 +45,7 @@@ import android.os.IBinder
  import android.preference.PreferenceManager;
  import android.provider.MediaStore;
  import android.support.v4.app.Fragment;
+ import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentTransaction;
  import android.util.Log;
  import android.view.View;
@@@ -62,8 -60,6 +63,8 @@@ import com.actionbarsherlock.view.Windo
  import com.owncloud.android.Log_OC;
  import com.owncloud.android.R;
  import com.owncloud.android.authentication.AccountAuthenticator;
 +import com.owncloud.android.authentication.AccountUtils;
 +import com.owncloud.android.authentication.AccountUtils.AccountNotFoundException;
  import com.owncloud.android.datamodel.DataStorageManager;
  import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
@@@ -72,7 -68,6 +73,7 @@@ import com.owncloud.android.files.servi
  import com.owncloud.android.files.services.FileObserverService;
  import com.owncloud.android.files.services.FileUploader;
  import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 +import com.owncloud.android.network.OwnCloudClientUtils;
  import com.owncloud.android.operations.CreateFolderOperation;
  import com.owncloud.android.operations.OnRemoteOperationListener;
  import com.owncloud.android.operations.RemoteOperation;
@@@ -80,10 -75,10 +81,11 @@@ import com.owncloud.android.operations.
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
 +import com.owncloud.android.operations.SynchronizeFolderOperation;
  import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.syncadapter.FileSyncService;
  import com.owncloud.android.ui.dialog.EditNameDialog;
+ import com.owncloud.android.ui.dialog.LoadingDialog;
  import com.owncloud.android.ui.dialog.SslValidatorDialog;
  import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
  import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
@@@ -94,8 -89,6 +96,8 @@@ import com.owncloud.android.ui.preview.
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
  import com.owncloud.android.ui.preview.PreviewVideoActivity;
  
 +import eu.alefzero.webdav.WebdavClient;
 +
  /**
   * Displays, what files the user has available in his ownCloud.
   * 
@@@ -129,6 -122,8 +131,8 @@@ OCFileListFragment.ContainerActivity, F
      private static final int DIALOG_CHOOSE_UPLOAD_SOURCE = 1;
      private static final int DIALOG_SSL_VALIDATOR = 2;
      private static final int DIALOG_CERT_NOT_SAVED = 3;
+     
+     private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
  
      public static final String ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS";
  
              FileFragment second = getSecondFragment();
              OCFile currentDir = getCurrentDir();
              if((currentDir != null && currentDir.getParentId() != 0) || 
 -                    (second != null && second.getFile() != null)) {
 +                    (second != null && second.getFile() != null)) {                
                  onBackPressed(); 
 +                
              }
              break;
          }
          outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
          Log_OC.d(TAG, "onSaveInstanceState() end");
      }
+     
  
      @Override
      protected void onResume() {
  
  
      /**
+      * Show loading dialog 
+      */
+     public void showLoadingDialog() {
+         // Construct dialog
+         LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment));
+         FragmentManager fm = getSupportFragmentManager();
+         FragmentTransaction ft = fm.beginTransaction();
+         loading.show(ft, DIALOG_WAIT_TAG);
+         
+     }
+     
+     /**
+      * Dismiss loading dialog
+      */
+     public void dismissLoadingDialog(){
+         Fragment frag = getSupportFragmentManager().findFragmentByTag(DIALOG_WAIT_TAG);
+       if (frag != null) {
+           LoadingDialog loading = (LoadingDialog) frag;
+             loading.dismiss();
+         }
+     }
+     
+     
+     /**
       * Translates a content URI of an image to a physical path
       * on the disk
       * @param uri The URI to resolve
      public void onBrowsedDownTo(OCFile directory) {
          pushDirname(directory);
          cleanSecondFragment();
 +        
 +        // Sync Folder
 +        startSyncFolderOperation(directory.getRemotePath(), directory.getFileId());
 +//        // Update folder size on DB
 +//        getStorageManager().calculateFolderSize(directory.getParentId());
 +        
      }
  
      /**
  
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
 +            
 +        } else if (operation instanceof SynchronizeFolderOperation) {
 +            onSynchronizeFolderOperationFinish((SynchronizeFolderOperation)operation, result);
 +        }
 +    }
 +
 +
 +    /**
 +     * Updates the view associated to the activity after the finish of an operation trying to synchronize a folder. 
 +     * 
 +     * @param operation     Synchronize operation performed.
 +     * @param result        Result of the synchronization.
 +     */
 +    private void onSynchronizeFolderOperationFinish(SynchronizeFolderOperation operation, RemoteOperationResult result) {
 +        
 +        OCFileListFragment list = getListOfFilesFragment();
 +        enableDisableViewGroup(list.getListView(), true);
 +        
 +        setSupportProgressBarIndeterminateVisibility(false);
 +        if (result.isSuccess()) {
 +            if (result.getCode() != ResultCode.OK_NO_CHANGES_ON_DIR) {
 +                DataStorageManager storageManager = getStorageManager();
 +                OCFile parentDir = storageManager.getFileByPath(operation.getRemotePath());
 +
 +                // Update folder size on DB
 +                getStorageManager().calculateFolderSize(parentDir.getFileId());
 +
 +                // Refrest List
 +                refreshListOfFilesFragment(parentDir);
 +            }
 +        } else {
 +            try {
 +                Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.sync_file_fail_msg, Toast.LENGTH_LONG); 
 +                msg.show();
 +
 +            } catch (NotFoundException e) {
 +                Log_OC.e(TAG, "Error while trying to show fail message " , e);
 +            }
 +        }
 +    }
 +
 +
 +    private void refreshListOfFilesFragment(OCFile parentDir) {
 +        OCFileListFragment fileListFragment = getListOfFilesFragment();
 +        if (fileListFragment != null) { 
 +            fileListFragment.listDirectory(parentDir);
          }
      }
  
       * @param result        Result of the removal.
       */
      private void onRemoveFileOperationFinish(RemoveFileOperation operation, RemoteOperationResult result) {
-         dismissDialog(DIALOG_SHORT_WAIT);
+         dismissLoadingDialog();
          if (result.isSuccess()) {
              Toast msg = Toast.makeText(this, R.string.remove_success_msg, Toast.LENGTH_LONG);
              msg.show();
       */
      private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) {
          if (result.isSuccess()) {
-             dismissDialog(DIALOG_SHORT_WAIT);
+             dismissLoadingDialog();
              refeshListOfFilesFragment();
  
          } else {
-             dismissDialog(DIALOG_SHORT_WAIT);
+             //dismissDialog(DIALOG_SHORT_WAIT);
+             dismissLoadingDialog();
              try {
                  Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); 
                  msg.show();
       * @param result        Result of the renaming.
       */
      private void onRenameFileOperationFinish(RenameFileOperation operation, RemoteOperationResult result) {
-         dismissDialog(DIALOG_SHORT_WAIT);
+         dismissLoadingDialog();
          OCFile renamedFile = operation.getFile();
          if (result.isSuccess()) {
              if (mDualPane) {
  
  
      private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation, RemoteOperationResult result) {
-         dismissDialog(DIALOG_SHORT_WAIT);
+         dismissLoadingDialog();
          OCFile syncedFile = operation.getLocalFile();
          if (!result.isSuccess()) {
              if (result.getCode() == ResultCode.SYNC_CONFLICT) {
                          mHandler,
                          FileDisplayActivity.this);
  
-                 showDialog(DIALOG_SHORT_WAIT);
+                 showLoadingDialog();
              }
          }
      }
          }
          return null;
      }
 +    
 +    public void startSyncFolderOperation(String remotePath, long parentId) {
 +        long currentSyncTime = System.currentTimeMillis(); 
 +        
 +        OCFileListFragment list = getListOfFilesFragment();
 +        enableDisableViewGroup(list.getListView(), false);
 +        
 +       // perform folder synchronization
 +        RemoteOperation synchFolderOp = new SynchronizeFolderOperation(  remotePath, 
 +                                                                                    currentSyncTime, 
 +                                                                                    parentId, 
 +                                                                                    getStorageManager(), 
 +                                                                                    getAccount(), 
 +                                                                                    getApplicationContext()
 +                                                                                  );
 +        synchFolderOp.execute(getAccount(), this, this, mHandler, this);
 +        
 +        setSupportProgressBarIndeterminateVisibility(true);
 +    }
  
 +    
 +    public void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
 +        int childCount = viewGroup.getChildCount();
 +        for (int i = 0; i < childCount; i++) {
 +          View view = viewGroup.getChildAt(i);
 +          view.setEnabled(enabled);
 +          view.setClickable(!enabled);
 +          if (view instanceof ViewGroup) {
 +            enableDisableViewGroup((ViewGroup) view, enabled);
 +          }
 +        }
 +      }
  }
@@@ -31,7 -31,6 +31,7 @@@ import com.owncloud.android.files.servi
  import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
  import com.owncloud.android.operations.OnRemoteOperationListener;
  import com.owncloud.android.operations.RemoteOperation;
 +import com.owncloud.android.operations.RemoteOperationResult;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
@@@ -129,25 -128,10 +129,25 @@@ public class OCFileListFragment extend
          
          if(mFile != null){
              DataStorageManager storageManager = mContainerActivity.getStorageManager();
 -            parentDir = storageManager.getFileById(mFile.getParentId());
 -            mFile = parentDir;
 +            if (mFile.getParentId() == 0) {
 +                parentDir = storageManager.getFileById(1);
 +            }
 +            else {
 +                parentDir = storageManager.getFileById(mFile.getParentId());
 +            }
 +            
 +//            // Update folder size on DB
 +//            storageManager.calculateFolderSize(mFile.getFileId());
 +            
 +            mFile = parentDir;           
          }
 -        listDirectory(parentDir);
 +        
 +        if (mFile != null) {
 +            listDirectory(mFile);
 +
 +            mContainerActivity.startSyncFolderOperation(mFile.getRemotePath(), mFile.getFileId());
 +        }
 +   
      }
      
      @Override
                  Account account = AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity());
                  RemoteOperation operation = new SynchronizeFileOperation(mTargetFile, null, mContainerActivity.getStorageManager(), account, true, false, getSherlockActivity());
                  operation.execute(account, getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
-                 getSherlockActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+                 ((FileDisplayActivity) getSherlockActivity()).showLoadingDialog();
                  return true;
              }
              case R.id.action_cancel_download: {
                  mList.setSelectionFromTop(0, 0);
              }
              mFile = directory;
 -
          }
      }
      
          public void startMediaPreview(OCFile file, int i, boolean b);
  
          public void startImagePreview(OCFile file);
 +        
 +        public void startSyncFolderOperation(String remotePath, long parentId);
  
          /**
           * Getter for the current DataStorageManager in the container activity
                                                                  newFilename, 
                                                                  mContainerActivity.getStorageManager());
              operation.execute(AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity()), getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
-             getActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+             ((FileDisplayActivity) getActivity()).showLoadingDialog();
          }
      }
  
                                                                      mContainerActivity.getStorageManager());
                  operation.execute(AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity()), getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
                  
-                 getActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
+                 ((FileDisplayActivity) getActivity()).showLoadingDialog();
              }
          }
      }