blob: 6541c54edb5f6ff770828c9ec4d95ad84371569b [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2007 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
17package android.app;
18
19import android.content.Context;
Daniel Sandlerd0a2f862010-08-03 15:29:31 -040020import android.os.Binder;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080021import android.os.RemoteException;
22import android.os.Handler;
23import android.os.IBinder;
24import android.os.ServiceManager;
25import android.util.Log;
26
27/**
28 * Class to notify the user of events that happen. This is how you tell
29 * the user that something has happened in the background. {@more}
30 *
31 * Notifications can take different forms:
32 * <ul>
33 * <li>A persistent icon that goes in the status bar and is accessible
34 * through the launcher, (when the user selects it, a designated Intent
35 * can be launched),</li>
36 * <li>Turning on or flashing LEDs on the device, or</li>
37 * <li>Alerting the user by flashing the backlight, playing a sound,
38 * or vibrating.</li>
39 * </ul>
40 *
41 * <p>
Peter Collingbourneb97c3492010-10-13 20:04:52 +010042 * Each of the notify methods takes an int id parameter and optionally a
43 * {@link String} tag parameter, which may be {@code null}. These parameters
44 * are used to form a pair (tag, id), or ({@code null}, id) if tag is
45 * unspecified. This pair identifies this notification from your app to the
46 * system, so that pair should be unique within your app. If you call one
47 * of the notify methods with a (tag, id) pair that is currently active and
48 * a new set of notification parameters, it will be updated. For example,
49 * if you pass a new status bar icon, the old icon in the status bar will
50 * be replaced with the new one. This is also the same tag and id you pass
51 * to the {@link #cancel(int)} or {@link #cancel(String, int)} method to clear
52 * this notification.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053 *
54 * <p>
55 * You do not instantiate this class directly; instead, retrieve it through
56 * {@link android.content.Context#getSystemService}.
57 *
58 * @see android.app.Notification
59 * @see android.content.Context#getSystemService
60 */
61public class NotificationManager
62{
63 private static String TAG = "NotificationManager";
64 private static boolean DEBUG = false;
65 private static boolean localLOGV = DEBUG || android.util.Config.LOGV;
66
67 private static INotificationManager sService;
68
Dianne Hackbornd8a43f62009-08-17 23:33:56 -070069 /** @hide */
70 static public INotificationManager getService()
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080071 {
72 if (sService != null) {
73 return sService;
74 }
75 IBinder b = ServiceManager.getService("notification");
76 sService = INotificationManager.Stub.asInterface(b);
77 return sService;
78 }
79
80 /*package*/ NotificationManager(Context context, Handler handler)
81 {
82 mContext = context;
83 }
84
85 /**
Daniel Sandlere97a3bc2011-02-07 16:47:07 -050086 * Post a notification to be shown in the status bar. If a notification with
87 * the same id has already been posted by your application and has not yet been canceled, it
88 * will be replaced by the updated information.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080089 *
90 * @param id An identifier for this notification unique within your
91 * application.
Daniel Sandlere97a3bc2011-02-07 16:47:07 -050092 * @param notification A {@link Notification} object describing what to show the user. Must not
93 * be null.
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080094 */
95 public void notify(int id, Notification notification)
96 {
Fred Quintana6ecaff12009-09-25 14:23:13 -070097 notify(null, id, notification);
98 }
99
100 /**
Daniel Sandlere97a3bc2011-02-07 16:47:07 -0500101 * Post a notification to be shown in the status bar. If a notification with
102 * the same tag and id has already been posted by your application and has not yet been
103 * canceled, it will be replaced by the updated information.
Fred Quintana6ecaff12009-09-25 14:23:13 -0700104 *
Peter Collingbourneb97c3492010-10-13 20:04:52 +0100105 * @param tag A string identifier for this notification. May be {@code null}.
106 * @param id An identifier for this notification. The pair (tag, id) must be unique
107 * within your application.
Daniel Sandlere97a3bc2011-02-07 16:47:07 -0500108 * @param notification A {@link Notification} object describing what to
109 * show the user. Must not be null.
Fred Quintana6ecaff12009-09-25 14:23:13 -0700110 */
111 public void notify(String tag, int id, Notification notification)
112 {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800113 int[] idOut = new int[1];
114 INotificationManager service = getService();
115 String pkg = mContext.getPackageName();
116 if (localLOGV) Log.v(TAG, pkg + ": notify(" + id + ", " + notification + ")");
117 try {
Fred Quintana6ecaff12009-09-25 14:23:13 -0700118 service.enqueueNotificationWithTag(pkg, tag, id, notification, idOut);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800119 if (id != idOut[0]) {
120 Log.w(TAG, "notify: id corrupted: sent " + id + ", got back " + idOut[0]);
121 }
122 } catch (RemoteException e) {
123 }
124 }
125
126 /**
127 * Cancel a previously shown notification. If it's transient, the view
128 * will be hidden. If it's persistent, it will be removed from the status
129 * bar.
130 */
131 public void cancel(int id)
132 {
Fred Quintana6ecaff12009-09-25 14:23:13 -0700133 cancel(null, id);
134 }
135
136 /**
137 * Cancel a previously shown notification. If it's transient, the view
138 * will be hidden. If it's persistent, it will be removed from the status
139 * bar.
140 */
141 public void cancel(String tag, int id)
142 {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800143 INotificationManager service = getService();
144 String pkg = mContext.getPackageName();
145 if (localLOGV) Log.v(TAG, pkg + ": cancel(" + id + ")");
146 try {
Fred Quintana6ecaff12009-09-25 14:23:13 -0700147 service.cancelNotificationWithTag(pkg, tag, id);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800148 } catch (RemoteException e) {
149 }
150 }
151
152 /**
153 * Cancel all previously shown notifications. See {@link #cancel} for the
154 * detailed behavior.
155 */
156 public void cancelAll()
157 {
158 INotificationManager service = getService();
159 String pkg = mContext.getPackageName();
160 if (localLOGV) Log.v(TAG, pkg + ": cancelAll()");
161 try {
162 service.cancelAllNotifications(pkg);
163 } catch (RemoteException e) {
164 }
165 }
166
167 private Context mContext;
168}