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

Commit 00eec90e authored by Nathalie Le Clair's avatar Nathalie Le Clair
Browse files

Introduce PowerManager mock

Remove previous mocks of the IPowerManager interface.
Remove power-state-related stubs from HdmiControlService.
Stub of HdmiControlService#wakeUp needed to remain where we needed to
check if that method was invoked and that couldn't be infered from a
power state change.

Bug: 173108866
Test: atest

Change-Id: I29dbb3b50a1b86032bd7cdad1ec8717d305a2bca
parent b8e49870
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -405,7 +405,7 @@ public class HdmiControlService extends SystemService {
    private TvInputManager mTvInputManager;

    @Nullable
    private PowerManager mPowerManager;
    private PowerManagerWrapper mPowerManager;

    @Nullable
    private Looper mIoLooper;
@@ -734,7 +734,7 @@ public class HdmiControlService extends SystemService {
        if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
            mTvInputManager = (TvInputManager) getContext().getSystemService(
                    Context.TV_INPUT_SERVICE);
            mPowerManager = getContext().getSystemService(PowerManager.class);
            mPowerManager = new PowerManagerWrapper(getContext());
        } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
            runOnServiceThread(this::bootCompleted);
        }
@@ -755,7 +755,11 @@ public class HdmiControlService extends SystemService {
    }

    @VisibleForTesting
    protected PowerManager getPowerManager() {
    void setPowerManager(PowerManagerWrapper powerManager) {
        mPowerManager = powerManager;
    }

    PowerManagerWrapper getPowerManager() {
        return mPowerManager;
    }

@@ -3148,7 +3152,7 @@ public class HdmiControlService extends SystemService {
        });
    }

    private boolean canGoToStandby() {
    boolean canGoToStandby() {
        for (HdmiCecLocalDevice device : mHdmiCecNetwork.getLocalDeviceList()) {
            if (!device.canGoToStandby()) return false;
        }
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.hdmi;

import android.content.Context;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;

/**
 * Abstraction around {@link PowerManager} to allow faking PowerManager in tests.
 */
public class PowerManagerWrapper {
    private static final String TAG = "PowerManagerWrapper";

    private final PowerManager mPowerManager;

    public PowerManagerWrapper(Context context) {
        mPowerManager = context.getSystemService(PowerManager.class);
    }

    boolean isInteractive() {
        return mPowerManager.isInteractive();
    }

    void wakeUp(long time, int reason, String details) {
        mPowerManager.wakeUp(time, reason, details);
    }

    void goToSleep(long time, int reason, int flags) {
        mPowerManager.goToSleep(time, reason, flags);
    }

    WakeLock newWakeLock(int levelAndFlags, String tag) {
        return mPowerManager.newWakeLock(levelAndFlags, tag);
    }
}
+3 −30
Original line number Diff line number Diff line
@@ -22,16 +22,11 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.ContextWrapper;
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 androidx.test.InstrumentationRegistry;
@@ -41,8 +36,6 @@ import org.junit.Before;
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;
import java.util.Collections;
@@ -55,28 +48,16 @@ public class ActiveSourceActionTest {
    private Context mContextSpy;
    private HdmiControlService mHdmiControlService;
    private FakeNativeWrapper mNativeWrapper;
    private FakePowerManagerWrapper mPowerManager;

    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
    private int mPhysicalAddress;

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

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

        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));

        when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mIPowerManagerMock.isInteractive()).thenReturn(true);

        mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) {
            @Override
            AudioManager getAudioManager() {
@@ -89,21 +70,11 @@ public class ActiveSourceActionTest {
                };
            }

            @Override
            void wakeUp() {
            }

            @Override
            boolean isPowerStandby() {
                return false;
            }

            @Override
            protected PowerManager getPowerManager() {
                return new PowerManager(mContextSpy, mIPowerManagerMock,
                        mIThermalServiceMock, new Handler(mTestLooper.getLooper()));
            }

            @Override
            protected void writeStringSystemProperty(String key, String value) {
                // do nothing
@@ -120,6 +91,8 @@ public class ActiveSourceActionTest {
        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
        mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService));
        mHdmiControlService.initService();
        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
        mHdmiControlService.setPowerManager(mPowerManager);
        mPhysicalAddress = 0x2000;
        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
        mTestLooper.dispatchAll();
+5 −26
Original line number Diff line number Diff line
@@ -20,17 +20,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.ContextWrapper;
import android.hardware.tv.cec.V1_0.SendMessageResult;
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;

@@ -56,14 +51,14 @@ public class ArcInitiationActionFromAvrTest {
    private Context mContextSpy;
    private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
    private FakeNativeWrapper mNativeWrapper;
    private FakePowerManagerWrapper mPowerManager;
    private ArcInitiationActionFromAvr mAction;

    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();

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

    @Before
    public void setUp() throws Exception {
@@ -71,14 +66,6 @@ public class ArcInitiationActionFromAvrTest {

        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));

        when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mIPowerManagerMock.isInteractive()).thenReturn(true);

        HdmiControlService hdmiControlService =
                new HdmiControlService(mContextSpy, Collections.emptyList()) {
                    @Override
@@ -86,16 +73,6 @@ public class ArcInitiationActionFromAvrTest {
                        return false;
                    }

                    @Override
                    void wakeUp() {
                    }

                    @Override
                    protected PowerManager getPowerManager() {
                        return new PowerManager(mContextSpy, mIPowerManagerMock,
                                mIThermalServiceMock, new Handler(mTestLooper.getLooper()));
                    }

                    @Override
                    AudioManager getAudioManager() {
                        return mAudioManager;
@@ -133,6 +110,8 @@ public class ArcInitiationActionFromAvrTest {
        hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService));
        hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService));
        hdmiControlService.initService();
        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
        hdmiControlService.setPowerManager(mPowerManager);
        mAction = new ArcInitiationActionFromAvr(mHdmiCecLocalDeviceAudioSystem);

        mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem);
