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

Commit cb9de2e5 authored by Nathalie Le Clair's avatar Nathalie Le Clair
Browse files

Replace mIsActiveSource by isActiveSource()

Bug: 166760714
Test: atest HdmiCecLocalDevicePlaybackTest

Change-Id: I3244ecb9bd1976d6cd258e777acab3a61ec229bc
parent 2c313a31
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.hdmi;

import android.annotation.CallSuper;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.IHdmiControlCallback;
@@ -170,7 +171,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
    void onHotplug(int portId, boolean connected) {
        assertRunOnServiceThread();
        mCecMessageCache.flushAll();
        // We'll not clear mIsActiveSource on the hotplug event to pass CETC 11.2.2-2 ~ 3.
        // We'll not invalidate the active source on the hotplug event to pass CETC 11.2.2-2 ~ 3.
        if (!connected) {
            getWakeLock().release();
        }
@@ -183,13 +184,12 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
        if (!mService.isControlEnabled()) {
            return;
        }
        if (mIsActiveSource) {
        if (isActiveSource()) {
            mService.sendCecCommand(HdmiCecMessageBuilder.buildInactiveSource(
                    mAddress, mService.getPhysicalAddress()));
        }
        boolean wasActiveSource = mIsActiveSource;
        boolean wasActiveSource = isActiveSource();
        // Invalidate the internal active source record when goes to standby
        // This set will also update mIsActiveSource
        mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS,
                "HdmiCecLocalDevicePlayback#onStandby()");
        if (initiatedByCec || !mAutoTvOff || !wasActiveSource) {
@@ -234,12 +234,13 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
    }

    @Override
    @CallSuper
    @ServiceThreadOnly
    @VisibleForTesting
    void setIsActiveSource(boolean on) {
    protected void setActiveSource(int logicalAddress, int physicalAddress, String caller) {
        assertRunOnServiceThread();
        super.setIsActiveSource(on);
        if (on) {
        super.setActiveSource(logicalAddress, physicalAddress, caller);
        if (isActiveSource()) {
            getWakeLock().acquire();
        } else {
            getWakeLock().release();
@@ -296,7 +297,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {

    @Override
    protected void wakeUpIfActiveSource() {
        if (!mIsActiveSource) {
        if (!isActiveSource()) {
            return;
        }
        // Wake up the device if the power is in standby mode, or its screen is off -
@@ -451,7 +452,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
    @Override
    protected void dump(final IndentingPrintWriter pw) {
        super.dump(pw);
        pw.println("mIsActiveSource: " + mIsActiveSource);
        pw.println("isActiveSource(): " + isActiveSource());
        pw.println("mAutoTvOff:" + mAutoTvOff);
    }

@@ -472,7 +473,7 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
        @Override
        public void acquire() {
            mWakeLock.acquire();
            HdmiLogger.debug("active source: %b. Wake lock acquired", mIsActiveSource);
            HdmiLogger.debug("active source: %b. Wake lock acquired", isActiveSource());
        }

        @Override
+20 −16
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.hdmi;

import android.annotation.CallSuper;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.hdmi.IHdmiControlCallback;
@@ -36,10 +37,6 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {

    private static final String TAG = "HdmiCecLocalDeviceSource";

    // Indicate if current device is Active Source or not
    @VisibleForTesting
    protected boolean mIsActiveSource = false;

    // Device has cec switch functionality or not.
    // Default is false.
    protected boolean mIsSwitchDevice = HdmiProperties.is_switch().orElse(false);
@@ -78,7 +75,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
        if (mService.getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) {
            mCecMessageCache.flushAll();
        }
        // We'll not clear mIsActiveSource on the hotplug event to pass CETC 11.2.2-2 ~ 3.
        // We'll not invalidate the active source on the hotplug event to pass CETC 11.2.2-2 ~ 3.
        if (connected) {
            mService.wakeUp();
        }
@@ -118,10 +115,21 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
        // Nothing to do.
    }

    @Override
    @CallSuper
    @ServiceThreadOnly
    void setActiveSource(int logicalAddress, int physicalAddress, String caller) {
        boolean wasActiveSource = isActiveSource();
        super.setActiveSource(logicalAddress, physicalAddress, caller);
        if (wasActiveSource && !isActiveSource()) {
            onActiveSourceLost();
        }
    }

    @ServiceThreadOnly
    protected void setActiveSource(int physicalAddress, String caller) {
        assertRunOnServiceThread();
        // Invalidate the internal active source record. This will also update mIsActiveSource.
        // Invalidate the internal active source record.
        ActiveSource activeSource = ActiveSource.of(Constants.ADDR_INVALID, physicalAddress);
        setActiveSource(activeSource, caller);
    }
@@ -135,7 +143,6 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
        if (!getActiveSource().equals(activeSource)) {
            setActiveSource(activeSource, "HdmiCecLocalDeviceSource#handleActiveSource()");
        }
        setIsActiveSource(physicalAddress == mService.getPhysicalAddress());
        updateDevicePowerStatus(logicalAddress, HdmiControlManager.POWER_STATUS_ON);
        if (isRoutingControlFeatureEnabled()) {
            switchInputOnReceivingNewActivePath(physicalAddress);
@@ -241,18 +248,15 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
                physicalAddress, getDeviceInfo().getDeviceType(), message.getSource());
    }

    // Indicates if current device is the active source or not
    @ServiceThreadOnly
    void setIsActiveSource(boolean on) {
        assertRunOnServiceThread();
        boolean wasActiveSource = mIsActiveSource;
        mIsActiveSource = on;
        if (wasActiveSource && !mIsActiveSource) {
            onActiveSourceLost();
        }
    protected boolean isActiveSource() {
        return getActiveSource().equals(getDeviceInfo().getLogicalAddress(),
                getDeviceInfo().getPhysicalAddress());
    }

    protected void wakeUpIfActiveSource() {
        if (!mIsActiveSource) {
        if (!isActiveSource()) {
            return;
        }
        // Wake up the device
@@ -261,7 +265,7 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice {
    }

    protected void maySendActiveSource(int dest) {
        if (!mIsActiveSource) {
        if (!isActiveSource()) {
            return;
        }
        addAndStartAction(new ActiveSourceAction(this, dest));
+16 −25
Original line number Diff line number Diff line
@@ -1596,7 +1596,7 @@ public class HdmiControlService extends SystemService {
                if (isPlaybackDevice()) {
                    // if playback device itself is the active source,
                    // return its own device info.
                    if (playback() != null && playback().mIsActiveSource) {
                    if (playback() != null && playback().isActiveSource()) {
                        return playback().getDeviceInfo();
                    }
                    // Otherwise get the active source and look for it from the device list
@@ -3234,20 +3234,12 @@ public class HdmiControlService extends SystemService {
            mActiveSource.physicalAddress = physicalAddress;
        }
        // If the current device is a source device, check if the current Active Source matches
        // the local device info. Set mIsActiveSource of the local device accordingly.
        // the local device info.
        for (HdmiCecLocalDevice device : getAllLocalDevices()) {
            // mIsActiveSource only exists in source device, ignore this setting if the current
            // device is not an HdmiCecLocalDeviceSource.
            if (!(device instanceof HdmiCecLocalDeviceSource)) {
                device.addActiveSourceHistoryItem(new ActiveSource(logicalAddress, physicalAddress),
                        false, caller);
                continue;
            }
            boolean deviceIsActiveSource =
                    logicalAddress == device.getDeviceInfo().getLogicalAddress()
                            && physicalAddress == getPhysicalAddress();

            ((HdmiCecLocalDeviceSource) device).setIsActiveSource(deviceIsActiveSource);
            device.addActiveSourceHistoryItem(new ActiveSource(logicalAddress, physicalAddress),
                    deviceIsActiveSource, caller);
        }
@@ -3263,17 +3255,18 @@ public class HdmiControlService extends SystemService {
        // playback will claim active source. Otherwise audio system will.
        if (deviceType == HdmiDeviceInfo.DEVICE_PLAYBACK) {
            HdmiCecLocalDevicePlayback playback = playback();
            playback.setIsActiveSource(true);
            playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
                    "HdmiControlService#setAndBroadcastActiveSource");
            playback.wakeUpIfActiveSource();
            playback.maySendActiveSource(source);
        }

        if (deviceType == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
            HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
            if (playback() != null) {
                audioSystem.setIsActiveSource(false);
            } else {
                audioSystem.setIsActiveSource(true);
            if (playback() == null) {
                audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
                        physicalAddress,
                        "HdmiControlService#setAndBroadcastActiveSource");
                audioSystem.wakeUpIfActiveSource();
                audioSystem.maySendActiveSource(source);
            }
@@ -3292,20 +3285,18 @@ public class HdmiControlService extends SystemService {
        HdmiCecLocalDevicePlayback playback = playback();
        HdmiCecLocalDeviceAudioSystem audioSystem = audioSystem();
        if (playback != null) {
            playback.setIsActiveSource(true);
            playback.setActiveSource(playback.getDeviceInfo().getLogicalAddress(), physicalAddress,
                    "HdmiControlService#setAndBroadcastActiveSource");
            playback.wakeUpIfActiveSource();
            playback.maySendActiveSource(sourceAddress);
            if (audioSystem != null) {
                audioSystem.setIsActiveSource(false);
            }
        } else {
            if (audioSystem != null) {
                audioSystem.setIsActiveSource(true);
        } else if (audioSystem != null) {
            audioSystem.setActiveSource(audioSystem.getDeviceInfo().getLogicalAddress(),
                    physicalAddress,
                    "HdmiControlService#setAndBroadcastActiveSource");
            audioSystem.wakeUpIfActiveSource();
            audioSystem.maySendActiveSource(sourceAddress);
        }
    }
    }

    @ServiceThreadOnly
    void setLastInputForMhl(int portId) {
+1 −1
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ public class ActiveSourceActionTest {
        assertThat(playbackDevice.getActiveSource().logicalAddress).isEqualTo(
                playbackDevice.mAddress);
        assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress);
        assertThat(playbackDevice.mIsActiveSource).isTrue();
        assertThat(playbackDevice.isActiveSource()).isTrue();
    }

    @Test
+85 −5
Original line number Diff line number Diff line
@@ -30,10 +30,15 @@ import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF;

import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
import android.media.AudioManager;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.IThermalService;
import android.os.Looper;
import android.os.PowerManager;
import android.os.test.TestLooper;
import android.platform.test.annotations.Presubmit;

@@ -47,6 +52,8 @@ import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;

@@ -81,8 +88,17 @@ public class HdmiCecLocalDeviceAudioSystemTest {
    private HdmiPortInfo[] mHdmiPortInfo;
    private boolean mWokenUp;

    @Mock private IPowerManager mIPowerManagerMock;
    @Mock private IThermalService mIThermalServiceMock;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        Context context = InstrumentationRegistry.getTargetContext();
        mMyLooper = mTestLooper.getLooper();
        PowerManager powerManager = new PowerManager(context, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mMyLooper));
        mHdmiControlService =
            new HdmiControlService(InstrumentationRegistry.getTargetContext()) {
                @Override
@@ -166,6 +182,11 @@ public class HdmiCecLocalDeviceAudioSystemTest {
                            return defVal;
                    }
                }

                @Override
                PowerManager getPowerManager() {
                    return powerManager;
                }
            };

        mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
@@ -173,11 +194,6 @@ public class HdmiCecLocalDeviceAudioSystemTest {
        mMyLooper = mTestLooper.getLooper();
        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService);
        mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService) {
            @Override
            void setIsActiveSource(boolean on) {
                mIsActiveSource = on;
            }

            @Override
            protected int getPreferredAddress() {
                return ADDR_PLAYBACK_1;
@@ -827,4 +843,68 @@ public class HdmiCecLocalDeviceAudioSystemTest {

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

    @Test
    public void setActiveSource_localDevice_playback() {
        mHdmiControlService.setActiveSource(mHdmiCecLocalDevicePlayback.mAddress,
                SELF_PHYSICAL_ADDRESS,
                "HdmiControlServiceTest");

        assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
                mHdmiCecLocalDevicePlayback.mAddress);
        assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
                SELF_PHYSICAL_ADDRESS);
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isTrue();
        assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
    }

    @Test
    public void setActiveSource_localDevice_audio() {
        mHdmiControlService.setActiveSource(mHdmiCecLocalDeviceAudioSystem.mAddress,
                SELF_PHYSICAL_ADDRESS,
                "HdmiControlServiceTest");

        assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
                mHdmiCecLocalDeviceAudioSystem.mAddress);
        assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
                SELF_PHYSICAL_ADDRESS);
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
        assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isTrue();
    }

    @Test
    public void setActiveSource_remoteDevice() {
        mHdmiControlService.setActiveSource(Constants.ADDR_TV, 0x0000, "HdmiControlServiceTest");

        assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
                Constants.ADDR_TV);
        assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x000);
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
        assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
    }

    @Test
    public void setActiveSource_nonCecDevice() {
        mHdmiControlService.setActiveSource(Constants.ADDR_INVALID, 0x1234,
                "HdmiControlServiceTest");

        assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
                Constants.ADDR_INVALID);
        assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(0x1234);
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
        assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
    }

    @Test
    public void setActiveSource_unknown() {
        mHdmiControlService.setActiveSource(Constants.ADDR_INVALID,
                Constants.INVALID_PHYSICAL_ADDRESS, "HdmiControlServiceTest");

        assertThat(mHdmiControlService.getLocalActiveSource().logicalAddress).isEqualTo(
                Constants.ADDR_INVALID);
        assertThat(mHdmiControlService.getLocalActiveSource().physicalAddress).isEqualTo(
                Constants.INVALID_PHYSICAL_ADDRESS);
        assertThat(mHdmiCecLocalDevicePlayback.isActiveSource()).isFalse();
        assertThat(mHdmiCecLocalDeviceAudioSystem.isActiveSource()).isFalse();
    }
}
Loading