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

Commit fb938ee7 authored by Julia Reynolds's avatar Julia Reynolds Committed by android-build-merger
Browse files

Merge "Send notification state event more frequently" into oc-dev

am: 13cbd656

Change-Id: I1776c7a7f3a4e221efbb4abde723873802deddf5
parents 246bf5cb 13cbd656
Loading
Loading
Loading
Loading
+53 −44
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.notification;

import static android.app.NotificationManager.IMPORTANCE_MIN;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.content.pm.PackageManager.FEATURE_LEANBACK;
import static android.content.pm.PackageManager.FEATURE_TELEVISION;
@@ -3659,14 +3660,6 @@ public class NotificationManagerService extends SystemService {
                            " intercept=" + record.isIntercepted()
            );

        final int currentUser;
        final long token = Binder.clearCallingIdentity();
        try {
            currentUser = ActivityManager.getCurrentUser();
        } finally {
            Binder.restoreCallingIdentity(token);
        }

        // If we're not supposed to beep, vibrate, etc. then don't.
        final String disableEffects = disableNotificationEffects(record);
        if (disableEffects != null) {
@@ -3676,19 +3669,22 @@ public class NotificationManagerService extends SystemService {
        // Remember if this notification already owns the notification channels.
        boolean wasBeep = key != null && key.equals(mSoundNotificationKey);
        boolean wasBuzz = key != null && key.equals(mVibrateNotificationKey);

        // These are set inside the conditional if the notification is allowed to make noise.
        boolean hasValidVibrate = false;
        boolean hasValidSound = false;

        if (isNotificationForCurrentUser(record)) {
            // If the notification will appear in the status bar, it should send an accessibility
            // event
            if (!record.isUpdate && record.getImportance() > IMPORTANCE_MIN) {
                sendAccessibilityEvent(notification, record.sbn.getPackageName());
            }

            if (disableEffects == null
                && (record.getUserId() == UserHandle.USER_ALL ||
                    record.getUserId() == currentUser ||
                    mUserProfiles.isCurrentProfile(record.getUserId()))
                    && canInterrupt
                    && mSystemReady
                    && mAudioManager != null) {
                if (DBG) Slog.v(TAG, "Interrupting!");

                Uri soundUri = record.getSound();
                hasValidSound = soundUri != null && !Uri.EMPTY.equals(soundUri);
                long[] vibration = record.getVibration();
@@ -3702,8 +3698,6 @@ public class NotificationManagerService extends SystemService {
                hasValidVibrate = vibration != null;

                if (!shouldMuteNotificationLocked(record)) {
                sendAccessibilityEvent(notification, record.sbn.getPackageName());

                    if (hasValidSound) {
                        mSoundNotificationKey = key;
                        if (mInCall) {
@@ -3715,7 +3709,8 @@ public class NotificationManagerService extends SystemService {
                    }

                    final boolean ringerModeSilent =
                        mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT;
                            mAudioManager.getRingerModeInternal()
                                    == AudioManager.RINGER_MODE_SILENT;
                    if (!mInCall && hasValidVibrate && !ringerModeSilent) {
                        mVibrateNotificationKey = key;

@@ -3723,6 +3718,7 @@ public class NotificationManagerService extends SystemService {
                    }
                }
            }
        }
        // If a notification is updated to remove the actively playing sound or vibrate,
        // cancel that feedback now
        if (wasBeep && !hasValidSound) {
@@ -3819,6 +3815,19 @@ public class NotificationManagerService extends SystemService {
        }
    }

    private boolean isNotificationForCurrentUser(NotificationRecord record) {
        final int currentUser;
        final long token = Binder.clearCallingIdentity();
        try {
            currentUser = ActivityManager.getCurrentUser();
        } finally {
            Binder.restoreCallingIdentity(token);
        }
        return (record.getUserId() == UserHandle.USER_ALL ||
                record.getUserId() == currentUser ||
                mUserProfiles.isCurrentProfile(record.getUserId()));
    }

    private void playInCallNotification() {
        new Thread() {
            @Override