[Audiosharing] Support sharing dialog when click media devices.

Instead of directly stop audio sharing, clicking on media devices will
lead to different sharing dialogs based on different scenarios. The
scenarios are align to cases when a new device is connected.

Test: atest
Bug: 305620450
Fix: 327259953
Change-Id: Ibb591cb1a59f31c8f0be4f3e72e45378b17e3809
diff --git a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
index 8250f70..0ee3986 100644
--- a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
@@ -136,12 +136,8 @@
     @Override
     public boolean onPreferenceClick(Preference preference) {
         mMetricsFeatureProvider.logClickedPreference(preference, mMetricsCategory);
-        final CachedBluetoothDevice device =
-                ((BluetoothDevicePreference) preference).getBluetoothDevice();
-        FeatureFactory.getFeatureFactory()
-                .getAudioSharingFeatureProvider()
-                .handleMediaDeviceOnClick(mLocalManager);
-        return device.setActive();
+        mDevicePreferenceCallback.onDeviceClick(preference);
+        return true;
     }
 
     @Override
diff --git a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
index 0535d15..56ef4b0 100644
--- a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
+++ b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java
@@ -35,6 +35,7 @@
 import com.android.settings.R;
 import com.android.settings.accessibility.HearingAidUtils;
 import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.BluetoothDeviceUpdater;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.core.BasePreferenceController;
@@ -150,6 +151,13 @@
         }
     }
 
+    @Override
+    public void onDeviceClick(Preference preference) {
+        final CachedBluetoothDevice cachedDevice =
+                ((BluetoothDevicePreference) preference).getBluetoothDevice();
+        cachedDevice.setActive();
+    }
+
     public void init(DashboardFragment fragment) {
         mFragmentManager = fragment.getParentFragmentManager();
         mBluetoothDeviceUpdater =
diff --git a/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java b/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java
index 7ee2063..c91e2a0 100644
--- a/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java
+++ b/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java
@@ -18,19 +18,26 @@
 
 import androidx.preference.Preference;
 
-/**
- * Callback to add or remove {@link Preference} in device group.
- */
+/** Callback to add or remove {@link Preference} in device group. */
 public interface DevicePreferenceCallback {
     /**
      * Called when a device(i.e. bluetooth, usb) is added
+     *
      * @param preference present the device
      */
     void onDeviceAdded(Preference preference);
 
     /**
      * Called when a device(i.e. bluetooth, usb) is removed
+     *
      * @param preference present the device
      */
     void onDeviceRemoved(Preference preference);
+
+    /**
+     * Called when a device(i.e. bluetooth, usb) is click
+     *
+     * @param preference present the device
+     */
+    default void onDeviceClick(Preference preference) {}
 }
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java
index 9fe4d50..50812e9 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java
@@ -50,7 +50,4 @@
      */
     boolean isAudioSharingFilterMatched(
             @NonNull CachedBluetoothDevice cachedDevice, LocalBluetoothManager localBtManager);
-
-    /** Handle preference onClick in "Media devices" section. */
-    void handleMediaDeviceOnClick(LocalBluetoothManager localBtManager);
 }
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java
index 259ed7a..96200db 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java
@@ -52,7 +52,4 @@
             @NonNull CachedBluetoothDevice cachedDevice, LocalBluetoothManager localBtManager) {
         return false;
     }
-
-    @Override
-    public void handleMediaDeviceOnClick(LocalBluetoothManager localBtManager) {}
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
index 5a7e247..6aa2831 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
@@ -372,6 +372,6 @@
     public void onClick_Preference_setActive() {
         mBluetoothDeviceUpdater.onPreferenceClick(mPreference);
 
-        verify(mCachedBluetoothDevice).setActive();
+        verify(mDevicePreferenceCallback).onDeviceClick(mPreference);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
index 357420a..8f07cca 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java
@@ -32,9 +32,9 @@
 import android.bluetooth.BluetoothProfile;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
-import android.platform.test.flag.junit.CheckFlagsRule;
-import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+import android.util.Pair;
 
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.FragmentActivity;
@@ -46,6 +46,7 @@
 
 import com.android.settings.R;
 import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater;
+import com.android.settings.bluetooth.BluetoothDevicePreference;
 import com.android.settings.bluetooth.Utils;
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowAudioManager;
@@ -64,7 +65,8 @@
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
@@ -79,11 +81,11 @@
             ShadowAlertDialogCompat.class,
         })
 public class AvailableMediaDeviceGroupControllerTest {
-    @Rule
-    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+    @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
 
     private static final String TEST_DEVICE_ADDRESS = "00:A1:A1:A1:A1:A1";
     private static final String PREFERENCE_KEY_1 = "pref_key_1";
+    private static final String TEST_DEVICE_NAME = "test";
 
     @Mock private AvailableMediaBluetoothDeviceUpdater mAvailableMediaBluetoothDeviceUpdater;
     @Mock private PreferenceScreen mPreferenceScreen;
@@ -96,6 +98,9 @@
     @Mock private LocalBluetoothManager mLocalBluetoothManager;
     @Mock private CachedBluetoothDeviceManager mCachedDeviceManager;
     @Mock private CachedBluetoothDevice mCachedBluetoothDevice;
+    @Mock private BluetoothDevice mDevice;
+    @Mock
+    private Drawable mDrawable;
 
     private PreferenceGroup mPreferenceGroup;
     private Context mContext;
@@ -107,8 +112,6 @@
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
         mContext = spy(RuntimeEnvironment.application);
         mLifecycleOwner = () -> mLifecycle;
         mLifecycle = new Lifecycle(mLifecycleOwner);
@@ -262,4 +265,19 @@
         final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
         assertThat(dialog.isShowing()).isTrue();
     }
+
+    @Test
+    public void onDeviceClick_setActive() {
+        when(mCachedBluetoothDevice.getDevice()).thenReturn(mDevice);
+        Pair<Drawable, String> pair = new Pair<>(mDrawable, TEST_DEVICE_NAME);
+        when(mCachedBluetoothDevice.getDrawableWithDescription()).thenReturn(pair);
+        BluetoothDevicePreference preference =
+                new BluetoothDevicePreference(
+                        mContext,
+                        mCachedBluetoothDevice,
+                        true,
+                        BluetoothDevicePreference.SortType.TYPE_NO_SORT);
+        mAvailableMediaDeviceGroupController.onDeviceClick(preference);
+        verify(mCachedBluetoothDevice).setActive();
+    }
 }