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

Commit 86075764 authored by Jakub Rotkiewicz's avatar Jakub Rotkiewicz
Browse files

PTS test for AVRCP Player Settings Changed

AVRCP/TG/NFY/BV-03-C ICS: 7_30
Added functions to start/stop mp3 playback, that is required to play
during changing of the shuffle mode.

Test: atest pts-bot:AVRCP
Bug: 259590659
Change-Id: I2f172d6694b6aaa1c55885d13e3d770d487e790f
parent 94e64e39
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ from pandora_experimental.avrcp_grpc import AVRCP
from pandora.host_grpc import Host
from pandora.host_pb2 import Connection
from pandora_experimental.mediaplayer_grpc import MediaPlayer

from pandora_experimental.mediaplayer_pb2 import NONE, ALL, GROUP

class AVRCPProxy(ProfileProxy):
    """AVRCP proxy.
@@ -697,6 +697,33 @@ class AVRCPProxy(ProfileProxy):

        return "OK"

    @assert_description
    def TSC_AVRCP_mmi_iut_initiate_register_notification_changed_player_application_setting_changed(self, **kwargs):
        """
        Take action to trigger a [Register Notification, Changed] response for
        <Player Application Setting Changed> to the PTS from the IUT.  This can
        be accomplished by changing a Player Application Setting (Equalizer,
        Repeat Mode, Shuffle, Scan) on the IUT.

        Description: Verify that the
        Implementation Under Test (IUT) can update database by sending a valid
        Player Application Setting Changed Notification to the PTS.
        """

        nextShuffleMode = NONE
        self.mediaplayer.StartTestPlayback()
        currentShuffleMode = self.mediaplayer.GetShuffleMode().mode
        if (currentShuffleMode == NONE):
            nextShuffleMode = ALL
        elif (currentShuffleMode == ALL):
            nextShuffleMode = GROUP
        elif (currentShuffleMode == GROUP):
            nextShuffleMode = ALL
        self.mediaplayer.SetShuffleMode(mode=nextShuffleMode)
        self.mediaplayer.StopTestPlayback()

        return "OK"

    @assert_description
    def TSC_AVRCP_mmi_iut_reject_get_folder_items_out_of_range(self, **kwargs):
        """
+2 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@
    "AVRCP/TG/MPS/BV-09-C",
    "AVRCP/TG/NFY/BI-01-C",
    "AVRCP/TG/NFY/BV-02-C",
    "AVRCP/TG/NFY/BV-03-C",
    "AVRCP/TG/NFY/BV-06-C",
    "AVRCP/TG/NFY/BV-07-C",
    "AVRCP/TG/PAS/BI-02-C",
@@ -1238,6 +1239,7 @@
    "TSPC_AVRCP_7_22": true,
    "TSPC_AVRCP_7_23": true,
    "TSPC_AVRCP_7_24": true,
    "TSPC_AVRCP_7_30": true,
    "TSPC_AVRCP_7_31": true,
    "TSPC_AVRCP_7_32": true,
    "TSPC_AVRCP_7_36": true,
+361 KiB

File added.

No diff preview for this file type.

+57 −0
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@ package com.android.pandora
import android.content.Context
import android.content.Intent
import android.media.*
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_ALL
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_GROUP
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_NONE
import android.util.Log
import com.google.protobuf.Empty
import io.grpc.stub.StreamObserver
import java.io.Closeable
@@ -27,6 +31,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import pandora.MediaPlayerGrpc.MediaPlayerImplBase
import pandora.MediaPlayerProto.*
import pandora.MediaPlayerProto.ShuffleMode
import pandora.MediaPlayerProto.SetShuffleModeRequest
import pandora.MediaPlayerProto.GetShuffleModeResponse

