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);
+    }
 }