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 Root
21cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlPullParser;
22cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlPullParserException;
23cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport org.xmlpull.v1.XmlSerializer;
24cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
25cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.content.ComponentName;
26cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.content.IntentFilter;
27cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport android.util.Log;
28cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
29cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootimport java.io.IOException;
30cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
31cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Rootclass PreferredActivity extends IntentFilter implements PreferredComponent.Callbacks {
32cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    private static final String TAG = "PreferredActivity";
33cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
34cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    private static final boolean DEBUG_FILTERS = false;
35cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
36cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    final PreferredComponent mPref;
37cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
38e9ecc8b49992840249bfb9d5d52b8824dd5de39bAmith Yamasani    PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity,
39e9ecc8b49992840249bfb9d5d52b8824dd5de39bAmith Yamasani            boolean always) {
40cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        super(filter);
41e9ecc8b49992840249bfb9d5d52b8824dd5de39bAmith Yamasani        mPref = new PreferredComponent(this, match, set, activity, always);
42cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
43cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
44cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    PreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
45cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        mPref = new PreferredComponent(this, parser);
46cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
47cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
488a2ed1d7c0c4f6476e39cc37d9ebd29c7562ce01Dianne Hackborn    public void writeToXml(XmlSerializer serializer, boolean full) throws IOException {
498a2ed1d7c0c4f6476e39cc37d9ebd29c7562ce01Dianne Hackborn        mPref.writeToXml(serializer, full);
50cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        serializer.startTag(null, "filter");
51a3f133afe885f9e005dfc0584cb7b3b90f75f665Amith Yamasani            super.writeToXml(serializer);
52cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        serializer.endTag(null, "filter");
53cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
54cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root
55cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    public boolean onReadTag(String tagName, XmlPullParser parser) throws XmlPullParserException,
56cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            IOException {
57cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        if (tagName.equals("filter")) {
58cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            if (DEBUG_FILTERS) {
59cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                Log.i(TAG, "Starting to parse filter...");
60cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            }
61cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            readFromXml(parser);
62cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            if (DEBUG_FILTERS) {
63cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                Log.i(TAG, "Finished filter: depth=" + parser.getDepth() + " tag="
64cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                        + parser.getName());
65cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            }
66cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        } else {
67cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            PackageManagerService.reportSettingsProblem(Log.WARN,
68cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root                    "Unknown element under <preferred-activities>: " + parser.getName());
69cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root            XmlUtils.skipCurrentTag(parser);
70cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        }
71cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root        return true;
72cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root    }
7338ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn
7438ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn    @Override
7538ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn    public String toString() {
7638ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn        return "PreferredActivity{0x" + Integer.toHexString(System.identityHashCode(this))
7738ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn                + " " + mPref.mComponent.flattenToShortString() + "}";
7838ba6e9ee3e634914153c2181f050a2bb250e484Dianne Hackborn    }
79cf0b38ca6e5aa5efded7dbdbb623f6cd2746c96aKenny Root}
80