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

Commit b887fa01 authored by Amy's avatar Amy Committed by Nick Chalko
Browse files

Handle atom power off.

Test: local tested on atom.

Change-Id: I3a682fecf5dfcf9a78e53afb3c4550068fcf299d

Bug: 80296334, 80295616
parent 595a183f
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -47,6 +47,18 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDevice {
            mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true);*/
    }

    @Override
    @ServiceThreadOnly
    protected void onStandby(boolean initiatedByCec, int standbyAction) {
        assertRunOnServiceThread();
        if (setSystemAudioMode(false)) {
          mService.sendCecCommand(
              HdmiCecMessageBuilder.buildSetSystemAudioMode(
                  mAddress, Constants.ADDR_BROADCAST, false)
          );
        }
    }

    @Override
    @ServiceThreadOnly
    protected void onAddressAllocated(int logicalAddress, int reason) {
+8 −2
Original line number Diff line number Diff line
@@ -2041,6 +2041,10 @@ public class HdmiControlService extends SystemService {
        return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_TV);
    }

    boolean isAudioSystemDevice() {
        return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
    }

    boolean isTvDeviceEnabled() {
        return isTvDevice() && tv() != null;
    }
@@ -2229,9 +2233,11 @@ public class HdmiControlService extends SystemService {
            device.onStandby(mStandbyMessageReceived, standbyAction);
        }
        mStandbyMessageReceived = false;
        if (!isAudioSystemDevice()) {
            mCecController.setOption(OptionKey.SYSTEM_CEC_CONTROL, false);
            mMhlController.setOption(OPTION_MHL_SERVICE_CONTROL, DISABLED);
        }
    }

    private void addVendorCommandListener(IHdmiVendorCommandListener listener, int deviceType) {
        VendorCommandListenerRecord record = new VendorCommandListenerRecord(listener, deviceType);
+16 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
import static com.android.server.hdmi.HdmiControlService.STANDBY_SCREEN_OFF;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.assertEquals;
@@ -41,6 +42,7 @@ import org.junit.runners.JUnit4;
 */
public class HdmiCecLocalDeviceAudioSystemTest {

    private static final String TAG = "HdmiCecLocalDeviceAudioSystemTest";
    private HdmiControlService mHdmiControlService;
    private HdmiCecController mHdmiCecController;
    private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
@@ -237,4 +239,18 @@ public class HdmiCecLocalDeviceAudioSystemTest {
        assertEquals(expectMessage, mNativeWrapper.getResultMessage());
        assertTrue(mMusicMute);
    }

    @Test
    public void onStandbyAudioSystem_currentSystemAudioControlOn() {
        // Set system audio control on first
        mHdmiCecLocalDeviceAudioSystem.setSystemAudioMode(true);

        // Check if standby correctly turns off the feature
        mHdmiCecLocalDeviceAudioSystem.onStandby(false, STANDBY_SCREEN_OFF);
        mTestLooper.dispatchAll();
        HdmiCecMessage expectMessage = HdmiCecMessageBuilder
            .buildSetSystemAudioMode(ADDR_AUDIO_SYSTEM, ADDR_BROADCAST, false);
        assertEquals(expectMessage, mNativeWrapper.getResultMessage());
        assertTrue(mMusicMute);
    }
}
+33 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.server.hdmi;

import static android.hardware.hdmi.HdmiDeviceInfo.DEVICE_TV;
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.Constants.ADDR_UNREGISTERED;
@@ -25,7 +26,9 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiPortInfo;
import android.os.PowerManager;
import android.os.test.TestLooper;
import android.support.test.filters.SmallTest;
import android.os.MessageQueue;
@@ -91,10 +94,29 @@ public class HdmiCecLocalDeviceTest {
    private int callbackResult;
    private HdmiCecMessageValidator mMessageValidator;
    private static byte[] param;
    private boolean mStandbyMessageReceived;
    private boolean isControlEnabled;
    private int mPowerStatus;

    @Before
    public void SetUp() {
        mHdmiControlService = new HdmiControlService(null);
        mHdmiControlService = new HdmiControlService(null) {
            @Override
            boolean isControlEnabled() {
                return isControlEnabled;
            }

            @Override
            boolean isPowerOnOrTransient() {
                return mPowerStatus == HdmiControlManager.POWER_STATUS_ON
                    || mPowerStatus == HdmiControlManager.POWER_STATUS_TRANSIENT_TO_ON;
            }

            @Override
            void standby() {
                mStandbyMessageReceived = true;
            }
        };
        mHdmiControlService.setIoLooper(mTestLooper.getLooper());
        mHdmiCecController = HdmiCecController.createWithNativeWrapper(
            mHdmiControlService, new FakeNativeWrapper());
@@ -155,4 +177,14 @@ public class HdmiCecLocalDeviceTest {
        mTestLooper.dispatchAll();
        assertEquals(0, callbackResult);
    }

    @Test
    public void handleStandby_isPowerOn() {
        mPowerStatus = HdmiControlManager.POWER_STATUS_ON;
        isControlEnabled = true;
        assertFalse(mStandbyMessageReceived);
        mHdmiLocalDevice.handleStandby(
            HdmiCecMessageBuilder.buildStandby(ADDR_TV, ADDR_AUDIO_SYSTEM));
        assertTrue(mStandbyMessageReceived);
    }
}