1 /* 2 * Copyright (C) 2022 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 14 * limitations under the License. 15 */ 16 17 package android.view; 18 19 import static android.view.ContentRecordingSession.RECORD_CONTENT_DISPLAY; 20 import static android.view.ContentRecordingSession.RECORD_CONTENT_TASK; 21 import static android.view.Display.DEFAULT_DISPLAY; 22 import static android.view.Display.INVALID_DISPLAY; 23 24 import static com.google.common.truth.Truth.assertThat; 25 26 import android.os.Binder; 27 import android.os.IBinder; 28 import android.os.Parcel; 29 import android.platform.test.annotations.Presubmit; 30 31 import androidx.test.ext.junit.runners.AndroidJUnit4; 32 import androidx.test.filters.SmallTest; 33 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 37 /** 38 * Tests for {@link ContentRecordingSession} class. 39 * 40 * Build/Install/Run: 41 * atest FrameworksCoreTests:ContentRecordingSessionTest 42 */ 43 @RunWith(AndroidJUnit4.class) 44 @SmallTest 45 @Presubmit 46 public class ContentRecordingSessionTest { 47 private static final int DISPLAY_ID = 1; 48 private static final IBinder WINDOW_TOKEN = new Binder("DisplayContentWindowToken"); 49 50 @Test testParcelable()51 public void testParcelable() { 52 ContentRecordingSession session = ContentRecordingSession.createTaskSession(WINDOW_TOKEN); 53 session.setVirtualDisplayId(DISPLAY_ID); 54 55 Parcel parcel = Parcel.obtain(); 56 session.writeToParcel(parcel, 0 /* flags */); 57 parcel.setDataPosition(0); 58 ContentRecordingSession session2 = ContentRecordingSession.CREATOR.createFromParcel(parcel); 59 assertThat(session).isEqualTo(session2); 60 parcel.recycle(); 61 } 62 63 @Test testTaskConstructor()64 public void testTaskConstructor() { 65 ContentRecordingSession session = ContentRecordingSession.createTaskSession(WINDOW_TOKEN); 66 assertThat(session.getContentToRecord()).isEqualTo(RECORD_CONTENT_TASK); 67 assertThat(session.getTokenToRecord()).isEqualTo(WINDOW_TOKEN); 68 } 69 70 @Test testDisplayConstructor()71 public void testDisplayConstructor() { 72 ContentRecordingSession session = ContentRecordingSession.createDisplaySession( 73 DEFAULT_DISPLAY); 74 assertThat(session.getContentToRecord()).isEqualTo(RECORD_CONTENT_DISPLAY); 75 assertThat(session.getTokenToRecord()).isNull(); 76 } 77 78 @Test testIsValid_displaySession()79 public void testIsValid_displaySession() { 80 // Canonical display session. 81 ContentRecordingSession displaySession = ContentRecordingSession.createDisplaySession( 82 DEFAULT_DISPLAY); 83 displaySession.setVirtualDisplayId(DEFAULT_DISPLAY); 84 assertThat(ContentRecordingSession.isValid(displaySession)).isTrue(); 85 86 // Virtual display id values. 87 ContentRecordingSession displaySession0 = ContentRecordingSession.createDisplaySession( 88 DEFAULT_DISPLAY); 89 assertThat(ContentRecordingSession.isValid(displaySession0)).isFalse(); 90 91 ContentRecordingSession displaySession1 = ContentRecordingSession.createDisplaySession( 92 DEFAULT_DISPLAY); 93 displaySession1.setVirtualDisplayId(INVALID_DISPLAY); 94 assertThat(ContentRecordingSession.isValid(displaySession1)).isFalse(); 95 96 // Display id values. 97 ContentRecordingSession displaySession2 = ContentRecordingSession.createDisplaySession( 98 INVALID_DISPLAY); 99 displaySession2.setVirtualDisplayId(DEFAULT_DISPLAY); 100 assertThat(ContentRecordingSession.isValid(displaySession2)).isFalse(); 101 102 displaySession2.setDisplayToRecord(DEFAULT_DISPLAY); 103 assertThat(ContentRecordingSession.isValid(displaySession2)).isTrue(); 104 } 105 106 @Test testIsValid_taskSession()107 public void testIsValid_taskSession() { 108 // Canonical task session. 109 ContentRecordingSession taskSession = ContentRecordingSession.createTaskSession( 110 WINDOW_TOKEN); 111 taskSession.setVirtualDisplayId(DEFAULT_DISPLAY); 112 assertThat(ContentRecordingSession.isValid(taskSession)).isTrue(); 113 114 // Virtual display id values. 115 ContentRecordingSession taskSession0 = ContentRecordingSession.createTaskSession( 116 WINDOW_TOKEN); 117 assertThat(ContentRecordingSession.isValid(taskSession0)).isFalse(); 118 119 ContentRecordingSession taskSession1 = ContentRecordingSession.createTaskSession( 120 WINDOW_TOKEN); 121 taskSession1.setVirtualDisplayId(INVALID_DISPLAY); 122 assertThat(ContentRecordingSession.isValid(taskSession1)).isFalse(); 123 124 // Window container values. 125 ContentRecordingSession taskSession3 = ContentRecordingSession.createTaskSession(null); 126 taskSession3.setVirtualDisplayId(DEFAULT_DISPLAY); 127 assertThat(ContentRecordingSession.isValid(taskSession3)).isFalse(); 128 129 ContentRecordingSession taskSession4 = ContentRecordingSession.createTaskSession( 130 WINDOW_TOKEN); 131 taskSession4.setVirtualDisplayId(DEFAULT_DISPLAY); 132 taskSession4.setTokenToRecord(null); 133 assertThat(ContentRecordingSession.isValid(taskSession4)).isFalse(); 134 } 135 136 @Test testIsProjectionOnSameDisplay()137 public void testIsProjectionOnSameDisplay() { 138 assertThat(ContentRecordingSession.isProjectionOnSameDisplay(null, null)).isFalse(); 139 ContentRecordingSession session = ContentRecordingSession.createDisplaySession( 140 DEFAULT_DISPLAY); 141 session.setVirtualDisplayId(DEFAULT_DISPLAY); 142 assertThat(ContentRecordingSession.isProjectionOnSameDisplay(session, null)).isFalse(); 143 144 ContentRecordingSession incomingSession = ContentRecordingSession.createDisplaySession( 145 DEFAULT_DISPLAY); 146 incomingSession.setVirtualDisplayId(DEFAULT_DISPLAY); 147 assertThat(ContentRecordingSession.isProjectionOnSameDisplay(session, 148 incomingSession)).isTrue(); 149 150 incomingSession.setVirtualDisplayId(DEFAULT_DISPLAY + 1); 151 assertThat(ContentRecordingSession.isProjectionOnSameDisplay(session, 152 incomingSession)).isFalse(); 153 } 154 155 @Test testEquals()156 public void testEquals() { 157 ContentRecordingSession session = ContentRecordingSession.createTaskSession(WINDOW_TOKEN); 158 session.setVirtualDisplayId(DISPLAY_ID); 159 160 ContentRecordingSession session2 = ContentRecordingSession.createTaskSession(WINDOW_TOKEN); 161 session2.setVirtualDisplayId(DISPLAY_ID); 162 assertThat(session).isEqualTo(session2); 163 } 164 } 165