Esempio n. 1
0
 @Override
 public void onNeutral(String callerTag) {
   File f = null;
   if (mFile.isDown() && (f = new File(mFile.getStoragePath())).exists()) {
     f.delete();
     mFile.setStoragePath(null);
     mStorageManager.saveFile(mFile);
     updateFileDetails(mFile, mAccount);
   }
 }
Esempio n. 2
0
  public void onDismiss(EditNameFragment dialog) {
    if (dialog instanceof EditNameFragment) {
      if (((EditNameFragment) dialog).getResult()) {
        String newFilename = ((EditNameFragment) dialog).getNewFilename();
        Log.d(TAG, "name edit dialog dismissed with new name " + newFilename);
        if (!newFilename.equals(mFile.getFileName())) {
          FileDataStorageManager fdsm =
              new FileDataStorageManager(mAccount, getActivity().getContentResolver());
          if (fdsm.getFileById(mFile.getFileId()) != null) {
            OCFile newFile =
                new OCFile(fdsm.getFileById(mFile.getParentId()).getRemotePath() + newFilename);
            newFile.setCreationTimestamp(mFile.getCreationTimestamp());
            newFile.setFileId(mFile.getFileId());
            newFile.setFileLength(mFile.getFileLength());
            newFile.setKeepInSync(mFile.keepInSync());
            newFile.setLastSyncDate(mFile.getLastSyncDate());
            newFile.setMimetype(mFile.getMimetype());
            newFile.setModificationTimestamp(mFile.getModificationTimestamp());
            newFile.setParentId(mFile.getParentId());
            boolean localRenameFails = false;
            if (mFile.isDown()) {
              File f = new File(mFile.getStoragePath());
              Log.e(TAG, f.getAbsolutePath());
              localRenameFails =
                  !(f.renameTo(new File(f.getParent() + File.separator + newFilename)));
              Log.e(TAG, f.getParent() + File.separator + newFilename);
              newFile.setStoragePath(f.getParent() + File.separator + newFilename);
            }

            if (localRenameFails) {
              Toast msg =
                  Toast.makeText(getActivity(), R.string.rename_local_fail_msg, Toast.LENGTH_LONG);
              msg.show();

            } else {
              new Thread(new RenameRunnable(mFile, newFile, mAccount, new Handler())).start();
              boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;
              getActivity()
                  .showDialog(
                      (inDisplayActivity)
                          ? FileDisplayActivity.DIALOG_SHORT_WAIT
                          : FileDetailActivity.DIALOG_SHORT_WAIT);
            }
          }
        }
      }
    } else {
      Log.e(
          TAG,
          "Unknown dialog instance passed to onDismissDalog: "
              + dialog.getClass().getCanonicalName());
    }
  }
Esempio n. 3
0
 @Override
 public void onNeutral(String callerTag) {
   FileDataStorageManager fdsm =
       new FileDataStorageManager(mAccount, getActivity().getContentResolver());
   File f = null;
   if (mFile.isDown() && (f = new File(mFile.getStoragePath())).exists()) {
     f.delete();
     mFile.setStoragePath(null);
     fdsm.saveFile(mFile);
     updateFileDetails(mFile, mAccount);
   }
 }
  private void saveLocalFile() {
    mFile.setFileName(mNewName);

    // try to rename the local copy of the file
    if (mFile.isDown()) {
      File f = new File(mFile.getStoragePath());
      String parentStoragePath = f.getParent();
      if (!parentStoragePath.endsWith(File.separator)) parentStoragePath += File.separator;
      if (f.renameTo(new File(parentStoragePath + mNewName))) {
        mFile.setStoragePath(parentStoragePath + mNewName);
      }
      // else - NOTHING: the link to the local file is kept although the local name can't be updated
      // TODO - study conditions when this could be a problem
    }

    mStorageManager.saveFile(mFile);
  }
