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