Home | History | Annotate | Download | only in pm
      1 /*
      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 
     17 package android.content.pm;
     18 
     19 import android.graphics.drawable.Drawable;
     20 import android.os.Parcel;
     21 import 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  */
     31 public 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     /**
     46      * 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     /**
     53      * 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;
     73         descriptionRes = orig.descriptionRes;
     74         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     }
    101 
    102     /**
    103      * Return the icon resource identifier to use for this component.  If
    104      * the component defines an icon, that is used; else, the application
    105      * icon is used.
    106      *
    107      * @return The icon associated with this component.
    108      */
    109     public final int getIconResource() {
    110         return icon != 0 ? icon : applicationInfo.icon;
    111     }
    112 
    113     protected void dumpFront(Printer pw, String prefix) {
    114         super.dumpFront(pw, prefix);
    115         pw.println(prefix + "enabled=" + enabled + " exported=" + exported
    116                 + " processName=" + processName);
    117         if (descriptionRes != 0) {
    118             pw.println(prefix + "description=" + descriptionRes);
    119         }
    120     }
    121 
    122     protected void dumpBack(Printer pw, String prefix) {
    123         if (applicationInfo != null) {
    124             pw.println(prefix + "ApplicationInfo:");
    125             applicationInfo.dump(pw, prefix + "  ");
    126         } else {
    127             pw.println(prefix + "ApplicationInfo: null");
    128         }
    129         super.dumpBack(pw, prefix);
    130     }
    131 
    132     public void writeToParcel(Parcel dest, int parcelableFlags) {
    133         super.writeToParcel(dest, parcelableFlags);
    134         applicationInfo.writeToParcel(dest, parcelableFlags);
    135         dest.writeString(processName);
    136         dest.writeInt(descriptionRes);
    137         dest.writeInt(enabled ? 1 : 0);
    138         dest.writeInt(exported ? 1 : 0);
    139     }
    140 
    141     protected ComponentInfo(Parcel source) {
    142         super(source);
    143         applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
    144         processName = source.readString();
    145         descriptionRes = source.readInt();
    146         enabled = (source.readInt() != 0);
    147         exported = (source.readInt() != 0);
    148     }
    149 
    150     /**
    151      * @hide
    152      */
    153     @Override protected Drawable loadDefaultIcon(PackageManager pm) {
    154         return applicationInfo.loadIcon(pm);
    155     }
    156 
    157     /**
    158      * @hide
    159      */
    160     @Override
    161     protected Drawable loadDefaultLogo(PackageManager pm) {
    162         return applicationInfo.loadLogo(pm);
    163     }
    164 
    165     /**
    166      * @hide
    167      */
    168     @Override protected ApplicationInfo getApplicationInfo() {
    169         return applicationInfo;
    170     }
    171 }
    172