Merge "[hearing devices page] Launch 'Hearing decice controls' to Accessibility hearing device page."

This commit is contained in:
Jason Hsu
2023-01-10 09:05:55 +00:00
committed by Android (Google) Code Review
2 changed files with 62 additions and 3 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settings.bluetooth;
import static com.android.settings.bluetooth.BluetoothDeviceDetailsFragment.FEATURE_HEARING_DEVICE_CONTROLS_ORDER; import static com.android.settings.bluetooth.BluetoothDeviceDetailsFragment.FEATURE_HEARING_DEVICE_CONTROLS_ORDER;
import android.content.Context; import android.content.Context;
import android.text.TextUtils;
import android.util.FeatureFlagUtils; import android.util.FeatureFlagUtils;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -27,16 +28,22 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; 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.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.Lifecycle; 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. * 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_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, public BluetoothDetailsHearingDeviceControlsController(Context context,
PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle) { PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle) {
@@ -70,12 +77,30 @@ public class BluetoothDetailsHearingDeviceControlsController extends BluetoothDe
return KEY_FEATURE_CONTROLS_GROUP; 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) { private Preference createHearingDeviceControlsPreference(Context context) {
final Preference preference = new Preference(context); final Preference preference = new Preference(context);
preference.setKey(KEY_HEARING_DEVICE_CONTROLS); preference.setKey(KEY_HEARING_DEVICE_CONTROLS);
preference.setTitle(context.getString(R.string.bluetooth_device_controls_title)); preference.setTitle(context.getString(R.string.bluetooth_device_controls_title));
preference.setSummary(context.getString(R.string.bluetooth_device_controls_summary)); preference.setSummary(context.getString(R.string.bluetooth_device_controls_summary));
preference.setOnPreferenceClickListener(this);
return preference; return preference;
} }
private void launchAccessibilityHearingDeviceSettings() {
new SubSettingLauncher(mContext)
.setDestination(AccessibilityHearingAidsFragment.class.getName())
.setSourceMetricsCategory(
((BluetoothDeviceDetailsFragment) mFragment).getMetricsCategory())
.launch();
}
} }

View File

@@ -18,13 +18,24 @@ package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.util.FeatureFlagUtils; 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.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
@@ -36,14 +47,18 @@ public class BluetoothDetailsHearingDeviceControlsControllerTest extends
@Rule @Rule
public final MockitoRule mockito = MockitoJUnit.rule(); public final MockitoRule mockito = MockitoJUnit.rule();
@Captor
private ArgumentCaptor<Intent> mIntentArgumentCaptor;
private BluetoothDetailsHearingDeviceControlsController mController; private BluetoothDetailsHearingDeviceControlsController mController;
@Override @Override
public void setUp() { public void setUp() {
super.setUp(); super.setUp();
mController = new BluetoothDetailsHearingDeviceControlsController(mContext, mFragment, FakeFeatureFactory.setupForTest();
mController = new BluetoothDetailsHearingDeviceControlsController(mActivity, mFragment,
mCachedDevice, mLifecycle); mCachedDevice, mLifecycle);
when(mCachedDevice.isHearingAidDevice()).thenReturn(true);
} }
@Test @Test
@@ -63,4 +78,23 @@ public class BluetoothDetailsHearingDeviceControlsControllerTest extends
assertThat(mController.isAvailable()).isFalse(); 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);
}
} }