/**
   * * Create a bucket with the specified name in the specified project. If successful, return the
   * created bucket metadata.
   *
   * <p>For more information, see <a
   * href="https://cloud.google.com/storage/docs/json_api/v1/buckets/insert"
   * target="_blank">Buckets:insert</a>
   *
   * @param bucketName The name of the bucket to create.
   * @throws IOException IO error
   * @return true if the operation succeeded; otherwise, false
   */
  public static boolean insertBucket(String bucketName) throws IOException {
    displayMessageHeader("Create the bucket: " + bucketName);

    Storage.Buckets buckets = storageService.buckets();
    boolean bucketCreated = false;

    // Set the bucket access control list.
    ObjectAccessControl acl = new ObjectAccessControl();
    acl.setEntity("allAuthenticatedUsers").setRole("READER");

    // Create bucket.
    Bucket newBucket = new Bucket().setName(bucketName);
    newBucket.setLocation("US");
    newBucket.setDefaultObjectAcl(ImmutableList.of(acl));

    Storage.Buckets.Insert insertBucket = buckets.insert(settings.getProject(), newBucket);

    try {
      @SuppressWarnings("unused")
      Bucket createdBucket = insertBucket.execute();
      bucketCreated = true;
      System.out.println(String.format("Bucket %s created", bucketName));
    } catch (GoogleJsonResponseException e) {
      GoogleJsonError error = e.getDetails();
      if (error.getCode() == HTTP_CONFLICT
          && error.getMessage().contains("You already own this bucket.")) {
        System.out.println("already exists");
      } else {
        throw e;
      }
    }
    return bucketCreated;
  }
 /**
  * Logs the given throwable and shows an error alert dialog with its message.
  *
  * @param activity activity
  * @param tag log tag to use
  * @param t throwable to log and show
  */
 public static void logAndShow(Activity activity, String tag, Throwable t) {
   Log.e(tag, "Error", t);
   String message = t.getMessage();
   // Exceptions that occur in your Cloud Endpoint implementation classes
   // are wrapped as GoogleJsonResponseExceptions
   if (t instanceof GoogleJsonResponseException) {
     GoogleJsonError details = ((GoogleJsonResponseException) t).getDetails();
     if (details != null) {
       message = details.getMessage();
     }
   }
   showError(activity, message);
 }
 /**
  * Logs the given throwable and shows an error alert dialog with its message.
  *
  * @param activity activity
  * @param tag log tag to use
  * @param t throwable to log and show
  */
 public static void logAndShow(Activity activity, String tag, Throwable t) {
   Log.e(tag, "Error", t);
   String message = t.getMessage();
   if (t instanceof GoogleJsonResponseException) {
     GoogleJsonError details = ((GoogleJsonResponseException) t).getDetails();
     if (details != null) {
       message = details.getMessage();
     }
   } else if (t.getCause() instanceof GoogleAuthException) {
     message = ((GoogleAuthException) t.getCause()).getMessage();
   }
   showError(activity, message);
 }