118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato/* 218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * Copyright (C) 2008 The Android Open Source Project 318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * 418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * you may not use this file except in compliance with the License. 618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * You may obtain a copy of the License at 718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * 818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * http://www.apache.org/licenses/LICENSE-2.0 918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * 1018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * Unless required by applicable law or agreed to in writing, software 1118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 1218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * See the License for the specific language governing permissions and 1418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato * limitations under the License. 1518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato */ 1618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 175feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandlerpackage android.service.notification; 1818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 1918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onoratoimport android.app.Notification; 2068079d54f3690885df9c5bbb691090633f3ef541Dan Sandlerimport android.content.Context; 2168079d54f3690885df9c5bbb691090633f3ef541Dan Sandlerimport android.content.pm.ApplicationInfo; 2268079d54f3690885df9c5bbb691090633f3ef541Dan Sandlerimport android.content.pm.PackageManager; 2318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onoratoimport android.os.Parcel; 2418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onoratoimport android.os.Parcelable; 25f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle; 2618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 272561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler/** 28fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler * Class encapsulating a Notification. Sent by the NotificationManagerService to clients including 295feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler * the status bar and any {@link android.service.notification.NotificationListenerService}s. 302561b0b10a55841a08e0e1d467e73e10b1bf256dDaniel Sandler */ 3118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onoratopublic class StatusBarNotification implements Parcelable { 32e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final String pkg; 33e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final int id; 34e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final String tag; 35a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock private final String key; 36e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds private String groupKey; 37e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds private String overrideGroupKey; 385feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler 39e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final int uid; 408fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer private final String opPkg; 41e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final int initialPid; 42e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final Notification notification; 43e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final UserHandle user; 44e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler private final long postTime; 456d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey 4668079d54f3690885df9c5bbb691090633f3ef541Dan Sandler private Context mContext; // used for inflation & icon expansion 475feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler 485feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler /** @hide */ 498fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid, 50fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler int initialPid, int score, Notification notification, UserHandle user) { 518fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer this(pkg, opPkg, id, tag, uid, initialPid, score, notification, user, 52fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler System.currentTimeMillis()); 53fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler } 54fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler 55e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds /** @hide */ 56e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid, 57e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds int initialPid, Notification notification, UserHandle user, String overrideGroupKey, 58e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds long postTime) { 59e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (pkg == null) throw new NullPointerException(); 60e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (notification == null) throw new NullPointerException(); 61e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds 62e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.pkg = pkg; 63e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.opPkg = opPkg; 64e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.id = id; 65e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.tag = tag; 66e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.uid = uid; 67e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.initialPid = initialPid; 68e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.notification = notification; 69e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.user = user; 70e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.postTime = postTime; 71e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.overrideGroupKey = overrideGroupKey; 72e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.key = key(); 73e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.groupKey = groupKey(); 74e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 75e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds 768fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid, 77fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler int initialPid, int score, Notification notification, UserHandle user, 78fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler long postTime) { 7918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (pkg == null) throw new NullPointerException(); 8018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (notification == null) throw new NullPointerException(); 8118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 8218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.pkg = pkg; 838fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer this.opPkg = opPkg; 8418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.id = id; 8518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.tag = tag; 869d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn this.uid = uid; 879d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn this.initialPid = initialPid; 8818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.notification = notification; 896d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey this.user = user; 90fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler this.postTime = postTime; 91a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock this.key = key(); 921031c974855ff4117a6d7866e664295786840319Chris Wren this.groupKey = groupKey(); 9318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 9418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 9518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public StatusBarNotification(Parcel in) { 9618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.pkg = in.readString(); 978fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer this.opPkg = in.readString(); 9818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.id = in.readInt(); 9918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (in.readInt() != 0) { 10018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.tag = in.readString(); 10118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } else { 10218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.tag = null; 10318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 1049d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn this.uid = in.readInt(); 1059d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn this.initialPid = in.readInt(); 10618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.notification = new Notification(in); 1076d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey this.user = UserHandle.readFromParcel(in); 108fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler this.postTime = in.readLong(); 109e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (in.readInt() != 0) { 110e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.overrideGroupKey = in.readString(); 111e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } else { 112e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.overrideGroupKey = null; 113e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 114a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock this.key = key(); 1151031c974855ff4117a6d7866e664295786840319Chris Wren this.groupKey = groupKey(); 116a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock } 117a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock 118a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock private String key() { 119e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds String sbnKey = user.getIdentifier() + "|" + pkg + "|" + id + "|" + tag + "|" + uid; 120e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (overrideGroupKey != null && getNotification().isGroupSummary()) { 121e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds sbnKey = sbnKey + "|" + overrideGroupKey; 122e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 123e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds return sbnKey; 12418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 12518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 1261031c974855ff4117a6d7866e664295786840319Chris Wren private String groupKey() { 127e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (overrideGroupKey != null) { 128e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds return user.getIdentifier() + "|" + pkg + "|" + "g:" + overrideGroupKey; 129e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 1301031c974855ff4117a6d7866e664295786840319Chris Wren final String group = getNotification().getGroup(); 1311031c974855ff4117a6d7866e664295786840319Chris Wren final String sortKey = getNotification().getSortKey(); 1321031c974855ff4117a6d7866e664295786840319Chris Wren if (group == null && sortKey == null) { 1331031c974855ff4117a6d7866e664295786840319Chris Wren // a group of one 1341031c974855ff4117a6d7866e664295786840319Chris Wren return key; 1351031c974855ff4117a6d7866e664295786840319Chris Wren } 1361031c974855ff4117a6d7866e664295786840319Chris Wren return user.getIdentifier() + "|" + pkg + "|" + 1371031c974855ff4117a6d7866e664295786840319Chris Wren (group == null 1381031c974855ff4117a6d7866e664295786840319Chris Wren ? "p:" + notification.priority 1391031c974855ff4117a6d7866e664295786840319Chris Wren : "g:" + group); 1401031c974855ff4117a6d7866e664295786840319Chris Wren } 1411031c974855ff4117a6d7866e664295786840319Chris Wren 142e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds /** 143e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds * Returns true if this notification is part of a group. 144e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds */ 145e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds public boolean isGroup() { 1468a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren if (overrideGroupKey != null || isAppGroup()) { 1478a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren return true; 1488a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren } 1498a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren return false; 1508a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren } 1518a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren 1528a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren /** 1538a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren * Returns true if application asked that this notification be part of a group. 1548a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren * @hide 1558a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren */ 1568a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren public boolean isAppGroup() { 1578a1638f66a79dbf471e7e53294ba853b862434e6Chris Wren if (getNotification().getGroup() != null || getNotification().getSortKey() != null) { 158e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds return true; 159e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 160e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds return false; 161e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 162e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds 16318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public void writeToParcel(Parcel out, int flags) { 16418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato out.writeString(this.pkg); 1658fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer out.writeString(this.opPkg); 16618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato out.writeInt(this.id); 16718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato if (this.tag != null) { 16818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato out.writeInt(1); 16918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato out.writeString(this.tag); 17018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } else { 17118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato out.writeInt(0); 17218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 1739d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn out.writeInt(this.uid); 1749d39d0cb361c5d3bba04a6bacf299be2162a6e92Dianne Hackborn out.writeInt(this.initialPid); 17518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato this.notification.writeToParcel(out, flags); 1766d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey user.writeToParcel(out, flags); 177fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler 178fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler out.writeLong(this.postTime); 179e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds if (this.overrideGroupKey != null) { 180e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds out.writeInt(1); 181e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds out.writeString(this.overrideGroupKey); 182e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } else { 183e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds out.writeInt(0); 184e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 18518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 18618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 18718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public int describeContents() { 18818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato return 0; 18918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 19018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 19118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public static final Parcelable.Creator<StatusBarNotification> CREATOR 19218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato = new Parcelable.Creator<StatusBarNotification>() 19318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato { 19418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public StatusBarNotification createFromParcel(Parcel parcel) 19518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato { 19618e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato return new StatusBarNotification(parcel); 19718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 19818e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 19918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public StatusBarNotification[] newArray(int size) 20018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato { 20118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato return new StatusBarNotification[size]; 20218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 20318e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato }; 20418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 2051a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler /** 2061a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler * @hide 2071a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler */ 2081a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler public StatusBarNotification cloneLight() { 2091a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler final Notification no = new Notification(); 2101a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler this.notification.cloneInto(no, false); // light copy 2118fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer return new StatusBarNotification(this.pkg, this.opPkg, 2121a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler this.id, this.tag, this.uid, this.initialPid, 213e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds no, this.user, this.overrideGroupKey, this.postTime); 2141a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler } 2151a497d3a2b1496c12949e47e55f8e46d8f585be5Daniel Sandler 2166d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey @Override 21718e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public StatusBarNotification clone() { 2188fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer return new StatusBarNotification(this.pkg, this.opPkg, 219fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler this.id, this.tag, this.uid, this.initialPid, 220e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.notification.clone(), this.user, this.overrideGroupKey, this.postTime); 22118e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 22218e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 2236d51571835737c7502a2e111ee9dc2527ebad984Jeff Sharkey @Override 22418e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato public String toString() { 225fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler return String.format( 226e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds "StatusBarNotification(pkg=%s user=%s id=%d tag=%s key=%s: %s)", 227fde19b106b2b77bc3540b04445357870caf878b5Daniel Sandler this.pkg, this.user, this.id, this.tag, 228e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.key, this.notification); 22918e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato } 23018e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato 2315feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler /** Convenience method to check the notification's flags for 2325feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler * {@link Notification#FLAG_ONGOING_EVENT}. 2335feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler */ 234e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato public boolean isOngoing() { 235e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato return (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0; 236e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato } 237e345fff2f80947b0a821f6674c197a02b7bff08eJoe Onorato 2385feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler /** Convenience method to check the notification's flags for 2395feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler * either {@link Notification#FLAG_ONGOING_EVENT} or 2405feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler * {@link Notification#FLAG_NO_CLEAR}. 2415feceebb892d4cb5777cea3c6174b206705d456bDaniel Sandler */ 2425dd1169ae95162383acf00d1e9a1886e0ac99a70Joe Onorato public boolean isClearable() { 2435dd1169ae95162383acf00d1e9a1886e0ac99a70Joe Onorato return ((notification.flags & Notification.FLAG_ONGOING_EVENT) == 0) 2445dd1169ae95162383acf00d1e9a1886e0ac99a70Joe Onorato && ((notification.flags & Notification.FLAG_NO_CLEAR) == 0); 2455dd1169ae95162383acf00d1e9a1886e0ac99a70Joe Onorato } 246b9301c3a686df05950710ec80e2cd691c3082871Daniel Sandler 247a263e4e438746f91fb78857bd569ba4f796a346dKenny Guy /** 248a263e4e438746f91fb78857bd569ba4f796a346dKenny Guy * Returns a userHandle for the instance of the app that posted this notification. 249a263e4e438746f91fb78857bd569ba4f796a346dKenny Guy * 250a263e4e438746f91fb78857bd569ba4f796a346dKenny Guy * @deprecated Use {@link #getUser()} instead. 251a263e4e438746f91fb78857bd569ba4f796a346dKenny Guy */ 252b9301c3a686df05950710ec80e2cd691c3082871Daniel Sandler public int getUserId() { 25350cdf7c3069eb2cf82acbad73c322b7a5f3af4b1Dianne Hackborn return this.user.getIdentifier(); 254b9301c3a686df05950710ec80e2cd691c3082871Daniel Sandler } 255e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 256e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** The package of the app that posted the notification. */ 2574f91efdf421e354ee2033ed640e4150cf0cef21bDaniel Sandler public String getPackageName() { 258e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return pkg; 259e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 260e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 26126510320646339fc59e01d392f96efeeac6d91ddScott Main /** The id supplied to {@link android.app.NotificationManager#notify(int,Notification)}. */ 262e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public int getId() { 263e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return id; 264e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 265e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 26626510320646339fc59e01d392f96efeeac6d91ddScott Main /** The tag supplied to {@link android.app.NotificationManager#notify(int,Notification)}, 26726510320646339fc59e01d392f96efeeac6d91ddScott Main * or null if no tag was specified. */ 268e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public String getTag() { 269e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return tag; 270e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 271e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 272e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** The notifying app's calling uid. @hide */ 273e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public int getUid() { 274e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return uid; 275e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 276e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 2778fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer /** The package used for AppOps tracking. @hide */ 2788fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer public String getOpPkg() { 2798fd7f1ed7c11d35b3f2a97878e68ee38a551dd15Christoph Studer return opPkg; 280e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 281e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 282e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** @hide */ 283e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public int getInitialPid() { 284e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return initialPid; 285e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 286e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 287e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** The {@link android.app.Notification} supplied to 28826510320646339fc59e01d392f96efeeac6d91ddScott Main * {@link android.app.NotificationManager#notify(int,Notification)}. */ 289e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public Notification getNotification() { 290e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return notification; 291e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 292e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 293e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** 294e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler * The {@link android.os.UserHandle} for whom this notification is intended. 295e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler */ 296e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public UserHandle getUser() { 297e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return user; 298e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 299e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 300e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler /** The time (in {@link System#currentTimeMillis} time) the notification was posted, 301e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler * which may be different than {@link android.app.Notification#when}. 302e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler */ 303e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler public long getPostTime() { 304e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler return postTime; 305e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler } 306e6f7f2e3a01b8deb00e03ccfa93751c315f14ef0Daniel Sandler 307a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock /** 308a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock * A unique instance key for this notification record. 309a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock */ 310a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock public String getKey() { 311a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock return key; 312a4294297d46cc0b9f45897bc688c267502cce3efJohn Spurlock } 3131031c974855ff4117a6d7866e664295786840319Chris Wren 3141031c974855ff4117a6d7866e664295786840319Chris Wren /** 3151031c974855ff4117a6d7866e664295786840319Chris Wren * A key that indicates the group with which this message ranks. 3161031c974855ff4117a6d7866e664295786840319Chris Wren */ 3171031c974855ff4117a6d7866e664295786840319Chris Wren public String getGroupKey() { 3181031c974855ff4117a6d7866e664295786840319Chris Wren return groupKey; 3191031c974855ff4117a6d7866e664295786840319Chris Wren } 32068079d54f3690885df9c5bbb691090633f3ef541Dan Sandler 32168079d54f3690885df9c5bbb691090633f3ef541Dan Sandler /** 322e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds * Sets the override group key. 323e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds */ 324e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds public void setOverrideGroupKey(String overrideGroupKey) { 325e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds this.overrideGroupKey = overrideGroupKey; 326e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds groupKey = groupKey(); 327e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 328e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds 329e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds /** 330e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds * Returns the override group key. 331e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds */ 332e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds public String getOverrideGroupKey() { 333e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds return overrideGroupKey; 334e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds } 335e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds 336e46bb37acf6d3cfb9974672ace93f5381f70ad99Julia Reynolds /** 33768079d54f3690885df9c5bbb691090633f3ef541Dan Sandler * @hide 33868079d54f3690885df9c5bbb691090633f3ef541Dan Sandler */ 33968079d54f3690885df9c5bbb691090633f3ef541Dan Sandler public Context getPackageContext(Context context) { 34068079d54f3690885df9c5bbb691090633f3ef541Dan Sandler if (mContext == null) { 34168079d54f3690885df9c5bbb691090633f3ef541Dan Sandler try { 34268079d54f3690885df9c5bbb691090633f3ef541Dan Sandler ApplicationInfo ai = context.getPackageManager() 34368079d54f3690885df9c5bbb691090633f3ef541Dan Sandler .getApplicationInfo(pkg, PackageManager.GET_UNINSTALLED_PACKAGES); 34468079d54f3690885df9c5bbb691090633f3ef541Dan Sandler mContext = context.createApplicationContext(ai, 34568079d54f3690885df9c5bbb691090633f3ef541Dan Sandler Context.CONTEXT_RESTRICTED); 34668079d54f3690885df9c5bbb691090633f3ef541Dan Sandler } catch (PackageManager.NameNotFoundException e) { 34768079d54f3690885df9c5bbb691090633f3ef541Dan Sandler mContext = null; 34868079d54f3690885df9c5bbb691090633f3ef541Dan Sandler } 34968079d54f3690885df9c5bbb691090633f3ef541Dan Sandler } 35068079d54f3690885df9c5bbb691090633f3ef541Dan Sandler if (mContext == null) { 35168079d54f3690885df9c5bbb691090633f3ef541Dan Sandler mContext = context; 35268079d54f3690885df9c5bbb691090633f3ef541Dan Sandler } 35368079d54f3690885df9c5bbb691090633f3ef541Dan Sandler return mContext; 35468079d54f3690885df9c5bbb691090633f3ef541Dan Sandler } 35518e69dfc7235f8a4bfe257f9d1c43539049a22ceJoe Onorato} 356