Back to project page android-querying.
The source code is released under:
Apache License
If you think the Android project android-querying listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/** * Copyright 2013 Google Inc. All Rights Reserved. */*from www .ja v a2s .c om*/ * 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.android.gms.drive.sample.querying; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.drive.Drive; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.util.Log; /** * An abstract activity that handles authorization and connection to the Drive * services. */ public abstract class BaseDriveActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = "BaseDriveActivity"; /** * Extra for account name. */ protected static final String EXTRA_ACCOUNT_NAME = "account_name"; /** * Request code for auto Google Play Services error resolution. */ protected static final int REQUEST_CODE_RESOLUTION = 1; /** * Next available request code. */ protected static final int NEXT_AVAILABLE_REQUEST_CODE = 2; /** * Google API client. */ protected GoogleApiClient mGoogleApiClient; /** * Selected account name to authorize the app for and authenticate the * client with. */ protected String mAccountName; /** * Called on activity creation. Handlers {@code EXTRA_ACCOUNT_NAME} for * handle if there is one set. Otherwise, looks for the first Google account * on the device and automatically picks it for client connections. */ @Override protected void onCreate(Bundle b) { super.onCreate(b); if (b != null) { mAccountName = b.getString(EXTRA_ACCOUNT_NAME); } if (mAccountName == null) { mAccountName = getIntent().getStringExtra(EXTRA_ACCOUNT_NAME); } if (mAccountName == null) { Account[] accounts = AccountManager.get(this).getAccountsByType("com.google"); if (accounts.length == 0) { Log.d(TAG, "Must have a Google account installed"); return; } mAccountName = accounts[0].name; } } /** * Saves the activity state. */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(EXTRA_ACCOUNT_NAME, mAccountName); } /** * Called when activity gets visible. A connection to Drive services need to * be initiated as soon as the activity is visible. Registers * {@code ConnectionCallbacks} and {@code OnConnectionFailedListener} on the * activities itself. */ @Override protected void onResume() { super.onResume(); if (mAccountName == null) { return; } if (mGoogleApiClient == null) { // TODO: Don't set account name explicitly and remove required // permissions to query available accounts. mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API).addScope(Drive.SCOPE_FILE) .setAccountName(mAccountName).addConnectionCallbacks(this) .addOnConnectionFailedListener(this).build(); } mGoogleApiClient.connect(); } /** * Handles resolution callbacks. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) { mGoogleApiClient.connect(); } } /** * Called when activity gets invisible. Connection to Drive service needs to * be disconnected as soon as an activity is invisible. */ @Override protected void onPause() { if (mGoogleApiClient != null) { mGoogleApiClient.disconnect(); } super.onPause(); } /** * Called when {@code mGoogleApiClient} is connected. */ @Override public void onConnected(Bundle connectionHint) { Log.i(TAG, "GoogleApiClient connected"); } /** * Called when {@code mGoogleApiClient} is disconnected. */ @Override public void onConnectionSuspended(int cause) { Log.i(TAG, "GoogleApiClient connection suspended"); } /** * Called when {@code mGoogleApiClient} is trying to connect but failed. * Handle {@code result.getResolution()} if there is a resolution is * available. */ @Override public void onConnectionFailed(ConnectionResult result) { Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); if (!result.hasResolution()) { GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); return; } try { result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); } catch (SendIntentException e) { Log.e(TAG, "Exception while starting resolution activity", e); } } }