181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin/*
281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * Copyright (C) 2017 The Android Open Source Project
381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin *
481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * Licensed under the Apache License, Version 2.0 (the "License");
581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * you may not use this file except in compliance with the License.
681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * You may obtain a copy of the License at
781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin *
881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin *      http://www.apache.org/licenses/LICENSE-2.0
981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin *
1081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * Unless required by applicable law or agreed to in writing, software
1181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * distributed under the License is distributed on an "AS IS" BASIS,
1281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * See the License for the specific language governing permissions and
1481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * limitations under the License.
1581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin */
1681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinpackage com.android.server.accounts;
1781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
1881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.accounts.AbstractAccountAuthenticator;
1981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.accounts.Account;
2081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.accounts.AccountAuthenticatorResponse;
2181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.accounts.AccountManager;
2281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.accounts.NetworkErrorException;
2381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.content.Context;
2481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.content.Intent;
2581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport android.os.Bundle;
2681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
2781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport com.android.frameworks.servicestests.R;
2881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
2981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinimport java.util.concurrent.atomic.AtomicInteger;
3081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
3181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin/**
3281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin * This authenticator is to mock account authenticator to test AccountManagerService.
3381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin */
3481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jinpublic class TestAccountType1Authenticator extends AbstractAccountAuthenticator {
3581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    private final AtomicInteger mTokenCounter  = new AtomicInteger(0);
3681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
3781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    private final String mAccountType;
3881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    private final Context mContext;
3981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
4081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public TestAccountType1Authenticator(Context context, String accountType) {
4181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        super(context);
4281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        mAccountType = accountType;
4381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        mContext = context;
4481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
4581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
4681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
4781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
48a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        Bundle result = new Bundle();
49a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        result.putString(AccountManager.KEY_ACCOUNT_NAME,
50a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS);
51a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        result.putString(AccountManager.KEY_ACCOUNT_TYPE,
52a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1);
53a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        result.putString(
54a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                AccountManager.KEY_AUTHTOKEN,
55a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                Integer.toString(mTokenCounter.incrementAndGet()));
56a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return result;
5781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
5881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
5981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
6081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle addAccount(
6181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
6281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String accountType,
6381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String authTokenType,
6481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String[] requiredFeatures,
6581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options) throws NetworkErrorException {
6681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (!mAccountType.equals(accountType)) {
6781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
6881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
69a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        String accountName = null;
70a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
71a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (options != null) {
72a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            accountName = options.getString(AccountManagerServiceTestFixtures.KEY_ACCOUNT_NAME);
73a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
7481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
7581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
76a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (accountName.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
77a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill bundle with a success result.
78a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_NAME, accountName);
79a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccountType);
80a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_AUTHTOKEN,
81a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
82a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManagerServiceTestFixtures.KEY_OPTIONS_BUNDLE, options);
83a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else if (accountName.equals(
84a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
85a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Specify data to be returned by the eventual activity.
86a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent eventualActivityResultData = new Intent();
87a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, accountName);
88a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, accountType);
89a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Fill result with Intent.
90a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
91a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT, eventualActivityResultData);
92a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
93a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
94a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
95a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
96a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            fillResultWithError(
97a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    result,
98a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.ERROR_CODE_INVALID_RESPONSE,
99a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManagerServiceTestFixtures.ERROR_MESSAGE);
100a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
10181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return result;
10281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
10381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
10481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
10581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle confirmCredentials(
10681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
10781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
10881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options) throws NetworkErrorException {
109a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (!mAccountType.equals(account.type)) {
110a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
111a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
112a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        Bundle result = new Bundle();
113a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
114a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
115a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill bundle with a success result.
116a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
117a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
118a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
119a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
120a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Specify data to be returned by the eventual activity.
121a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent eventualActivityResultData = new Intent();
122a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_BOOLEAN_RESULT, true);
123a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
124a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
125a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
126a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Fill result with Intent.
127a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
128a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
129a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    eventualActivityResultData);
130a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
131a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
132a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
133a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
134a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill with error
135a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            fillResultWithError(
136a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    result,
137a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.ERROR_CODE_INVALID_RESPONSE,
138a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManagerServiceTestFixtures.ERROR_MESSAGE);
139a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
140a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return result;
14181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
14281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
14381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
14481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle getAuthToken(
14581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
14681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
14781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String authTokenType,
14881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options) throws NetworkErrorException {
149a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (!mAccountType.equals(account.type)) {
150a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
151a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
152a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        Bundle result = new Bundle();
153a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
154a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        long expiryMillis = (options == null)
155a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                ? 0 : options.getLong(AccountManagerServiceTestFixtures.KEY_TOKEN_EXPIRY);
156a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
157a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill bundle with a success result.
158a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(
159a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.KEY_AUTHTOKEN, AccountManagerServiceTestFixtures.AUTH_TOKEN);
160a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putLong(
161a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AbstractAccountAuthenticator.KEY_CUSTOM_TOKEN_EXPIRY,
162a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    expiryMillis);
163a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
164a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
165a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
166a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Specify data to be returned by the eventual activity.
167a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent eventualActivityResultData = new Intent();
168a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(
169a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.KEY_AUTHTOKEN, AccountManagerServiceTestFixtures.AUTH_TOKEN);
170a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(
171a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AbstractAccountAuthenticator.KEY_CUSTOM_TOKEN_EXPIRY,
172a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    expiryMillis);
173a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
174a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
175a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
176a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Fill result with Intent.
177a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
178a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
179a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    eventualActivityResultData);
180a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
181a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
182a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
183a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
184a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
185a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            fillResultWithError(
186a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    result,
187a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.ERROR_CODE_INVALID_RESPONSE,
188a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManagerServiceTestFixtures.ERROR_MESSAGE);
189a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
190a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return result;
19181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
19281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
19381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
19481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public String getAuthTokenLabel(String authTokenType) {
195a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return AccountManagerServiceTestFixtures.AUTH_TOKEN_LABEL;
19681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
19781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
19881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
19981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle updateCredentials(
20081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
20181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
20281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String authTokenType,
20381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options) throws NetworkErrorException {
20481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (!mAccountType.equals(account.type)) {
20581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
20681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
20781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
208a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
209a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
210a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill bundle with a success result.
211a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
212a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
213a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
214a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Specify data to be returned by the eventual activity.
215a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent eventualActivityResultData = new Intent();
216a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
217a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
218a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
219a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // Fill result with Intent.
220a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
221a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
222a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    eventualActivityResultData);
223a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
224a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
225a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
226a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
227a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // fill with error
228a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            fillResultWithError(
229a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    result,
230a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManager.ERROR_CODE_INVALID_RESPONSE,
231a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                    AccountManagerServiceTestFixtures.ERROR_MESSAGE);
232a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
23381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return result;
23481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
23581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
23681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
23781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle hasFeatures(
23881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
23981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
24081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String[] features) throws NetworkErrorException {
241a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        Bundle result = new Bundle();
242a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
2438c505dbacb65ac8bd11b1061657c1a3b5abe1be2Hongming Jin            // fill bundle with true.
244a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
245f29d549c2d16f377fe11261b98d77d2c9db1070csunjian        } else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS_2)) {
246f29d549c2d16f377fe11261b98d77d2c9db1070csunjian            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
2478c505dbacb65ac8bd11b1061657c1a3b5abe1be2Hongming Jin        } else if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
2488c505dbacb65ac8bd11b1061657c1a3b5abe1be2Hongming Jin            // fill bundle with false.
2498c505dbacb65ac8bd11b1061657c1a3b5abe1be2Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
250a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
251a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            // return null for error
252a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result = null;
253a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
254a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
255a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        response.onResult(result);
256a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return null;
25781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
25881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
25981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
26081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle startAddAccountSession(
26181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
26281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String accountType,
26381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String authTokenType,
26481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String[] requiredFeatures,
26581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options) throws NetworkErrorException {
26681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (!mAccountType.equals(accountType)) {
26781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
26881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
26981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
27081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        String accountName = null;
27181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle sessionBundle = null;
27281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        String password = null;
27381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (options != null) {
27481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            accountName = options.getString(AccountManagerServiceTestFixtures.KEY_ACCOUNT_NAME);
27581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            sessionBundle = options.getBundle(
27681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.KEY_ACCOUNT_SESSION_BUNDLE);
27781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            password = options.getString(AccountManagerServiceTestFixtures.KEY_ACCOUNT_PASSWORD);
27881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
27981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
28081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
28181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (accountName.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
28281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill bundle with a success result.
28381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putBundle(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE, sessionBundle);
28481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_STATUS_TOKEN,
28581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_STATUS_TOKEN);
28681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_PASSWORD, password);
28781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_AUTHTOKEN,
28881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
28981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else if (accountName.equals(
29081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
29181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Specify data to be returned by the eventual activity.
29281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent eventualActivityResultData = new Intent();
29381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_AUTHTOKEN,
29481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
29581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_STATUS_TOKEN,
29681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_STATUS_TOKEN);
29781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_PASSWORD, password);
29881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE,
29981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    sessionBundle);
30081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Fill result with Intent.
30181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
30281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
30381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    eventualActivityResultData);
30481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
30581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
30681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
30781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else {
30881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill with error
30981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            fillResultWithError(result, options);
31081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
31181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
31281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return result;
31381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
31481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
31581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
31681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle startUpdateCredentialsSession(
31781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountAuthenticatorResponse response,
31881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
31981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String authTokenType,
32081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle options)
32181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throws NetworkErrorException {
32281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
32381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (!mAccountType.equals(account.type)) {
32481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
32581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
32681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
32781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        String accountName = null;
32881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle sessionBundle = null;
32981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (options != null) {
33081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            accountName = options.getString(AccountManagerServiceTestFixtures.KEY_ACCOUNT_NAME);
33181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            sessionBundle = options.getBundle(
33281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountManagerServiceTestFixtures.KEY_ACCOUNT_SESSION_BUNDLE);
33381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
33481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
33581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
33681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (accountName.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
33781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill bundle with a success result.
33881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putBundle(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE, sessionBundle);
33981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_STATUS_TOKEN,
34081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_STATUS_TOKEN);
341c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin            result.putString(AccountManager.KEY_PASSWORD,
342c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_PASSWORD);
34381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_AUTHTOKEN,
34481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
34581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else if (accountName.equals(
34681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
34781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Specify data to be returned by the eventual activity.
34881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent eventualActivityResultData = new Intent();
34981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_AUTHTOKEN,
35081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
35181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_STATUS_TOKEN,
35281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_STATUS_TOKEN);
35381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_PASSWORD,
35481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_PASSWORD);
35581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE,
35681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    sessionBundle);
35781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Fill result with Intent.
35881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
35981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
36081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    eventualActivityResultData);
36181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
36281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
36381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
36481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else {
36581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill with error
36681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            fillResultWithError(result, options);
36781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
36881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return result;
36981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
37081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
37181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
37281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle finishSession(AccountAuthenticatorResponse response,
37381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String accountType,
37481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Bundle sessionBundle) throws NetworkErrorException {
37581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
37681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (!mAccountType.equals(accountType)) {
37781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            throw new IllegalArgumentException("Request to the wrong authenticator!");
37881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
37981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
38081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        String accountName = null;
38181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (sessionBundle != null) {
38281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            accountName = sessionBundle.getString(
38381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            AccountManagerServiceTestFixtures.KEY_ACCOUNT_NAME);
38481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
38581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
38681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
38781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (accountName.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
388c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin            // add sessionBundle into result for verification purpose
389c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin            result.putBundle(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE, sessionBundle);
39081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill bundle with a success result.
39181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_NAME,
39281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_NAME);
39381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_ACCOUNT_TYPE,
39481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1);
39581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putString(AccountManager.KEY_AUTHTOKEN,
39681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
39781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else if (accountName.equals(
39881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
39981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Specify data to be returned by the eventual activity.
40081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent eventualActivityResultData = new Intent();
40181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_NAME,
40281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_NAME);
40381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_ACCOUNT_TYPE,
40481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1);
40581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            eventualActivityResultData.putExtra(AccountManager.KEY_AUTHTOKEN,
40681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    Integer.toString(mTokenCounter.incrementAndGet()));
40781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
40881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // Fill result with Intent.
40981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
41081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_RESULT,
41181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin                    eventualActivityResultData);
41281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            intent.putExtra(AccountManagerServiceTestFixtures.KEY_CALLBACK, response);
41381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
41481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
41581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else {
41681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill with error
41781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            fillResultWithError(result, sessionBundle);
41881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
41981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return result;
42081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
42181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
42281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    @Override
42381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    public Bundle isCredentialsUpdateSuggested(
42481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            final AccountAuthenticatorResponse response,
42581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            Account account,
42681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            String statusToken) throws NetworkErrorException {
42781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
42881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        Bundle result = new Bundle();
42981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
43081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill bundle with a success result.
43181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
43281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        } else {
43381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            // fill with error
43481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            fillResultWithError(
435c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin                    result,
436c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin                    AccountManager.ERROR_CODE_INVALID_RESPONSE,
437c1a892a967a902ba0407f206aede78b0a2c49e1eHongming Jin                    AccountManagerServiceTestFixtures.ERROR_MESSAGE);
43881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
43981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
44081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        response.onResult(result);
44181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        return null;
44281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
44381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
444a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin    @Override
445a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin    public Bundle getAccountRemovalAllowed(
446a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            AccountAuthenticatorResponse response, Account account) throws NetworkErrorException {
447a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        Bundle result = new Bundle();
448a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        if (account.name.equals(AccountManagerServiceTestFixtures.ACCOUNT_NAME_SUCCESS)) {
449a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
450a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else if (account.name.equals(
451a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin                AccountManagerServiceTestFixtures.ACCOUNT_NAME_INTERVENE)) {
452a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            Intent intent = new Intent(mContext, AccountAuthenticatorDummyActivity.class);
453a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putParcelable(AccountManager.KEY_INTENT, intent);
454a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        } else {
455a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin            result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false);
456a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        }
457a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin        return result;
458a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin    }
459a0c4d1d6bfd026de36a542d6d5cd82cd12740ee5Hongming Jin
46081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    private void fillResultWithError(Bundle result, Bundle options) {
46181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        int errorCode = AccountManager.ERROR_CODE_INVALID_RESPONSE;
46281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        String errorMsg = "Default Error Message";
46381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        if (options != null) {
46481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            errorCode = options.getInt(AccountManager.KEY_ERROR_CODE);
46581c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin            errorMsg = options.getString(AccountManager.KEY_ERROR_MESSAGE);
46681c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        }
46781c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        fillResultWithError(result, errorCode, errorMsg);
46881c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
46981c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin
47081c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    private void fillResultWithError(Bundle result, int errorCode, String errorMsg) {
47181c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        result.putInt(AccountManager.KEY_ERROR_CODE, errorCode);
47281c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin        result.putString(AccountManager.KEY_ERROR_MESSAGE, errorMsg);
47381c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin    }
47481c4c8af206624f902efbd913fc3b26bb6842307Hongming Jin}