blob: 28124775fb9556a90c3206a13a039b1ecdf44fb4 [file] [log] [blame]
Dianne Hackborn8aa2e892010-01-22 11:31:30 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080017package android.content.pm;
18
19import android.graphics.drawable.Drawable;
20import android.os.Parcel;
21import android.util.Printer;
22
23/**
24 * Base class containing information common to all application components
25 * ({@link ActivityInfo}, {@link ServiceInfo}). This class is not intended
26 * to be used by itself; it is simply here to share common definitions
27 * between all application components. As such, it does not itself
28 * implement Parcelable, but does provide convenience methods to assist
29 * in the implementation of Parcelable in subclasses.
30 */
31public class ComponentInfo extends PackageItemInfo {
32 /**
33 * Global information about the application/package this component is a
34 * part of.
35 */
36 public ApplicationInfo applicationInfo;
37
38 /**
39 * The name of the process this component should run in.
40 * From the "android:process" attribute or, if not set, the same
41 * as <var>applicationInfo.processName</var>.
42 */
43 public String processName;
44
45 /**
Dianne Hackborn8aa2e892010-01-22 11:31:30 -080046 * A string resource identifier (in the package's resources) containing
47 * a user-readable description of the component. From the "description"
48 * attribute or, if not set, 0.
49 */
50 public int descriptionRes;
51
52 /**
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053 * Indicates whether or not this component may be instantiated. Note that this value can be
54 * overriden by the one in its parent {@link ApplicationInfo}.
55 */
56 public boolean enabled = true;
57
58 /**
59 * Set to true if this component is available for use by other applications.
60 * Comes from {@link android.R.attr#exported android:exported} of the
61 * &lt;activity&gt;, &lt;receiver&gt;, &lt;service&gt;, or
62 * &lt;provider&gt; tag.
63 */
64 public boolean exported = false;
65
66 public ComponentInfo() {
67 }
68
69 public ComponentInfo(ComponentInfo orig) {
70 super(orig);
71 applicationInfo = orig.applicationInfo;
72 processName = orig.processName;
Dianne Hackborn8aa2e892010-01-22 11:31:30 -080073 descriptionRes = orig.descriptionRes;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080074 enabled = orig.enabled;
75 exported = orig.exported;
76 }
77
78 @Override public CharSequence loadLabel(PackageManager pm) {
79 if (nonLocalizedLabel != null) {
80 return nonLocalizedLabel;
81 }
82 ApplicationInfo ai = applicationInfo;
83 CharSequence label;
84 if (labelRes != 0) {
85 label = pm.getText(packageName, labelRes, ai);
86 if (label != null) {
87 return label;
88 }
89 }
90 if (ai.nonLocalizedLabel != null) {
91 return ai.nonLocalizedLabel;
92 }
93 if (ai.labelRes != 0) {
94 label = pm.getText(packageName, ai.labelRes, ai);
95 if (label != null) {
96 return label;
97 }
98 }
99 return name;
100 }
Joe Onoratoa85a9152011-01-07 20:48:00 -0800101
102 /**
103 * Return whether this component and its enclosing application are enabled.
104 */
105 public boolean isEnabled() {
106 return enabled && applicationInfo.enabled;
107 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800108
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800109 /**
110 * Return the icon resource identifier to use for this component. If
111 * the component defines an icon, that is used; else, the application
112 * icon is used.
113 *
114 * @return The icon associated with this component.
115 */
116 public final int getIconResource() {
117 return icon != 0 ? icon : applicationInfo.icon;
118 }
119
120 protected void dumpFront(Printer pw, String prefix) {
121 super.dumpFront(pw, prefix);
122 pw.println(prefix + "enabled=" + enabled + " exported=" + exported
123 + " processName=" + processName);
Dianne Hackborn8aa2e892010-01-22 11:31:30 -0800124 if (descriptionRes != 0) {
125 pw.println(prefix + "description=" + descriptionRes);
126 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800127 }
128
129 protected void dumpBack(Printer pw, String prefix) {
130 if (applicationInfo != null) {
131 pw.println(prefix + "ApplicationInfo:");
132 applicationInfo.dump(pw, prefix + " ");
133 } else {
134 pw.println(prefix + "ApplicationInfo: null");
135 }
136 super.dumpBack(pw, prefix);
137 }
138
139 public void writeToParcel(Parcel dest, int parcelableFlags) {
140 super.writeToParcel(dest, parcelableFlags);
141 applicationInfo.writeToParcel(dest, parcelableFlags);
142 dest.writeString(processName);
Dianne Hackborn8aa2e892010-01-22 11:31:30 -0800143 dest.writeInt(descriptionRes);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800144 dest.writeInt(enabled ? 1 : 0);
145 dest.writeInt(exported ? 1 : 0);
146 }
Jeff Brown07330792010-03-30 19:57:08 -0700147
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800148 protected ComponentInfo(Parcel source) {
149 super(source);
150 applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
151 processName = source.readString();
Dianne Hackborn8aa2e892010-01-22 11:31:30 -0800152 descriptionRes = source.readInt();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800153 enabled = (source.readInt() != 0);
154 exported = (source.readInt() != 0);
155 }
Jeff Brown07330792010-03-30 19:57:08 -0700156
157 /**
158 * @hide
159 */
160 @Override protected Drawable loadDefaultIcon(PackageManager pm) {
161 return applicationInfo.loadIcon(pm);
162 }
163
164 /**
165 * @hide
166 */
Adam Powell81cd2e92010-04-21 16:35:18 -0700167 @Override
168 protected Drawable loadDefaultLogo(PackageManager pm) {
169 return applicationInfo.loadLogo(pm);
170 }
171
172 /**
173 * @hide
174 */
Jeff Brown07330792010-03-30 19:57:08 -0700175 @Override protected ApplicationInfo getApplicationInfo() {
176 return applicationInfo;
177 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800178}