StatusBarNotification.java revision 1a497d3a2b1496c12949e47e55f8e46d8f585be5
1bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai/* 2bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * Copyright (C) 2008 The Android Open Source Project 3bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * 4bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * Licensed under the Apache License, Version 2.0 (the "License"); 5bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * you may not use this file except in compliance with the License. 6bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * You may obtain a copy of the License at 72251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * 82251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * http://www.apache.org/licenses/LICENSE-2.0 9bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * 1037cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara * Unless required by applicable law or agreed to in writing, software 112d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai * distributed under the License is distributed on an "AS IS" BASIS, 122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * See the License for the specific language governing permissions and 14960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai * limitations under the License. 15960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai */ 16bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 17bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caipackage android.service.notification; 182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaimport android.app.Notification; 202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaimport android.os.Parcel; 21bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caiimport android.os.Parcelable; 222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaimport android.os.UserHandle; 23bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 24bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai/** 252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * Class encapsulating a Notification. Sent by the NotificationManagerService to clients including 26bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai * the status bar and any {@link android.service.notification.NotificationListenerService}s. 27bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai */ 28bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Caipublic class StatusBarNotification implements Parcelable { 29bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai /** The package of the app that posted the notification. */ 302d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai public final String pkg; 312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** The id supplied to {@link android.app.NotificationManager#notify}. */ 322d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai public final int id; 3374cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai /** The tag supplied to {@link android.app.NotificationManager#notify}, or null if no tag 342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * was specified. */ 352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final String tag; 362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** The notifying app's calling uid. @hide */ 382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final int uid; 3974cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai /** The notifying app's base package. @hide */ 4028b58bfdcce253358120d1554755d71c2226f8fdJohn Bates public final String basePkg; 4128b58bfdcce253358120d1554755d71c2226f8fdJohn Bates /** @hide */ 422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final int initialPid; 432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka // TODO: make this field private and move callers to an accessor that 442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka // ensures sourceUser is applied. 452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** The {@link android.app.Notification} supplied to 472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * {@link android.app.NotificationManager#notify}. */ 482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final Notification notification; 492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** The {@link android.os.UserHandle} for whom this notification is intended. */ 502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final UserHandle user; 512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** The time (in {@link System#currentTimeMillis} time) the notification was posted, 522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * which may be different than {@link android.app.Notification#when}. 532251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka */ 542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final long postTime; 552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** @hide */ 572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public final int score; 582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** This is temporarily needed for the JB MR1 PDK. 602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * @hide */ 612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka @Deprecated 622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification(String pkg, int id, String tag, int uid, int initialPid, int score, 632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka Notification notification) { 642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this(pkg, id, tag, uid, initialPid, score, notification, UserHandle.OWNER); 652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** @hide */ 682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification(String pkg, int id, String tag, int uid, int initialPid, int score, 692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka Notification notification, UserHandle user) { 702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this(pkg, null, id, tag, uid, initialPid, score, notification, user); 712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** @hide */ 742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid, 752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int initialPid, int score, Notification notification, UserHandle user) { 762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this(pkg, basePkg, id, tag, uid, initialPid, score, notification, user, 772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka System.currentTimeMillis()); 782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 792251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid, 812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int initialPid, int score, Notification notification, UserHandle user, 822251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka long postTime) { 832251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (pkg == null) throw new NullPointerException(); 842251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (notification == null) throw new NullPointerException(); 852251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 862251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.pkg = pkg; 872251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.basePkg = pkg; 88bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.id = id; 89bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.tag = tag; 902251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.uid = uid; 912251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.initialPid = initialPid; 922251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.score = score; 932251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.notification = notification; 942251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.user = user; 95bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.notification.setUser(user); 962251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.postTime = postTime; 982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification(Parcel in) { 101bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.pkg = in.readString(); 1022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.basePkg = in.readString(); 1032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.id = in.readInt(); 10428b58bfdcce253358120d1554755d71c2226f8fdJohn Bates if (in.readInt() != 0) { 105bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.tag = in.readString(); 1062251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } else { 1072251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.tag = null; 1082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 1092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.uid = in.readInt(); 1102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.initialPid = in.readInt(); 111bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.score = in.readInt(); 1122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.notification = new Notification(in); 1132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.user = UserHandle.readFromParcel(in); 114bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.notification.setUser(this.user); 115bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai this.postTime = in.readLong(); 1162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 117bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 1182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public void writeToParcel(Parcel out, int flags) { 1192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka out.writeString(this.pkg); 12028b58bfdcce253358120d1554755d71c2226f8fdJohn Bates out.writeString(this.basePkg); 12128b58bfdcce253358120d1554755d71c2226f8fdJohn Bates out.writeInt(this.id); 1222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (this.tag != null) { 1232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka out.writeInt(1); 1242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka out.writeString(this.tag); 1252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } else { 12628b58bfdcce253358120d1554755d71c2226f8fdJohn Bates out.writeInt(0); 127bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai } 1282d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai out.writeInt(this.uid); 1292d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai out.writeInt(this.initialPid); 1302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka out.writeInt(this.score); 1312d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai this.notification.writeToParcel(out, flags); 1322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka user.writeToParcel(out, flags); 133960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai 134960bcfffefa76d535c5aecd303d755be3fbc59f1Jiwen 'Steve' Cai out.writeLong(this.postTime); 1352d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 1362d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1372d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai public int describeContents() { 1382d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai return 0; 1392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 1402d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1412d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai public static final Parcelable.Creator<StatusBarNotification> CREATOR 1422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka = new Parcelable.Creator<StatusBarNotification>() 1432d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai { 1442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification createFromParcel(Parcel parcel) 1452d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai { 1462d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai return new StatusBarNotification(parcel); 1472d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 1482d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai 1492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification[] newArray(int size) 1502d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai { 1512d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai return new StatusBarNotification[size]; 1522d82ceb8dc1bc9066bd5ad98ee0926289cb0b7ccJiwen 'Steve' Cai } 153bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai }; 154eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar 1552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka /** 1562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka * @hide 1572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka */ 1582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka public StatusBarNotification cloneLight() { 1592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka final Notification no = new Notification(); 1602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.notification.cloneInto(no, false); // light copy 1612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return new StatusBarNotification(this.pkg, this.basePkg, 1622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.id, this.tag, this.uid, this.initialPid, 1632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.score, no, this.user, this.postTime); 1642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 165108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar 166108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar @Override 167bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai public StatusBarNotification clone() { 168bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai return new StatusBarNotification(this.pkg, this.basePkg, 1692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.id, this.tag, this.uid, this.initialPid, 1702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.score, this.notification.clone(), this.user, this.postTime); 1712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 17284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar 17384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar @Override 17484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar public String toString() { 175bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai return String.format( 176bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai "StatusBarNotification(pkg=%s user=%s id=%d tag=%s score=%d: %s)", 1772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.pkg, this.user, this.id, this.tag, 1782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka this.score, this.notification); 17984d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar } 18084d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar 18184d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar /** Convenience method to check the notification's flags for 18284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar * {@link Notification#FLAG_ONGOING_EVENT}. 18384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar */ 18484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar public boolean isOngoing() { 185bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai return (notification.flags & Notification.FLAG_ONGOING_EVENT) != 0; 186bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai } 18784d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar 18884d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar /** Convenience method to check the notification's flags for 18984d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar * either {@link Notification#FLAG_ONGOING_EVENT} or 19084d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar * {@link Notification#FLAG_NO_CLEAR}. 19184d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar */ 19284d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar public boolean isClearable() { 19384d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar return ((notification.flags & Notification.FLAG_ONGOING_EVENT) == 0) 19484d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar && ((notification.flags & Notification.FLAG_NO_CLEAR) == 0); 19584d90f316c01aadd1e6e0acbc94d51be24ec211fHendrik Wagenaar } 196bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 19737cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara /** Returns a userHandle for the instance of the app that posted this notification. */ 19837cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara public int getUserId() { 19937cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara return this.user.getIdentifier(); 200eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar } 20137cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara} 20237cdc8d0b9803e0c3dc17640534b74cd45fa4bd8Daniel Nicoara