diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsController.java index 585a5f9a2d0..6425814a9e3 100644 --- a/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsController.java +++ b/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsController.java @@ -19,6 +19,7 @@ package com.android.settings.bluetooth; import static com.android.settings.bluetooth.BluetoothDeviceDetailsFragment.FEATURE_HEARING_DEVICE_CONTROLS_ORDER; import android.content.Context; +import android.text.TextUtils; import android.util.FeatureFlagUtils; import androidx.preference.Preference; @@ -27,16 +28,22 @@ import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.accessibility.AccessibilityHearingAidsFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.lifecycle.Lifecycle; +import com.google.common.annotations.VisibleForTesting; + /** * The controller of the hearing device controls in the bluetooth detail settings. */ -public class BluetoothDetailsHearingDeviceControlsController extends BluetoothDetailsController { +public class BluetoothDetailsHearingDeviceControlsController extends BluetoothDetailsController + implements Preference.OnPreferenceClickListener { private static final String KEY_FEATURE_CONTROLS_GROUP = "feature_controls_group"; - private static final String KEY_HEARING_DEVICE_CONTROLS = "hearing_device_controls"; + @VisibleForTesting + static final String KEY_HEARING_DEVICE_CONTROLS = "hearing_device_controls"; public BluetoothDetailsHearingDeviceControlsController(Context context, PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle) { @@ -70,12 +77,30 @@ public class BluetoothDetailsHearingDeviceControlsController extends BluetoothDe return KEY_FEATURE_CONTROLS_GROUP; } + @Override + public boolean onPreferenceClick(Preference preference) { + if (TextUtils.equals(preference.getKey(), KEY_HEARING_DEVICE_CONTROLS)) { + launchAccessibilityHearingDeviceSettings(); + return true; + } + return false; + } + private Preference createHearingDeviceControlsPreference(Context context) { final Preference preference = new Preference(context); preference.setKey(KEY_HEARING_DEVICE_CONTROLS); preference.setTitle(context.getString(R.string.bluetooth_device_controls_title)); preference.setSummary(context.getString(R.string.bluetooth_device_controls_summary)); + preference.setOnPreferenceClickListener(this); return preference; } + + private void launchAccessibilityHearingDeviceSettings() { + new SubSettingLauncher(mContext) + .setDestination(AccessibilityHearingAidsFragment.class.getName()) + .setSourceMetricsCategory( + ((BluetoothDeviceDetailsFragment) mFragment).getMetricsCategory()) + .launch(); + } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsControllerTest.java index 7590d617075..bf4e055c493 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHearingDeviceControlsControllerTest.java @@ -18,13 +18,24 @@ package com.android.settings.bluetooth; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.content.Context; +import android.content.Intent; import android.util.FeatureFlagUtils; +import androidx.preference.Preference; + +import com.android.settings.SettingsActivity; +import com.android.settings.accessibility.AccessibilityHearingAidsFragment; +import com.android.settings.testutils.FakeFeatureFactory; + import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; @@ -36,14 +47,18 @@ public class BluetoothDetailsHearingDeviceControlsControllerTest extends @Rule public final MockitoRule mockito = MockitoJUnit.rule(); + @Captor + private ArgumentCaptor mIntentArgumentCaptor; private BluetoothDetailsHearingDeviceControlsController mController; @Override public void setUp() { super.setUp(); - mController = new BluetoothDetailsHearingDeviceControlsController(mContext, mFragment, + FakeFeatureFactory.setupForTest(); + mController = new BluetoothDetailsHearingDeviceControlsController(mActivity, mFragment, mCachedDevice, mLifecycle); + when(mCachedDevice.isHearingAidDevice()).thenReturn(true); } @Test @@ -63,4 +78,23 @@ public class BluetoothDetailsHearingDeviceControlsControllerTest extends assertThat(mController.isAvailable()).isFalse(); } + + @Test + public void onPreferenceClick_hearingDeviceControlsKey_LaunchExpectedFragment() { + final Preference hearingControlsKeyPreference = new Preference(mContext); + hearingControlsKeyPreference.setKey( + BluetoothDetailsHearingDeviceControlsController.KEY_HEARING_DEVICE_CONTROLS); + + mController.onPreferenceClick(hearingControlsKeyPreference); + + assertStartActivityWithExpectedFragment(mActivity, + AccessibilityHearingAidsFragment.class.getName()); + } + + private void assertStartActivityWithExpectedFragment(Context mockContext, String fragmentName) { + verify(mockContext).startActivity(mIntentArgumentCaptor.capture()); + assertThat(mIntentArgumentCaptor.getValue() + .getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(fragmentName); + } }