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.common.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 Log.v(TestauthConstants.LOG_TAG, "addAccount() type=" + accountType); 65 final Bundle bundle = new Bundle(); 66 67 final Account account = new Account(newUniqueUserName(), accountType); 68 69 // Create an account. 70 AccountManager.get(mContext).addAccountExplicitly(account, PASSWORD, null); 71 72 // And return it. 73 bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 74 bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 75 return bundle; 76 } 77 78 /** 79 * Just return the user name as the authtoken. 80 */ 81 @Override 82 public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, 83 String authTokenType, Bundle loginOptions) { 84 Log.v(TestauthConstants.LOG_TAG, "getAuthToken() account=" + account); 85 final Bundle bundle = new Bundle(); 86 bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 87 bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 88 bundle.putString(AccountManager.KEY_AUTHTOKEN, account.name); 89 90 return bundle; 91 } 92 93 @Override 94 public Bundle confirmCredentials( 95 AccountAuthenticatorResponse response, Account account, Bundle options) { 96 Log.v(TestauthConstants.LOG_TAG, "confirmCredentials()"); 97 return null; 98 } 99 100 @Override 101 public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { 102 Log.v(TestauthConstants.LOG_TAG, "editProperties()"); 103 throw new UnsupportedOperationException(); 104 } 105 106 @Override 107 public String getAuthTokenLabel(String authTokenType) { 108 // null means we don't support multiple authToken types 109 Log.v(TestauthConstants.LOG_TAG, "getAuthTokenLabel()"); 110 return null; 111 } 112 113 @Override 114 public Bundle hasFeatures( 115 AccountAuthenticatorResponse response, Account account, String[] features) { 116 // This call is used to query whether the Authenticator supports 117 // specific features. We don't expect to get called, so we always 118 // return false (no) for any queries. 119 Log.v(TestauthConstants.LOG_TAG, "hasFeatures()"); 120 final Bundle result = new Bundle(); 121 result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false); 122 return result; 123 } 124 125 @Override 126 public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, 127 String authTokenType, Bundle loginOptions) { 128 Log.v(TestauthConstants.LOG_TAG, "updateCredentials()"); 129 return null; 130 } 131 } 132