Esempio n. 5
0
  /**
   * Unregisters the local copy of a remote file to be observed for local changes.
   *
   * @param file Object representing a remote file which local copy must be not observed longer.
   * @param account OwnCloud account containing file.
   */
  private void removeObservedFile(OCFile file, Account account) {
    Log_OC.v(TAG, "Removing a file from being watched");

    if (file == null) {
      Log_OC.e(TAG, "Trying to remove a NULL file");
      return;
    }
    if (account == null) {
      Log_OC.e(TAG, "Trying to add a file with a NULL account to observer");
      return;
    }

    String localPath = file.getStoragePath();
    if (localPath == null || localPath.length() <= 0) {
      localPath = FileStorageUtils.getDefaultSavePathFor(account.name, file);
    }

    removeObservedFile(localPath);
  }
Esempio n. 6
0
  public void openFile(OCFile file) {
    if (file != null) {
      String storagePath = file.getStoragePath();
      String encodedStoragePath = WebdavUtils.encodePath(storagePath);

      Intent intentForSavedMimeType = new Intent(Intent.ACTION_VIEW);
      intentForSavedMimeType.setDataAndType(
          Uri.parse("file://" + encodedStoragePath), file.getMimetype());
      intentForSavedMimeType.setFlags(
          Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

      Intent intentForGuessedMimeType = null;
      if (storagePath.lastIndexOf('.') >= 0) {
        String guessedMimeType =
            MimeTypeMap.getSingleton()
                .getMimeTypeFromExtension(storagePath.substring(storagePath.lastIndexOf('.') + 1));
        if (guessedMimeType != null && !guessedMimeType.equals(file.getMimetype())) {
          intentForGuessedMimeType = new Intent(Intent.ACTION_VIEW);
          intentForGuessedMimeType.setDataAndType(
              Uri.parse("file://" + encodedStoragePath), guessedMimeType);
          intentForGuessedMimeType.setFlags(
              Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
      }

      Intent chooserIntent;
      if (intentForGuessedMimeType != null) {
        chooserIntent =
            Intent.createChooser(
                intentForGuessedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
      } else {
        chooserIntent =
            Intent.createChooser(
                intentForSavedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
      }

      mFileActivity.startActivity(chooserIntent);

    } else {
      Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
    }
  }
Esempio n. 7
0
  public void sendDownloadedFile(OCFile file) {
    if (file != null) {
      String storagePath = file.getStoragePath();
      String encodedStoragePath = WebdavUtils.encodePath(storagePath);
      Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
      // set MimeType
      sendIntent.setType(file.getMimetype());
      sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + encodedStoragePath));
      sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action

      // Show dialog, without the own app
      String[] packagesToExclude = new String[] {mFileActivity.getPackageName()};
      DialogFragment chooserDialog =
          ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
      chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);

    } else {
      Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
    }
  }
Esempio n. 8
0
  /**
   * Registers the local copy of a remote file to be observed for local changes, an automatically
   * updated in the ownCloud server.
   *
   * <p>This method does NOT perform a {@link SynchronizeFileOperation} over the file.
   *
   * @param file Object representing a remote file which local copy must be observed.
   * @param account OwnCloud account containing file.
   */
  private void addObservedFile(OCFile file, Account account) {
    Log_OC.v(TAG, "Adding a file to be watched");

    if (file == null) {
      Log_OC.e(TAG, "Trying to add a NULL file to observer");
      return;
    }
    if (account == null) {
      Log_OC.e(TAG, "Trying to add a file with a NULL account to observer");
      return;
    }

    String localPath = file.getStoragePath();
    if (localPath == null || localPath.length() <= 0) {
      // file downloading or to be downloaded for the first time
      localPath = FileStorageUtils.getDefaultSavePathFor(account.name, file);
    }

    addObservedFile(localPath, account);
  }
Esempio n. 9
0
  /** Updates the view with all relevant details about that file. */
  public void updateFileDetails() {

    if (mFile != null && mAccount != null && mLayout == R.layout.file_details_fragment) {

      // set file details
      setFilename(mFile.getFileName());
      setFiletype(DisplayUtils.convertMIMEtoPrettyPrint(mFile.getMimetype()));
      setFilesize(mFile.getFileLength());
      if (ocVersionSupportsTimeCreated()) {
        setTimeCreated(mFile.getCreationTimestamp());
      }

      setTimeModified(mFile.getModificationTimestamp());

      CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
      cb.setChecked(mFile.keepInSync());

      // configure UI for depending upon local state of the file
      // if (FileDownloader.isDownloading(mAccount, mFile.getRemotePath()) ||
      // FileUploader.isUploading(mAccount, mFile.getRemotePath())) {
      FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
      FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
      if ((downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile))
          || (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile))) {
        setButtonsForTransferring();

      } else if (mFile.isDown()) {
        // Update preview
        if (mFile.getMimetype().startsWith("image/")) {
          BitmapLoader bl = new BitmapLoader();
          bl.execute(new String[] {mFile.getStoragePath()});
        }

        setButtonsForDown();

      } else {
        setButtonsForRemote();
      }
    }
  }
  @Override
  protected RemoteOperationResult run(WebdavClient client) {
    RemoteOperationResult result = null;

    // code before in FileSyncAdapter.fetchData
    PropFindMethod query = null;
    try {
      Log.d(TAG, "Synchronizing " + mAccount.name + ", fetching files in " + mRemotePath);

      // remote request
      query = new PropFindMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath));
      int status = client.executeMethod(query);

      // check and process response   - /// TODO take into account all the possible status per
      // child-resource
      if (isMultiStatus(status)) {
        MultiStatus resp = query.getResponseBodyAsMultiStatus();

        // synchronize properties of the parent folder, if necessary
        if (mParentId == DataStorageManager.ROOT_PARENT_ID) {
          WebdavEntry we = new WebdavEntry(resp.getResponses()[0], client.getBaseUri().getPath());
          OCFile parent = fillOCFile(we);
          parent.setParentId(mParentId);
          mStorageManager.saveFile(parent);
          mParentId = parent.getFileId();
        }

        // read contents in folder
        List<OCFile> updatedFiles = new Vector<OCFile>(resp.getResponses().length - 1);
        for (int i = 1; i < resp.getResponses().length; ++i) {
          WebdavEntry we = new WebdavEntry(resp.getResponses()[i], client.getBaseUri().getPath());
          OCFile file = fillOCFile(we);
          file.setParentId(mParentId);
          OCFile oldFile = mStorageManager.getFileByPath(file.getRemotePath());
          if (oldFile != null) {
            if (oldFile.keepInSync()
                && file.getModificationTimestamp() > oldFile.getModificationTimestamp()) {
              disableObservance(
                  file); // first disable observer so we won't get file upload right after download
              requestContentDownload(file);
            }
            file.setKeepInSync(oldFile.keepInSync());
          }

          updatedFiles.add(file);
        }

        // save updated contents in local database; all at once, trying to get a best performance in
        // database update (not a big deal, indeed)
        mStorageManager.saveFiles(updatedFiles);

        // removal of obsolete files
        mChildren = mStorageManager.getDirectoryContent(mStorageManager.getFileById(mParentId));
        OCFile file;
        String currentSavePath = FileDownloader.getSavePath(mAccount.name);
        for (int i = 0; i < mChildren.size(); ) {
          file = mChildren.get(i);
          if (file.getLastSyncDate() != mCurrentSyncTime) {
            Log.d(TAG, "removing file: " + file);
            mStorageManager.removeFile(
                file, (file.isDown() && file.getStoragePath().startsWith(currentSavePath)));
            mChildren.remove(i);
          } else {
            i++;
          }
        }

      } else {
        client.exhaustResponse(query.getResponseBodyAsStream());
      }

      // prepare result object
      result = new RemoteOperationResult(isMultiStatus(status), status);
      Log.i(
          TAG,
          "Synchronizing "
              + mAccount.name
              + ", folder "
              + mRemotePath
              + ": "
              + result.getLogMessage());

    } catch (Exception e) {
      result = new RemoteOperationResult(e);
      Log.e(
          TAG,
          "Synchronizing "
              + mAccount.name
              + ", folder "
              + mRemotePath
              + ": "
              + result.getLogMessage(),
          result.getException());

    } finally {
      if (query != null)
        query.releaseConnection(); // let the connection available for other methods
    }

    return result;
  }
