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