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

Commit 4fdb9ecd authored by Angela Wang's avatar Angela Wang
Browse files

Fix HearingDevicesDialogDelegateTest failed

1. Spinner.setSelection(index) in onItemSelected() callback will cause
   onItemSlected() callback get called again and result in an infinite
   loop. Remove this line to avoid this issue.
2. HapClientProfile.selectPreset() is called in onItemSelected()
   callback to sync the current selection to remote device. When
   refreshing the UI no matter on success/failure from remote, we should
   use Spinner.setSelection(index, false) instead of
   Spinner.setSelection(index) to avoid envoke onItemSelected() and
   HapClientProfile.selectPreset() again

Flag: EXEMPT bugfix
Bug: 354602601
Test: atest HearingDevicesDialogDelegateTest
Change-Id: Id81c63638f13a0723e2e4c941888c485a7e497db
parent ad9cfa87
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -198,7 +198,7 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
    }

    @Override
    public void onDeviceItemOnClicked(@NonNull DeviceItem deviceItem, @NonNull View view) {
    public void onDeviceItemClicked(@NonNull DeviceItem deviceItem, @NonNull View view) {
        CachedBluetoothDevice cachedBluetoothDevice = deviceItem.getCachedBluetoothDevice();
        switch (deviceItem.getType()) {
            case ACTIVE_MEDIA_BLUETOOTH_DEVICE, CONNECTED_BLUETOOTH_DEVICE ->
@@ -346,7 +346,6 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                mPresetsController.selectPreset(
                        mPresetsController.getAllPresetInfo().get(position).getIndex());
                mPresetSpinner.setSelection(position);
            }

            @Override
@@ -413,7 +412,7 @@ public class HearingDevicesDialogDelegate implements SystemUIDialog.Delegate,
            final int size = mPresetInfoAdapter.getCount();
            for (int position = 0; position < size; position++) {
                if (presetInfos.get(position).getIndex() == activePresetIndex) {
                    mPresetSpinner.setSelection(position);
                    mPresetSpinner.setSelection(position, /* animate= */ false);
                }
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ public class HearingDevicesListAdapter extends RecyclerView.Adapter<RecyclerView
         * @param deviceItem bluetooth device item
         * @param view       the view that was clicked
         */
        void onDeviceItemOnClicked(@NonNull DeviceItem deviceItem, @NonNull View view);
        void onDeviceItemClicked(@NonNull DeviceItem deviceItem, @NonNull View view);
    }

    private static class DeviceItemViewHolder extends RecyclerView.ViewHolder {
@@ -119,7 +119,7 @@ public class HearingDevicesListAdapter extends RecyclerView.Adapter<RecyclerView

        public void bindView(DeviceItem item, HearingDeviceItemCallback callback) {
            mContainer.setEnabled(item.isEnabled());
            mContainer.setOnClickListener(view -> callback.onDeviceItemOnClicked(item, view));
            mContainer.setOnClickListener(view -> callback.onDeviceItemClicked(item, view));
            Integer backgroundResId = item.getBackground();
            if (backgroundResId != null) {
                mContainer.setBackground(mContext.getDrawable(item.getBackground()));
+1 −1
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ public class HearingDevicesDialogDelegateTest extends SysuiTestCase {
        setUpDeviceListDialog();
        when(mHearingDeviceItem.getType()).thenReturn(DeviceItemType.CONNECTED_BLUETOOTH_DEVICE);

        mDialogDelegate.onDeviceItemOnClicked(mHearingDeviceItem, new View(mContext));
        mDialogDelegate.onDeviceItemClicked(mHearingDeviceItem, new View(mContext));

        verify(mCachedDevice).disconnect();
    }