Esempio n. 11
0
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.fdDownloadBtn:
        {
          // if (FileDownloader.isDownloading(mAccount, mFile.getRemotePath())) {
          FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
          FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
          if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) {
            downloaderBinder.cancel(mAccount, mFile);
            if (mFile.isDown()) {
              setButtonsForDown();
            } else {
              setButtonsForRemote();
            }

          } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) {
            uploaderBinder.cancel(mAccount, mFile);
            if (!mFile.fileExists()) {
              // TODO make something better
              if (getActivity() instanceof FileDisplayActivity) {
                // double pane
                FragmentTransaction transaction =
                    getActivity().getSupportFragmentManager().beginTransaction();
                transaction.replace(
                    R.id.file_details_container,
                    new FileDetailFragment(null, null),
                    FTAG); // empty FileDetailFragment
                transaction.commit();
                mContainerActivity.onFileStateChanged();
              } else {
                getActivity().finish();
              }

            } else if (mFile.isDown()) {
              setButtonsForDown();
            } else {
              setButtonsForRemote();
            }

          } else {
            mLastRemoteOperation =
                new SynchronizeFileOperation(
                    mFile, null, mStorageManager, mAccount, true, false, getActivity());
            WebdavClient wc =
                OwnCloudClientUtils.createOwnCloudClient(
                    mAccount, getSherlockActivity().getApplicationContext());
            mLastRemoteOperation.execute(wc, this, mHandler);

            // update ui
            boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;
            getActivity()
                .showDialog(
                    (inDisplayActivity)
                        ? FileDisplayActivity.DIALOG_SHORT_WAIT
                        : FileDetailActivity.DIALOG_SHORT_WAIT);
            setButtonsForTransferring(); // disable button immediately, although the synchronization
                                         // does not result in a file transference
          }
          break;
        }
      case R.id.fdKeepInSync:
        {
          CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
          mFile.setKeepInSync(cb.isChecked());
          mStorageManager.saveFile(mFile);

          /// register the OCFile instance in the observer service to monitor local updates;
          /// if necessary, the file is download
          Intent intent =
              new Intent(getActivity().getApplicationContext(), FileObserverService.class);
          intent.putExtra(
              FileObserverService.KEY_FILE_CMD,
              (cb.isChecked()
                  ? FileObserverService.CMD_ADD_OBSERVED_FILE
                  : FileObserverService.CMD_DEL_OBSERVED_FILE));
          intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile);
          intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount);
          Log.e(TAG, "starting observer service");
          getActivity().startService(intent);

          if (mFile.keepInSync()) {
            onClick(
                getView().findViewById(R.id.fdDownloadBtn)); // force an immediate synchronization
          }
          break;
        }
      case R.id.fdRenameBtn:
        {
          EditNameDialog dialog = EditNameDialog.newInstance(mFile.getFileName());
          dialog.setOnDismissListener(this);
          dialog.show(getFragmentManager(), "nameeditdialog");
          break;
        }
      case R.id.fdRemoveBtn:
        {
          ConfirmationDialogFragment confDialog =
              ConfirmationDialogFragment.newInstance(
                  R.string.confirmation_remove_alert,
                  new String[] {mFile.getFileName()},
                  mFile.isDown()
                      ? R.string.confirmation_remove_remote_and_local
                      : R.string.confirmation_remove_remote,
                  mFile.isDown() ? R.string.confirmation_remove_local : -1,
                  R.string.common_cancel);
          confDialog.setOnConfirmationListener(this);
          confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
          break;
        }
      case R.id.fdOpenBtn:
        {
          String storagePath = mFile.getStoragePath();
          String encodedStoragePath = WebdavUtils.encodePath(storagePath);
          try {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mFile.getMimetype());
            i.setFlags(
                Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            startActivity(i);

          } catch (Throwable t) {
            Log.e(
                TAG,
                "Fail when trying to open with the mimeType provided from the ownCloud server: "
                    + mFile.getMimetype());
            boolean toastIt = true;
            String mimeType = "";
            try {
              Intent i = new Intent(Intent.ACTION_VIEW);
              mimeType =
                  MimeTypeMap.getSingleton()
                      .getMimeTypeFromExtension(
                          storagePath.substring(storagePath.lastIndexOf('.') + 1));
              if (mimeType != null && !mimeType.equals(mFile.getMimetype())) {
                i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mimeType);
                i.setFlags(
                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                startActivity(i);
                toastIt = false;
              }

            } catch (IndexOutOfBoundsException e) {
              Log.e(
                  TAG, "Trying to find out MIME type of a file without extension: " + storagePath);

            } catch (ActivityNotFoundException e) {
              Log.e(
                  TAG,
                  "No activity found to handle: "
                      + storagePath
                      + " with MIME type "
                      + mimeType
                      + " obtained from extension");

            } catch (Throwable th) {
              Log.e(TAG, "Unexpected problem when opening: " + storagePath, th);

            } finally {
              if (toastIt) {
                Toast.makeText(
                        getActivity(),
                        "There is no application to handle file " + mFile.getFileName(),
                        Toast.LENGTH_SHORT)
                    .show();
              }
            }
          }
          break;
        }
      default:
        Log.e(TAG, "Incorrect view clicked!");
    }

    /* else if (v.getId() == R.id.fdShareBtn) {
        Thread t = new Thread(new ShareRunnable(mFile.getRemotePath()));
        t.start();
    }*/
  }
