1273399bf829133a8385332ad43add3c34c889102Chiao Cheng/* 2273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Copyright (C) 2011 The Android Open Source Project 3273399bf829133a8385332ad43add3c34c889102Chiao Cheng * 4273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5273399bf829133a8385332ad43add3c34c889102Chiao Cheng * use this file except in compliance with the License. You may obtain a copy of 6273399bf829133a8385332ad43add3c34c889102Chiao Cheng * the License at 7273399bf829133a8385332ad43add3c34c889102Chiao Cheng * 8273399bf829133a8385332ad43add3c34c889102Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 9273399bf829133a8385332ad43add3c34c889102Chiao Cheng * 10273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Unless required by applicable law or agreed to in writing, software 11273399bf829133a8385332ad43add3c34c889102Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12273399bf829133a8385332ad43add3c34c889102Chiao Cheng * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13273399bf829133a8385332ad43add3c34c889102Chiao Cheng * License for the specific language governing permissions and limitations under 14273399bf829133a8385332ad43add3c34c889102Chiao Cheng * the License. 15273399bf829133a8385332ad43add3c34c889102Chiao Cheng */ 16273399bf829133a8385332ad43add3c34c889102Chiao Cheng 17273399bf829133a8385332ad43add3c34c889102Chiao Chengpackage com.android.contacts.common.tests.testauth; 18273399bf829133a8385332ad43add3c34c889102Chiao Cheng 19273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.accounts.AbstractAccountAuthenticator; 20273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.accounts.Account; 21273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.accounts.AccountAuthenticatorResponse; 22612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awadimport android.accounts.AccountManager; 23273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.content.Context; 24273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.content.SharedPreferences; 25273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.os.Bundle; 26273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.preference.PreferenceManager; 27273399bf829133a8385332ad43add3c34c889102Chiao Chengimport android.util.Log; 28273399bf829133a8385332ad43add3c34c889102Chiao Cheng 29273399bf829133a8385332ad43add3c34c889102Chiao Cheng/** 30273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Simple authenticator. It has no "login" dialogs/activities. When you add a new account, it'll 31273399bf829133a8385332ad43add3c34c889102Chiao Cheng * just create a new account with a unique name. 32273399bf829133a8385332ad43add3c34c889102Chiao Cheng */ 33273399bf829133a8385332ad43add3c34c889102Chiao Chengclass TestAuthenticator extends AbstractAccountAuthenticator { 34273399bf829133a8385332ad43add3c34c889102Chiao Cheng private static final String PASSWORD = "xxx"; // any string will do. 35273399bf829133a8385332ad43add3c34c889102Chiao Cheng 36273399bf829133a8385332ad43add3c34c889102Chiao Cheng // To remember the last user-ID. 37273399bf829133a8385332ad43add3c34c889102Chiao Cheng private static final String PREF_KEY_LAST_USER_ID = "TestAuthenticator.PREF_KEY_LAST_USER_ID"; 38273399bf829133a8385332ad43add3c34c889102Chiao Cheng 39273399bf829133a8385332ad43add3c34c889102Chiao Cheng private final Context mContext; 40273399bf829133a8385332ad43add3c34c889102Chiao Cheng 41273399bf829133a8385332ad43add3c34c889102Chiao Cheng public TestAuthenticator(Context context) { 42273399bf829133a8385332ad43add3c34c889102Chiao Cheng super(context); 43273399bf829133a8385332ad43add3c34c889102Chiao Cheng mContext = context.getApplicationContext(); 44273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 45273399bf829133a8385332ad43add3c34c889102Chiao Cheng 46273399bf829133a8385332ad43add3c34c889102Chiao Cheng /** 47273399bf829133a8385332ad43add3c34c889102Chiao Cheng * @return a new, unique username. 48273399bf829133a8385332ad43add3c34c889102Chiao Cheng */ 49273399bf829133a8385332ad43add3c34c889102Chiao Cheng private String newUniqueUserName() { 50273399bf829133a8385332ad43add3c34c889102Chiao Cheng final SharedPreferences prefs = 51273399bf829133a8385332ad43add3c34c889102Chiao Cheng PreferenceManager.getDefaultSharedPreferences(mContext); 52273399bf829133a8385332ad43add3c34c889102Chiao Cheng final int nextId = prefs.getInt(PREF_KEY_LAST_USER_ID, 0) + 1; 53273399bf829133a8385332ad43add3c34c889102Chiao Cheng prefs.edit().putInt(PREF_KEY_LAST_USER_ID, nextId).apply(); 54273399bf829133a8385332ad43add3c34c889102Chiao Cheng 55273399bf829133a8385332ad43add3c34c889102Chiao Cheng return "User-" + nextId; 56273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 57273399bf829133a8385332ad43add3c34c889102Chiao Cheng 58273399bf829133a8385332ad43add3c34c889102Chiao Cheng /** 59273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Create a new account with the name generated by {@link #newUniqueUserName()}. 60273399bf829133a8385332ad43add3c34c889102Chiao Cheng */ 61273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 62273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, 63273399bf829133a8385332ad43add3c34c889102Chiao Cheng String authTokenType, String[] requiredFeatures, Bundle options) { 64273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "addAccount() type=" + accountType); 65273399bf829133a8385332ad43add3c34c889102Chiao Cheng final Bundle bundle = new Bundle(); 66273399bf829133a8385332ad43add3c34c889102Chiao Cheng 67273399bf829133a8385332ad43add3c34c889102Chiao Cheng final Account account = new Account(newUniqueUserName(), accountType); 68273399bf829133a8385332ad43add3c34c889102Chiao Cheng 69273399bf829133a8385332ad43add3c34c889102Chiao Cheng // Create an account. 70612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad AccountManager.get(mContext).addAccountExplicitly(account, PASSWORD, null); 71273399bf829133a8385332ad43add3c34c889102Chiao Cheng 72273399bf829133a8385332ad43add3c34c889102Chiao Cheng // And return it. 73612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 74612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 75273399bf829133a8385332ad43add3c34c889102Chiao Cheng return bundle; 76273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 77273399bf829133a8385332ad43add3c34c889102Chiao Cheng 78273399bf829133a8385332ad43add3c34c889102Chiao Cheng /** 79273399bf829133a8385332ad43add3c34c889102Chiao Cheng * Just return the user name as the authtoken. 80273399bf829133a8385332ad43add3c34c889102Chiao Cheng */ 81273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 82273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, 83273399bf829133a8385332ad43add3c34c889102Chiao Cheng String authTokenType, Bundle loginOptions) { 84273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "getAuthToken() account=" + account); 85273399bf829133a8385332ad43add3c34c889102Chiao Cheng final Bundle bundle = new Bundle(); 86612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad bundle.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 87612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 88612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad bundle.putString(AccountManager.KEY_AUTHTOKEN, account.name); 89273399bf829133a8385332ad43add3c34c889102Chiao Cheng 90273399bf829133a8385332ad43add3c34c889102Chiao Cheng return bundle; 91273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 92273399bf829133a8385332ad43add3c34c889102Chiao Cheng 93273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 94273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle confirmCredentials( 95273399bf829133a8385332ad43add3c34c889102Chiao Cheng AccountAuthenticatorResponse response, Account account, Bundle options) { 96273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "confirmCredentials()"); 97273399bf829133a8385332ad43add3c34c889102Chiao Cheng return null; 98273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 99273399bf829133a8385332ad43add3c34c889102Chiao Cheng 100273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 101273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { 102273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "editProperties()"); 103273399bf829133a8385332ad43add3c34c889102Chiao Cheng throw new UnsupportedOperationException(); 104273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 105273399bf829133a8385332ad43add3c34c889102Chiao Cheng 106273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 107273399bf829133a8385332ad43add3c34c889102Chiao Cheng public String getAuthTokenLabel(String authTokenType) { 108273399bf829133a8385332ad43add3c34c889102Chiao Cheng // null means we don't support multiple authToken types 109273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "getAuthTokenLabel()"); 110273399bf829133a8385332ad43add3c34c889102Chiao Cheng return null; 111273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 112273399bf829133a8385332ad43add3c34c889102Chiao Cheng 113273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 114273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle hasFeatures( 115273399bf829133a8385332ad43add3c34c889102Chiao Cheng AccountAuthenticatorResponse response, Account account, String[] features) { 116273399bf829133a8385332ad43add3c34c889102Chiao Cheng // This call is used to query whether the Authenticator supports 117273399bf829133a8385332ad43add3c34c889102Chiao Cheng // specific features. We don't expect to get called, so we always 118273399bf829133a8385332ad43add3c34c889102Chiao Cheng // return false (no) for any queries. 119273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "hasFeatures()"); 120273399bf829133a8385332ad43add3c34c889102Chiao Cheng final Bundle result = new Bundle(); 121612b408f55e4a42635925c52f93c4b8f1a0916a7Ihab Awad result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false); 122273399bf829133a8385332ad43add3c34c889102Chiao Cheng return result; 123273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 124273399bf829133a8385332ad43add3c34c889102Chiao Cheng 125273399bf829133a8385332ad43add3c34c889102Chiao Cheng @Override 126273399bf829133a8385332ad43add3c34c889102Chiao Cheng public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, 127273399bf829133a8385332ad43add3c34c889102Chiao Cheng String authTokenType, Bundle loginOptions) { 128273399bf829133a8385332ad43add3c34c889102Chiao Cheng Log.v(TestauthConstants.LOG_TAG, "updateCredentials()"); 129273399bf829133a8385332ad43add3c34c889102Chiao Cheng return null; 130273399bf829133a8385332ad43add3c34c889102Chiao Cheng } 131273399bf829133a8385332ad43add3c34c889102Chiao Cheng} 132