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

Commit 786c98ae authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add AvrcpPlayerTest" into tm-qpr-dev am: 956f6d12

parents 2bd76ed1 956f6d12
Loading
Loading
Loading
Loading
+190 −0
Original line number Diff line number Diff line
/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.bluetooth.avrcpcontroller;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.when;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.net.Uri;
import android.support.v4.media.session.PlaybackStateCompat;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class AvrcpPlayerTest {
    private static final int TEST_PLAYER_ID = 1;
    private static final int TEST_PLAYER_TYPE = AvrcpPlayer.TYPE_VIDEO;
    private static final int TEST_PLAYER_SUB_TYPE = AvrcpPlayer.SUB_TYPE_AUDIO_BOOK;
    private static final String TEST_NAME = "test_name";
    private static final int TEST_FEATURE = AvrcpPlayer.FEATURE_PLAY;
    private static final int TEST_PLAY_STATUS = PlaybackStateCompat.STATE_STOPPED;
    private static final int TEST_PLAY_TIME = 1;

    private final AvrcpItem mAvrcpItem = new AvrcpItem.Builder().build();
    private final byte[] mTestAddress = new byte[]{01, 01, 01, 01, 01, 01};
    private BluetoothAdapter mAdapter;
    private BluetoothDevice mTestDevice = null;

    @Mock
    private PlayerApplicationSettings mPlayerApplicationSettings;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mTestDevice = mAdapter.getRemoteDevice(mTestAddress);
    }

    @Test
    public void buildAvrcpPlayer() {
        AvrcpPlayer.Builder builder = new AvrcpPlayer.Builder();
        builder.setDevice(mTestDevice);
        builder.setPlayerId(TEST_PLAYER_ID);
        builder.setPlayerType(TEST_PLAYER_TYPE);
        builder.setPlayerSubType(TEST_PLAYER_SUB_TYPE);
        builder.setName(TEST_NAME);
        builder.setSupportedFeature(TEST_FEATURE);
        builder.setPlayStatus(TEST_PLAY_STATUS);
        builder.setCurrentTrack(mAvrcpItem);

        AvrcpPlayer avrcpPlayer = builder.build();

        assertThat(avrcpPlayer.getDevice()).isEqualTo(mTestDevice);
        assertThat(avrcpPlayer.getId()).isEqualTo(TEST_PLAYER_ID);
        assertThat(avrcpPlayer.getName()).isEqualTo(TEST_NAME);
        assertThat(avrcpPlayer.supportsFeature(TEST_FEATURE)).isTrue();
        assertThat(avrcpPlayer.getPlayStatus()).isEqualTo(TEST_PLAY_STATUS);
        assertThat(avrcpPlayer.getCurrentTrack()).isEqualTo(mAvrcpItem);
        assertThat(avrcpPlayer.getPlaybackState().getActions()).isEqualTo(
                PlaybackStateCompat.ACTION_PREPARE | PlaybackStateCompat.ACTION_PLAY);
    }

    @Test
    public void setAndGetPlayTime() {
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().build();

        avrcpPlayer.setPlayTime(TEST_PLAY_TIME);

        assertThat(avrcpPlayer.getPlayTime()).isEqualTo(TEST_PLAY_TIME);
    }

    @Test
    public void setPlayStatus() {
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().build();
        avrcpPlayer.setPlayTime(TEST_PLAY_TIME);

        avrcpPlayer.setPlayStatus(PlaybackStateCompat.STATE_PLAYING);
        assertThat(avrcpPlayer.getPlaybackState().getPlaybackSpeed()).isEqualTo(1);

        avrcpPlayer.setPlayStatus(PlaybackStateCompat.STATE_PAUSED);
        assertThat(avrcpPlayer.getPlaybackState().getPlaybackSpeed()).isEqualTo(0);

        avrcpPlayer.setPlayStatus(PlaybackStateCompat.STATE_FAST_FORWARDING);
        assertThat(avrcpPlayer.getPlaybackState().getPlaybackSpeed()).isEqualTo(3);

        avrcpPlayer.setPlayStatus(PlaybackStateCompat.STATE_REWINDING);
        assertThat(avrcpPlayer.getPlaybackState().getPlaybackSpeed()).isEqualTo(-3);
    }

    @Test
    public void setSupportedPlayerApplicationSettings() {
        when(mPlayerApplicationSettings.supportsSetting(
                PlayerApplicationSettings.REPEAT_STATUS)).thenReturn(true);
        when(mPlayerApplicationSettings.supportsSetting(
                PlayerApplicationSettings.SHUFFLE_STATUS)).thenReturn(true);
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().build();
        long expectedActions =
                PlaybackStateCompat.ACTION_PREPARE | PlaybackStateCompat.ACTION_SET_REPEAT_MODE
                        | PlaybackStateCompat.ACTION_SET_SHUFFLE_MODE;

        avrcpPlayer.setSupportedPlayerApplicationSettings(mPlayerApplicationSettings);

        assertThat(avrcpPlayer.getPlaybackState().getActions()).isEqualTo(expectedActions);
    }

    @Test
    public void supportsSetting() {
        int settingType = 1;
        int settingValue = 1;
        when(mPlayerApplicationSettings.supportsSetting(settingType, settingValue)).thenReturn(
                true);
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().build();

        avrcpPlayer.setSupportedPlayerApplicationSettings(mPlayerApplicationSettings);

        assertThat(avrcpPlayer.supportsSetting(settingType, settingValue)).isTrue();
    }

    @Test
    public void updateAvailableActions() {
        byte[] supportedFeatures = new byte[16];
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_STOP);
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_PAUSE);
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_REWIND);
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_FAST_FORWARD);
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_FORWARD);
        setSupportedFeature(supportedFeatures, AvrcpPlayer.FEATURE_PREVIOUS);
        long expectedActions = PlaybackStateCompat.ACTION_PREPARE | PlaybackStateCompat.ACTION_STOP
                | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_REWIND
                | PlaybackStateCompat.ACTION_FAST_FORWARD | PlaybackStateCompat.ACTION_SKIP_TO_NEXT
                | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;

        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().setSupportedFeatures(
                supportedFeatures).build();

        assertThat(avrcpPlayer.getPlaybackState().getActions()).isEqualTo(expectedActions);
    }

    @Test
    public void toString_returnsInfo() {
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().setPlayerId(TEST_PLAYER_ID).setName(
                TEST_NAME).setCurrentTrack(mAvrcpItem).build();

        assertThat(avrcpPlayer.toString()).isEqualTo(
                "<AvrcpPlayer id=" + TEST_PLAYER_ID + " name=" + TEST_NAME + " track="
                        + mAvrcpItem + " playState=" + avrcpPlayer.getPlaybackState() + ">");
    }

    @Test
    public void notifyImageDownload() {
        String uuid = "1111";
        Uri uri = Uri.parse("http://test.com");
        AvrcpItem trackWithDifferentUuid = new AvrcpItem.Builder().build();
        AvrcpItem trackWithSameUuid = new AvrcpItem.Builder().build();
        trackWithSameUuid.setCoverArtUuid(uuid);
        AvrcpPlayer avrcpPlayer = new AvrcpPlayer.Builder().build();

        assertThat(avrcpPlayer.notifyImageDownload(uuid, uri)).isFalse();

        avrcpPlayer.updateCurrentTrack(trackWithDifferentUuid);
        assertThat(avrcpPlayer.notifyImageDownload(uuid, uri)).isFalse();

        avrcpPlayer.updateCurrentTrack(trackWithSameUuid);
        assertThat(avrcpPlayer.notifyImageDownload(uuid, uri)).isTrue();
    }

    private void setSupportedFeature(byte[] supportedFeatures, int feature) {
        int byteNumber = feature / 8;
        byte bitMask = (byte) (1 << (feature % 8));
        supportedFeatures[byteNumber] = (byte) (supportedFeatures[byteNumber] | bitMask);
    }
}