content: /*
   * Copyright (C) 2009 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package android.content.pm;
  
  import android.content.Intent;
  import android.graphics.drawable.Drawable;
  import android.os.Parcel;
  import android.text.TextUtils;
  
  /**
   * A special subclass of Intent that can have a custom label/icon
   * associated with it.  Primarily for use with {@link Intent#ACTION_CHOOSER}.
   */
  public class LabeledIntent extends Intent {
      private String mSourcePackage;
      private int mLabelRes;
      private CharSequence mNonLocalizedLabel;
      private int mIcon;
      
      /**
       * Create a labeled intent from the given intent, supplying the label
       * and icon resources for it.
       * 
       * @param origIntent The original Intent to copy.
       * @param sourcePackage The package in which the label and icon live.
       * @param labelRes Resource containing the label, or 0 if none.
       * @param icon Resource containing the icon, or 0 if none.
       */
      public LabeledIntent(Intent origIntent, String sourcePackage,
              int labelRes, int icon) {
          super(origIntent);
          mSourcePackage = sourcePackage;
          mLabelRes = labelRes;
          mNonLocalizedLabel = null;
          mIcon = icon;
      }
      
      /**
       * Create a labeled intent from the given intent, supplying a textual
       * label and icon resource for it.
       * 
       * @param origIntent The original Intent to copy.
       * @param sourcePackage The package in which the label and icon live.
       * @param nonLocalizedLabel Concrete text to use for the label.
       * @param icon Resource containing the icon, or 0 if none.
       */
      public LabeledIntent(Intent origIntent, String sourcePackage,
              CharSequence nonLocalizedLabel, int icon) {
          super(origIntent);
          mSourcePackage = sourcePackage;
          mLabelRes = 0;
          mNonLocalizedLabel = nonLocalizedLabel;
          mIcon = icon;
      }
      
      /**
       * Create a labeled intent with no intent data but supplying the label
       * and icon resources for it.
       * 
       * @param sourcePackage The package in which the label and icon live.
       * @param labelRes Resource containing the label, or 0 if none.
       * @param icon Resource containing the icon, or 0 if none.
       */
      public LabeledIntent(String sourcePackage, int labelRes, int icon) {
          mSourcePackage = sourcePackage;
          mLabelRes = labelRes;
          mNonLocalizedLabel = null;
          mIcon = icon;
      }
      
      /**
       * Create a labeled intent with no intent data but supplying a textual
       * label and icon resource for it.
       * 
       * @param sourcePackage The package in which the label and icon live.
       * @param nonLocalizedLabel Concrete text to use for the label.
       * @param icon Resource containing the icon, or 0 if none.
       */
      public LabeledIntent(String sourcePackage,
              CharSequence nonLocalizedLabel, int icon) {
          mSourcePackage = sourcePackage;
          mLabelRes = 0;
          mNonLocalizedLabel = nonLocalizedLabel;
          mIcon = icon;
      }
      
      /**
       * Return the name of the package holding label and icon resources.
       */
      public String getSourcePackage() {
          return mSourcePackage;
      }
      
      /**
       * Return any resource identifier that has been given for the label text.
       */
      public int getLabelResource() {
          return mLabelRes;
      }
      
      /**
       * Return any concrete text that has been given for the label text.
       */
      public CharSequence getNonLocalizedLabel() {
          return mNonLocalizedLabel;
      }
      
      /**
       * Return any resource identifier that has been given for the label icon.
       */
      public int getIconResource() {
          return mIcon;
      }
      
      /**
       * Retrieve the label associated with this object.  If the object does
       * not have a label, null will be returned, in which case you will probably
       * want to load the label from the underlying resolved info for the Intent.
       */
      public CharSequence loadLabel(PackageManager pm) {
          if (mNonLocalizedLabel != null) {
              return mNonLocalizedLabel;
          }
          if (mLabelRes != 0 && mSourcePackage != null) {
              CharSequence label = pm.getText(mSourcePackage, mLabelRes, null);
              if (label != null) {
                  return label;
              }
          }
          return null;
      }
      
      /**
       * Retrieve the icon associated with this object.  If the object does
       * not have a icon, null will be returned, in which case you will probably
       * want to load the icon from the underlying resolved info for the Intent.
       */
      public Drawable loadIcon(PackageManager pm) {
          if (mIcon != 0 && mSourcePackage != null) {
              Drawable icon = pm.getDrawable(mSourcePackage, mIcon, null);
              if (icon != null) {
                  return icon;
              }
          }
          return null;
      }
      
      public void writeToParcel(Parcel dest, int parcelableFlags) {
          super.writeToParcel(dest, parcelableFlags);
          dest.writeString(mSourcePackage);
          dest.writeInt(mLabelRes);
          TextUtils.writeToParcel(mNonLocalizedLabel, dest, parcelableFlags);
          dest.writeInt(mIcon);
      }
  
      /** @hide */
      protected LabeledIntent(Parcel in) {
          readFromParcel(in);
      }
      
      public void readFromParcel(Parcel in) {
          super.readFromParcel(in);
          mSourcePackage = in.readString();
          mLabelRes = in.readInt();
          mNonLocalizedLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
          mIcon = in.readInt();
      }
      
      public static final @android.annotation.NonNull Creator<LabeledIntent> CREATOR
              = new Creator<LabeledIntent>() {
          public LabeledIntent createFromParcel(Parcel source) {
              return new LabeledIntent(source);
          }
          public LabeledIntent[] newArray(int size) {
              return new LabeledIntent[size];
          }
      };
  
  }
  