From 15e30053864664db41270066675b323a21c338c8 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Wed, 9 Dec 2020 11:54:00 -0800 Subject: [PATCH] AudioManager: fix implementation of isMusicActive() Implementation of isMusicActive() should go through AudioService as AudioSystem.isStreamActive() can only be called from system service. Bug: 175084989 Bug: 162423060 Test: atest AudioManagerTest Change-Id: I15b3f7cd082a7497f857e6bf261f933224da853e --- media/java/android/media/AudioManager.java | 7 ++++++- media/java/android/media/IAudioService.aidl | 2 ++ .../core/java/com/android/server/audio/AudioService.java | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 457888361f737..c67d90a5ea0fb 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -2881,7 +2881,12 @@ public class AudioManager { * @return true if any music tracks are active. */ public boolean isMusicActive() { - return AudioSystem.isStreamActive(STREAM_MUSIC, 0); + final IAudioService service = getService(); + try { + return service.isMusicActive(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } } /** diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 5c012bef9a681..2ac5b5088d988 100755 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -334,4 +334,6 @@ interface IAudioService { oneway void setStreamVolumeForUid(int streamType, int direction, int flags, in String packageName, int uid, int pid, in UserHandle userHandle, int targetSdkVersion); + + boolean isMusicActive(); } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index af007312169b7..6bc927a5176fc 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -2108,6 +2108,12 @@ public class AudioService extends IAudioService.Stub return getDevicesForAttributesInt(attributes); } + /** @see AudioManager#isMusicActive() */ + public boolean isMusicActive() { + // no permission required + return AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC, 0); + } + protected @NonNull ArrayList getDevicesForAttributesInt( @NonNull AudioAttributes attributes) { Objects.requireNonNull(attributes);