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 whether this component and its enclosing application are enabled.
    104      */
    105     public boolean isEnabled() {
    106         return enabled && applicationInfo.enabled;
    107     }
    108 
    109     /**
    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     /**
    121      * Return the logo resource identifier to use for this component.  If
    122      * the component defines a logo, that is used; else, the application
    123      * logo is used.
    124      *
    125      * @return The logo associated with this component.
    126      */
    127     public final int getLogoResource() {
    128         return logo != 0 ? logo : applicationInfo.logo;
    129     }
    130 
    131     /**
    132      * Return the banner resource identifier to use for this component. If the
    133      * component defines a banner, that is used; else, the application banner is
    134      * used.
    135      *
    136      * @return The banner associated with this component.
    137      */
    138     public final int getBannerResource() {
    139         return banner != 0 ? banner : applicationInfo.banner;
    140     }
    141 
    142     protected void dumpFront(Printer pw, String prefix) {
    143         super.dumpFront(pw, prefix);
    144         pw.println(prefix + "enabled=" + enabled + " exported=" + exported
    145                 + " processName=" + processName);
    146         if (descriptionRes != 0) {
    147             pw.println(prefix + "description=" + descriptionRes);
    148         }
    149     }
    150 
    151     protected void dumpBack(Printer pw, String prefix) {
    152         if (applicationInfo != null) {
    153             pw.println(prefix + "ApplicationInfo:");
    154             applicationInfo.dump(pw, prefix + "  ");
    155         } else {
    156             pw.println(prefix + "ApplicationInfo: null");
    157         }
    158         super.dumpBack(pw, prefix);
    159     }
    160 
    161     public void writeToParcel(Parcel dest, int parcelableFlags) {
    162         super.writeToParcel(dest, parcelableFlags);
    163         applicationInfo.writeToParcel(dest, parcelableFlags);
    164         dest.writeString(processName);
    165         dest.writeInt(descriptionRes);
    166         dest.writeInt(enabled ? 1 : 0);
    167         dest.writeInt(exported ? 1 : 0);
    168     }
    169 
    170     protected ComponentInfo(Parcel source) {
    171         super(source);
    172         applicationInfo = ApplicationInfo.CREATOR.createFromParcel(source);
    173         processName = source.readString();
    174         descriptionRes = source.readInt();
    175         enabled = (source.readInt() != 0);
    176         exported = (source.readInt() != 0);
    177     }
    178 
    179     /**
    180      * @hide
    181      */
    182     @Override
    183     public Drawable loadDefaultIcon(PackageManager pm) {
    184         return applicationInfo.loadIcon(pm);
    185     }
    186 
    187     /**
    188      * @hide
    189      */
    190     @Override protected Drawable loadDefaultBanner(PackageManager pm) {
    191         return applicationInfo.loadBanner(pm);
    192     }
    193 
    194     /**
    195      * @hide
    196      */
    197     @Override
    198     protected Drawable loadDefaultLogo(PackageManager pm) {
    199         return applicationInfo.loadLogo(pm);
    200     }
    201 
    202     /**
    203      * @hide
    204      */
    205     @Override protected ApplicationInfo getApplicationInfo() {
    206         return applicationInfo;
    207     }
    208 }
    209