Merge branch 'share_link__new_share' into setup_additions
authorDavid A. Velasco <dvelasco@solidgear.es>
Thu, 6 Feb 2014 12:58:41 +0000 (13:58 +0100)
committerDavid A. Velasco <dvelasco@solidgear.es>
Thu, 6 Feb 2014 12:58:41 +0000 (13:58 +0100)
1  2 
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@@ -38,12 -38,10 +38,10 @@@ import android.content.res.Resources.No
  import android.database.Cursor;
  import android.net.Uri;
  import android.os.Bundle;
- import android.os.Handler;
  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.support.v4.content.LocalBroadcastManager;
  import android.util.Log;
@@@ -61,7 -59,6 +59,6 @@@ import com.actionbarsherlock.view.MenuI
  import com.actionbarsherlock.view.Window;
  import com.owncloud.android.MainApp;
  import com.owncloud.android.R;
- import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
  import com.owncloud.android.files.services.FileDownloader;
  import com.owncloud.android.files.services.FileObserverService;
@@@ -70,11 -67,10 +67,10 @@@ import com.owncloud.android.files.servi
  import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
  import com.owncloud.android.operations.CreateFolderOperation;
  
- import com.owncloud.android.lib.operations.common.OnRemoteOperationListener;
  import com.owncloud.android.lib.operations.common.RemoteOperation;
  import com.owncloud.android.lib.operations.common.RemoteOperationResult;
  import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode;
+ import com.owncloud.android.operations.CreateShareOperation;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
@@@ -83,7 -79,6 +79,6 @@@ import com.owncloud.android.services.Op
  import com.owncloud.android.syncadapter.FileSyncAdapter;
  import com.owncloud.android.ui.dialog.EditNameDialog;
  import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
- import com.owncloud.android.ui.dialog.LoadingDialog;
  import com.owncloud.android.ui.dialog.SslValidatorDialog;
  import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
  import com.owncloud.android.ui.fragment.FileDetailFragment;
@@@ -103,14 -98,11 +98,11 @@@ import com.owncloud.android.utils.Log_O
   * @author David A. Velasco
   */
  
 -public class FileDisplayActivity extends FileActivity implements
 +public class FileDisplayActivity extends HookActivity implements
- OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, OnRemoteOperationListener, EditNameDialogListener {
+ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, EditNameDialogListener {
  
      private ArrayAdapter<String> mDirectories;
  
-     /** Access point to the cached database for the current ownCloud {@link Account} */
-     private FileDataStorageManager mStorageManager = null;
      private SyncBroadcastReceiver mSyncBroadcastReceiver;
      private UploadFinishReceiver mUploadFinishReceiver;
      private DownloadFinishReceiver mDownloadFinishReceiver;
      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";
  
      private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
      private static final String TAG_SECOND_FRAGMENT = "SECOND_FRAGMENT";
  
      private OCFile mWaitingToPreview;
-     private Handler mHandler;
      
      private boolean mSyncInProgress = false;
      private boolean mRefreshSharesInProgress = false;
  
          super.onCreate(savedInstanceState); // this calls onAccountChanged() when ownCloud Account is valid
  
-         mHandler = new Handler();
-         
          /// bindings to transference services
          mUploadConnection = new ListServiceConnection(); 
          mDownloadConnection = new ListServiceConnection();
       */ 
      @Override
      protected void onAccountSet(boolean stateWasRecovered) {
+         super.onAccountSet(stateWasRecovered);
          if (getAccount() != null) {
-             mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
-                 
              /// Check whether the 'main' OCFile handled by the Activity is contained in the current Account
              OCFile file = getFile();
              // get parent from path
                      // upload in progress - right now, files are not inserted in the local cache until the upload is successful
                      // get parent from path
                      parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
-                     if (mStorageManager.getFileByPath(parentPath) ==  null)
+                     if (getStorageManager().getFileByPath(parentPath) ==  null)
                          file = null; // not able to know the directory where the file is uploading
                  } else {
-                     file = mStorageManager.getFileByPath(file.getRemotePath());   // currentDir = null if not in the current Account
+                     file = getStorageManager().getFileByPath(file.getRemotePath());   // currentDir = null if not in the current Account
                  }
              }
              if (file == null) {
                  // fall back to root folder
-                 file = mStorageManager.getFileByPath(OCFile.ROOT_PATH);  // never returns null
+                 file = getStorageManager().getFileByPath(OCFile.ROOT_PATH);  // never returns null
              }
              setFile(file);
              setNavigationListWithFolder(file);
                  updateFragmentsVisibility(!file.isFolder());
                  updateNavigationElementsInActionBar(file.isFolder() ? null : file);
              }
-             
-             
-         } else {
-             Log_OC.wtf(TAG, "onAccountChanged was called with NULL account associated!");
          }
      }
  
              if (fileIt.isFolder()) {
                  mDirectories.add(fileIt.getFileName());
              }
