Beispiel #1
0
    /**
     * Helper just to avoid copy&paste'ing code.
     *
     * <p>Note: since this contains blocking Drive API calls, this will crash if you try to call it
     * from the main thread, it can only be called from other threads.
     *
     * @return null if the folder can not be found.
     */
    private DriveFolder checkOrCreateRemoteFolder(
        GoogleApiClient googleApiClient, DriveFolder rootFolder, String folderName) {
      // check for STORAGE permission
      if (!canWriteToStorage()) return null;

      Query query =
          new Query.Builder()
              .addFilter(
                  Filters.and(
                      Filters.eq(SearchableField.TITLE, folderName),
                      Filters.contains(SearchableField.MIME_TYPE, "folder")))
              .build();

      DriveApi.MetadataBufferResult result =
          rootFolder.queryChildren(mGoogleApiClient, query).await();

      if (!result.getStatus().isSuccess()) {
        Log.e(
            mActivity.getResources().getString(R.string.app_name),
            "Cannot query folders in the root of Google Drive.");
        return null;
      } else {
        for (Metadata m : result.getMetadataBuffer()) {
          if (m.getTitle().equals(folderName)) {
            // Folder exists - we found it!
            DriveFolder folder = m.getDriveId().asDriveFolder();
            result.getMetadataBuffer().release();
            return folder;
          }
        }
      }

      result.getMetadataBuffer().release();

      // Folder not found; let's create it.
      MetadataChangeSet changeSet = new MetadataChangeSet.Builder().setTitle(folderName).build();

      DriveFolder.DriveFolderResult result1 =
          rootFolder.createFolder(googleApiClient, changeSet).await();

      if (!result1.getStatus().isSuccess()) {
        Log.e(
            mActivity.getResources().getString(R.string.app_name),
            "Error while trying to create the folder \"" + folderName + "\"");
        return null;
      }

      return result1.getDriveFolder();
    }