diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java index 9ab1a9ddac738..798915b7286fd 100755 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -51,6 +51,7 @@ import android.os.ServiceManager; import android.os.UserId; import android.os.Vibrator; import android.provider.Settings; +import android.service.dreams.IDreamManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.AtomicFile; @@ -148,6 +149,8 @@ public class NotificationManagerService extends INotificationManager.Stub private AtomicFile mPolicyFile; private HashSet mBlockedPackages = new HashSet(); + private IDreamManager mSandman; + private static final int DB_VERSION = 1; private static final String TAG_BODY = "notification-policy"; @@ -634,6 +637,8 @@ public class NotificationManagerService extends INotificationManager.Stub void systemReady() { mAudioService = IAudioService.Stub.asInterface( ServiceManager.getService(Context.AUDIO_SERVICE)); + mSandman = IDreamManager.Stub.asInterface( + ServiceManager.getService("dreams")); // no beeping until we're basically done booting mSystemReady = true; @@ -972,6 +977,16 @@ public class NotificationManagerService extends INotificationManager.Stub | Notification.FLAG_NO_CLEAR; } + // Stop screensaver if the notification has a full-screen intent. + // (like an incoming phone call) + if (notification.fullScreenIntent != null && mSandman != null) { + try { + mSandman.awaken(); + } catch (RemoteException e) { + // noop + } + } + if (notification.icon != 0) { StatusBarNotification n = new StatusBarNotification(pkg, id, tag, r.uid, r.initialPid, score, notification);