/* * Copyright 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.common.accounts; import android.accounts.AbstractAccountAuthenticator; import android.accounts.Account; import android.accounts.AccountAuthenticatorResponse; import android.accounts.NetworkErrorException; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.util.Log; public class GenericAccountService extends Service { private static final String TAG = "GenericAccountService"; public static final String ACCOUNT_NAME = "Account"; private Authenticator mAuthenticator; /** * Obtain a handle to the {@link android.accounts.Account} used for sync in this application. * *

It is important that the accountType specified here matches the value in your sync adapter * configuration XML file for android.accounts.AccountAuthenticator (often saved in * res/xml/syncadapter.xml). If this is not set correctly, you'll receive an error indicating * that "caller uid XXXXX is different than the authenticator's uid". * * @param accountType AccountType defined in the configuration XML file for * android.accounts.AccountAuthenticator (e.g. res/xml/syncadapter.xml). * @return Handle to application's account (not guaranteed to resolve unless CreateSyncAccount() * has been called) */ public static Account GetAccount(String accountType) { // Note: Normally the account name is set to the user's identity (username or email // address). However, since we aren't actually using any user accounts, it makes more sense // to use a generic string in this case. // // This string should *not* be localized. If the user switches locale, we would not be // able to locate the old account, and may erroneously register multiple accounts. final String accountName = ACCOUNT_NAME; return new Account(accountName, accountType); } @Override public void onCreate() { Log.i(TAG, "Service created"); mAuthenticator = new Authenticator(this); } @Override public void onDestroy() { Log.i(TAG, "Service destroyed"); } @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } public class Authenticator extends AbstractAccountAuthenticator { public Authenticator(Context context) { super(context); } @Override public Bundle editProperties(AccountAuthenticatorResponse accountAuthenticatorResponse, String s) { throw new UnsupportedOperationException(); } @Override public Bundle addAccount(AccountAuthenticatorResponse accountAuthenticatorResponse, String s, String s2, String[] strings, Bundle bundle) throws NetworkErrorException { return null; } @Override public Bundle confirmCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, Bundle bundle) throws NetworkErrorException { return null; } @Override public Bundle getAuthToken(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } @Override public String getAuthTokenLabel(String s) { throw new UnsupportedOperationException(); } @Override public Bundle updateCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } @Override public Bundle hasFeatures(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String[] strings) throws NetworkErrorException { throw new UnsupportedOperationException(); } } }