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

Commit e30da3ff authored by Paul Colța's avatar Paul Colța Committed by Android (Google) Code Review
Browse files

Merge changes from topic "request-active-source-action" into main

* changes:
  HDMI: RequestActiveSource's callback updates local AS only when invalid
  HDMI: Update local active source in RequestActiveSourceAction callback
parents 13eb015d 4c55329b
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -194,10 +194,14 @@ public final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
            addAndStartAction(new RequestActiveSourceAction(this, new IHdmiControlCallback.Stub() {
                @Override
                public void onComplete(int result) {
                    if (result != HdmiControlManager.RESULT_SUCCESS) {
                    if (!mService.getLocalActiveSource().isValid()
                            && result != HdmiControlManager.RESULT_SUCCESS) {
                        mService.sendCecCommand(HdmiCecMessageBuilder.buildActiveSource(
                                getDeviceInfo().getLogicalAddress(),
                                getDeviceInfo().getPhysicalAddress()));
                        updateActiveSource(getDeviceInfo().getLogicalAddress(),
                                getDeviceInfo().getPhysicalAddress(),
                                "RequestActiveSourceAction#finishWithCallback()");
                    }
                }
            }));
+25 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2;
import static com.android.server.hdmi.Constants.ADDR_RECORDER_1;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiCecLocalDevice.ActiveSource;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;

import static com.google.common.truth.Truth.assertThat;
@@ -1712,13 +1713,14 @@ public class HdmiCecLocalDeviceTvTest {
                HdmiCecMessageBuilder.buildRequestActiveSource(ADDR_TV);
        HdmiCecMessage activeSourceFromTv =
                HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);

        mHdmiControlService.getHdmiCecNetwork().clearLocalDevices();
        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();

        assertThat(mNativeWrapper.getResultMessages()).contains(requestActiveSource);
        assertThat(mHdmiControlService.getLocalActiveSource()).isEqualTo(
                new ActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS));
        mNativeWrapper.clearResultMessages();
        mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
        mTestLooper.dispatchAll();
@@ -1728,6 +1730,28 @@ public class HdmiCecLocalDeviceTvTest {
        mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS);
        mTestLooper.dispatchAll();
        assertThat(mNativeWrapper.getResultMessages()).contains(activeSourceFromTv);
        assertThat(mHdmiControlService.getLocalActiveSource()).isEqualTo(
                new ActiveSource(mTvLogicalAddress, mTvPhysicalAddress));
    }

    @Test
    public void requestActiveSourceActionComplete_validLocalActiveSource_doNotSendActiveSource() {
        HdmiCecMessage requestActiveSource =
                HdmiCecMessageBuilder.buildRequestActiveSource(ADDR_TV);
        HdmiCecMessage activeSourceFromTv =
                HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
        mHdmiControlService.getHdmiCecNetwork().clearLocalDevices();
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();

        assertThat(mNativeWrapper.getResultMessages()).contains(requestActiveSource);
        mHdmiControlService.setActiveSource(mTvLogicalAddress, mTvPhysicalAddress,
                "HdmiCecLocalDeviceTvTest");
        mNativeWrapper.clearResultMessages();
        mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS * 2);
        mTestLooper.dispatchAll();

        assertThat(mNativeWrapper.getResultMessages()).doesNotContain(activeSourceFromTv);
    }

    @Test