Loading packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +23 −7 Original line number Diff line number Diff line Loading @@ -843,18 +843,23 @@ class MediaDataManager( } /** * Get a [MediaAction] representing one of * - [PlaybackState.ACTION_PLAY] * - [PlaybackState.ACTION_PAUSE] * - [PlaybackState.ACTION_SKIP_TO_PREVIOUS] * - [PlaybackState.ACTION_SKIP_TO_NEXT] * Create a [MediaAction] for a given action and media session * * @param controller MediaController for the session * @param stateActions The actions included with the session's [PlaybackState] * @param action A [PlaybackState.Actions] value representing what action to generate. One of: * [PlaybackState.ACTION_PLAY] * [PlaybackState.ACTION_PAUSE] * [PlaybackState.ACTION_SKIP_TO_PREVIOUS] * [PlaybackState.ACTION_SKIP_TO_NEXT] * @return A [MediaAction] with correct values set, or null if the state doesn't support it */ private fun getStandardAction( controller: MediaController, stateActions: Long, action: Long @PlaybackState.Actions action: Long ): MediaAction? { if (stateActions and action == 0L) { if (!includesAction(stateActions, action)) { return null } Loading Loading @@ -895,6 +900,17 @@ class MediaDataManager( } } /** * Check whether the actions from a [PlaybackState] include a specific action */ private fun includesAction(stateActions: Long, @PlaybackState.Actions action: Long): Boolean { if ((action == PlaybackState.ACTION_PLAY || action == PlaybackState.ACTION_PAUSE) && (stateActions and PlaybackState.ACTION_PLAY_PAUSE > 0L)) { return true } return (stateActions and action != 0L) } /** * Get a [MediaAction] representing a [PlaybackState.CustomAction] */ Loading packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -780,6 +780,25 @@ class MediaDataManagerTest : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @Test fun testPlaybackActions_playPause_hasButton() { whenever(mediaFlags.areMediaSessionActionsEnabled(any(), any())).thenReturn(true) val stateActions = PlaybackState.ACTION_PLAY_PAUSE val stateBuilder = PlaybackState.Builder().setActions(stateActions) whenever(controller.playbackState).thenReturn(stateBuilder.build()) addNotificationAndLoad() assertThat(mediaDataCaptor.value!!.semanticActions).isNotNull() val actions = mediaDataCaptor.value!!.semanticActions!! assertThat(actions.playOrPause).isNotNull() assertThat(actions.playOrPause!!.contentDescription).isEqualTo( context.getString(R.string.controls_media_button_play)) actions.playOrPause!!.action!!.run() verify(transportControls).play() } @Test fun testPlaybackLocationChange_isLogged() { // Media control added for local playback Loading Loading
packages/SystemUI/src/com/android/systemui/media/MediaDataManager.kt +23 −7 Original line number Diff line number Diff line Loading @@ -843,18 +843,23 @@ class MediaDataManager( } /** * Get a [MediaAction] representing one of * - [PlaybackState.ACTION_PLAY] * - [PlaybackState.ACTION_PAUSE] * - [PlaybackState.ACTION_SKIP_TO_PREVIOUS] * - [PlaybackState.ACTION_SKIP_TO_NEXT] * Create a [MediaAction] for a given action and media session * * @param controller MediaController for the session * @param stateActions The actions included with the session's [PlaybackState] * @param action A [PlaybackState.Actions] value representing what action to generate. One of: * [PlaybackState.ACTION_PLAY] * [PlaybackState.ACTION_PAUSE] * [PlaybackState.ACTION_SKIP_TO_PREVIOUS] * [PlaybackState.ACTION_SKIP_TO_NEXT] * @return A [MediaAction] with correct values set, or null if the state doesn't support it */ private fun getStandardAction( controller: MediaController, stateActions: Long, action: Long @PlaybackState.Actions action: Long ): MediaAction? { if (stateActions and action == 0L) { if (!includesAction(stateActions, action)) { return null } Loading Loading @@ -895,6 +900,17 @@ class MediaDataManager( } } /** * Check whether the actions from a [PlaybackState] include a specific action */ private fun includesAction(stateActions: Long, @PlaybackState.Actions action: Long): Boolean { if ((action == PlaybackState.ACTION_PLAY || action == PlaybackState.ACTION_PAUSE) && (stateActions and PlaybackState.ACTION_PLAY_PAUSE > 0L)) { return true } return (stateActions and action != 0L) } /** * Get a [MediaAction] representing a [PlaybackState.CustomAction] */ Loading
packages/SystemUI/tests/src/com/android/systemui/media/MediaDataManagerTest.kt +19 −0 Original line number Diff line number Diff line Loading @@ -780,6 +780,25 @@ class MediaDataManagerTest : SysuiTestCase() { assertThat(actions.custom1!!.contentDescription).isEqualTo(customDesc[1]) } @Test fun testPlaybackActions_playPause_hasButton() { whenever(mediaFlags.areMediaSessionActionsEnabled(any(), any())).thenReturn(true) val stateActions = PlaybackState.ACTION_PLAY_PAUSE val stateBuilder = PlaybackState.Builder().setActions(stateActions) whenever(controller.playbackState).thenReturn(stateBuilder.build()) addNotificationAndLoad() assertThat(mediaDataCaptor.value!!.semanticActions).isNotNull() val actions = mediaDataCaptor.value!!.semanticActions!! assertThat(actions.playOrPause).isNotNull() assertThat(actions.playOrPause!!.contentDescription).isEqualTo( context.getString(R.string.controls_media_button_play)) actions.playOrPause!!.action!!.run() verify(transportControls).play() } @Test fun testPlaybackLocationChange_isLogged() { // Media control added for local playback Loading