115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2009 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 17eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornpackage android.content.pm; 18eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 19eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.content.Intent; 20eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.graphics.drawable.Drawable; 21eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.os.Parcel; 22eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornimport android.text.TextUtils; 23eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 24eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn/** 25eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * A special subclass of Intent that can have a custom label/icon 26eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * associated with it. Primarily for use with {@link Intent#ACTION_CHOOSER}. 27eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 28eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackbornpublic class LabeledIntent extends Intent { 29eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn private String mSourcePackage; 30eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn private int mLabelRes; 31eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn private CharSequence mNonLocalizedLabel; 32eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn private int mIcon; 33eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 34eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 35eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Create a labeled intent from the given intent, supplying the label 36eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * and icon resources for it. 37eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 38eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param origIntent The original Intent to copy. 39eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param sourcePackage The package in which the label and icon live. 40eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param labelRes Resource containing the label, or 0 if none. 41eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param icon Resource containing the icon, or 0 if none. 42eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 43eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent(Intent origIntent, String sourcePackage, 44eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn int labelRes, int icon) { 45eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn super(origIntent); 46eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSourcePackage = sourcePackage; 47eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mLabelRes = labelRes; 48eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mNonLocalizedLabel = null; 49eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mIcon = icon; 50eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 51eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 52eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 53eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Create a labeled intent from the given intent, supplying a textual 54eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * label and icon resource for it. 55eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 56eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param origIntent The original Intent to copy. 57eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param sourcePackage The package in which the label and icon live. 58eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param nonLocalizedLabel Concrete text to use for the label. 59eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param icon Resource containing the icon, or 0 if none. 60eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 61eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent(Intent origIntent, String sourcePackage, 62eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence nonLocalizedLabel, int icon) { 63eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn super(origIntent); 64eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSourcePackage = sourcePackage; 65eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mLabelRes = 0; 66eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mNonLocalizedLabel = nonLocalizedLabel; 67eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mIcon = icon; 68eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 69eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 70eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 71eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Create a labeled intent with no intent data but supplying the label 72eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * and icon resources for it. 73eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 74eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param sourcePackage The package in which the label and icon live. 75eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param labelRes Resource containing the label, or 0 if none. 76eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param icon Resource containing the icon, or 0 if none. 77eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 78eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent(String sourcePackage, int labelRes, int icon) { 79eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSourcePackage = sourcePackage; 80eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mLabelRes = labelRes; 81eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mNonLocalizedLabel = null; 82eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mIcon = icon; 83eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 84eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 85eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 86eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Create a labeled intent with no intent data but supplying a textual 87eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * label and icon resource for it. 88eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * 89eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param sourcePackage The package in which the label and icon live. 90eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param nonLocalizedLabel Concrete text to use for the label. 91eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * @param icon Resource containing the icon, or 0 if none. 92eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 93eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent(String sourcePackage, 94eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence nonLocalizedLabel, int icon) { 95eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSourcePackage = sourcePackage; 96eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mLabelRes = 0; 97eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mNonLocalizedLabel = nonLocalizedLabel; 98eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mIcon = icon; 99eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 100eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 101eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 102eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return the name of the package holding label and icon resources. 103eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 104eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public String getSourcePackage() { 105eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mSourcePackage; 106eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 107eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 108eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 109eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return any resource identifier that has been given for the label text. 110eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 111eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public int getLabelResource() { 112eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mLabelRes; 113eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 114eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 115eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 116eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return any concrete text that has been given for the label text. 117eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 118eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public CharSequence getNonLocalizedLabel() { 119eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mNonLocalizedLabel; 120eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 121eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 122eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 123eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Return any resource identifier that has been given for the label icon. 124eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 125eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public int getIconResource() { 126eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mIcon; 127eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 128eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 129eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 130eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Retrieve the label associated with this object. If the object does 131eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * not have a label, null will be returned, in which case you will probably 132eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * want to load the label from the underlying resolved info for the Intent. 133eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 134eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public CharSequence loadLabel(PackageManager pm) { 135eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (mNonLocalizedLabel != null) { 136eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return mNonLocalizedLabel; 137eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 138eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (mLabelRes != 0 && mSourcePackage != null) { 139eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn CharSequence label = pm.getText(mSourcePackage, mLabelRes, null); 140eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (label != null) { 141eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return label; 142eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 143eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 144eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return null; 145eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 146eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 147eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** 148eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * Retrieve the icon associated with this object. If the object does 149eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * not have a icon, null will be returned, in which case you will probably 150eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn * want to load the icon from the underlying resolved info for the Intent. 151eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn */ 152eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public Drawable loadIcon(PackageManager pm) { 153eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (mIcon != 0 && mSourcePackage != null) { 154eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn Drawable icon = pm.getDrawable(mSourcePackage, mIcon, null); 155eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn if (icon != null) { 156eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return icon; 157eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 158eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 159eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return null; 160eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 161eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 162eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public void writeToParcel(Parcel dest, int parcelableFlags) { 163eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn super.writeToParcel(dest, parcelableFlags); 164eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeString(mSourcePackage); 165eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeInt(mLabelRes); 166eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn TextUtils.writeToParcel(mNonLocalizedLabel, dest, parcelableFlags); 167eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn dest.writeInt(mIcon); 168eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 169eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 170eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn /** @hide */ 171eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn protected LabeledIntent(Parcel in) { 172eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn readFromParcel(in); 173eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 174eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 175eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public void readFromParcel(Parcel in) { 176eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn super.readFromParcel(in); 177eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mSourcePackage = in.readString(); 178eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mLabelRes = in.readInt(); 179eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mNonLocalizedLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 180eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn mIcon = in.readInt(); 181eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 182eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 183eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public static final Creator<LabeledIntent> CREATOR 184eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn = new Creator<LabeledIntent>() { 185eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent createFromParcel(Parcel source) { 186eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return new LabeledIntent(source); 187eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 188eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn public LabeledIntent[] newArray(int size) { 189eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn return new LabeledIntent[size]; 190eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn } 191eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn }; 192eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn 193eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn} 194