/**
   * Cancel the transference in downloads (files/folders) and file uploads
   *
   * @param file OCFile
   */
  public void cancelTransference(OCFile file) {
    Account account = mFileActivity.getAccount();
    if (file.isFolder()) {
      OperationsService.OperationsServiceBinder opsBinder =
          mFileActivity.getOperationsServiceBinder();
      if (opsBinder != null) {
        opsBinder.cancel(account, file);
      }
    }

    // for both files and folders
    FileDownloaderBinder downloaderBinder = mFileActivity.getFileDownloaderBinder();
    FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
    if (downloaderBinder != null && downloaderBinder.isDownloading(account, file)) {
      downloaderBinder.cancel(account, file);

      // TODO - review why is this here, and solve in a better way
      // Remove etag for parent, if file is a favorite
      if (file.isFavorite()) {
        OCFile parent = mFileActivity.getStorageManager().getFileById(file.getParentId());
        parent.setEtag("");
        mFileActivity.getStorageManager().saveFile(parent);
      }

    } else if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
      uploaderBinder.cancel(account, file);
    }
  }
  public void toggleFavorite(OCFile file, boolean isFavorite) {
    file.setFavorite(isFavorite);
    mFileActivity.getStorageManager().saveFile(file);

    /// register the OCFile instance in the observer service to monitor local updates
    Intent observedFileIntent =
        FileObserverService.makeObservedFileIntent(
            mFileActivity, file, mFileActivity.getAccount(), isFavorite);
    mFileActivity.startService(observedFileIntent);

    /// immediate content synchronization
    if (file.isFavorite()) {
      syncFile(file);
    }
  }
  /**
   * Public factory method to create new RemoveFilesDialogFragment instances.
   *
   * @param files Files to remove.
   * @return Dialog ready to show.
   */
  public static RemoveFilesDialogFragment newInstance(ArrayList<OCFile> files) {
    RemoveFilesDialogFragment frag = new RemoveFilesDialogFragment();
    Bundle args = new Bundle();
    int messageStringId;

    boolean containsFolder = false;
    boolean containsDown = false;
    boolean containsFavorite = false;
    for (OCFile file : files) {
      if (file.isFolder()) containsFolder = true;
      if (file.isDown()) containsDown = true;
      if (file.isFavorite()) containsFavorite = true;
    }

    if (files.size() == 1) {
      // choose message for a single file
      OCFile file = files.get(0);

      messageStringId =
          (file.isFolder())
              ? R.string.confirmation_remove_folder_alert
              : R.string.confirmation_remove_file_alert;

    } else {
      // choose message for more than one file
      messageStringId =
          (containsFolder)
              ? R.string.confirmation_remove_folders_alert
              : R.string.confirmation_remove_files_alert;
    }

    int localRemoveButton =
        (!containsFavorite && (containsFolder || containsDown))
            ? R.string.confirmation_remove_local
            : -1;

    args.putInt(ARG_MESSAGE_RESOURCE_ID, messageStringId);
    if (files.size() == 1) {
      args.putStringArray(ARG_MESSAGE_ARGUMENTS, new String[] {files.get(0).getFileName()});
    }
    args.putInt(ARG_POSITIVE_BTN_RES, R.string.common_yes);
    args.putInt(ARG_NEUTRAL_BTN_RES, R.string.common_no);
    args.putInt(ARG_NEGATIVE_BTN_RES, localRemoveButton);
    args.putParcelableArrayList(ARG_TARGET_FILES, files);
    frag.setArguments(args);

    return frag;
  }