Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13396aeb authored by Jason Hsu's avatar Jason Hsu Committed by Android (Google) Code Review
Browse files

Merge "Refresh to show/hide hearing device input preference" into main

parents 26d4954d be80a2c4
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -56,6 +56,10 @@ public class BluetoothDetailsHearingDeviceInputRoutingController extends

    private final HearingAidAudioRoutingHelper mAudioRoutingHelper;
    private final AudioManager mAudioManager;
    @Nullable
    PreferenceCategory mPreferenceContainer;
    @Nullable
    private HearingDeviceInputRoutingPreference mPreference;

    public BluetoothDetailsHearingDeviceInputRoutingController(
            @NonNull Context context,
@@ -92,15 +96,27 @@ public class BluetoothDetailsHearingDeviceInputRoutingController extends

    @Override
    protected void init(PreferenceScreen screen) {
        PreferenceCategory hearingCategory = screen.findPreference(KEY_HEARING_DEVICE_GROUP);
        if (hearingCategory != null) {
            hearingCategory.addPreference(
                    createInputRoutingPreference(hearingCategory.getContext()));
        mPreferenceContainer = screen.findPreference(KEY_HEARING_DEVICE_GROUP);
        if (mPreferenceContainer != null) {
            mPreference = createInputRoutingPreference(mPreferenceContainer.getContext());
            mPreferenceContainer.addPreference(mPreference);
        }
    }

    @Override
    protected void refresh() {}
    protected void refresh() {
        if (mPreferenceContainer == null || mPreference == null) {
            return;
        }
        if (mPreference.isVisible() && !isAvailable()) {
            if (mPreference.isDialogOpen()) {
                mPreference.getDialog().dismiss();
            }
            mPreference.setVisible(false);
        } else if (!mPreference.isVisible() && isAvailable()) {
            mPreference.setVisible(true);
        }
    }

    @Nullable
    @Override
+30 −0
Original line number Diff line number Diff line
@@ -179,6 +179,36 @@ public class BluetoothDetailsHearingDeviceInputRoutingControllerTest extends
        assertThat(mController.isAvailable()).isTrue();
    }

    @Test
    public void refresh_validInputChangeToNotValidInput_noPreference() {
        when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
        AudioDeviceInfo[] mockInfo = new AudioDeviceInfo[] {mockTestAddressInfo(TEST_ADDRESS)};
        when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn(mockInfo);
        when(mCachedDevice.getProfiles()).thenReturn(List.of(mHapClientProfile));
        mController.init(mScreen);

        when(mCachedDevice.getProfiles()).thenReturn(Collections.emptyList());
        mController.refresh();

        Preference pref = mScreen.findPreference(KEY_HEARING_DEVICE_INPUT_ROUTING);
        assertThat(pref.isVisible()).isFalse();
    }

    @Test
    public void refresh_notValidInputChangeToValidInput_expectedPreference() {
        when(mCachedDevice.getAddress()).thenReturn(TEST_ADDRESS);
        AudioDeviceInfo[] mockInfo = new AudioDeviceInfo[] {mockTestAddressInfo(TEST_ADDRESS)};
        when(mAudioManager.getDevices(AudioManager.GET_DEVICES_INPUTS)).thenReturn(mockInfo);
        when(mCachedDevice.getProfiles()).thenReturn(Collections.emptyList());
        mController.init(mScreen);

        when(mCachedDevice.getProfiles()).thenReturn(List.of(mHapClientProfile));
        mController.refresh();

        Preference pref = mScreen.findPreference(KEY_HEARING_DEVICE_INPUT_ROUTING);
        assertThat(pref.isVisible()).isTrue();
    }

    private AudioDeviceInfo mockTestAddressInfo(String address) {
        final AudioDeviceInfo info = mock(AudioDeviceInfo.class);
        when(info.getType()).thenReturn(AudioDeviceInfo.TYPE_BLE_HEADSET);