1cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root/*
2cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Copyright (C) 2011 The Android Open Source Project
3cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root *
4cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Licensed under the Apache License, Version 2.0 (the "License");
5cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * you may not use this file except in compliance with the License.
6cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * You may obtain a copy of the License at
7cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root *
8cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root *      http://www.apache.org/licenses/LICENSE-2.0
9cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root *
10cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * Unless required by applicable law or agreed to in writing, software
11cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * distributed under the License is distributed on an "AS IS" BASIS,
12cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * See the License for the specific language governing permissions and
14cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root * limitations under the License.
15cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root */
16cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
17cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootpackage com.android.server.pm;
18cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
19cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport com.android.internal.util.XmlUtils;
20cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport com.android.server.PreferredComponent;
21cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
22cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlPullParser;
23cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlPullParserException;
24cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlSerializer;
25cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
26cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.content.ComponentName;
27cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.content.IntentFilter;
28cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.util.Log;
29cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
30cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport java.io.IOException;
31cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
32cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootclass PreferredActivity extends IntentFilter implements PreferredComponent.Callbacks {
33cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    private static final String TAG = "PreferredActivity";
34cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
35cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    private static final boolean DEBUG_FILTERS = false;
36a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani    static final String ATTR_USER_ID = "userId";
37cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
38cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    final PreferredComponent mPref;
39cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
40cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) {
41cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        super(filter);
42cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        mPref = new PreferredComponent(this, match, set, activity);
43cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
44cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
45cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    PreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
46cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        mPref = new PreferredComponent(this, parser);
47cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
48cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
49cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    public void writeToXml(XmlSerializer serializer) throws IOException {
50cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        mPref.writeToXml(serializer);
51cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        serializer.startTag(null, "filter");
52a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            super.writeToXml(serializer);
53cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        serializer.endTag(null, "filter");
54cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
55cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
56cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    public boolean onReadTag(String tagName, XmlPullParser parser) throws XmlPullParserException,
57cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            IOException {
58cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        if (tagName.equals("filter")) {
59cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            if (DEBUG_FILTERS) {
60cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                Log.i(TAG, "Starting to parse filter...");
61cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            }
62cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            readFromXml(parser);
63cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            if (DEBUG_FILTERS) {
64cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                Log.i(TAG, "Finished filter: depth=" + parser.getDepth() + " tag="
65cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                        + parser.getName());
66cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            }
67cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        } else {
68cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            PackageManagerService.reportSettingsProblem(Log.WARN,
69cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                    "Unknown element under <preferred-activities>: " + parser.getName());
70cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            XmlUtils.skipCurrentTag(parser);
71cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        }
72cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        return true;
73cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
74cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root}
75