-             //fileIt = mStorageManager.getFileById(fileIt.getParentId());
              // get parent from path
              parentPath = fileIt.getRemotePath().substring(0, fileIt.getRemotePath().lastIndexOf(fileIt.getFileName()));
-             fileIt = mStorageManager.getFileByPath(parentPath);
+             fileIt = getStorageManager().getFileByPath(parentPath);
          }
          mDirectories.add(OCFile.PATH_SEPARATOR);
      }
                  boolean detailsFragmentChanged = false;
                  if (waitedPreview) {
                      if (success) {
-                         mWaitingToPreview = mStorageManager.getFileById(mWaitingToPreview.getFileId());   // update the file from database, for the local storage path
+                         mWaitingToPreview = getStorageManager().getFileById(mWaitingToPreview.getFileId());   // update the file from database, for the local storage path
                          if (PreviewMediaFragment.canBePreviewed(mWaitingToPreview)) {
                              startMediaPreview(mWaitingToPreview, 0, true);
                              detailsFragmentChanged = true;
                          } else {
-                             openFile(mWaitingToPreview);
+                             getFileOperationsHelper().openFile(mWaitingToPreview, this);
                          }
                      }
                      mWaitingToPreview = null;
          }
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getSherlock().getMenuInflater();
                  targetPath = mDirectories.getItem(i) + OCFile.PATH_SEPARATOR + targetPath; 
              }
              targetPath = OCFile.PATH_SEPARATOR + targetPath;