Esempio n. 12
0
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
      case R.id.fdDownloadBtn:
        {
          Intent i = new Intent(getActivity(), FileDownloader.class);
          i.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);
          i.putExtra(FileDownloader.EXTRA_REMOTE_PATH, mFile.getRemotePath());
          i.putExtra(FileDownloader.EXTRA_FILE_PATH, mFile.getRemotePath());
          i.putExtra(FileDownloader.EXTRA_FILE_SIZE, mFile.getFileLength());

          // update ui
          setButtonsForTransferring();

          getActivity().startService(i);
          mContainerActivity
              .onFileStateChanged(); // this is not working; it is performed before the
          // fileDownloadService registers it as 'in progress'
          break;
        }
      case R.id.fdKeepInSync:
        {
          CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
          mFile.setKeepInSync(cb.isChecked());
          FileDataStorageManager fdsm =
              new FileDataStorageManager(
                  mAccount, getActivity().getApplicationContext().getContentResolver());
          fdsm.saveFile(mFile);
          if (mFile.keepInSync()) {
            onClick(getView().findViewById(R.id.fdDownloadBtn));
          } else {
            mContainerActivity
                .onFileStateChanged(); // put inside 'else' to not call it twice (here, and in the
            // virtual click on fdDownloadBtn)
          }
          Intent intent =
              new Intent(getActivity().getApplicationContext(), FileObserverService.class);
          intent.putExtra(
              FileObserverService.KEY_FILE_CMD,
              (cb.isChecked()
                  ? FileObserverService.CMD_ADD_OBSERVED_FILE
                  : FileObserverService.CMD_DEL_OBSERVED_FILE));
          intent.putExtra(FileObserverService.KEY_CMD_ARG, mFile.getStoragePath());
          getActivity().startService(intent);
          break;
        }
      case R.id.fdRenameBtn:
        {
          EditNameFragment dialog = EditNameFragment.newInstance(mFile.getFileName());
          dialog.show(getFragmentManager(), "nameeditdialog");
          dialog.setOnDismissListener(this);
          break;
        }
      case R.id.fdRemoveBtn:
        {
          ConfirmationDialogFragment confDialog =
              ConfirmationDialogFragment.newInstance(
                  R.string.confirmation_remove_alert,
                  new String[] {mFile.getFileName()},
                  mFile.isDown()
                      ? R.string.confirmation_remove_remote_and_local
                      : R.string.confirmation_remove_remote,
                  mFile.isDown() ? R.string.confirmation_remove_local : -1,
                  R.string.common_cancel);
          confDialog.setOnConfirmationListener(this);
          confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
          break;
        }
      case R.id.fdOpenBtn:
        {
          String storagePath = mFile.getStoragePath();
          String encodedStoragePath = WebdavUtils.encodePath(storagePath);
          try {
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mFile.getMimetype());
            i.setFlags(
                Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            startActivity(i);

          } catch (Throwable t) {
            Log.e(
                TAG,
                "Fail when trying to open with the mimeType provided from the ownCloud server: "
                    + mFile.getMimetype());
            boolean toastIt = true;
            String mimeType = "";
            try {
              Intent i = new Intent(Intent.ACTION_VIEW);
              mimeType =
                  MimeTypeMap.getSingleton()
                      .getMimeTypeFromExtension(
                          storagePath.substring(storagePath.lastIndexOf('.') + 1));
              if (mimeType != null && !mimeType.equals(mFile.getMimetype())) {
                i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mimeType);
                i.setFlags(
                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                startActivity(i);
                toastIt = false;
              }

            } catch (IndexOutOfBoundsException e) {
              Log.e(
                  TAG, "Trying to find out MIME type of a file without extension: " + storagePath);

            } catch (ActivityNotFoundException e) {
              Log.e(
                  TAG,
                  "No activity found to handle: "
                      + storagePath
                      + " with MIME type "
                      + mimeType
                      + " obtained from extension");

            } catch (Throwable th) {
              Log.e(TAG, "Unexpected problem when opening: " + storagePath, th);

            } finally {
              if (toastIt) {
                Toast.makeText(
                        getActivity(),
                        "There is no application to handle file " + mFile.getFileName(),
                        Toast.LENGTH_SHORT)
                    .show();
              }
            }
          }
          break;
        }
      default:
        Log.e(TAG, "Incorrect view clicked!");
    }

    /* else if (v.getId() == R.id.fdShareBtn) {
        Thread t = new Thread(new ShareRunnable(mFile.getRemotePath()));
        t.start();
    }*/
  }
