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

Commit a812e889 authored by timhypeng's avatar timhypeng
Browse files

New API to display cast device slice

-Add test cases

Bug: 142772656
Test: make -j42 RunSettingsLibRoboTests
Change-Id: I97734b05b96f76429e8dc43c6b503e2dddd817de
parent 758bc85b
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@
package com.android.settingslib.media;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.text.TextUtils;
import android.util.Log;

import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothUtils;
@@ -88,6 +91,31 @@ public class InfoMediaDevice extends MediaDevice {
        return mRouteInfo.getVolume();
    }

    @Override
    public String getClientPackageName() {
        return mRouteInfo.getClientPackageName();
    }

    @Override
    public String getClientAppLabel() {
        final String packageName = mRouteInfo.getClientPackageName();
        if (TextUtils.isEmpty(packageName)) {
            Log.d(TAG, "Client package name is empty");
            return mContext.getResources().getString(R.string.unknown);
        }
        try {
            final PackageManager packageManager = mContext.getPackageManager();
            final String appLabel = packageManager.getApplicationLabel(
                    packageManager.getApplicationInfo(packageName, 0)).toString();
            if (!TextUtils.isEmpty(appLabel)) {
                return appLabel;
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "unable to find " + packageName);
        }
        return mContext.getResources().getString(R.string.unknown);
    }

    @Override
    public void disconnect() {
        //TODO(b/144535188): disconnected last select device
+16 −0
Original line number Diff line number Diff line
@@ -235,6 +235,22 @@ public class LocalMediaManager implements BluetoothCallback {
        return mCurrentConnectedDevice;
    }

    /**
     * Find the active MediaDevice.
     *
     * @param type the media device type.
     * @return MediaDevice list
     */
    public List<MediaDevice> getActiveMediaDevice(@MediaDevice.MediaDeviceType int type) {
        final List<MediaDevice> devices = new ArrayList<>();
        for (MediaDevice device : mMediaDevices) {
            if (type == device.mType && device.getClientPackageName() != null) {
                devices.add(device);
            }
        }
        return devices;
    }

    private MediaDevice updateCurrentConnectedDevice() {
        for (MediaDevice device : mMediaDevices) {
            if (device instanceof  BluetoothMediaDevice) {
+47 −0
Original line number Diff line number Diff line
@@ -22,6 +22,9 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageStats;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;

@@ -34,11 +37,14 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPackageManager;

@RunWith(RobolectricTestRunner.class)
public class InfoMediaDeviceTest {

    private static final String TEST_PACKAGE_NAME = "com.test.packagename";
    private static final String TEST_PACKAGE_NAME2 = "com.test.packagename2";
    private static final String TEST_ID = "test_id";
    private static final String TEST_NAME = "test_name";

@@ -50,11 +56,24 @@ public class InfoMediaDeviceTest {

    private Context mContext;
    private InfoMediaDevice mInfoMediaDevice;
    private ShadowPackageManager mShadowPackageManager;
    private ApplicationInfo mAppInfo;
    private PackageInfo mPackageInfo;
    private PackageStats mPackageStats;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
        mAppInfo = new ApplicationInfo();
        mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED;
        mAppInfo.packageName = TEST_PACKAGE_NAME;
        mAppInfo.name = TEST_NAME;
        mPackageInfo = new PackageInfo();
        mPackageInfo.packageName = TEST_PACKAGE_NAME;
        mPackageInfo.applicationInfo = mAppInfo;
        mPackageStats = new PackageStats(TEST_PACKAGE_NAME);

        mInfoMediaDevice = new InfoMediaDevice(mContext, mRouterManager, mRouteInfo,
                TEST_PACKAGE_NAME);
@@ -95,4 +114,32 @@ public class InfoMediaDeviceTest {

        verify(mRouterManager).selectRoute(TEST_PACKAGE_NAME, mRouteInfo);
    }

    @Test
    public void getClientPackageName_returnPackageName() {
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice.getClientPackageName()).isEqualTo(TEST_PACKAGE_NAME);
    }

    @Test
    public void getClientAppLabel_matchedPackageName_returnLabel() {
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));

        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(TEST_NAME);
    }

    @Test
    public void getClientAppLabel_noMatchedPackageName_returnDefault() {
        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME2);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));
    }
}
+34 −0
Original line number Diff line number Diff line
@@ -384,4 +384,38 @@ public class LocalMediaManagerTest {

        verify(mCallback).onDeviceAttributesChanged();
    }

    @Test
    public void getActiveMediaDevice_checkList() {
        final List<MediaDevice> devices = new ArrayList<>();
        final MediaDevice device1 = mock(MediaDevice.class);
        final MediaDevice device2 = mock(MediaDevice.class);
        final MediaDevice device3 = mock(MediaDevice.class);
        device1.mType = MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE;
        device2.mType = MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE;
        device3.mType = MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE;
        when(device1.getClientPackageName()).thenReturn(TEST_DEVICE_ID_1);
        when(device2.getClientPackageName()).thenReturn(TEST_DEVICE_ID_2);
        when(device3.getClientPackageName()).thenReturn(TEST_DEVICE_ID_3);
        when(device1.getId()).thenReturn(TEST_DEVICE_ID_1);
        when(device2.getId()).thenReturn(TEST_DEVICE_ID_2);
        when(device3.getId()).thenReturn(TEST_DEVICE_ID_3);
        devices.add(device1);
        devices.add(device2);
        devices.add(device3);
        mLocalMediaManager.registerCallback(mCallback);
        mLocalMediaManager.mMediaDeviceCallback.onDeviceListAdded(devices);

        List<MediaDevice> activeDevices = mLocalMediaManager.getActiveMediaDevice(
                MediaDevice.MediaDeviceType.TYPE_PHONE_DEVICE);
        assertThat(activeDevices).containsExactly(device1);

        activeDevices = mLocalMediaManager.getActiveMediaDevice(
                MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
        assertThat(activeDevices).containsExactly(device2);

        activeDevices = mLocalMediaManager.getActiveMediaDevice(
                MediaDevice.MediaDeviceType.TYPE_BLUETOOTH_DEVICE);
        assertThat(activeDevices).containsExactly(device3);
    }
}