Merge branch 'master' of https://github.com/owncloud/android into material_fab
authorAndy Scherzinger <info@andy-scherzinger.de>
Mon, 7 Sep 2015 09:13:04 +0000 (11:13 +0200)
committerAndy Scherzinger <info@andy-scherzinger.de>
Mon, 7 Sep 2015 09:13:04 +0000 (11:13 +0200)
1  2 
res/layout/file_preview.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@@ -25,9 -25,9 +25,9 @@@
      android:layout_height="match_parent"
      android:background="@color/background_color"
      android:gravity="center"
-     tools:context=".ui.fragment.FilePreviewFragment" >
+     tools:context=".ui.fragment.FilePreviewFragment">
  
-     <FrameLayout 
+     <FrameLayout
          android:id="@+id/visual_area"
            android:layout_width="match_parent"
            android:layout_height="0dp"
@@@ -39,7 -39,7 +39,7 @@@
                android:id="@+id/image_preview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
 -              android:layout_margin="16dp"
 +              android:layout_margin="@dimen/standard_margin"
                android:layout_gravity="center"
                android:contentDescription="@string/preview_image_description"
                android:src="@drawable/logo" />
@@@ -99,6 -99,7 +99,7 @@@ import com.owncloud.android.ui.fragment
  import com.owncloud.android.ui.preview.PreviewImageActivity;
  import com.owncloud.android.ui.preview.PreviewImageFragment;
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
+ import com.owncloud.android.ui.preview.PreviewTextFragment;
  import com.owncloud.android.ui.preview.PreviewVideoActivity;
  import com.owncloud.android.utils.DisplayUtils;
  import com.owncloud.android.utils.ErrorMessageAdapter;
@@@ -107,7 -108,6 +108,6 @@@ import com.owncloud.android.utils.UriUt
  
  import java.io.File;
  
  /**
   * Displays, what files the user has available in his ownCloud.
   */
@@@ -116,6 -116,8 +116,8 @@@ public class FileDisplayActivity extend
          implements FileFragment.ContainerActivity,
          OnSslUntrustedCertListener, OnEnforceableRefreshListener {
  
      private SyncBroadcastReceiver mSyncBroadcastReceiver;
      private UploadFinishReceiver mUploadFinishReceiver;
      private DownloadFinishReceiver mDownloadFinishReceiver;
              mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
              mWaitingToSend = (OCFile) savedInstanceState.getParcelable(
                      FileDisplayActivity.KEY_WAITING_TO_SEND);
-            
          } else {
              mWaitingToPreview = null;
              mSyncInProgress = false;
  
          mProgressBar.setIndeterminate(mSyncInProgress);
          // always AFTER setContentView(...) ; to work around bug in its implementation
-         
          setBackgroundText();
  
          Log_OC.v(TAG, "onCreate() end");
              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) {
                  listOfFiles.listDirectory(getCurrentDir());
                  // TODO Enable when "On Device" is recovered
                  // listOfFiles.listDirectory(getCurrentDir(), MainApp.getOnlyOnDevice());
              } else {
                  Log_OC.e(TAG, "Still have a chance to lose the initializacion of list fragment >(");
              }
                  setSecondFragment(secondFragment);
                  updateFragmentsVisibility(true);
                  updateActionBarTitleAndHomeButton(file);
-                 
              } else {
                  cleanSecondFragment();
+                 if (file.isDown() && PreviewTextFragment.canBePreviewed(file))
+                     startTextPreview(file);
              }
  
          } else {
                  secondFragment = new PreviewMediaFragment(file, getAccount(),
                          startPlaybackPosition, autoplay);
  
+             } else if (file.isDown() && PreviewTextFragment.canBePreviewed(file)) {
+                 secondFragment = null;
              } else {
-                 secondFragment = FileDetailFragment.newInstance(file, getAccount());
-             }
+             secondFragment = FileDetailFragment.newInstance(file, getAccount());
+         }
          }
          return secondFragment;
      }
                          if (PreviewMediaFragment.canBePreviewed(mWaitingToPreview)) {
                              startMediaPreview(mWaitingToPreview, 0, true);
                              detailsFragmentChanged = true;
+                         } else if (PreviewTextFragment.canBePreviewed(mWaitingToPreview)) {
+                             startTextPreview(mWaitingToPreview);
+                             detailsFragmentChanged = true;
                          } else {
                              getFileOperationsHelper().openFile(mWaitingToPreview);
                          }
          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: {
                  startSynchronization();
                  break;
                  UploadSourceDialogFragment dialog =
                          UploadSourceDialogFragment.newInstance(getAccount());
                  dialog.show(getSupportFragmentManager(), DIALOG_UPLOAD_SOURCE);
                  break;
              }
              case android.R.id.home: {
          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) {
      protected void onResume() {
          Log_OC.v(TAG, "onResume() start");
          super.onResume();
          // refresh Navigation Drawer account list
          mNavigationDrawerAdapter.updateAccountList();
  
          // refresh list of files
          refreshListOfFilesFragment();
  
          registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
  
          Log_OC.v(TAG, "onResume() end");
      }
  
  
                                  FileSyncAdapter.EXTRA_RESULT);
                  boolean sameAccount = (getAccount() != null &&
                          accountName.equals(getAccount().name) && getStorageManager() != null);
