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

Commit cf445877 authored by Jungshik Jang's avatar Jungshik Jang
Browse files

Use id to find proper HdmiDeviceInfo instead of ojbect itself.

TvInputHardwareManager manages internal device info and update
it by remove or add method of List collection. However,
HdmiDeviceInfo overrides equals method and remove may not work
if incoming HdmiDeviceInfo has different power status.
Instead, this change iterates all HdmiDeviceInfo and compares
id of HdmiDeviceInfo.

Bug: 17145753
Change-Id: Ia5de3e33cf05b28fa2bd108d99e78de09b838fb3
parent 50afbb30
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -958,7 +958,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                Object obj = null;
                switch (status) {
                    case HdmiControlManager.DEVICE_EVENT_ADD_DEVICE: {
                        if (!mHdmiDeviceList.contains(deviceInfo)) {
                        if (findHdmiDeviceInfo(deviceInfo.getId()) == null) {
                            mHdmiDeviceList.add(deviceInfo);
                        } else {
                            Slog.w(TAG, "The list already contains " + deviceInfo + "; ignoring.");
@@ -969,7 +969,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                        break;
                    }
                    case HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE: {
                        if (!mHdmiDeviceList.remove(deviceInfo)) {
                        HdmiDeviceInfo originalDeviceInfo = findHdmiDeviceInfo(deviceInfo.getId());
                        if (!mHdmiDeviceList.remove(originalDeviceInfo)) {
                            Slog.w(TAG, "The list doesn't contain " + deviceInfo + "; ignoring.");
                            return;
                        }
@@ -978,13 +979,14 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                        break;
                    }
                    case HdmiControlManager.DEVICE_EVENT_UPDATE_DEVICE: {
                        if (!mHdmiDeviceList.remove(deviceInfo)) {
                        HdmiDeviceInfo originalDeviceInfo = findHdmiDeviceInfo(deviceInfo.getId());
                        if (!mHdmiDeviceList.remove(originalDeviceInfo)) {
                            Slog.w(TAG, "The list doesn't contain " + deviceInfo + "; ignoring.");
                            return;
                        }
                        mHdmiDeviceList.add(deviceInfo);
                        messageType = ListenerHandler.HDMI_DEVICE_UPDATED;
                        String inputId = mHdmiInputIdMap.get(deviceInfo.getLogicalAddress());
                        String inputId = mHdmiInputIdMap.get(deviceInfo.getId());
                        SomeArgs args = SomeArgs.obtain();
                        args.arg1 = inputId;
                        args.arg2 = deviceInfo;
@@ -1001,6 +1003,15 @@ class TvInputHardwareManager implements TvInputHal.Callback {
                }
            }
        }

        private HdmiDeviceInfo findHdmiDeviceInfo(int id) {
            for (HdmiDeviceInfo info : mHdmiDeviceList) {
                if (info.getId() == id) {
                    return info;
                }
            }
            return null;
        }
    }

    private final class HdmiSystemAudioModeChangeListener extends