Home | History | Annotate | Download | only in testauth
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package com.android.contacts.tests.testauth;
     18 
     19 import android.accounts.AbstractAccountAuthenticator;
     20 import android.accounts.Account;
     21 import android.accounts.AccountAuthenticatorResponse;
     22 import android.accounts.AccountManager;
     23 import android.content.Context;
     24 import android.content.SharedPreferences;
     25 import android.os.Bundle;
     26 import android.preference.PreferenceManager;
     27 import android.util.Log;
     28 
     29 /**
     30  * Simple authenticator.  It has no "login" dialogs/activities.  When you add a new account, it'll
     31  * just create a new account with a unique name.
     32  */
     33 class TestAuthenticator extends AbstractAccountAuthenticator {
     34     private static final String PASSWORD = "xxx"; // any string will do.
     35 
     36     // To remember the last user-ID.
     37     private static final String PREF_KEY_LAST_USER_ID = "TestAuthenticator.PREF_KEY_LAST_USER_ID";
     38 
     39     private final Context mContext;
     40 
     41     public TestAuthenticator(Context context) {
     42         super(context);
     43         mContext = context.getApplicationContext();
     44     }
     45 
     46     /**
     47      * @return a new, unique username.
     48      */
     49     private String newUniqueUserName() {
     50         final SharedPreferences prefs =
     51                 PreferenceManager.getDefaultSharedPreferences(mContext);
     52         final int nextId = prefs.getInt(PREF_KEY_LAST_USER_ID, 0) + 1;
     53         prefs.edit().putInt(PREF_KEY_LAST_USER_ID, nextId).apply();
     54 
     55         return "User-" + nextId;
     56     }
     57 
     58     /**
     59      * Create a new account with the name generated by {@link #newUniqueUserName()}.
     60      */
     61     @Override
     62     public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
     63             String authTokenType, String[] requiredFeatures, Bundle options) {
     64         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
     65             Log.v(TestauthConstants.LOG_TAG, "addAccount() type=" + accountType);
     66         }
     67         final Bundle bundle = new Bundle();
     68 
     69         final Account account = new Account(newUniqueUserName(), accountType);
     70 
     71         // Create an account.
     72         AccountManager.get(mContext).addAccountExplicitly(account, PASSWORD, null);
     73 
     74         // And return it.
     75         bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
     76         bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
     77         return bundle;
     78     }
     79 
     80     /**
     81      * Just return the user name as the authtoken.
     82      */
     83     @Override
     84     public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
     85             String authTokenType, Bundle loginOptions) {
     86         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
     87             Log.v(TestauthConstants.LOG_TAG, "getAuthToken() account=" + account);
     88         }
     89         final Bundle bundle = new Bundle();
     90         bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
     91         bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
     92         bundle.putString(AccountManager.KEY_AUTHTOKEN, account.name);
     93 
     94         return bundle;
     95     }
     96 
     97     @Override
     98     public Bundle confirmCredentials(
     99             AccountAuthenticatorResponse response, Account account, Bundle options) {
    100         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
    101             Log.v(TestauthConstants.LOG_TAG, "confirmCredentials()");
    102         }
    103         return null;
    104     }
    105 
    106     @Override
    107     public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
    108         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
    109             Log.v(TestauthConstants.LOG_TAG, "editProperties()");
    110         }
    111         throw new UnsupportedOperationException();
    112     }
    113 
    114     @Override
    115     public String getAuthTokenLabel(String authTokenType) {
    116         // null means we don't support multiple authToken types
    117         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
    118             Log.v(TestauthConstants.LOG_TAG, "getAuthTokenLabel()");
    119         }
    120         return null;
    121     }
    122 
    123     @Override
    124     public Bundle hasFeatures(
    125             AccountAuthenticatorResponse response, Account account, String[] features) {
    126         // This call is used to query whether the Authenticator supports
    127         // specific features. We don't expect to get called, so we always
    128         // return false (no) for any queries.
    129         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
    130             Log.v(TestauthConstants.LOG_TAG, "hasFeatures()");
    131         }
    132         final Bundle result = new Bundle();
    133         result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
    134         return result;
    135     }
    136 
    137     @Override
    138     public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
    139             String authTokenType, Bundle loginOptions) {
    140         if (Log.isLoggable(TestauthConstants.LOG_TAG, Log.VERBOSE)) {
    141             Log.v(TestauthConstants.LOG_TAG, "updateCredentials()");
    142         }
    143         return null;
    144     }
    145 }
    146