| Index: blimp/client/app/android/java/src/org/chromium/blimp/auth/TokenSourceImpl.java
|
| diff --git a/blimp/client/app/android/java/src/org/chromium/blimp/auth/TokenSourceImpl.java b/blimp/client/app/android/java/src/org/chromium/blimp/auth/TokenSourceImpl.java
|
| deleted file mode 100644
|
| index a20d79897709d7055d394fd1f15b15ef462fd57b..0000000000000000000000000000000000000000
|
| --- a/blimp/client/app/android/java/src/org/chromium/blimp/auth/TokenSourceImpl.java
|
| +++ /dev/null
|
| @@ -1,184 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.blimp.auth;
|
| -
|
| -import android.accounts.Account;
|
| -import android.accounts.AccountManager;
|
| -import android.content.Context;
|
| -import android.content.Intent;
|
| -import android.content.SharedPreferences;
|
| -import android.os.AsyncTask;
|
| -
|
| -import com.google.android.gms.auth.GoogleAuthException;
|
| -import com.google.android.gms.auth.GoogleAuthUtil;
|
| -import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
|
| -import com.google.android.gms.auth.UserRecoverableNotifiedException;
|
| -import com.google.android.gms.common.ConnectionResult;
|
| -
|
| -import org.chromium.base.ContextUtils;
|
| -import org.chromium.base.Log;
|
| -import org.chromium.base.ThreadUtils;
|
| -import org.chromium.blimp.R;
|
| -
|
| -import java.io.IOException;
|
| -import java.util.concurrent.atomic.AtomicBoolean;
|
| -
|
| -/**
|
| - * An implementation of TokenSource that handles querying {@link GoogleAuthUtil} for a valid
|
| - * authentication token for a particular user account. The user account will be saved as an
|
| - * application preference once set. See {@link TokenSource} for information on how callers know
|
| - * whether or not an account is set and how they set one.
|
| - */
|
| -public class TokenSourceImpl implements TokenSource {
|
| - private static final String ACCOUNT_NAME_PREF = "BlimpAccount";
|
| - // Prefix with oauth2: to make sure we get back an oauth2 token.
|
| - private static final String ACCOUNT_OAUTH2_SCOPE =
|
| - "oauth2:https://www.googleapis.com/auth/userinfo.email";
|
| - private static final String ACCOUNT_TYPE = "com.google";
|
| - private static final String TAG = "BlimpTokenSource";
|
| -
|
| - private final Context mAppContext;
|
| -
|
| - private TokenSource.Callback mCallback;
|
| - private AsyncTask<String, Void, String> mTokenQueryTask;
|
| -
|
| - /**
|
| - * Creates a {@link TokenSourceImpl} that will load and save account information from the
|
| - * application {@link Context} given by {@code context}.
|
| - * @param context
|
| - */
|
| - public TokenSourceImpl(Context context) {
|
| - mAppContext = context.getApplicationContext();
|
| - }
|
| -
|
| - // TokenSource implementation.
|
| - @Override
|
| - public void destroy() {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - if (isRetrievingToken()) {
|
| - mTokenQueryTask.cancel(true);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void setCallback(TokenSource.Callback callback) {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - mCallback = callback;
|
| - }
|
| -
|
| - @Override
|
| - public void getToken() {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - if (isRetrievingToken()) {
|
| - mTokenQueryTask.cancel(true);
|
| - mTokenQueryTask = null;
|
| - }
|
| -
|
| - if (mCallback == null) return;
|
| -
|
| - // Find the current account tracked by settings.
|
| - SharedPreferences preferences = ContextUtils.getAppSharedPreferences();
|
| - String accountName = preferences.getString(ACCOUNT_NAME_PREF, null);
|
| -
|
| - if (accountName == null || !doesAccountExist(accountName)) {
|
| - // Remove any old preference value in case the account is invalid.
|
| - preferences.edit().remove(ACCOUNT_NAME_PREF).apply();
|
| -
|
| - // Trigger account selection.
|
| - mCallback.onNeedsAccountToBeSelected(getAccountChooserIntent());
|
| - return;
|
| - }
|
| -
|
| - mTokenQueryTask = new TokenQueryTask();
|
| - mTokenQueryTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, accountName);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isRetrievingToken() {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - return mTokenQueryTask != null && mTokenQueryTask.getStatus() == AsyncTask.Status.RUNNING;
|
| - }
|
| -
|
| - @Override
|
| - public int tokenIsInvalid(String token) {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - // TODO(dtrainor): Handle failure cases for tokenIsInvalid.
|
| - try {
|
| - GoogleAuthUtil.clearToken(mAppContext, token);
|
| - } catch (GooglePlayServicesAvailabilityException ex) {
|
| - return ex.getConnectionStatusCode();
|
| - } catch (GoogleAuthException ex) {
|
| - Log.e(TAG, "Authentication exception during token query.");
|
| - return ConnectionResult.SIGN_IN_FAILED;
|
| - } catch (IOException ex) {
|
| - Log.e(TAG, "IOException during token query.");
|
| - return ConnectionResult.SIGN_IN_FAILED;
|
| - }
|
| - return ConnectionResult.SUCCESS;
|
| - }
|
| -
|
| - @Override
|
| - public void onAccountSelected(Intent data) {
|
| - ThreadUtils.assertOnUiThread();
|
| -
|
| - String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
|
| - SharedPreferences preferences = ContextUtils.getAppSharedPreferences();
|
| - preferences.edit().putString(ACCOUNT_NAME_PREF, accountName).apply();
|
| - }
|
| -
|
| - @SuppressWarnings("deprecation")
|
| - private Intent getAccountChooserIntent() {
|
| - // TODO(dtrainor): Change this to com.google.android.gms.common.AccountPicker.
|
| - return AccountManager.newChooseAccountIntent(null, null, new String[] {ACCOUNT_TYPE}, false,
|
| - mAppContext.getString(R.string.signin_chooser_description), null, null, null);
|
| - }
|
| -
|
| - private boolean doesAccountExist(String accountName) {
|
| - Account[] accounts = AccountManager.get(mAppContext).getAccountsByType(ACCOUNT_TYPE);
|
| - for (Account account : accounts) {
|
| - if (account.name.equals(accountName)) return true;
|
| - }
|
| -
|
| - return false;
|
| - }
|
| -
|
| - private class TokenQueryTask extends AsyncTask<String, Void, String> {
|
| - private final AtomicBoolean mIsRecoverable = new AtomicBoolean();
|
| -
|
| - @Override
|
| - protected String doInBackground(String... params) {
|
| - try {
|
| - return GoogleAuthUtil.getTokenWithNotification(
|
| - mAppContext, params[0], ACCOUNT_OAUTH2_SCOPE, null);
|
| - } catch (UserRecoverableNotifiedException ex) {
|
| - // TODO(dtrainor): Does it make sense for this to be true if we can't recover until
|
| - // the user performs some action?
|
| - mIsRecoverable.set(true);
|
| - } catch (IOException ex) {
|
| - mIsRecoverable.set(true);
|
| - } catch (GoogleAuthException ex) {
|
| - mIsRecoverable.set(false);
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - @Override
|
| - protected void onPostExecute(String token) {
|
| - if (mCallback == null || isCancelled()) return;
|
| -
|
| - if (token == null) {
|
| - mCallback.onTokenUnavailable(mIsRecoverable.get());
|
| - } else {
|
| - mCallback.onTokenReceived(token);
|
| - }
|
| - if (mTokenQueryTask == TokenQueryTask.this) mTokenQueryTask = null;
|
| - }
|
| - }
|
| -}
|
|
|