Merge "New API to display cast device slice"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user