blob: c3b0a67e2ee1d43521a1ba81fd3a3e64c01c8075 [file] [log] [blame]
Jorim Jaggi7361bab2017-01-16 17:17:58 +01001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070014 * limitations under the License.
Jorim Jaggi7361bab2017-01-16 17:17:58 +010015 */
16
17package com.android.server.wm;
18
Winson Chunga4fa8d52018-04-20 15:54:51 -070019import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010020import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
21import static android.graphics.GraphicBuffer.USAGE_HW_TEXTURE;
22import static android.graphics.GraphicBuffer.USAGE_SW_READ_RARELY;
23
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070024import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
25
Jorim Jaggi7361bab2017-01-16 17:17:58 +010026import android.app.ActivityManager.TaskSnapshot;
Winson Chung48b25652018-10-22 14:04:30 -070027import android.content.ComponentName;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010028import android.graphics.Canvas;
29import android.graphics.Color;
Peiyong Lin21e499a2019-04-03 16:37:46 -070030import android.graphics.ColorSpace;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010031import android.graphics.GraphicBuffer;
32import android.graphics.PixelFormat;
33import android.graphics.Rect;
34import android.os.UserManager;
Brett Chabota26eda92018-07-23 13:08:30 -070035
Jorim Jaggi7361bab2017-01-16 17:17:58 +010036import org.junit.After;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010037import org.junit.Before;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010038
39import java.io.File;
40
41/**
42 * Base class for tests that use a {@link TaskSnapshotPersister}.
43 */
44class TaskSnapshotPersisterTestBase extends WindowTestsBase {
45
Jorim Jaggi7361bab2017-01-16 17:17:58 +010046 private static final Rect TEST_INSETS = new Rect(10, 20, 30, 40);
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070047 static final File FILES_DIR = getInstrumentation().getTargetContext().getFilesDir();
Jorim Jaggi7361bab2017-01-16 17:17:58 +010048
49 TaskSnapshotPersister mPersister;
50 TaskSnapshotLoader mLoader;
Wale Ogunwalee1631262017-04-28 15:11:16 -070051 int mTestUserId;
Jorim Jaggi7361bab2017-01-16 17:17:58 +010052
Jorim Jaggi7361bab2017-01-16 17:17:58 +010053 @Before
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070054 public void setUp() {
55 final UserManager um = UserManager.get(getInstrumentation().getTargetContext());
Wale Ogunwalee1631262017-04-28 15:11:16 -070056 mTestUserId = um.getUserHandle();
Kevin716a9db2018-12-18 16:53:39 -080057 mPersister = new TaskSnapshotPersister(mWm, userId -> FILES_DIR);
Jorim Jaggi7361bab2017-01-16 17:17:58 +010058 mLoader = new TaskSnapshotLoader(mPersister);
59 mPersister.start();
60 }
61
62 @After
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070063 public void tearDown() {
Jorim Jaggi7361bab2017-01-16 17:17:58 +010064 cleanDirectory();
65 }
66
Jorim Jaggi7361bab2017-01-16 17:17:58 +010067 private void cleanDirectory() {
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070068 final File[] files = new File(FILES_DIR, "snapshots").listFiles();
Wale Ogunwale68e882c2017-05-03 07:54:23 -070069 if (files == null) {
70 return;
71 }
72 for (File file : files) {
Jorim Jaggi7361bab2017-01-16 17:17:58 +010073 if (!file.isDirectory()) {
74 file.delete();
75 }
76 }
77 }
78
79 TaskSnapshot createSnapshot() {
Matthew Ng3531dd02017-08-23 16:41:57 -070080 return createSnapshot(1f /* scale */);
81 }
82
83 TaskSnapshot createSnapshot(float scale) {
Winson Chung173020c2018-05-04 15:36:47 -070084 return new TaskSnapshotBuilder()
85 .setScale(scale)
86 .build();
Winson Chungf3e412e2018-03-08 11:07:40 -080087 }
88
Winson Chung173020c2018-05-04 15:36:47 -070089 /**
90 * Builds a TaskSnapshot.
91 */
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -070092 static class TaskSnapshotBuilder {
Winson Chung173020c2018-05-04 15:36:47 -070093
94 private float mScale = 1f;
95 private boolean mIsRealSnapshot = true;
96 private boolean mIsTranslucent = false;
97 private int mWindowingMode = WINDOWING_MODE_FULLSCREEN;
98 private int mSystemUiVisibility = 0;
99
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700100 TaskSnapshotBuilder setScale(float scale) {
Winson Chung173020c2018-05-04 15:36:47 -0700101 mScale = scale;
102 return this;
103 }
104
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700105 TaskSnapshotBuilder setIsRealSnapshot(boolean isRealSnapshot) {
Winson Chung173020c2018-05-04 15:36:47 -0700106 mIsRealSnapshot = isRealSnapshot;
107 return this;
108 }
109
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700110 TaskSnapshotBuilder setIsTranslucent(boolean isTranslucent) {
Winson Chung173020c2018-05-04 15:36:47 -0700111 mIsTranslucent = isTranslucent;
112 return this;
113 }
114
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700115 TaskSnapshotBuilder setWindowingMode(int windowingMode) {
Winson Chung173020c2018-05-04 15:36:47 -0700116 mWindowingMode = windowingMode;
117 return this;
118 }
119
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700120 TaskSnapshotBuilder setSystemUiVisibility(int systemUiVisibility) {
Winson Chung173020c2018-05-04 15:36:47 -0700121 mSystemUiVisibility = systemUiVisibility;
122 return this;
123 }
124
Tadashi G. Takaokab6e148c2018-11-03 02:59:06 -0700125 TaskSnapshot build() {
Winson Chung173020c2018-05-04 15:36:47 -0700126 final GraphicBuffer buffer = GraphicBuffer.create(100, 100, PixelFormat.RGBA_8888,
127 USAGE_HW_TEXTURE | USAGE_SW_READ_RARELY | USAGE_SW_READ_RARELY);
128 Canvas c = buffer.lockCanvas();
129 c.drawColor(Color.RED);
130 buffer.unlockCanvasAndPost(c);
Peiyong Lin21e499a2019-04-03 16:37:46 -0700131 return new TaskSnapshot(new ComponentName("", ""), buffer,
132 ColorSpace.get(ColorSpace.Named.SRGB), ORIENTATION_PORTRAIT, TEST_INSETS,
133 mScale < 1f /* reducedResolution */, mScale, mIsRealSnapshot,
Winson Chung48b25652018-10-22 14:04:30 -0700134 mWindowingMode, mSystemUiVisibility, mIsTranslucent);
Winson Chung173020c2018-05-04 15:36:47 -0700135 }
Jorim Jaggi7361bab2017-01-16 17:17:58 +0100136 }
137}