Output switcher shows the device list by an incorrect package name
-Reset package name when it is different with previous one
-Add test case
Bug: 156561856
Test: make -j50 RunSettingsRoboTests
Change-Id: I7931ebbc59ab404f12473fe29f2735ad3a8197fd
diff --git a/src/com/android/settings/media/MediaDeviceUpdateWorker.java b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
index 92cc0e3..a976811 100644
--- a/src/com/android/settings/media/MediaDeviceUpdateWorker.java
+++ b/src/com/android/settings/media/MediaDeviceUpdateWorker.java
@@ -73,7 +73,8 @@
protected void onSlicePinned() {
mMediaDevices.clear();
mIsTouched = false;
- if (mLocalMediaManager == null) {
+ if (mLocalMediaManager == null || !TextUtils.equals(mPackageName,
+ mLocalMediaManager.getPackageName())) {
mLocalMediaManager = new LocalMediaManager(mContext, mPackageName, null);
}
diff --git a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
index e8f7027..624bbd8 100644
--- a/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaDeviceUpdateWorkerTest.java
@@ -35,12 +35,17 @@
import android.net.Uri;
import com.android.settings.testutils.shadow.ShadowAudioManager;
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
+import com.android.settingslib.bluetooth.BluetoothEventManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.media.LocalMediaManager;
import com.android.settingslib.media.MediaDevice;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -51,16 +56,28 @@
import java.util.List;
@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowAudioManager.class)
+@Config(shadows = {ShadowAudioManager.class, ShadowBluetoothAdapter.class,
+ ShadowBluetoothUtils.class})
public class MediaDeviceUpdateWorkerTest {
private static final Uri URI = Uri.parse("content://com.android.settings.slices/test");
+ private static final Uri URI1 = Uri.parse("content://com.android.settings.slices/action/"
+ + "media_output?media_package_name=com.music1");
+ private static final Uri URI2 = Uri.parse("content://com.android.settings.slices/action/"
+ + "media_output?media_package_name=com.music2");
+ private static final String TEST_DEVICE_PACKAGE_NAME1 = "com.music1";
+ private static final String TEST_DEVICE_PACKAGE_NAME2 = "com.music2";
private static final String TEST_DEVICE_1_ID = "test_device_1_id";
private static final String TEST_DEVICE_2_ID = "test_device_2_id";
private static final String TEST_DEVICE_3_ID = "test_device_3_id";
private final List<MediaDevice> mMediaDevices = new ArrayList<>();
+ @Mock
+ private LocalBluetoothManager mLocalBluetoothManager;
+ @Mock
+ private BluetoothEventManager mBluetoothEventManager;
+
private MediaDeviceUpdateWorker mMediaDeviceUpdateWorker;
private ContentResolver mResolver;
private Context mContext;
@@ -209,4 +226,21 @@
assertThat(mMediaDeviceUpdateWorker.getActiveRemoteMediaDevice()).containsExactly(
remoteSessionInfo);
}
+
+ @Test
+ public void onSlicePinned_packageUpdated_checkPackageName() {
+ ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
+ when(mLocalBluetoothManager.getEventManager()).thenReturn(mBluetoothEventManager);
+ mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI1);
+ mMediaDeviceUpdateWorker.onSlicePinned();
+
+ assertThat(mMediaDeviceUpdateWorker.mLocalMediaManager.getPackageName()).matches(
+ TEST_DEVICE_PACKAGE_NAME1);
+
+ mMediaDeviceUpdateWorker = new MediaDeviceUpdateWorker(mContext, URI2);
+ mMediaDeviceUpdateWorker.onSlicePinned();
+
+ assertThat(mMediaDeviceUpdateWorker.mLocalMediaManager.getPackageName()).matches(
+ TEST_DEVICE_PACKAGE_NAME2);
+ }
}