1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.server.cts.device.batterystats;
17 
18 import android.accounts.AbstractAccountAuthenticator;
19 import android.accounts.Account;
20 import android.accounts.AccountAuthenticatorResponse;
21 import android.accounts.AccountManager;
22 import android.accounts.NetworkErrorException;
23 import android.app.Service;
24 import android.content.Context;
25 import android.content.Intent;
26 import android.os.Bundle;
27 import android.os.IBinder;
28 import android.util.Log;
29 
30 import java.util.Arrays;
31 
32 /**
33  * Authenticator for the sync test.
34  */
35 public class BatteryStatsAuthenticator extends Service {
36     private static final String TAG = "TestAuthenticator";
37 
38     private static final String ACCOUNT_NAME = "BatteryStatsCts";
39     private static final String ACCOUNT_TYPE = "com.android.server.cts.device.batterystats";
40 
41     private static Authenticator sInstance;
42 
43     @Override
onBind(Intent intent)44     public IBinder onBind(Intent intent) {
45         if (sInstance == null) {
46             sInstance = new Authenticator(getApplicationContext());
47 
48         }
49         return sInstance.getIBinder();
50     }
51 
getTestAccount()52     public static Account getTestAccount() {
53         return new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
54     }
55 
56     /**
57      * Adds the test account, if it doesn't exist yet.
58      */
ensureTestAccount(Context context)59     public static void ensureTestAccount(Context context) {
60         final Account account = getTestAccount();
61 
62         Bundle result = new Bundle();
63         result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
64         result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
65 
66         final AccountManager am = context.getSystemService(AccountManager.class);
67 
68         if (!Arrays.asList(am.getAccountsByType(account.type)).contains(account) ){
69             am.addAccountExplicitly(account, "password", new Bundle());
70         }
71     }
72 
73     /**
74      * Remove the test account.
75      */
removeAllAccounts(Context context)76     public static void removeAllAccounts(Context context) {
77         final AccountManager am = context.getSystemService(AccountManager.class);
78 
79         for (Account account : am.getAccountsByType(BatteryStatsAuthenticator.ACCOUNT_TYPE)) {
80             Log.i(TAG, "Removing " + account + "...");
81             am.removeAccountExplicitly(account);
82             Log.i(TAG, "Removed");
83         }
84     }
85 
86     public static class Authenticator extends AbstractAccountAuthenticator {
87 
88         private final Context mContxet;
89 
Authenticator(Context context)90         public Authenticator(Context context) {
91             super(context);
92             mContxet = context;
93         }
94 
95         @Override
addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options)96         public Bundle addAccount(AccountAuthenticatorResponse response, String accountType,
97                 String authTokenType, String[] requiredFeatures, Bundle options)
98                 throws NetworkErrorException {
99             return new Bundle();
100         }
101 
102         @Override
editProperties(AccountAuthenticatorResponse response, String accountType)103         public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
104             return new Bundle();
105         }
106 
107         @Override
updateCredentials(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)108         public Bundle updateCredentials(AccountAuthenticatorResponse response, Account account,
109                 String authTokenType, Bundle options) throws NetworkErrorException {
110             return new Bundle();
111         }
112 
113         @Override
confirmCredentials(AccountAuthenticatorResponse response, Account account, Bundle options)114         public Bundle confirmCredentials(AccountAuthenticatorResponse response, Account account,
115                 Bundle options) throws NetworkErrorException {
116             return new Bundle();
117         }
118 
119         @Override
getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options)120         public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account,
121                 String authTokenType, Bundle options) throws NetworkErrorException {
122             return new Bundle();
123         }
124 
125         @Override
getAuthTokenLabel(String authTokenType)126         public String getAuthTokenLabel(String authTokenType) {
127             return "token_label";
128         }
129 
130         @Override
hasFeatures(AccountAuthenticatorResponse response, Account account, String[] features)131         public Bundle hasFeatures(AccountAuthenticatorResponse response, Account account,
132                 String[] features) throws NetworkErrorException {
133             return new Bundle();
134         }
135     }
136 }
137