-             OCFile targetFolder = mStorageManager.getFileByPath(targetPath);
+             OCFile targetFolder = getStorageManager().getFileByPath(targetPath);
              if (targetFolder != null) {
                  browseTo(targetFolder);
              }
              // the next operation triggers a new call to this method, but it's necessary to 
              // ensure that the name exposed in the action bar is the current directory when the 
              // user selected it in the navigation list
 -            getSupportActionBar().setSelectedNavigationItem(0);
 +            if (getSupportActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST  && itemPosition != 0) 
 +                getSupportActionBar().setSelectedNavigationItem(0);
          }
          return true;
      }
  
  
      /**
-      * 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
  
              ((TextView) v).setTextColor(getResources().getColorStateList(
                      android.R.color.white));
 +            
 +            fixRoot((TextView) v );
              return v;
          }
  
              ((TextView) v).setTextColor(getResources().getColorStateList(
                      android.R.color.white));
  
 +            fixRoot((TextView) v );
              return v;
          }
  
 +        private void fixRoot(TextView v) {
 +            if (v.getText().equals(OCFile.PATH_SEPARATOR)) {
 +                v.setText(R.string.default_display_name_for_root_folder);
 +            }
 +        }
 +
      }
  
      private class SyncBroadcastReceiver extends BroadcastReceiver {
              String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME);
              String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH); 
              RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT);
-             boolean sameAccount = (getAccount() != null && accountName.equals(getAccount().name) && mStorageManager != null); 
+             boolean sameAccount = (getAccount() != null && accountName.equals(getAccount().name) && getStorageManager() != null); 
  
              if (sameAccount) {
                  
                  if (!FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
-                     
-                     OCFile currentFile = (getFile() == null) ? null : mStorageManager.getFileByPath(getFile().getRemotePath());
-                     OCFile currentDir = (getCurrentDir() == null) ? null : mStorageManager.getFileByPath(getCurrentDir().getRemotePath());
+                     OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath());
+                     OCFile currentDir = (getCurrentDir() == null) ? null : getStorageManager().getFileByPath(getCurrentDir().getRemotePath());
  
                      if (currentDir == null) {
                          // current folder was removed from the server 
                          synchResult.isSuccess() &&
                              (SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED.equals(event) || 
                                  FileSyncAdapter.EVENT_FOLDER_CONTENTS_SYNCED.equals(event)
-                             )
+                             ) &&
+                             !mRefreshSharesInProgress &&
+                             getFileOperationsHelper().isSharedSupported(FileDisplayActivity.this)
                          ) {
                          startGetShares();
                      }
                  Account account = intent.getParcelableExtra(OperationsService.EXTRA_ACCOUNT);
                  RemoteOperationResult getSharesResult = (RemoteOperationResult)intent.getSerializableExtra(OperationsService.EXTRA_RESULT);
                  if (getAccount() != null && account.name.equals(getAccount().name)
-                         && mStorageManager != null
+                         && getStorageManager() != null
                          ) {
                      refeshListOfFilesFragment();
                  }
              
      }
  
-     /**
-      * {@inheritDoc}
-      */
-     @Override
-     public FileDataStorageManager getStorageManager() {
-         return mStorageManager;
-     }
      public void browseToRoot() {
          OCFileListFragment listOfFiles = getListOfFilesFragment(); 
          if (listOfFiles != null) {  // should never be null, indeed
              while (mDirectories.getCount() > 1) {
                  popDirname();
              }
-             OCFile root = mStorageManager.getFileByPath(OCFile.ROOT_PATH);
+             OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
              listOfFiles.listDirectory(root);
              setFile(listOfFiles.getCurrentFile());
              startSyncFolderOperation(root);
          if (chosenFile == null || mDualPane) {
              // only list of files - set for browsing through folders
              OCFile currentDir = getCurrentDir();
 -            actionBar.setDisplayHomeAsUpEnabled(currentDir != null && currentDir.getParentId() != 0);
 -            actionBar.setDisplayShowTitleEnabled(false);
 -            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
 +            boolean noRoot = (currentDir != null && currentDir.getParentId() != 0);
 +            actionBar.setDisplayHomeAsUpEnabled(noRoot);
 +            actionBar.setDisplayShowTitleEnabled(!noRoot); 
 +            if (!noRoot) {
 +                actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
 +            }
 +            actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD : ActionBar.NAVIGATION_MODE_LIST);
              actionBar.setListNavigationCallbacks(mDirectories, this);   // assuming mDirectories is updated
  
          } else {
       */
      @Override
      public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+         super.onRemoteOperationFinish(operation, result);
+         
          if (operation instanceof RemoveFileOperation) {
              onRemoveFileOperationFinish((RemoveFileOperation)operation, result);
  
  
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
+         
+         } else if (operation instanceof CreateShareOperation) {
+             onCreateShareOperationFinish((CreateShareOperation) operation, result);
          }
+         
      }
  
  
+     private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) {
+         if (result.isSuccess()) {
+             refeshListOfFilesFragment();
+         }
+     }
+     
      /**
       * Updates the view associated to the activity after the finish of an operation trying to remove a 
       * file. 
              if (second != null && removedFile.equals(second.getFile())) {
                  cleanSecondFragment();
              }
-             if (mStorageManager.getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
+             if (getStorageManager().getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
                  refeshListOfFilesFragment();
              }
  
                      ((FileDetailFragment) details).updateFileDetails(renamedFile, getAccount());
                  }
              }
-             if (mStorageManager.getFileById(renamedFile.getParentId()).equals(getCurrentDir())) {
+             if (getStorageManager().getFileById(renamedFile.getParentId()).equals(getCurrentDir())) {
                  refeshListOfFilesFragment();
              }
  
  
                  // Create directory
                  path += newDirectoryName + OCFile.PATH_SEPARATOR;
-                 RemoteOperation operation = new CreateFolderOperation(path, false, mStorageManager);
+                 RemoteOperation operation = new CreateFolderOperation(path, false, getStorageManager());
                  operation.execute(  getAccount(), 
                          FileDisplayActivity.this, 
                          FileDisplayActivity.this, 
-                         mHandler,
+                         getHandler(),
                          FileDisplayActivity.this);
  
                  showLoadingDialog();
          if (file != null) {
              if (file.isFolder()) {
                  return file;
-             } else if (mStorageManager != null) {
+             } else if (getStorageManager() != null) {
                  String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
-                 return mStorageManager.getFileByPath(parentPath);
+                 return getStorageManager().getFileByPath(parentPath);
              }
          }
          return null;
          
          mRefreshSharesInProgress = true;
      }
-     
  }