Stop screensaver on incoming phone call.
Use notification manager as an indicator of when to stop the screensaver
due to immediately-needed user interaction.
Any notification with a fullScreenIntent will now exit the screensaver.
Bug: 6976796
Change-Id: Id91cd4c32f3fad018b56f4dfe24b37110bab32d8
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 9ab1a9d..798915b 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -51,6 +51,7 @@
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 @@
private AtomicFile mPolicyFile;
private HashSet<String> mBlockedPackages = new HashSet<String>();
+ private IDreamManager mSandman;
+
private static final int DB_VERSION = 1;
private static final String TAG_BODY = "notification-policy";
@@ -634,6 +637,8 @@
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 @@
| 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);