blob: ae41252bc56772ebd4da448f69d604a2120a4359 [file] [log] [blame]
Kenny Root15a4d2f2010-03-11 18:20:12 -08001/*
2 * Copyright (C) 2009 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
Dianne Hackborneb034652009-09-07 00:49:58 -070017package android.content.pm;
18
19import android.content.Intent;
20import android.graphics.drawable.Drawable;
21import android.os.Parcel;
22import android.text.TextUtils;
23
24/**
25 * A special subclass of Intent that can have a custom label/icon
26 * associated with it. Primarily for use with {@link Intent#ACTION_CHOOSER}.
27 */
28public class LabeledIntent extends Intent {
29 private String mSourcePackage;
30 private int mLabelRes;
31 private CharSequence mNonLocalizedLabel;
32 private int mIcon;
33
34 /**
35 * Create a labeled intent from the given intent, supplying the label
36 * and icon resources for it.
37 *
38 * @param origIntent The original Intent to copy.
39 * @param sourcePackage The package in which the label and icon live.
40 * @param labelRes Resource containing the label, or 0 if none.
41 * @param icon Resource containing the icon, or 0 if none.
42 */
43 public LabeledIntent(Intent origIntent, String sourcePackage,
44 int labelRes, int icon) {
45 super(origIntent);
46 mSourcePackage = sourcePackage;
47 mLabelRes = labelRes;
48 mNonLocalizedLabel = null;
49 mIcon = icon;
50 }
51
52 /**
53 * Create a labeled intent from the given intent, supplying a textual
54 * label and icon resource for it.
55 *
56 * @param origIntent The original Intent to copy.
57 * @param sourcePackage The package in which the label and icon live.
58 * @param nonLocalizedLabel Concrete text to use for the label.
59 * @param icon Resource containing the icon, or 0 if none.
60 */
61 public LabeledIntent(Intent origIntent, String sourcePackage,
62 CharSequence nonLocalizedLabel, int icon) {
63 super(origIntent);
64 mSourcePackage = sourcePackage;
65 mLabelRes = 0;
66 mNonLocalizedLabel = nonLocalizedLabel;
67 mIcon = icon;
68 }
69
70 /**
71 * Create a labeled intent with no intent data but supplying the label
72 * and icon resources for it.
73 *
74 * @param sourcePackage The package in which the label and icon live.
75 * @param labelRes Resource containing the label, or 0 if none.
76 * @param icon Resource containing the icon, or 0 if none.
77 */
78 public LabeledIntent(String sourcePackage, int labelRes, int icon) {
79 mSourcePackage = sourcePackage;
80 mLabelRes = labelRes;
81 mNonLocalizedLabel = null;
82 mIcon = icon;
83 }
84
85 /**
86 * Create a labeled intent with no intent data but supplying a textual
87 * label and icon resource for it.
88 *
89 * @param sourcePackage The package in which the label and icon live.
90 * @param nonLocalizedLabel Concrete text to use for the label.
91 * @param icon Resource containing the icon, or 0 if none.
92 */
93 public LabeledIntent(String sourcePackage,
94 CharSequence nonLocalizedLabel, int icon) {
95 mSourcePackage = sourcePackage;
96 mLabelRes = 0;
97 mNonLocalizedLabel = nonLocalizedLabel;
98 mIcon = icon;
99 }
100
101 /**
102 * Return the name of the package holding label and icon resources.
103 */
104 public String getSourcePackage() {
105 return mSourcePackage;
106 }
107
108 /**
109 * Return any resource identifier that has been given for the label text.
110 */
111 public int getLabelResource() {
112 return mLabelRes;
113 }
114
115 /**
116 * Return any concrete text that has been given for the label text.
117 */
118 public CharSequence getNonLocalizedLabel() {
119 return mNonLocalizedLabel;
120 }
121
122 /**
123 * Return any resource identifier that has been given for the label icon.
124 */
125 public int getIconResource() {
126 return mIcon;
127 }
128
129 /**
130 * Retrieve the label associated with this object. If the object does
131 * not have a label, null will be returned, in which case you will probably
132 * want to load the label from the underlying resolved info for the Intent.
133 */
134 public CharSequence loadLabel(PackageManager pm) {
135 if (mNonLocalizedLabel != null) {
136 return mNonLocalizedLabel;
137 }
138 if (mLabelRes != 0 && mSourcePackage != null) {
139 CharSequence label = pm.getText(mSourcePackage, mLabelRes, null);
140 if (label != null) {
141 return label;
142 }
143 }
144 return null;
145 }
146
147 /**
148 * Retrieve the icon associated with this object. If the object does
149 * not have a icon, null will be returned, in which case you will probably
150 * want to load the icon from the underlying resolved info for the Intent.
151 */
152 public Drawable loadIcon(PackageManager pm) {
153 if (mIcon != 0 && mSourcePackage != null) {
154 Drawable icon = pm.getDrawable(mSourcePackage, mIcon, null);
155 if (icon != null) {
156 return icon;
157 }
158 }
159 return null;
160 }
161
162 public void writeToParcel(Parcel dest, int parcelableFlags) {
163 super.writeToParcel(dest, parcelableFlags);
164 dest.writeString(mSourcePackage);
165 dest.writeInt(mLabelRes);
166 TextUtils.writeToParcel(mNonLocalizedLabel, dest, parcelableFlags);
167 dest.writeInt(mIcon);
168 }
169
170 /** @hide */
171 protected LabeledIntent(Parcel in) {
172 readFromParcel(in);
173 }
174
175 public void readFromParcel(Parcel in) {
176 super.readFromParcel(in);
177 mSourcePackage = in.readString();
178 mLabelRes = in.readInt();
179 mNonLocalizedLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
180 mIcon = in.readInt();
181 }
182
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -0700183 public static final @android.annotation.NonNull Creator<LabeledIntent> CREATOR
Dianne Hackborneb034652009-09-07 00:49:58 -0700184 = new Creator<LabeledIntent>() {
185 public LabeledIntent createFromParcel(Parcel source) {
186 return new LabeledIntent(source);
187 }
188 public LabeledIntent[] newArray(int size) {
189 return new LabeledIntent[size];
190 }
191 };
192
193}