From 87629f24705024b4874f9284bff254964da968d0 Mon Sep 17 00:00:00 2001 From: Yiyi Shen Date: Thu, 21 Mar 2024 17:52:35 +0800 Subject: [PATCH] [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 --- .../AvailableMediaBluetoothDeviceUpdater.java | 8 ++--- .../AvailableMediaDeviceGroupController.java | 8 +++++ .../DevicePreferenceCallback.java | 13 ++++++-- .../AudioSharingFeatureProvider.java | 3 -- .../AudioSharingFeatureProviderImpl.java | 3 -- ...ilableMediaBluetoothDeviceUpdaterTest.java | 2 +- ...ailableMediaDeviceGroupControllerTest.java | 32 +++++++++++++++---- 7 files changed, 46 insertions(+), 23 deletions(-) diff --git a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java index 8250f70e738..0ee39868a58 100644 --- a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java @@ -136,12 +136,8 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater @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 0535d153e91..56ef4b08fc7 100644 --- a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java @@ -35,6 +35,7 @@ import androidx.preference.PreferenceScreen; 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 @@ public class AvailableMediaDeviceGroupController extends BasePreferenceControlle } } + @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 7ee2063d83b..c91e2a07102 100644 --- a/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java +++ b/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java @@ -18,19 +18,26 @@ package com.android.settings.connecteddevice; 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 9fe4d50ad6d..50812e9f7ee 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProvider.java @@ -50,7 +50,4 @@ public interface AudioSharingFeatureProvider { */ 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 259ed7a16b4..96200db143f 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingFeatureProviderImpl.java @@ -52,7 +52,4 @@ public class AudioSharingFeatureProviderImpl implements AudioSharingFeatureProvi @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 5a7e247c5b2..6aa2831432e 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 class AvailableMediaBluetoothDeviceUpdaterTest { 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 357420af221..8f07cca33f0 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.BluetoothDevice; 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 androidx.preference.PreferenceScreen; 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.Test; 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 @@ import org.robolectric.annotation.Config; 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 @@ public class AvailableMediaDeviceGroupControllerTest { @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 @@ public class AvailableMediaDeviceGroupControllerTest { @Before public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); @@ -262,4 +265,19 @@ public class AvailableMediaDeviceGroupControllerTest { final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); assertThat(dialog.isShowing()).isTrue(); } + + @Test + public void onDeviceClick_setActive() { + when(mCachedBluetoothDevice.getDevice()).thenReturn(mDevice); + Pair 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(); + } }