Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7be1a3d6 authored by John Spurlock's avatar John Spurlock
Browse files

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
parent 38cc2a5a
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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<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 @@ 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);