From 7f9d814df93d8307d99dd0458f03999d73c5f899 Mon Sep 17 00:00:00 2001 From: Oscar Azucena Date: Tue, 23 Feb 2021 11:29:31 -0800 Subject: [PATCH] Fixed device info reporting for media player Fixed issue relating to audio device information reporting to audio playback configuration. The self routing listener is registered during play start and temporarily remove during stop. Also fixed issue where removing the last audio routing change listener would stop the media player from further reporting device changes to audio playback configuration monitor. Test: atest AudioPlaybackConfigurationTest --rerun-until-failure 100 Bug: 179218630 Change-Id: Iec60b0a2baa6c90aa1e250a66f00675fe9fc6d9d --- media/java/android/media/AudioTrack.java | 7 ++++--- media/java/android/media/MediaPlayer.java | 21 ++++++--------------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index 6fcb75616f0d5..58174a0cf408a 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -3526,8 +3526,9 @@ public class AudioTrack extends PlayerBase native_enableDeviceCallback(); return true; } catch (IllegalStateException e) { - // Fail silently as track state could have changed in between start - // and enabling routing callback, return false to indicate not enabled + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "testEnableNativeRoutingCallbacks failed", e); + } } } return false; @@ -3577,7 +3578,7 @@ public class AudioTrack extends PlayerBase Handler handler) { synchronized (mRoutingChangeListeners) { if (listener != null && !mRoutingChangeListeners.containsKey(listener)) { - testEnableNativeRoutingCallbacksLocked(); + mEnableSelfRoutingMonitor = testEnableNativeRoutingCallbacksLocked(); mRoutingChangeListeners.put( listener, new NativeRoutingEventHandlerDelegate(this, listener, handler != null ? handler : new Handler(mInitializationLooper))); diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index c51c9dd06c24f..35ac3781c561b 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -1358,6 +1358,7 @@ public class MediaPlayer extends PlayerBase private void startImpl() { baseStart(0); // unknown device at this point stayAwake(true); + tryToEnableNativeRoutingCallback(); _start(); } @@ -1383,6 +1384,7 @@ public class MediaPlayer extends PlayerBase stayAwake(false); _stop(); baseStop(); + tryToDisableNativeRoutingCallback(); } private native void _stop() throws IllegalStateException; @@ -1524,8 +1526,9 @@ public class MediaPlayer extends PlayerBase native_enableDeviceCallback(true); return true; } catch (IllegalStateException e) { - // Fail silently as media player state could have changed in between start - // and enabling routing callback, return false to indicate not enabled + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "testEnableNativeRoutingCallbacks failed", e); + } } } return false; @@ -1588,7 +1591,7 @@ public class MediaPlayer extends PlayerBase Handler handler) { synchronized (mRoutingChangeListeners) { if (listener != null && !mRoutingChangeListeners.containsKey(listener)) { - testEnableNativeRoutingCallbacksLocked(); + mEnableSelfRoutingMonitor = testEnableNativeRoutingCallbacksLocked(); mRoutingChangeListeners.put( listener, new NativeRoutingEventHandlerDelegate(this, listener, handler != null ? handler : mEventHandler)); @@ -3481,9 +3484,6 @@ public class MediaPlayer extends PlayerBase case MEDIA_STOPPED: { - tryToDisableNativeRoutingCallback(); - // FIXME see b/179218630 - //baseStop(); TimeProvider timeProvider = mTimeProvider; if (timeProvider != null) { timeProvider.onStopped(); @@ -3492,18 +3492,9 @@ public class MediaPlayer extends PlayerBase break; case MEDIA_STARTED: - { - // FIXME see b/179218630 - //baseStart(native_getRoutedDeviceId()); - tryToEnableNativeRoutingCallback(); - } // fall through case MEDIA_PAUSED: { - // FIXME see b/179218630 - //if (msg.what == MEDIA_PAUSED) { - // basePause(); - //} TimeProvider timeProvider = mTimeProvider; if (timeProvider != null) { timeProvider.onPaused(msg.what == MEDIA_PAUSED);