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

Commit 915dff53 authored by tim peng's avatar tim peng Committed by Android (Google) Code Review
Browse files

Merge "New API to display cast device slice"

parents 21d778f0 a812e889
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);
    }
}