Loading services/tests/wmtests/AndroidManifest.xml +7 −2 Original line number Diff line number Diff line Loading @@ -93,8 +93,6 @@ android:showWhenLocked="true"/> <activity android:name="android.view.cts.surfacevalidator.CapturedActivity"/> <activity android:name="com.android.server.wm.SurfaceControlViewHostTests$TestActivity" /> <activity android:name="com.android.server.wm.SurfaceSyncGroupTests$TestActivity" android:screenOrientation="locked" android:turnScreenOn="true" Loading Loading @@ -122,6 +120,13 @@ <activity android:name="com.android.server.wm.ActivityRecordInputSinkTests$TestActivity" android:exported="true"> </activity> <activity android:name="com.android.server.wm.utils.TestActivity" android:screenOrientation="locked" android:turnScreenOn="true" android:showWhenLocked="true" android:theme="@style/WhiteBackgroundTheme" android:exported="true" /> </application> <instrumentation Loading services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java +36 −43 Original line number Diff line number Diff line Loading @@ -23,15 +23,14 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static org.junit.Assert.assertTrue; import android.app.Activity; import android.app.Instrumentation; import android.content.res.Configuration; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import android.server.wm.BuildUtils; import android.view.Gravity; import android.view.IWindow; import android.view.SurfaceControl; Loading @@ -46,12 +45,12 @@ import android.widget.Button; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.ActivityTestRule; import com.android.server.wm.utils.CommonUtils; import com.android.server.wm.utils.TestActivity; import org.junit.After; import org.junit.Before; Loading @@ -59,11 +58,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @Presubmit @SmallTest @RunWith(WindowTestRunner.class) public class SurfaceControlViewHostTests { private static final long WAIT_TIME_S = 5L * BuildUtils.HW_TIMEOUT_MULTIPLIER; private static final String TAG = "SurfaceControlViewHostTests"; private final ActivityTestRule<TestActivity> mActivityRule = new ActivityTestRule<>( Loading @@ -76,6 +78,8 @@ public class SurfaceControlViewHostTests { private SurfaceControlViewHost mScvh1; private SurfaceControlViewHost mScvh2; private SurfaceView mSurfaceView; @Before public void setUp() throws Exception { mInstrumentation = InstrumentationRegistry.getInstrumentation(); Loading @@ -96,15 +100,17 @@ public class SurfaceControlViewHostTests { mView1 = new Button(mActivity); mView2 = new Button(mActivity); mInstrumentation.runOnMainSync(() -> { try { mActivity.attachToSurfaceView(sc); } catch (InterruptedException e) { } CountDownLatch svReadyLatch = new CountDownLatch(1); mActivity.runOnUiThread(() -> addSurfaceView(svReadyLatch)); assertTrue("Failed to wait for SV to get created", svReadyLatch.await(WAIT_TIME_S, TimeUnit.SECONDS)); new SurfaceControl.Transaction().reparent(sc, mSurfaceView.getSurfaceControl()) .show(sc).apply(); mInstrumentation.runOnMainSync(() -> { TestWindowlessWindowManager wwm = new TestWindowlessWindowManager( mActivity.getResources().getConfiguration(), sc, mActivity.mSurfaceView.getHostToken()); mSurfaceView.getHostToken()); mScvh1 = new SurfaceControlViewHost(mActivity, mActivity.getDisplay(), wwm, "requestFocusWithMultipleWindows"); Loading Loading @@ -135,7 +141,7 @@ public class SurfaceControlViewHostTests { } assertTrue("Failed to wait for view2", wasVisible); IWindow window = IWindow.Stub.asInterface(mActivity.mSurfaceView.getWindowToken()); IWindow window = IWindow.Stub.asInterface(mSurfaceView.getWindowToken()); WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(window, mScvh1.getInputTransferToken(), true); Loading @@ -162,43 +168,30 @@ public class SurfaceControlViewHostTests { } } public static class TestActivity extends Activity implements SurfaceHolder.Callback { private SurfaceView mSurfaceView; private final CountDownLatch mSvReadyLatch = new CountDownLatch(1); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final FrameLayout content = new FrameLayout(this); mSurfaceView = new SurfaceView(this); mSurfaceView.setBackgroundColor(Color.BLACK); private void addSurfaceView(CountDownLatch svReadyLatch) { final FrameLayout content = mActivity.getParentLayout(); mSurfaceView = new SurfaceView(mActivity); mSurfaceView.setZOrderOnTop(true); final FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(500, 500, Gravity.LEFT | Gravity.TOP); content.addView(mSurfaceView, lp); setContentView(content); mSurfaceView.getHolder().addCallback(this); } mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { mSvReadyLatch.countDown(); svReadyLatch.countDown(); } @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { } public void attachToSurfaceView(SurfaceControl sc) throws InterruptedException { mSvReadyLatch.await(); new SurfaceControl.Transaction().reparent(sc, mSurfaceView.getSurfaceControl()) .show(sc).apply(); } }); content.addView(mSurfaceView, lp); } } services/tests/wmtests/src/com/android/server/wm/utils/TestActivity.java 0 → 100644 +68 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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.wm.utils; import static android.view.WindowInsets.Type.displayCutout; import static android.view.WindowInsets.Type.systemBars; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import android.app.Activity; import android.app.KeyguardManager; import android.os.Bundle; import android.view.WindowInsetsController; import android.view.WindowManager; import android.widget.FrameLayout; import androidx.annotation.Nullable; /** * TestActivity that will ensure it dismisses keyguard and shows as a fullscreen activity. */ public class TestActivity extends Activity { private static final int sTypeMask = systemBars() | displayCutout(); private FrameLayout mParentLayout; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mParentLayout = new FrameLayout(this); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); setContentView(mParentLayout, layoutParams); WindowInsetsController windowInsetsController = getWindow().getInsetsController(); windowInsetsController.hide(sTypeMask); WindowManager.LayoutParams params = getWindow().getAttributes(); params.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; getWindow().setAttributes(params); getWindow().setDecorFitsSystemWindows(false); final KeyguardManager keyguardManager = getInstrumentation().getContext().getSystemService( KeyguardManager.class); if (keyguardManager != null && keyguardManager.isKeyguardLocked()) { keyguardManager.requestDismissKeyguard(this, null); } } public FrameLayout getParentLayout() { return mParentLayout; } } Loading
services/tests/wmtests/AndroidManifest.xml +7 −2 Original line number Diff line number Diff line Loading @@ -93,8 +93,6 @@ android:showWhenLocked="true"/> <activity android:name="android.view.cts.surfacevalidator.CapturedActivity"/> <activity android:name="com.android.server.wm.SurfaceControlViewHostTests$TestActivity" /> <activity android:name="com.android.server.wm.SurfaceSyncGroupTests$TestActivity" android:screenOrientation="locked" android:turnScreenOn="true" Loading Loading @@ -122,6 +120,13 @@ <activity android:name="com.android.server.wm.ActivityRecordInputSinkTests$TestActivity" android:exported="true"> </activity> <activity android:name="com.android.server.wm.utils.TestActivity" android:screenOrientation="locked" android:turnScreenOn="true" android:showWhenLocked="true" android:theme="@style/WhiteBackgroundTheme" android:exported="true" /> </application> <instrumentation Loading
services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java +36 −43 Original line number Diff line number Diff line Loading @@ -23,15 +23,14 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static org.junit.Assert.assertTrue; import android.app.Activity; import android.app.Instrumentation; import android.content.res.Configuration; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import android.server.wm.BuildUtils; import android.view.Gravity; import android.view.IWindow; import android.view.SurfaceControl; Loading @@ -46,12 +45,12 @@ import android.widget.Button; import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.ActivityTestRule; import com.android.server.wm.utils.CommonUtils; import com.android.server.wm.utils.TestActivity; import org.junit.After; import org.junit.Before; Loading @@ -59,11 +58,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @Presubmit @SmallTest @RunWith(WindowTestRunner.class) public class SurfaceControlViewHostTests { private static final long WAIT_TIME_S = 5L * BuildUtils.HW_TIMEOUT_MULTIPLIER; private static final String TAG = "SurfaceControlViewHostTests"; private final ActivityTestRule<TestActivity> mActivityRule = new ActivityTestRule<>( Loading @@ -76,6 +78,8 @@ public class SurfaceControlViewHostTests { private SurfaceControlViewHost mScvh1; private SurfaceControlViewHost mScvh2; private SurfaceView mSurfaceView; @Before public void setUp() throws Exception { mInstrumentation = InstrumentationRegistry.getInstrumentation(); Loading @@ -96,15 +100,17 @@ public class SurfaceControlViewHostTests { mView1 = new Button(mActivity); mView2 = new Button(mActivity); mInstrumentation.runOnMainSync(() -> { try { mActivity.attachToSurfaceView(sc); } catch (InterruptedException e) { } CountDownLatch svReadyLatch = new CountDownLatch(1); mActivity.runOnUiThread(() -> addSurfaceView(svReadyLatch)); assertTrue("Failed to wait for SV to get created", svReadyLatch.await(WAIT_TIME_S, TimeUnit.SECONDS)); new SurfaceControl.Transaction().reparent(sc, mSurfaceView.getSurfaceControl()) .show(sc).apply(); mInstrumentation.runOnMainSync(() -> { TestWindowlessWindowManager wwm = new TestWindowlessWindowManager( mActivity.getResources().getConfiguration(), sc, mActivity.mSurfaceView.getHostToken()); mSurfaceView.getHostToken()); mScvh1 = new SurfaceControlViewHost(mActivity, mActivity.getDisplay(), wwm, "requestFocusWithMultipleWindows"); Loading Loading @@ -135,7 +141,7 @@ public class SurfaceControlViewHostTests { } assertTrue("Failed to wait for view2", wasVisible); IWindow window = IWindow.Stub.asInterface(mActivity.mSurfaceView.getWindowToken()); IWindow window = IWindow.Stub.asInterface(mSurfaceView.getWindowToken()); WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(window, mScvh1.getInputTransferToken(), true); Loading @@ -162,43 +168,30 @@ public class SurfaceControlViewHostTests { } } public static class TestActivity extends Activity implements SurfaceHolder.Callback { private SurfaceView mSurfaceView; private final CountDownLatch mSvReadyLatch = new CountDownLatch(1); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final FrameLayout content = new FrameLayout(this); mSurfaceView = new SurfaceView(this); mSurfaceView.setBackgroundColor(Color.BLACK); private void addSurfaceView(CountDownLatch svReadyLatch) { final FrameLayout content = mActivity.getParentLayout(); mSurfaceView = new SurfaceView(mActivity); mSurfaceView.setZOrderOnTop(true); final FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(500, 500, Gravity.LEFT | Gravity.TOP); content.addView(mSurfaceView, lp); setContentView(content); mSurfaceView.getHolder().addCallback(this); } mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { mSvReadyLatch.countDown(); svReadyLatch.countDown(); } @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { } public void attachToSurfaceView(SurfaceControl sc) throws InterruptedException { mSvReadyLatch.await(); new SurfaceControl.Transaction().reparent(sc, mSurfaceView.getSurfaceControl()) .show(sc).apply(); } }); content.addView(mSurfaceView, lp); } }
services/tests/wmtests/src/com/android/server/wm/utils/TestActivity.java 0 → 100644 +68 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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.wm.utils; import static android.view.WindowInsets.Type.displayCutout; import static android.view.WindowInsets.Type.systemBars; import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import android.app.Activity; import android.app.KeyguardManager; import android.os.Bundle; import android.view.WindowInsetsController; import android.view.WindowManager; import android.widget.FrameLayout; import androidx.annotation.Nullable; /** * TestActivity that will ensure it dismisses keyguard and shows as a fullscreen activity. */ public class TestActivity extends Activity { private static final int sTypeMask = systemBars() | displayCutout(); private FrameLayout mParentLayout; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mParentLayout = new FrameLayout(this); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); setContentView(mParentLayout, layoutParams); WindowInsetsController windowInsetsController = getWindow().getInsetsController(); windowInsetsController.hide(sTypeMask); WindowManager.LayoutParams params = getWindow().getAttributes(); params.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; getWindow().setAttributes(params); getWindow().setDecorFitsSystemWindows(false); final KeyguardManager keyguardManager = getInstrumentation().getContext().getSystemService( KeyguardManager.class); if (keyguardManager != null && keyguardManager.isKeyguardLocked()) { keyguardManager.requestDismissKeyguard(this, null); } } public FrameLayout getParentLayout() { return mParentLayout; } }