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

Commit 445be8c2 authored by Danesh M's avatar Danesh M Committed by Gerrit Code Review
Browse files

AudioDucking : Check session playback state

Use CMAudioManager to listen for session callbacks for
STREAM_MUSIC.
Fixes issue with youtube videos not being detected as active media.

CYNGNOS-3072

Change-Id: Id47d064b28ee6e1ed5320a6a70ec3e3ba5268785
parent 6fd5a73f
Loading
Loading
Loading
Loading
+30 −23
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.END_TAG;
import static org.xmlpull.v1.XmlPullParser.START_TAG;

import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
@@ -64,9 +63,6 @@ import android.media.AudioManager;
import android.media.AudioManagerInternal;
import android.media.AudioSystem;
import android.media.IRingtonePlayer;
import android.media.session.MediaController;
import android.media.session.MediaSessionManager;
import android.media.session.PlaybackState;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -124,6 +120,8 @@ import com.android.server.notification.ManagedServices.ManagedServiceInfo;
import com.android.server.notification.ManagedServices.UserProfiles;
import com.android.server.statusbar.StatusBarManagerInternal;

import cyanogenmod.media.AudioSessionInfo;
import cyanogenmod.media.CMAudioManager;
import cyanogenmod.providers.CMSettings;
import cyanogenmod.util.ColorUtils;

@@ -1096,15 +1094,39 @@ public class NotificationManagerService extends SystemService {
        }
    }

    private BroadcastReceiver mMediaSessionReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            updateForActiveSessions();
        }
    };

    private void updateForActiveSessions() {
        CMAudioManager manager = CMAudioManager.getInstance(getContext());
        List<AudioSessionInfo> sessions = manager.listAudioSessions(AudioManager.STREAM_MUSIC);
        mActiveMedia = false;
        for (AudioSessionInfo sessionInfo : sessions) {
            if (sessionInfo.getSessionId() > 0) {
                mActiveMedia = true;
                break;
            }
        }
    }

    private void updateDisableDucking() {
        if (!mSystemReady) {
            return;
        }
        final MediaSessionManager mediaSessionManager = (MediaSessionManager) getContext()
                .getSystemService(Context.MEDIA_SESSION_SERVICE);
        mediaSessionManager.removeOnActiveSessionsChangedListener(mSessionListener);
        try {
            getContext().unregisterReceiver(mMediaSessionReceiver);
        } catch (IllegalArgumentException e) {
            // Never registered
        }
        if (mDisableDuckingWhileMedia) {
            mediaSessionManager.addOnActiveSessionsChangedListener(mSessionListener, null);
            updateForActiveSessions();
            IntentFilter intentFilter = new IntentFilter(CMAudioManager
                    .ACTION_AUDIO_SESSIONS_CHANGED);
            getContext().registerReceiver(mMediaSessionReceiver, intentFilter);
        }
    }

@@ -2645,21 +2667,6 @@ public class NotificationManagerService extends SystemService {
        return false;
    }

    private MediaSessionManager.OnActiveSessionsChangedListener mSessionListener =
            new MediaSessionManager.OnActiveSessionsChangedListener() {
        @Override
        public void onActiveSessionsChanged(@Nullable List<MediaController> controllers) {
            for (MediaController activeSession : controllers) {
                PlaybackState playbackState = activeSession.getPlaybackState();
                if (playbackState != null && playbackState.getState() == PlaybackState.STATE_PLAYING) {
                    mActiveMedia = true;
                    return;
                }
            }
            mActiveMedia = false;
        }
    };

    private void buzzBeepBlinkLocked(NotificationRecord record) {
        boolean buzz = false;
        boolean beep = false;