/* * CDDL HEADER START * * The contents of this file are subject to the terms of the Common Development * and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at * src/com/vodafone360/people/VODAFONE.LICENSE.txt or * http://github.com/360/360-Engine-for-Android * See the License for the specific language governing permissions and * limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each file and * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the fields * enclosed by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved. * Use is subject to license terms. */ package com.vodafone360.people.service; import com.vodafone360.people.Intents; import com.vodafone360.people.MainApplication; import com.vodafone360.people.engine.contactsync.NativeContactsApi; import com.vodafone360.people.utils.LoginPreferences; import android.accounts.AbstractAccountAuthenticator; import android.accounts.Account; import android.accounts.AccountAuthenticatorResponse; import android.accounts.AccountManager; import android.accounts.NetworkErrorException; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; /** * This class is an implementation of AbstractAccountAuthenticator for * authenticating accounts in the 360 People Account space. */ public class Authenticator extends AbstractAccountAuthenticator { private final MainApplication mApplication; /** * Constructor * @param context Context passed to superclass * @param application MainApplication object needed to remove user data */ public Authenticator(Context context, MainApplication application) { super(context); mApplication = application; } /** * {@inheritDoc} */ @Override public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) { final Intent intent = new Intent(); // In order to not use the UI package we define the class as a String // FIXME: Change this not to depend on the hardcoded String. Maybe use intent filter on StartActivity intent.setClassName(mApplication.getApplicationContext(), "com.vodafone360.people.ui.StartActivity"); if(NativeContactsApi.getInstance().isPeopleAccountCreated()) { intent.setAction(Intents.ONE_360_ACCOUNT_ONLY); } final Bundle bundle = new Bundle(); bundle.putParcelable(AccountManager.KEY_INTENT, intent); return bundle; } /** * {@inheritDoc} */ @Override public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account) throws NetworkErrorException { // Remove the data from the application behind the scenes final String username = LoginPreferences.getUsername(); if(!TextUtils.isEmpty(username)) { mApplication.removeUserData(); } Bundle result = new Bundle(); /* * At this point the user was already prompted by the system for confirmation * Returning false here would just popup another notification * saying its not possible to remove the Account without factory resetting */ result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true); return result; } /** * {@inheritDoc} */ @Override public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options) { // Nothing to do currently return null; } /** * {@inheritDoc} */ @Override public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) { throw new UnsupportedOperationException(); } /** * {@inheritDoc} */ @Override public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle loginOptions) { // Nothing to do currently return null; } /** * {@inheritDoc} */ @Override public String getAuthTokenLabel(String authTokenType) { // Nothing to do currently return null; } /** * {@inheritDoc} */ @Override public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features) { final Bundle result = new Bundle(); result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, false); return result; } /** * {@inheritDoc} */ @Override public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle loginOptions) { // Nothing to do currently return null; } }