Loading packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +16 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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); Loading Loading @@ -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)); } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -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); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java +28 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +16 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaDeviceTest.java +47 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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); Loading Loading @@ -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)); } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +34 −0 Original line number Diff line number Diff line Loading @@ -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); } }