Loading packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +14 −4 Original line number Diff line number Diff line Loading @@ -49,11 +49,13 @@ public class LocalMediaManager implements BluetoothCallback { @Retention(RetentionPolicy.SOURCE) @IntDef({MediaDeviceState.STATE_CONNECTED, MediaDeviceState.STATE_CONNECTING, MediaDeviceState.STATE_DISCONNECTED}) MediaDeviceState.STATE_DISCONNECTED, MediaDeviceState.STATE_CONNECTING_FAILED}) public @interface MediaDeviceState { int STATE_CONNECTED = 1; int STATE_CONNECTING = 2; int STATE_DISCONNECTED = 3; int STATE_CONNECTED = 0; int STATE_CONNECTING = 1; int STATE_DISCONNECTED = 2; int STATE_CONNECTING_FAILED = 3; } private final Collection<DeviceCallback> mCallbacks = new CopyOnWriteArrayList<>(); Loading Loading @@ -126,6 +128,7 @@ public class LocalMediaManager implements BluetoothCallback { final CachedBluetoothDevice cachedDevice = ((BluetoothMediaDevice) device).getCachedDevice(); if (!cachedDevice.isConnected() && !cachedDevice.isBusy()) { device.setState(MediaDeviceState.STATE_CONNECTING); cachedDevice.connect(); return; } Loading @@ -140,6 +143,7 @@ public class LocalMediaManager implements BluetoothCallback { mCurrentConnectedDevice.disconnect(); } device.setState(MediaDeviceState.STATE_CONNECTING); if (TextUtils.isEmpty(mPackageName)) { mInfoMediaManager.connectDeviceWithoutPackageName(device); } else { Loading Loading @@ -421,6 +425,7 @@ public class LocalMediaManager implements BluetoothCallback { MediaDevice connectDevice = getMediaDeviceById(mMediaDevices, id); connectDevice = connectDevice != null ? connectDevice : updateCurrentConnectedDevice(); connectDevice.setState(MediaDeviceState.STATE_CONNECTED); if (connectDevice == mCurrentConnectedDevice) { Log.d(TAG, "onConnectedDeviceChanged() this device all ready connected!"); Loading @@ -438,6 +443,11 @@ public class LocalMediaManager implements BluetoothCallback { @Override public void onRequestFailed(int reason) { for (MediaDevice device : mMediaDevices) { if (device.getState() == MediaDeviceState.STATE_CONNECTING) { device.setState(MediaDeviceState.STATE_CONNECTING_FAILED); } } dispatchOnRequestFailed(reason); } } Loading packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +17 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { int mType; private int mConnectedRecord; private int mState; protected final Context mContext; protected final MediaRoute2Info mRouteInfo; Loading Loading @@ -199,6 +200,22 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { public void disconnect() { } /** * Set current device's state */ public void setState(@LocalMediaManager.MediaDeviceState int state) { mState = state; } /** * Get current device's state * * @return state of device */ public @LocalMediaManager.MediaDeviceState int getState() { return mState; } /** * Rules: * 1. If there is one of the connected devices identified as a carkit, this carkit will Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +84 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settingslib.media; import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading @@ -27,6 +29,8 @@ import static org.mockito.Mockito.when; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import com.android.settingslib.bluetooth.A2dpProfile; import com.android.settingslib.bluetooth.CachedBluetoothDevice; Loading @@ -53,10 +57,13 @@ import java.util.List; @Config(shadows = {ShadowBluetoothAdapter.class}) public class LocalMediaManagerTest { private static final String TEST_DEVICE_NAME_1 = "device_name_1"; private static final String TEST_DEVICE_NAME_2 = "device_name_2"; private static final String TEST_DEVICE_ID_1 = "device_id_1"; private static final String TEST_DEVICE_ID_2 = "device_id_2"; private static final String TEST_DEVICE_ID_3 = "device_id_3"; private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id"; private static final String TEST_PACKAGE_NAME = "com.test.playmusic"; @Mock private BluetoothMediaManager mBluetoothMediaManager; Loading @@ -72,10 +79,18 @@ public class LocalMediaManagerTest { private A2dpProfile mA2dpProfile; @Mock private LocalBluetoothProfileManager mLocalProfileManager; @Mock private MediaRouter2Manager mMediaRouter2Manager; @Mock private MediaRoute2Info mRouteInfo1; @Mock private MediaRoute2Info mRouteInfo2; private Context mContext; private LocalMediaManager mLocalMediaManager; private ShadowBluetoothAdapter mShadowBluetoothAdapter; private InfoMediaDevice mInfoMediaDevice1; private InfoMediaDevice mInfoMediaDevice2; @Before public void setUp() { Loading @@ -84,11 +99,18 @@ public class LocalMediaManagerTest { final List<BluetoothDevice> bluetoothDevices = new ArrayList<>(); mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices); when(mRouteInfo1.getName()).thenReturn(TEST_DEVICE_NAME_1); when(mRouteInfo1.getId()).thenReturn(TEST_DEVICE_ID_1); when(mRouteInfo2.getName()).thenReturn(TEST_DEVICE_NAME_2); when(mRouteInfo2.getId()).thenReturn(TEST_DEVICE_ID_2); when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager); when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile); mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1, TEST_PACKAGE_NAME); mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2, TEST_PACKAGE_NAME); mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager, mInfoMediaManager, "com.test.packagename"); mLocalMediaManager.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); Loading Loading @@ -122,6 +144,32 @@ public class LocalMediaManagerTest { verify(device).connect(); } @Test public void connectDevice_deviceNotEqualCurrentConnectedDevice_isConnectingState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1; mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.connectDevice(mInfoMediaDevice2); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); } @Test public void connectDevice_deviceEqualCurrentConnectedDevice_notConnectingState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1; mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.connectDevice(mInfoMediaDevice1); assertThat(mInfoMediaDevice1.getState()).isNotEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); } @Test public void connectDevice_bluetoothDeviceNotConnected_connectBluetoothDevice() { final MediaDevice device = mock(BluetoothMediaDevice.class); Loading Loading @@ -387,6 +435,21 @@ public class LocalMediaManagerTest { verify(mCallback, never()).onDeviceAttributesChanged(); } @Test public void onConnectedDeviceChanged_isConnectedState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_DISCONNECTED); mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.mMediaDeviceCallback.onConnectedDeviceChanged(TEST_DEVICE_ID_1); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); } @Test public void onDeviceAttributesChanged_shouldDispatchDeviceListUpdate() { mLocalMediaManager.registerCallback(mCallback); Loading @@ -396,6 +459,26 @@ public class LocalMediaManagerTest { verify(mCallback).onDeviceAttributesChanged(); } @Test public void onRequestFailed_checkDevicesState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING); mInfoMediaDevice2.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.mMediaDeviceCallback.onRequestFailed(REASON_UNKNOWN_ERROR); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING_FAILED); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); } @Test public void getActiveMediaDevice_checkList() { final List<MediaDevice> devices = new ArrayList<>(); Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -448,4 +448,23 @@ public class MediaDeviceTest { assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo( mContext.getResources().getString(R.string.unknown)); } @Test public void setState_verifyGetState() { mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTED); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTING); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +14 −4 Original line number Diff line number Diff line Loading @@ -49,11 +49,13 @@ public class LocalMediaManager implements BluetoothCallback { @Retention(RetentionPolicy.SOURCE) @IntDef({MediaDeviceState.STATE_CONNECTED, MediaDeviceState.STATE_CONNECTING, MediaDeviceState.STATE_DISCONNECTED}) MediaDeviceState.STATE_DISCONNECTED, MediaDeviceState.STATE_CONNECTING_FAILED}) public @interface MediaDeviceState { int STATE_CONNECTED = 1; int STATE_CONNECTING = 2; int STATE_DISCONNECTED = 3; int STATE_CONNECTED = 0; int STATE_CONNECTING = 1; int STATE_DISCONNECTED = 2; int STATE_CONNECTING_FAILED = 3; } private final Collection<DeviceCallback> mCallbacks = new CopyOnWriteArrayList<>(); Loading Loading @@ -126,6 +128,7 @@ public class LocalMediaManager implements BluetoothCallback { final CachedBluetoothDevice cachedDevice = ((BluetoothMediaDevice) device).getCachedDevice(); if (!cachedDevice.isConnected() && !cachedDevice.isBusy()) { device.setState(MediaDeviceState.STATE_CONNECTING); cachedDevice.connect(); return; } Loading @@ -140,6 +143,7 @@ public class LocalMediaManager implements BluetoothCallback { mCurrentConnectedDevice.disconnect(); } device.setState(MediaDeviceState.STATE_CONNECTING); if (TextUtils.isEmpty(mPackageName)) { mInfoMediaManager.connectDeviceWithoutPackageName(device); } else { Loading Loading @@ -421,6 +425,7 @@ public class LocalMediaManager implements BluetoothCallback { MediaDevice connectDevice = getMediaDeviceById(mMediaDevices, id); connectDevice = connectDevice != null ? connectDevice : updateCurrentConnectedDevice(); connectDevice.setState(MediaDeviceState.STATE_CONNECTED); if (connectDevice == mCurrentConnectedDevice) { Log.d(TAG, "onConnectedDeviceChanged() this device all ready connected!"); Loading @@ -438,6 +443,11 @@ public class LocalMediaManager implements BluetoothCallback { @Override public void onRequestFailed(int reason) { for (MediaDevice device : mMediaDevices) { if (device.getState() == MediaDeviceState.STATE_CONNECTING) { device.setState(MediaDeviceState.STATE_CONNECTING_FAILED); } } dispatchOnRequestFailed(reason); } } Loading
packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +17 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { int mType; private int mConnectedRecord; private int mState; protected final Context mContext; protected final MediaRoute2Info mRouteInfo; Loading Loading @@ -199,6 +200,22 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { public void disconnect() { } /** * Set current device's state */ public void setState(@LocalMediaManager.MediaDeviceState int state) { mState = state; } /** * Get current device's state * * @return state of device */ public @LocalMediaManager.MediaDeviceState int getState() { return mState; } /** * Rules: * 1. If there is one of the connected devices identified as a carkit, this carkit will Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java +84 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settingslib.media; import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading @@ -27,6 +29,8 @@ import static org.mockito.Mockito.when; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.media.MediaRoute2Info; import android.media.MediaRouter2Manager; import com.android.settingslib.bluetooth.A2dpProfile; import com.android.settingslib.bluetooth.CachedBluetoothDevice; Loading @@ -53,10 +57,13 @@ import java.util.List; @Config(shadows = {ShadowBluetoothAdapter.class}) public class LocalMediaManagerTest { private static final String TEST_DEVICE_NAME_1 = "device_name_1"; private static final String TEST_DEVICE_NAME_2 = "device_name_2"; private static final String TEST_DEVICE_ID_1 = "device_id_1"; private static final String TEST_DEVICE_ID_2 = "device_id_2"; private static final String TEST_DEVICE_ID_3 = "device_id_3"; private static final String TEST_CURRENT_DEVICE_ID = "currentDevice_id"; private static final String TEST_PACKAGE_NAME = "com.test.playmusic"; @Mock private BluetoothMediaManager mBluetoothMediaManager; Loading @@ -72,10 +79,18 @@ public class LocalMediaManagerTest { private A2dpProfile mA2dpProfile; @Mock private LocalBluetoothProfileManager mLocalProfileManager; @Mock private MediaRouter2Manager mMediaRouter2Manager; @Mock private MediaRoute2Info mRouteInfo1; @Mock private MediaRoute2Info mRouteInfo2; private Context mContext; private LocalMediaManager mLocalMediaManager; private ShadowBluetoothAdapter mShadowBluetoothAdapter; private InfoMediaDevice mInfoMediaDevice1; private InfoMediaDevice mInfoMediaDevice2; @Before public void setUp() { Loading @@ -84,11 +99,18 @@ public class LocalMediaManagerTest { final List<BluetoothDevice> bluetoothDevices = new ArrayList<>(); mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter()); mShadowBluetoothAdapter.setMostRecentlyConnectedDevices(bluetoothDevices); when(mRouteInfo1.getName()).thenReturn(TEST_DEVICE_NAME_1); when(mRouteInfo1.getId()).thenReturn(TEST_DEVICE_ID_1); when(mRouteInfo2.getName()).thenReturn(TEST_DEVICE_NAME_2); when(mRouteInfo2.getId()).thenReturn(TEST_DEVICE_ID_2); when(mLocalBluetoothManager.getProfileManager()).thenReturn(mLocalProfileManager); when(mLocalProfileManager.getA2dpProfile()).thenReturn(mA2dpProfile); when(mLocalProfileManager.getHearingAidProfile()).thenReturn(mHapProfile); mInfoMediaDevice1 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo1, TEST_PACKAGE_NAME); mInfoMediaDevice2 = new InfoMediaDevice(mContext, mMediaRouter2Manager, mRouteInfo2, TEST_PACKAGE_NAME); mLocalMediaManager = new LocalMediaManager(mContext, mLocalBluetoothManager, mInfoMediaManager, "com.test.packagename"); mLocalMediaManager.mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); Loading Loading @@ -122,6 +144,32 @@ public class LocalMediaManagerTest { verify(device).connect(); } @Test public void connectDevice_deviceNotEqualCurrentConnectedDevice_isConnectingState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1; mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.connectDevice(mInfoMediaDevice2); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); } @Test public void connectDevice_deviceEqualCurrentConnectedDevice_notConnectingState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mLocalMediaManager.mCurrentConnectedDevice = mInfoMediaDevice1; mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.connectDevice(mInfoMediaDevice1); assertThat(mInfoMediaDevice1.getState()).isNotEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); } @Test public void connectDevice_bluetoothDeviceNotConnected_connectBluetoothDevice() { final MediaDevice device = mock(BluetoothMediaDevice.class); Loading Loading @@ -387,6 +435,21 @@ public class LocalMediaManagerTest { verify(mCallback, never()).onDeviceAttributesChanged(); } @Test public void onConnectedDeviceChanged_isConnectedState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_DISCONNECTED); mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.mMediaDeviceCallback.onConnectedDeviceChanged(TEST_DEVICE_ID_1); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); } @Test public void onDeviceAttributesChanged_shouldDispatchDeviceListUpdate() { mLocalMediaManager.registerCallback(mCallback); Loading @@ -396,6 +459,26 @@ public class LocalMediaManagerTest { verify(mCallback).onDeviceAttributesChanged(); } @Test public void onRequestFailed_checkDevicesState() { mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice1); mLocalMediaManager.mMediaDevices.add(mInfoMediaDevice2); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING); mInfoMediaDevice2.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); mLocalMediaManager.registerCallback(mCallback); mLocalMediaManager.mMediaDeviceCallback.onRequestFailed(REASON_UNKNOWN_ERROR); assertThat(mInfoMediaDevice1.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTING_FAILED); assertThat(mInfoMediaDevice2.getState()).isEqualTo(LocalMediaManager.MediaDeviceState .STATE_CONNECTED); } @Test public void getActiveMediaDevice_checkList() { final List<MediaDevice> devices = new ArrayList<>(); Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -448,4 +448,23 @@ public class MediaDeviceTest { assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo( mContext.getResources().getString(R.string.unknown)); } @Test public void setState_verifyGetState() { mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTED); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTING); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED); mInfoMediaDevice1.setState(LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); assertThat(mInfoMediaDevice1.getState()).isEqualTo( LocalMediaManager.MediaDeviceState.STATE_CONNECTING_FAILED); } }