/* * 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 Creator CREATOR = new Creator() { public LabeledIntent createFromParcel(Parcel source) { return new LabeledIntent(source); } public LabeledIntent[] newArray(int size) { return new LabeledIntent[size]; } }; }