Esempio n. 13
0
  /** Opens mFile. */
  private void openFile() {

    String storagePath = mFile.getStoragePath();
    String encodedStoragePath = WebdavUtils.encodePath(storagePath);
    try {
      Intent i = new Intent(Intent.ACTION_VIEW);
      i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mFile.getMimetype());
      i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
      startActivity(i);

    } catch (Throwable t) {
      Log.e(
          TAG,
          "Fail when trying to open with the mimeType provided from the ownCloud server: "
              + mFile.getMimetype());
      boolean toastIt = true;
      String mimeType = "";
      try {
        Intent i = new Intent(Intent.ACTION_VIEW);
        mimeType =
            MimeTypeMap.getSingleton()
                .getMimeTypeFromExtension(storagePath.substring(storagePath.lastIndexOf('.') + 1));
        if (mimeType == null || !mimeType.equals(mFile.getMimetype())) {
          if (mimeType != null) {
            i.setDataAndType(Uri.parse("file://" + encodedStoragePath), mimeType);
          } else {
            // desperate try
            i.setDataAndType(Uri.parse("file://" + encodedStoragePath), "*/*");
          }
          i.setFlags(
              Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
          startActivity(i);
          toastIt = false;
        }

      } catch (IndexOutOfBoundsException e) {
        Log.e(TAG, "Trying to find out MIME type of a file without extension: " + storagePath);

      } catch (ActivityNotFoundException e) {
        Log.e(
            TAG,
            "No activity found to handle: "
                + storagePath
                + " with MIME type "
                + mimeType
                + " obtained from extension");

      } catch (Throwable th) {
        Log.e(TAG, "Unexpected problem when opening: " + storagePath, th);

      } finally {
        if (toastIt) {
          Toast.makeText(
                  getActivity(),
                  "There is no application to handle file " + mFile.getFileName(),
                  Toast.LENGTH_SHORT)
              .show();
        }
      }
    }
  }