-     
                  if (sameAccount) {
  
                      if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
                                                     synchFolderRemotePath),
                                              Toast.LENGTH_LONG)
                                  .show();
                              browseToRoot();
  
                          } else {
                                          .equals(event));
                                  
                          if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
-                                     equals(event) &&
-                                 /// TODO refactor and make common
+                                     equals(event) &&/// TODO refactor and make common
                                  synchResult != null && !synchResult.isSuccess() &&
                                  (synchResult.getCode() == ResultCode.UNAUTHORIZED ||
                                          synchResult.isIdPRedirection() ||
                                          new OwnCloudAccount(getAccount(), context);
                                  client = (OwnCloudClientManagerFactory.getDefaultSingleton().
                                          removeClientFor(ocAccount));
                                  if (client != null) {
                                      OwnCloudCredentials cred = client.getCredentials();
                                      if (cred != null) {
                          cleanSecondFragment();
                      }
  
-                     // Force the preview if the file is an image
-                     if (uploadWasFine && PreviewImageFragment.canBePreviewed(getFile())) {
-                         startImagePreview(getFile());
-                     } // TODO what about other kind of previews?
+                     // Force the preview if the file is an image or text file
+                     if (uploadWasFine) {
+                         OCFile ocFile = getFile();
+                         if (PreviewImageFragment.canBePreviewed(ocFile))
+                             startImagePreview(getFile());
+                         else if (PreviewTextFragment.canBePreviewed(ocFile))
+                             startTextPreview(ocFile);
+                         // TODO what about other kind of previews?
+                     }
                  }
  
                  mProgressBar.setIndeterminate(false);
                  if (mWaitingToSend != null) {
                      mWaitingToSend =
                              getStorageManager().getFileByPath(mWaitingToSend.getRemotePath());
-                     if (mWaitingToSend.isDown()) { 
+                     if (mWaitingToSend.isDown()) {
                          sendDownloadedFile();
                      }
                  }
              startSyncFolderOperation(root, false);
          }
          cleanSecondFragment();
      }
  
  
              }
              // a new chance to get the mDownloadBinder through
              // getFileDownloadBinder() - THIS IS A MESS
-             OCFileListFragment listOfFiles = getListOfFilesFragment(); 
+             OCFileListFragment listOfFiles = getListOfFilesFragment();
              if (listOfFiles != null) {
                  listOfFiles.listDirectory();
                  // TODO Enable when "On Device" is recovered ?
          }
  
      }
      private void onCreateShareOperationFinish(CreateShareOperation operation,
                                                RemoteOperationResult result) {
          if (result.isSuccess()) {
          }
      }
  
      private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
                                                RemoteOperationResult result) {
          if (result.isSuccess()) {
                  if (details instanceof PreviewMediaFragment) {
                      // Refresh  OCFile of the fragment
                      ((PreviewMediaFragment) details).updateFile(file);
+                 } else if (details instanceof PreviewTextFragment) {
+                     // Refresh  OCFile of the fragment
+                     ((PreviewTextFragment) details).updateFile(file);
                  } else {
                      showDetails(file);
                  }
  
          Toast msg = Toast.makeText(this,
                  ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
-                 Toast.LENGTH_LONG); 
+                 Toast.LENGTH_LONG);
          msg.show();
  
          if (result.isSuccess()) {
                  setFile(getStorageManager().getFileById(removedFile.getParentId()));
                  cleanSecondFragment();
              }
-             if (getStorageManager().getFileById(removedFile.getParentId()).equals(getCurrentDir())) {
+             if (getStorageManager().getFileById(removedFile.getParentId()).equals(getCurrentDir())){
                  refreshListOfFilesFragment();
              }
              invalidateOptionsMenu();
                      } else {
                          getFileOperationsHelper().openFile(renamedFile);
                      }
+                 } else if (details instanceof PreviewTextFragment &&
+                         renamedFile.equals(details.getFile())) {
+                     ((PreviewTextFragment) details).updateFile(renamedFile);
+                     if (PreviewTextFragment.canBePreviewed(renamedFile)) {
+                         startTextPreview(renamedFile);
+                     } else {
+                         getFileOperationsHelper().openFile(renamedFile);
+                     }
                  }
              }
  
          } else {
              Toast msg = Toast.makeText(this,
                      ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
-                     Toast.LENGTH_LONG); 
+                     Toast.LENGTH_LONG);
              msg.show();
  
              if (result.isSslRecoverableException()) {
                  getApplicationContext()
          );
          synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null);
          mProgressBar.setIndeterminate(true);
  
          setBackgroundText();
          showDetailsIntent.putExtra(EXTRA_FILE, file);
          showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
          startActivity(showDetailsIntent);
      }
  
      /**
      }
  
      /**
+      * Stars the preview of a text file {@link OCFile}.
+      *
+      * @param file Text {@link OCFile} to preview.
+      */
+     public void startTextPreview(OCFile file) {
+         Bundle args = new Bundle();
+         args.putParcelable(EXTRA_FILE, file);
+         args.putParcelable(EXTRA_ACCOUNT, getAccount());
+         Fragment textPreviewFragment = Fragment.instantiate(getApplicationContext(),
+                 PreviewTextFragment.class.getName(), args);
+         setSecondFragment(textPreviewFragment);
+         updateFragmentsVisibility(true);
+         //updateNavigationElementsInActionBar(file);
+         setFile(file);
+     }
+     /**
       * 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.