@kotlinx.coroutines.ExperimentalCoroutinesApi
class MediaPlayer(val context: Context) : MediaPlayerImplBase(), Closeable {
@@ -105,6 +112,56 @@ class MediaPlayer(val context: Context) : MediaPlayerImplBase(), Closeable {
    }
  }

  override fun getShuffleMode(
    request: Empty,
    responseObserver: StreamObserver<GetShuffleModeResponse>
  ) {
    grpcUnary(scope, responseObserver) {
      val mode: Int = MediaPlayerBrowserService.instance.getShuffleMode()
      val shuffleMode = when (mode) {
        SHUFFLE_MODE_NONE -> ShuffleMode.NONE
        SHUFFLE_MODE_ALL -> ShuffleMode.ALL
        SHUFFLE_MODE_GROUP -> ShuffleMode.GROUP
        else -> ShuffleMode.NONE
      }
      GetShuffleModeResponse.newBuilder()
        .setMode(shuffleMode)
        .build()
    }
  }

  override fun setShuffleMode(
    request: SetShuffleModeRequest,
    responseObserver: StreamObserver<Empty>
  ) {
    grpcUnary(scope, responseObserver) {
      when (request.mode!!) {
        ShuffleMode.NONE ->
          MediaPlayerBrowserService.instance.setShuffleMode(SHUFFLE_MODE_NONE)
        ShuffleMode.ALL ->
          MediaPlayerBrowserService.instance.setShuffleMode(SHUFFLE_MODE_ALL)
        ShuffleMode.GROUP ->
          MediaPlayerBrowserService.instance.setShuffleMode(SHUFFLE_MODE_GROUP)
        else -> MediaPlayerBrowserService.instance.setShuffleMode(SHUFFLE_MODE_NONE)
      }
      Empty.getDefaultInstance()
    }
  }

  override fun startTestPlayback(request: Empty, responseObserver: StreamObserver<Empty>) {
    grpcUnary<Empty>(scope, responseObserver) {
      MediaPlayerBrowserService.instance.startTestPlayback()
      Empty.getDefaultInstance()
    }
  }

  override fun stopTestPlayback(request: Empty, responseObserver: StreamObserver<Empty>) {
    grpcUnary<Empty>(scope, responseObserver) {
      MediaPlayerBrowserService.instance.stopTestPlayback()
      Empty.getDefaultInstance()
    }
  }

  override fun close() {
    // Deinit the CoroutineScope
    scope.cancel()
+52 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.pandora

import android.content.Intent
import android.os.Bundle
import android.media.MediaPlayer;
import android.support.v4.media.*
import android.support.v4.media.MediaBrowserCompat.MediaItem
import android.support.v4.media.session.*
@@ -25,6 +26,9 @@ import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaControllerCompat
import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_ALL
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_GROUP
import android.support.v4.media.session.PlaybackStateCompat.SHUFFLE_MODE_NONE
import android.util.Log

import androidx.media.MediaBrowserServiceCompat
@@ -36,6 +40,7 @@ class MediaPlayerBrowserService : MediaBrowserServiceCompat() {

  private lateinit var mediaSession: MediaSessionCompat
  private lateinit var playbackStateBuilder: PlaybackStateCompat.Builder
  private var mMediaPlayer: MediaPlayer? = null
  private val mediaIdToChildren = mutableMapOf<String, MutableList<MediaItem>>()
  private var metadataItems = mutableMapOf<String, MediaMetadataCompat>()
  private var queue = mutableListOf<MediaSessionCompat.QueueItem>()
@@ -80,6 +85,32 @@ class MediaPlayerBrowserService : MediaBrowserServiceCompat() {
    mediaSession.setPlaybackState(playbackStateBuilder.build())
  }

  fun startTestPlayback() {
    if (mMediaPlayer == null) {
      // File copied from: development/samples/ApiDemos/res/raw/test_cbr.mp3
      // to: packages/modules/Bluetooth/android/pandora/server/res/raw/test_cbr.mp3
      val resourceId: Int = getResources().getIdentifier("test_cbr", "raw", getPackageName());
      mMediaPlayer = MediaPlayer.create(this, resourceId)
      if (mMediaPlayer == null) {
        Log.e(TAG, "Failed to create MediaPlayer.")
        return
      }
    }

    mMediaPlayer?.setOnCompletionListener {
      stopTestPlayback()
    }

    mMediaPlayer?.start()
  }

  fun stopTestPlayback() {
    mMediaPlayer?.stop()
    mMediaPlayer?.setOnCompletionListener(null)
    mMediaPlayer?.release()
    mMediaPlayer = null
  }

  fun play() {
    if (currentTrack == -1 || currentTrack == QUEUE_SIZE) currentTrack = QUEUE_START_INDEX
    else currentTrack += 1
@@ -141,6 +172,22 @@ class MediaPlayerBrowserService : MediaBrowserServiceCompat() {
    mediaSession.setQueue(queue)
  }

  fun getShuffleMode() : Int {
    val controller = mediaSession.getController()
    return controller.getShuffleMode()
  }

  fun setShuffleMode(shuffleMode: Int) {
    val controller = mediaSession.getController()
    val transportControls = controller.getTransportControls()
    when (shuffleMode) {
      SHUFFLE_MODE_NONE,
      SHUFFLE_MODE_ALL,
      SHUFFLE_MODE_GROUP -> transportControls.setShuffleMode(shuffleMode)
      else -> transportControls.setShuffleMode(SHUFFLE_MODE_NONE)
    }
  }

  private val mSessionCallback: MediaSessionCompat.Callback =
    object : MediaSessionCompat.Callback() {
      override fun onPlay() {
@@ -167,6 +214,11 @@ class MediaPlayerBrowserService : MediaBrowserServiceCompat() {
        Log.i(TAG, "MediaSessionCallback——》onMediaButtonEvent $mediaButtonEvent")
        return super.onMediaButtonEvent(mediaButtonEvent)
      }

      override fun onSetShuffleMode(shuffleMode: Int) {
        Log.i(TAG, "MediaSessionCallback——》onSetShuffleMode $shuffleMode")
        mediaSession.setShuffleMode(shuffleMode)
      }
    }

  override fun onGetRoot(p0: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {
Loading