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

Commit 036a5e2a authored by Chris Li's avatar Chris Li Committed by Riddle Hsu
Browse files

Avoid registering DisplayListener to the real service

This is needed because the SystemServicesTestRule will dispose UiThread
when tearDown, which can result closing executor for registered
listener.

Fix: 310697129
Test: deflaky run
Change-Id: Ic1894d542f8563c3af4ba66a7035ffa001eee9f5
parent a8bb7bf3
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_90;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -130,13 +131,17 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
                });
        mDisplayRotationCompatPolicy = new DisplayRotationCompatPolicy(
                mDisplayContent, mMockHandler);

        // Do not show the real toast.
        spyOn(mDisplayRotationCompatPolicy);
        doNothing().when(mDisplayRotationCompatPolicy).showToast(anyInt());
        doNothing().when(mDisplayRotationCompatPolicy).showToast(anyInt(), anyString());
    }

    @Test
    public void testOpenedCameraInSplitScreen_showToast() throws Exception {
        configureActivity(SCREEN_ORIENTATION_PORTRAIT);
        spyOn(mTask);
        spyOn(mDisplayRotationCompatPolicy);
        doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mActivity).getWindowingMode();
        doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mTask).getWindowingMode();

@@ -160,7 +165,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
    public void testOpenedCameraInSplitScreen_orientationNotFixed_doNotShowToast() {
        configureActivity(SCREEN_ORIENTATION_UNSPECIFIED);
        spyOn(mTask);
        spyOn(mDisplayRotationCompatPolicy);
        doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mActivity).getWindowingMode();
        doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mTask).getWindowingMode();

@@ -175,7 +179,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
    public void testOnScreenRotationAnimationFinished_treatmentNotEnabled_doNotShowToast() {
        when(mLetterboxConfiguration.isCameraCompatTreatmentEnabled())
                .thenReturn(false);
        spyOn(mDisplayRotationCompatPolicy);

        mDisplayRotationCompatPolicy.onScreenRotationAnimationFinished();

@@ -185,8 +188,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {

    @Test
    public void testOnScreenRotationAnimationFinished_noOpenCamera_doNotShowToast() {
        spyOn(mDisplayRotationCompatPolicy);

        mDisplayRotationCompatPolicy.onScreenRotationAnimationFinished();

        verify(mDisplayRotationCompatPolicy, never()).showToast(
@@ -197,7 +198,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
    public void testOnScreenRotationAnimationFinished_notFullscreen_doNotShowToast() {
        configureActivity(SCREEN_ORIENTATION_PORTRAIT);
        doReturn(true).when(mActivity).inMultiWindowMode();
        spyOn(mDisplayRotationCompatPolicy);

        mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);

@@ -211,7 +211,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
    public void testOnScreenRotationAnimationFinished_orientationNotFixed_doNotShowToast() {
        configureActivity(SCREEN_ORIENTATION_UNSPECIFIED);
        mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
        spyOn(mDisplayRotationCompatPolicy);

        mDisplayRotationCompatPolicy.onScreenRotationAnimationFinished();

@@ -223,7 +222,6 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase {
    public void testOnScreenRotationAnimationFinished_showToast() {
        configureActivity(SCREEN_ORIENTATION_PORTRAIT);
        mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);
        spyOn(mDisplayRotationCompatPolicy);

        mDisplayRotationCompatPolicy.onScreenRotationAnimationFinished();

+3 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
@@ -114,8 +115,7 @@ public class LaunchParamsPersisterTests extends WindowTestsBase {
        mDisplayUniqueId = "test:" + sNextUniqueId++;
        mTestDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1500)
                .setUniqueId(mDisplayUniqueId).build();
        when(mRootWindowContainer.getDisplayContent(eq(mDisplayUniqueId)))
                .thenReturn(mTestDisplay);
        doReturn(mTestDisplay).when(mRootWindowContainer).getDisplayContent(mDisplayUniqueId);

        Task rootTask = mTestDisplay.getDefaultTaskDisplayArea()
                .createRootTask(TEST_WINDOWING_MODE, ACTIVITY_TYPE_STANDARD, /* onTop */ true);
@@ -200,7 +200,7 @@ public class LaunchParamsPersisterTests extends WindowTestsBase {
    public void testReturnsEmptyDisplayIfDisplayIsNotFound() {
        mTarget.saveTask(mTestTask);

        when(mRootWindowContainer.getDisplayContent(eq(mDisplayUniqueId))).thenReturn(null);
        doReturn(null).when(mRootWindowContainer).getDisplayContent(eq(mDisplayUniqueId));

        mTarget.getLaunchParams(mTestTask, null, mResult);

+9 −4
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.nullable;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.withSettings;
@@ -57,7 +58,7 @@ import android.content.pm.IPackageManager;
import android.content.pm.PackageManagerInternal;
import android.database.ContentObserver;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManagerGlobal;
import android.hardware.display.DisplayManagerInternal;
import android.net.Uri;
import android.os.Handler;
@@ -101,6 +102,7 @@ import org.mockito.quality.Strictness;
import org.mockito.stubbing.Answer;

import java.util.ArrayList;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;

/**
@@ -239,6 +241,12 @@ public class SystemServicesTestRule implements TestRule {
        doNothing().when(contentResolver)
                .registerContentObserver(any(Uri.class), anyBoolean(), any(ContentObserver.class),
                        anyInt());

        // Unit test should not register listener to the real service.
        final DisplayManagerGlobal dmg = DisplayManagerGlobal.getInstance();
        spyOn(dmg);
        doNothing().when(dmg).registerDisplayListener(
                any(), any(Executor.class), anyLong(), anyString());
    }

    private void setUpLocalServices() {
@@ -376,9 +384,6 @@ public class SystemServicesTestRule implements TestRule {

        mWmService.onInitReady();
        mAtmService.setWindowManager(mWmService);
        // Avoid real display events interfering with the test. Also avoid leaking registration.
        mContext.getSystemService(DisplayManager.class)
                .unregisterDisplayListener(mAtmService.mRootWindowContainer);
        mWmService.mDisplayEnabled = true;
        mWmService.mDisplayReady = true;
        mAtmService.getTransitionController().mIsWaitingForDisplayEnabled = false;