18aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn/*
28aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Copyright (C) 2008 The Android Open Source Project
38aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn *
48aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
58aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * you may not use this file except in compliance with the License.
68aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * You may obtain a copy of the License at
78aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn *
88aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
98aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn *
108aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * Unless required by applicable law or agreed to in writing, software
118aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
128aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * See the License for the specific language governing permissions and
148aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn * limitations under the License.
158aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn */
168aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content.pm;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class containing information common to all application components
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link ActivityInfo}, {@link ServiceInfo}).  This class is not intended
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be used by itself; it is simply here to share common definitions
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between all application components.  As such, it does not itself
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implement Parcelable, but does provide convenience methods to assist
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the implementation of Parcelable in subclasses.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ComponentInfo extends PackageItemInfo {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Global information about the application/package this component is a
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * part of.
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ApplicationInfo applicationInfo;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The name of the process this component should run in.
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * From the "android:process" attribute or, if not set, the same
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * as <var>applicationInfo.processName</var>.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String processName;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
468aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn     * A string resource identifier (in the package's resources) containing
478aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn     * a user-readable description of the component.  From the "description"
488aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn     * attribute or, if not set, 0.
498aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn     */
508aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn    public int descriptionRes;
518aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn
528aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn    /**
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether or not this component may be instantiated.  Note that this value can be
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * overriden by the one in its parent {@link ApplicationInfo}.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean enabled = true;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set to true if this component is available for use by other applications.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Comes from {@link android.R.attr#exported android:exported} of the
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;activity&gt;, &lt;receiver&gt;, &lt;service&gt;, or
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * &lt;provider&gt; tag.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean exported = false;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentInfo() {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ComponentInfo(ComponentInfo orig) {
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(orig);
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        applicationInfo = orig.applicationInfo;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        processName = orig.processName;
738aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn        descriptionRes = orig.descriptionRes;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        enabled = orig.enabled;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        exported = orig.exported;
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override public CharSequence loadLabel(PackageManager pm) {
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (nonLocalizedLabel != null) {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return nonLocalizedLabel;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ApplicationInfo ai = applicationInfo;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CharSequence label;
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (labelRes != 0) {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            label = pm.getText(packageName, labelRes, ai);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (label != null) {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return label;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ai.nonLocalizedLabel != null) {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ai.nonLocalizedLabel;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (ai.labelRes != 0) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            label = pm.getText(packageName, ai.labelRes, ai);
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (label != null) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return label;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return name;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
101a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato
102a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato    /**
103a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato     * Return whether this component and its enclosing application are enabled.
104a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato     */
105a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato    public boolean isEnabled() {
106a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato        return enabled && applicationInfo.enabled;
107a85a91573af97a76ab08ffd5f8558b73283e1faaJoe Onorato    }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return the icon resource identifier to use for this component.  If
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the component defines an icon, that is used; else, the application
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * icon is used.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The icon associated with this component.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final int getIconResource() {
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return icon != 0 ? icon : applicationInfo.icon;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void dumpFront(Printer pw, String prefix) {
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.dumpFront(pw, prefix);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        pw.println(prefix + "enabled=" + enabled + " exported=" + exported
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + " processName=" + processName);
1248aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn        if (descriptionRes != 0) {
1258aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn            pw.println(prefix + "description=" + descriptionRes);
1268aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn        }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void dumpBack(Printer pw, String prefix) {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (applicationInfo != null) {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pw.println(prefix + "ApplicationInfo:");
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            applicationInfo.dump(pw, prefix + "  ");
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pw.println(prefix + "ApplicationInfo: null");
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.dumpBack(pw, prefix);
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int parcelableFlags) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.writeToParcel(dest, parcelableFlags);
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        applicationInfo.writeToParcel(dest, parcelableFlags);
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(processName);
1438aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn        dest.writeInt(descriptionRes);
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(enabled ? 1 : 0);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(exported ? 1 : 0);
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
14707330791116513710d879c45b2f095cd314cbfd0Jeff Brown
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected ComponentInfo(Parcel source) {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(source);
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        processName = source.readString();
1528aa2e8939c61d788cbc192098465e79f584e173aDianne Hackborn        descriptionRes = source.readInt();
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        enabled = (source.readInt() != 0);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        exported = (source.readInt() != 0);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15607330791116513710d879c45b2f095cd314cbfd0Jeff Brown
15707330791116513710d879c45b2f095cd314cbfd0Jeff Brown    /**
15807330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @hide
15907330791116513710d879c45b2f095cd314cbfd0Jeff Brown     */
16007330791116513710d879c45b2f095cd314cbfd0Jeff Brown    @Override protected Drawable loadDefaultIcon(PackageManager pm) {
16107330791116513710d879c45b2f095cd314cbfd0Jeff Brown        return applicationInfo.loadIcon(pm);
16207330791116513710d879c45b2f095cd314cbfd0Jeff Brown    }
16307330791116513710d879c45b2f095cd314cbfd0Jeff Brown
16407330791116513710d879c45b2f095cd314cbfd0Jeff Brown    /**
16507330791116513710d879c45b2f095cd314cbfd0Jeff Brown     * @hide
16607330791116513710d879c45b2f095cd314cbfd0Jeff Brown     */
16781cd2e90ccdda498234384c8207afe2213714e60Adam Powell    @Override
16881cd2e90ccdda498234384c8207afe2213714e60Adam Powell    protected Drawable loadDefaultLogo(PackageManager pm) {
16981cd2e90ccdda498234384c8207afe2213714e60Adam Powell        return applicationInfo.loadLogo(pm);
17081cd2e90ccdda498234384c8207afe2213714e60Adam Powell    }
17181cd2e90ccdda498234384c8207afe2213714e60Adam Powell
17281cd2e90ccdda498234384c8207afe2213714e60Adam Powell    /**
17381cd2e90ccdda498234384c8207afe2213714e60Adam Powell     * @hide
17481cd2e90ccdda498234384c8207afe2213714e60Adam Powell     */
17507330791116513710d879c45b2f095cd314cbfd0Jeff Brown    @Override protected ApplicationInfo getApplicationInfo() {
17607330791116513710d879c45b2f095cd314cbfd0Jeff Brown        return applicationInfo;
17707330791116513710d879c45b2f095cd314cbfd0Jeff Brown    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
179