+5 −28
Original line number Diff line number Diff line
@@ -20,17 +20,12 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.ContextWrapper;
import android.hardware.tv.cec.V1_0.SendMessageResult;
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;

@@ -55,16 +50,15 @@ public class ArcTerminationActionFromAvrTest {

    private Context mContextSpy;
    private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
    private FakePowerManagerWrapper mPowerManager;
    private ArcTerminationActionFromAvr mAction;

    private FakeNativeWrapper mNativeWrapper;

    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();

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

    @Before
    public void setUp() throws Exception {
@@ -72,26 +66,8 @@ public class ArcTerminationActionFromAvrTest {

        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));

        when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mContextSpy.getSystemService(PowerManager.class)).thenAnswer(i ->
                new PowerManager(mContextSpy, mIPowerManagerMock,
                mIThermalServiceMock, new Handler(mTestLooper.getLooper())));
        when(mIPowerManagerMock.isInteractive()).thenReturn(true);

        HdmiControlService hdmiControlService =
                new HdmiControlService(mContextSpy, Collections.emptyList()) {
                    @Override
                    void wakeUp() {
                    }

                    @Override
                    protected PowerManager getPowerManager() {
                        return new PowerManager(mContextSpy, mIPowerManagerMock,
                                mIThermalServiceMock, new Handler(mTestLooper.getLooper()));
                    }

                    @Override
                    AudioManager getAudioManager() {
                        return mAudioManager;
@@ -127,7 +103,8 @@ public class ArcTerminationActionFromAvrTest {
        hdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(hdmiControlService));
        hdmiControlService.setMessageValidator(new HdmiCecMessageValidator(hdmiControlService));
        hdmiControlService.initService();

        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
        hdmiControlService.setPowerManager(mPowerManager);
        mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(hdmiControlService) {
            @Override
            protected void setPreferredAddress(int addr) {
Loading