Android Open Source - compute-getting-started-android App Utils






From Project

Back to project page compute-getting-started-android.

License

The source code is released under:

Apache License

If you think the Android project compute-getting-started-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/* Copyright 2013 Google Inc. All Rights Reserved.
 *//from   www  . j a va2  s  .  c  o m
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.devrel.samples.compute.android;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;

import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.common.AccountPicker;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.services.compute.Compute;
import com.google.api.services.compute.ComputeScopes;
import com.google.common.collect.Lists;

import java.lang.reflect.Array;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.annotation.Nullable;

import static com.google.devrel.samples.compute.android.BuildConfig.DEBUG;

/**
 * Utility methods simplifying sample code.
 *
 * @author paul.rashidi@google.com (Paul Rashidi)
 */
public class AppUtils {
  private static final String LOG_TAG = "AppUtils";
  public static final int RESOURCE_LISTING_TOTAL_LIMIT = 100;
  public static final int RESOURCE_LISTING_ITERATION_LIMIT = 25;

  /**
   * Static instance of the JSON factory.
   */
  private static final JsonFactory JSON_FACTORY = new AndroidJsonFactory();

  /**
   * Static instance of the HTTP transport.
   */
  private static HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();

   /**
    * Trim string if it is longer than the specified length.
    */
  public static String trimString(String string, int limit, @Nullable String prependString,
      @Nullable String appendString) {
    StringBuilder returnString = new StringBuilder();
    if (prependString != null) {
      returnString.append(prependString);
    }

    if (string.length() > limit) {
      // Append only the first part of string under the limit.
      returnString.append(string.substring(0, limit));
    } else {
      // Append whole string since it was under the limit.
      returnString.append(string);
    }

    if (appendString != null) {
      returnString.append(appendString);
    }

    return returnString.toString();
  }

  /**
   * Count the Google Accounts on the device.
   */
  public static int countGoogleAccounts(Context context) {
    AccountManager am = AccountManager.get(context);
    Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
    if (accounts == null || accounts.length < 1) {
      return 0;
    } else {
      return accounts.length;
    }
  }

  /**
   * Generate the OAuth2 scope string accepted by the client libraries.
   *
   * @param scopes to be encoded in the OAuth2 string
   * @return OAuth2 scope string
   */
  public static String getOAuth2ScopeString(String[] scopes) {
    if (scopes==null || Array.getLength(scopes) < 1) {
      return null;
    }

    StringBuilder scopeString = null;
    for (String scope : scopes) {
      if (scopeString == null) {
        scopeString = new StringBuilder("oauth2: ").append(scope);
      } else {
        scopeString.append(" ")
                   .append(scope);
      }
    }

    return scopeString.toString();
  }

  /**
   * Generates an {@code Intent} that can invoke an account picker for Google Accounts.
   */
  public static Intent getAccountPickerIntent() {
    return AccountPicker.newChooseAccountIntent(null, null,
        new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, false,
        "Select the account to access Google Compute Engine API.", null, null, null);
  }

  /**
   * Retrieve the account stored for the application.
   *
   * @param context used to access the preferences (usually the Activity)
   * @return stored account name or empty string
   */
  public static String getStoredAccount(Context context) {
    return getStoredProperty(context, AppConstants.PREF_SELECTED_ACCOUNT_EMAIL);
  }

  /**
   * Set the account stored for the application.
   */
  public static void setStoredAccount(Context context, String account) {
    SharedPreferences preferences = context.getSharedPreferences(AppConstants.APP_PREF_NM,
        Context.MODE_PRIVATE);
    preferences.edit().putString(AppConstants.PREF_SELECTED_ACCOUNT_EMAIL, account).commit();
  }

  /**
   * Retrieve the project id stored for the account.
   */
  public static String getStoredProjectId(Context context, String account) {
    return getStoredProperty(context, account + ":" + AppConstants.PREF_SELECTED_PROJECT_ID_SUFFIX);
  }

