[Media ML] Replace AudioSystem.isActiveStream
AudioSystem.isActiveStream is a hidden API. Replace it with getting all audio playback configurations using AudioManager.getActivePlaybackConfigurations and checking if the given stream exists among them. Bug: 169386435 Test: Manually checked that volume key works properly while alarm/music audio is active Change-Id: I096b28a741353b7a3a93f7e6a73177d29b6d2748
This commit is contained in:
@@ -18,6 +18,9 @@ package com.android.server.media;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioPlaybackConfiguration;
|
||||
import android.os.Binder;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -29,7 +32,7 @@ class MediaServerUtils {
|
||||
/**
|
||||
* Verify that caller holds {@link android.Manifest.permission#DUMP}.
|
||||
*/
|
||||
public static boolean checkDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
static boolean checkDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
if (context.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
pw.println("Permission Denial: can't dump " + tag + " from from pid="
|
||||
@@ -40,4 +43,18 @@ class MediaServerUtils {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the given stream is currently active or not.
|
||||
*/
|
||||
static boolean isStreamActive(AudioManager audioManager, int stream) {
|
||||
for (AudioPlaybackConfiguration configuration
|
||||
: audioManager.getActivePlaybackConfigurations()) {
|
||||
AudioAttributes attributes = configuration.getAudioAttributes();
|
||||
if (attributes != null && attributes.getVolumeControlStream() == stream) {
|
||||
return configuration.isActive();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.content.Intent;
|
||||
import android.content.pm.ParceledListSlice;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioSystem;
|
||||
import android.media.MediaMetadata;
|
||||
import android.media.Rating;
|
||||
import android.media.VolumeProvider;
|
||||
@@ -513,7 +512,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR
|
||||
public void run() {
|
||||
try {
|
||||
if (useSuggested) {
|
||||
if (AudioSystem.isStreamActive(stream, 0)) {
|
||||
if (MediaServerUtils.isStreamActive(mAudioManager, stream)) {
|
||||
mAudioManager.adjustSuggestedStreamVolumeForUid(stream,
|
||||
direction, flags, opPackageName, uid, pid,
|
||||
mContext.getApplicationInfo().targetSdkVersion);
|
||||
|
||||
@@ -43,7 +43,6 @@ import android.content.pm.ParceledListSlice;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioPlaybackConfiguration;
|
||||
import android.media.AudioSystem;
|
||||
import android.media.IRemoteVolumeControllerCallback;
|
||||
import android.media.Session2Token;
|
||||
import android.media.session.IActiveSessionsListener;
|
||||
@@ -2019,7 +2018,7 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
|
||||
boolean preferSuggestedStream = false;
|
||||
if (isValidLocalStreamType(suggestedStream)
|
||||
&& AudioSystem.isStreamActive(suggestedStream, 0)) {
|
||||
&& MediaServerUtils.isStreamActive(mAudioManager, suggestedStream)) {
|
||||
preferSuggestedStream = true;
|
||||
}
|
||||
if (session == null || preferSuggestedStream) {
|
||||
@@ -2028,7 +2027,8 @@ public class MediaSessionService extends SystemService implements Monitor {
|
||||
+ ". flags=" + flags + ", preferSuggestedStream="
|
||||
+ preferSuggestedStream + ", session=" + session);
|
||||
}
|
||||
if (musicOnly && !AudioSystem.isStreamActive(AudioManager.STREAM_MUSIC, 0)) {
|
||||
if (musicOnly && !MediaServerUtils.isStreamActive(mAudioManager,
|
||||
AudioManager.STREAM_MUSIC)) {
|
||||
if (DEBUG_KEY_EVENT) {
|
||||
Log.d(TAG, "Nothing is playing on the music stream. Skipping volume event,"
|
||||
+ " flags=" + flags);
|
||||
|
||||
Reference in New Issue
Block a user