AccountAuthenticatorCache.java revision 718d8a2d7ff3e864a73879eb646f46c14ab74d07
1603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana/* 2603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Copyright (C) 2009 The Android Open Source Project 3603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * 4603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Licensed under the Apache License, Version 2.0 (the "License"); 5603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * you may not use this file except in compliance with the License. 6603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * You may obtain a copy of the License at 7603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * 8603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * http://www.apache.org/licenses/LICENSE-2.0 9603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * 10603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * Unless required by applicable law or agreed to in writing, software 11603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * distributed under the License is distributed on an "AS IS" BASIS, 12603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * See the License for the specific language governing permissions and 14603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * limitations under the License. 15603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana */ 16603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 17603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanapackage android.accounts; 18603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 19603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.content.pm.PackageManager; 20603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.content.pm.ResolveInfo; 21603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.content.pm.ServiceInfo; 22718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintanaimport android.content.pm.RegisteredServicesCache; 23a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.res.XmlResourceParser; 24a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.res.TypedArray; 25a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.BroadcastReceiver; 26a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.ComponentName; 27a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.Context; 28a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.Intent; 29a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport android.content.IntentFilter; 30603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.util.Log; 31603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.util.AttributeSet; 32603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport android.util.Xml; 33603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 34603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport java.io.IOException; 35a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.io.FileDescriptor; 36a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.io.PrintWriter; 37a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.util.Collection; 38a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.util.Collections; 39a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.util.List; 40a698f4276968d078b1b9e2f3738c4f559a3307b2Fred Quintanaimport java.util.Map; 41603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 42603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport com.google.android.collect.Maps; 43603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport org.xmlpull.v1.XmlPullParserException; 44603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintanaimport org.xmlpull.v1.XmlPullParser; 45603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 46603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana/** 47603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * A cache of services that export the {@link IAccountAuthenticator} interface. This cache 48603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * is built by interrogating the {@link PackageManager} and is updated as packages are added, 49603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana * removed and changed. The authenticators are referred to by their account type and 50718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * are made available via the {@link RegisteredServicesCache#getServiceInfo} method. 51718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana * @hide 52603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana */ 53718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana/* package private */ class AccountAuthenticatorCache extends RegisteredServicesCache<String> { 54603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana private static final String TAG = "Account"; 55603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 56603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana private static final String SERVICE_INTERFACE = "android.accounts.AccountAuthenticator"; 57603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana private static final String SERVICE_META_DATA = "android.accounts.AccountAuthenticator"; 58718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana private static final String ATTRIBUTES_NAME = "account-authenticator"; 59603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 60603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana public AccountAuthenticatorCache(Context context) { 61718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana super(context, SERVICE_INTERFACE, SERVICE_META_DATA, ATTRIBUTES_NAME); 62603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana } 63603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana 64718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana public String parseServiceAttributes(AttributeSet attrs) { 65718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana TypedArray sa = mContext.getResources().obtainAttributes(attrs, 66718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana com.android.internal.R.styleable.AccountAuthenticator); 67603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana try { 68718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana return sa.getString(com.android.internal.R.styleable.AccountAuthenticator_accountType); 69603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana } finally { 70718d8a2d7ff3e864a73879eb646f46c14ab74d07Fred Quintana sa.recycle(); 71603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana } 72603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana } 73603073430bbcb1bd29db7afb9b14e2732ad589fbFred Quintana} 74