  /**
   * Utility method for retrieving stored properties.
   */
  private static String getStoredProperty(Context context, String propertyName) {
    SharedPreferences preferences = context.getSharedPreferences(AppConstants.APP_PREF_NM,
        Context.MODE_PRIVATE);
    if (preferences == null) {
      return "";
    }
    return preferences.getString(propertyName, "");
  }

  /**
   * Set the project id stored for the account.
   */
  public static void setStoredProjectId(Context context, String projectId, String account) {
    SharedPreferences preferences = context.getSharedPreferences(AppConstants.APP_PREF_NM,
        Context.MODE_PRIVATE);
    preferences.edit().putString(account + ":" + AppConstants.PREF_SELECTED_PROJECT_ID_SUFFIX, projectId)
        .commit();
  }

  public static Date convertDateTime(String dateTimeString) {
    SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    Date newDate = null;
    try {
      if (DEBUG) {
        newDate = simpleDateFormatter.parse(dateTimeString);
        Log.v(LOG_TAG, newDate + "");
      }
    } catch (ParseException parseException) {
      Log.e(LOG_TAG, "Date parsing exception", parseException);
    }
    return newDate;
  }

  public static Compute getComputeServiceObject(Context context, String emailAddress) {
    List scopes = Lists.newArrayList(ComputeScopes.COMPUTE, ComputeScopes.DEVSTORAGE_READ_ONLY);

    // Utilize the Android credential type. This will give you problems if you haven't
    // registered the android application within the developer console (see README file).
    GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, scopes);
    // Tell the credential which Google account(email) to use.
    credential.setSelectedAccountName(emailAddress);

    // Create Google Compute Engine API query object.
    return new Compute.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
        .setApplicationName(AppConstants.COMPUTE_ENGINE_ANDROID_SAMPLE_APP_NAME).build();
  }

  public static final String getNameFromSelfLink(String selfLink) {
    Pattern p = Pattern.compile("([^/]+$)");
    Matcher m = p.matcher(selfLink);
    String name = null;
    if (m.find()) {
      name = m.group(1);
    }
    return name;
  }

  /**
   * Check that Google Play Services is installed and up to date; a dialog with an error message
   * will display when this is an error.
   *
   * TODO(developer): For more robust error handling you can process the connectionStatusCode with
   * {@code com.google.android.gms.common.ConnectionResult}.
   */
  public static boolean checkGooglePlayServicesAvailability(Activity activity) {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity);

    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
      showGooglePlayServicesAvailabilityErrorDialog(activity, connectionStatusCode);
      return false;
    }
    return true;
  }

  /**
   * Called if the device does not have Google Play Services installed.
   */
  private static void showGooglePlayServicesAvailabilityErrorDialog(final Activity activity,
      final int connectionStatusCode) {
    final int REQUEST_GOOGLE_PLAY_SERVICES = 0;
    activity.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
            connectionStatusCode, activity, REQUEST_GOOGLE_PLAY_SERVICES);
        dialog.show();
      }
    });
  }
}




Java Source Code List

com.google.devrel.samples.compute.android.AppConstants.java
com.google.devrel.samples.compute.android.AppUtils.java
com.google.devrel.samples.compute.android.ItemDetailActivity.java
com.google.devrel.samples.compute.android.ItemDetailFragment.java
com.google.devrel.samples.compute.android.ItemListActivity.java
com.google.devrel.samples.compute.android.ItemListFragment.java
com.google.devrel.samples.compute.android.LoginActivity.java
com.google.devrel.samples.compute.android.dummy.DummyContent.java
com.google.devrel.samples.compute.android.tasks.ComputeTask.java
com.google.devrel.samples.compute.android.tasks.DownloadProjectInformationTask.java
com.google.devrel.samples.compute.android.tasks.ZoneOperationParameters.java
com.google.devrel.samples.compute.android.tasks.ZoneOperationTask.java