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

Commit f5abcaa4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix issue with internal Active Source state tracking"

parents 55643e3a 45c5ad3b
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -39,15 +39,19 @@ public class ActiveSourceAction extends HdmiCecFeatureAction {
    @Override
    boolean start() {
        mState = STATE_STARTED;
        sendCommand(HdmiCecMessageBuilder.buildActiveSource(getSourceAddress(),
                source().mService.getPhysicalAddress()));
        int logicalAddress = getSourceAddress();
        int physicalAddress = getSourcePath();

        sendCommand(HdmiCecMessageBuilder.buildActiveSource(logicalAddress, physicalAddress));

        if (source().getType() == HdmiDeviceInfo.DEVICE_PLAYBACK) {
            // Reports menu-status active to receive <User Control Pressed>.
            sendCommand(
                    HdmiCecMessageBuilder.buildReportMenuStatus(getSourceAddress(), mDestination,
                    HdmiCecMessageBuilder.buildReportMenuStatus(logicalAddress, mDestination,
                            Constants.MENU_STATE_ACTIVATED));
        }

        source().setActiveSource(logicalAddress, physicalAddress);
        mState = STATE_FINISHED;
        finish();
        return true;
+0 −4
Original line number Diff line number Diff line
@@ -3249,7 +3249,6 @@ public class HdmiControlService extends SystemService {
            playback.setIsActiveSource(true);
            playback.wakeUpIfActiveSource();
            playback.maySendActiveSource(source);
            setActiveSource(playback.mAddress, physicalAddress);
        }

        if (deviceType == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
@@ -3260,7 +3259,6 @@ public class HdmiControlService extends SystemService {
                audioSystem.setIsActiveSource(true);
                audioSystem.wakeUpIfActiveSource();
                audioSystem.maySendActiveSource(source);
                setActiveSource(audioSystem.mAddress, physicalAddress);
            }
        }
    }
@@ -3283,13 +3281,11 @@ public class HdmiControlService extends SystemService {
            if (audioSystem != null) {
                audioSystem.setIsActiveSource(false);
            }
            setActiveSource(playback.mAddress, physicalAddress);
        } else {
            if (audioSystem != null) {
                audioSystem.setIsActiveSource(true);
                audioSystem.wakeUpIfActiveSource();
                audioSystem.maySendActiveSource(sourceAddress);
                setActiveSource(audioSystem.mAddress, physicalAddress);
            }
        }
    }
+20 −0
Original line number Diff line number Diff line
@@ -143,6 +143,26 @@ public class ActiveSourceActionTest {
        assertThat(mNativeWrapper.getResultMessages()).contains(menuStatus);
    }

    @Test
    public void playbackDevice_updatesActiveSourceState() {
        HdmiCecLocalDevicePlayback playbackDevice = new HdmiCecLocalDevicePlayback(
                mHdmiControlService);
        playbackDevice.init();
        mLocalDevices.add(playbackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();

        HdmiCecFeatureAction action = new com.android.server.hdmi.ActiveSourceAction(
                playbackDevice, ADDR_TV);
        playbackDevice.addAndStartAction(action);
        mTestLooper.dispatchAll();

        assertThat(playbackDevice.getActiveSource().logicalAddress).isEqualTo(
                playbackDevice.mAddress);
        assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress);
        assertThat(playbackDevice.mIsActiveSource).isTrue();
    }

    @Test
    public void audioDevice_sendsActiveSource_noMenuStatus() {
        HdmiCecLocalDeviceAudioSystem audioDevice = new HdmiCecLocalDeviceAudioSystem(
+15 −0
Original line number Diff line number Diff line
@@ -617,4 +617,19 @@ public class HdmiCecLocalDevicePlaybackTest {

        assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
    }

    @Test
    public void handleSetStreamPath_afterHotplug_hasCorrectActiveSource() {
        mHdmiControlService.onHotplug(1, false);
        mHdmiControlService.onHotplug(1, true);

        HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,
                mPlaybackPhysicalAddress);
        mHdmiCecLocalDevicePlayback.dispatchMessage(setStreamPath);
        mTestLooper.dispatchAll();

        assertThat(mHdmiCecLocalDevicePlayback.getActiveSource().logicalAddress).isEqualTo(
                mHdmiCecLocalDevicePlayback.getDeviceInfo().getLogicalAddress());
        assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
    }
}