19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
216b61d41f72d4613384a78e792ab0e58f038cda65Joe Onoratoimport java.lang.Comparable;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Identifier for a specific application component
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link android.app.Activity}, {@link android.app.Service},
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.BroadcastReceiver}, or
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.ContentProvider}) that is available.  Two
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pieces of information, encapsulated here, are required to identify
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a component: the package (a String) it exists in, and the class (a String)
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * name inside of that package.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
33edc649aabc795bb31ff08c94836cd7268a70c73aJoe Onoratopublic final class ComponentName implements Parcelable, Cloneable, Comparable<ComponentName> {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final String mPackage;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final String mClass;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new component identifier.
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pkg The name of the package that the component exists in.  Can
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not be null.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cls The name of the class inside of <var>pkg</var> that
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implements the component.  Can not be null.
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName(String pkg, String cls) {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (pkg == null) throw new NullPointerException("package name is null");
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (cls == null) throw new NullPointerException("class name is null");
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPackage = pkg;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mClass = cls;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new component identifier from a Context and class name.
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pkg A Context for the package implementing the component,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * from which the actual package name will be retrieved.
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cls The name of the class inside of <var>pkg</var> that
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * implements the component.
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName(Context pkg, String cls) {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (cls == null) throw new NullPointerException("class name is null");
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPackage = pkg.getPackageName();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mClass = cls;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new component identifier from a Context and Class object.
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param pkg A Context for the package implementing the component, from
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * which the actual package name will be retrieved.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param cls The Class object of the desired component, from which the
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual class name will be retrieved.
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName(Context pkg, Class<?> cls) {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPackage = pkg.getPackageName();
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mClass = cls.getName();
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
79edc649aabc795bb31ff08c94836cd7268a70c73aJoe Onorato    public ComponentName clone() {
80edc649aabc795bb31ff08c94836cd7268a70c73aJoe Onorato        return new ComponentName(mPackage, mClass);
81edc649aabc795bb31ff08c94836cd7268a70c73aJoe Onorato    }
82edc649aabc795bb31ff08c94836cd7268a70c73aJoe Onorato
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the package name of this component.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getPackageName() {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPackage;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the class name of this component.
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getClassName() {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mClass;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the class name, either fully qualified or in a shortened form
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (with a leading '.') if it is a suffix of the package.
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String getShortClassName() {
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mClass.startsWith(mPackage)) {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int PN = mPackage.length();
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int CN = mClass.length();
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (CN > PN && mClass.charAt(PN) == '.') {
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return mClass.substring(PN, CN);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mClass;
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a String that unambiguously describes both the package and
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class names contained in the ComponentName.  You can later recover
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the ComponentName from this string through
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #unflattenFromString(String)}.
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a new String holding the package and class names.  This
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is represented as the package name, concatenated with a '/' and then the
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class name.
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unflattenFromString(String)
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String flattenToString() {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPackage + "/" + mClass;
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
12921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn     * The same as {@link #flattenToString()}, but abbreviates the class
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * name if it is a suffix of the package.  The result can still be used
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with {@link #unflattenFromString(String)}.
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a new String holding the package and class names.  This
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is represented as the package name, concatenated with a '/' and then the
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class name.
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #unflattenFromString(String)
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String flattenToShortString() {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPackage + "/" + getShortClassName();
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Recover a ComponentName from a String that was previously created with
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #flattenToString()}.  It splits the string at the first '/',
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * taking the part before as the package name and the part after as the
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * class name.  As a special convenience (to use, for example, when
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * parsing component names on the command line), if the '/' is immediately
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * followed by a '.' then the final class name will be the concatenation
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of the package name with the string following the '/'.  Thus
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "com.foo/.Blah" becomes package="com.foo" class="com.foo.Blah".
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param str The String that was returned by flattenToString().
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a new ComponentName containing the package and class
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * names that were encoded in <var>str</var>
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #flattenToString()
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static ComponentName unflattenFromString(String str) {
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int sep = str.indexOf('/');
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (sep < 0 || (sep+1) >= str.length()) {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String pkg = str.substring(0, sep);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String cls = str.substring(sep+1);
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (cls.length() > 0 && cls.charAt(0) == '.') {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            cls = pkg + cls;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new ComponentName(pkg, cls);
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return string representation of this class without the class's name
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as a prefix.
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toShortString() {
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "{" + mPackage + "/" + mClass + "}";
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "ComponentInfo{" + mPackage + "/" + mClass + "}";
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean equals(Object obj) {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (obj != null) {
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                ComponentName other = (ComponentName)obj;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // Note: no null checks, because mPackage and mClass can
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // never be null.
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return mPackage.equals(other.mPackage)
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        && mClass.equals(other.mClass);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (ClassCastException e) {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int hashCode() {
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPackage.hashCode() + mClass.hashCode();
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2046b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato
2056b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato    public int compareTo(ComponentName that) {
2066b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato        int v;
2076b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato        v = this.mPackage.compareTo(that.mPackage);
2086b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato        if (v != 0) {
2096b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato            return v;
2106b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato        }
2116b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato        return this.mClass.compareTo(that.mClass);
2126b61d41f72d4613384a78e792ab0e58f038cda65Joe Onorato    }
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel out, int flags) {
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeString(mPackage);
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        out.writeString(mClass);
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Write a ComponentName to a Parcel, handling null pointers.  Must be
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * read with {@link #readFromParcel(Parcel)}.
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param c The ComponentName to be written.
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param out The Parcel in which the ComponentName will be placed.
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #readFromParcel(Parcel)
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void writeToParcel(ComponentName c, Parcel out) {
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (c != null) {
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.writeToParcel(out, 0);
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            out.writeString(null);
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Read a ComponentName from a Parcel that was previously written
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with {@link #writeToParcel(ComponentName, Parcel)}, returning either
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a null or new object as appropriate.
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param in The Parcel from which to read the ComponentName
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a new ComponentName matching the previously written
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * object, or null if a null had been written.
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #writeToParcel(ComponentName, Parcel)
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static ComponentName readFromParcel(Parcel in) {
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String pkg = in.readString();
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return pkg != null ? new ComponentName(pkg, in) : null;
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<ComponentName> CREATOR
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            = new Parcelable.Creator<ComponentName>() {
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName createFromParcel(Parcel in) {
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new ComponentName(in);
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName[] newArray(int size) {
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new ComponentName[size];
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiate a new ComponentName from the data in a Parcel that was
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * previously written with {@link #writeToParcel(Parcel, int)}.  Note that you
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must not use this with data written by
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link #writeToParcel(ComponentName, Parcel)} since it is not possible
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * to handle a null ComponentObject here.
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param in The Parcel containing the previously written ComponentName,
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * positioned at the location in the buffer where it was written.
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentName(Parcel in) {
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPackage = in.readString();
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mPackage == null) throw new NullPointerException(
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "package name is null");
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mClass = in.readString();
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mClass == null) throw new NullPointerException(
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                "class name is null");
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ComponentName(String pkg, Parcel in) {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPackage = pkg;
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mClass = in.readString();
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
291