1 /* 2 * Copyright (C) 2018 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.content; 18 19 import static android.content.Context.DEVICE_ID_DEFAULT; 20 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY; 21 import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC; 22 import static android.view.Display.DEFAULT_DISPLAY; 23 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; 24 25 import static com.google.common.truth.Truth.assertThat; 26 27 import static org.junit.Assert.assertEquals; 28 import static org.junit.Assert.assertFalse; 29 import static org.junit.Assert.assertTrue; 30 31 import android.app.ActivityThread; 32 import android.content.res.Configuration; 33 import android.graphics.PixelFormat; 34 import android.hardware.display.DisplayManager; 35 import android.hardware.display.VirtualDisplay; 36 import android.media.ImageReader; 37 import android.os.UserHandle; 38 import android.platform.test.annotations.Presubmit; 39 import android.view.Display; 40 41 import androidx.test.core.app.ApplicationProvider; 42 import androidx.test.ext.junit.runners.AndroidJUnit4; 43 import androidx.test.filters.SmallTest; 44 import androidx.test.platform.app.InstrumentationRegistry; 45 46 import org.junit.Test; 47 import org.junit.runner.RunWith; 48 49 /** 50 * Build/Install/Run: 51 * atest FrameworksCoreTests:ContextTest 52 */ 53 @Presubmit 54 @SmallTest 55 @RunWith(AndroidJUnit4.class) 56 public class ContextTest { 57 @Test testDisplayIdForSystemContext()58 public void testDisplayIdForSystemContext() { 59 final Context systemContext = 60 ActivityThread.currentActivityThread().getSystemContext(); 61 62 assertEquals(systemContext.getDisplay().getDisplayId(), systemContext.getDisplayId()); 63 } 64 65 @Test testDisplayIdForSystemUiContext()66 public void testDisplayIdForSystemUiContext() { 67 final Context systemUiContext = 68 ActivityThread.currentActivityThread().getSystemUiContext(); 69 70 assertEquals(systemUiContext.getDisplay().getDisplayId(), systemUiContext.getDisplayId()); 71 } 72 73 @Test testDisplayIdForTestContext()74 public void testDisplayIdForTestContext() { 75 final Context testContext = 76 InstrumentationRegistry.getInstrumentation().getTargetContext(); 77 78 assertEquals(testContext.getDisplayNoVerify().getDisplayId(), testContext.getDisplayId()); 79 } 80 81 @Test testDisplayIdForDefaultDisplayContext()82 public void testDisplayIdForDefaultDisplayContext() { 83 final Context testContext = 84 InstrumentationRegistry.getInstrumentation().getTargetContext(); 85 final DisplayManager dm = testContext.getSystemService(DisplayManager.class); 86 final Context defaultDisplayContext = 87 testContext.createDisplayContext(dm.getDisplay(DEFAULT_DISPLAY)); 88 89 assertEquals(defaultDisplayContext.getDisplay().getDisplayId(), 90 defaultDisplayContext.getDisplayId()); 91 } 92 93 @Test(expected = NullPointerException.class) testStartActivityAsUserNullIntentNullUser()94 public void testStartActivityAsUserNullIntentNullUser() { 95 final Context testContext = 96 InstrumentationRegistry.getInstrumentation().getTargetContext(); 97 testContext.startActivityAsUser(null, null); 98 } 99 100 @Test(expected = NullPointerException.class) testStartActivityAsUserNullIntentNonNullUser()101 public void testStartActivityAsUserNullIntentNonNullUser() { 102 final Context testContext = 103 InstrumentationRegistry.getInstrumentation().getTargetContext(); 104 testContext.startActivityAsUser(null, new UserHandle(UserHandle.USER_ALL)); 105 } 106 107 @Test(expected = NullPointerException.class) testStartActivityAsUserNonNullIntentNullUser()108 public void testStartActivityAsUserNonNullIntentNullUser() { 109 final Context testContext = 110 InstrumentationRegistry.getInstrumentation().getTargetContext(); 111 testContext.startActivityAsUser(new Intent(), null); 112 } 113 114 @Test(expected = RuntimeException.class) testStartActivityAsUserNonNullIntentNonNullUser()115 public void testStartActivityAsUserNonNullIntentNonNullUser() { 116 final Context testContext = 117 InstrumentationRegistry.getInstrumentation().getTargetContext(); 118 testContext.startActivityAsUser(new Intent(), new UserHandle(UserHandle.USER_ALL)); 119 } 120 121 @Test testIsUiContext_appContext_returnsFalse()122 public void testIsUiContext_appContext_returnsFalse() { 123 final Context appContext = ApplicationProvider.getApplicationContext(); 124 125 assertThat(appContext.isUiContext()).isFalse(); 126 } 127 128 @Test testIsUiContext_systemContext_returnsTrue()129 public void testIsUiContext_systemContext_returnsTrue() { 130 final Context systemContext = 131 ActivityThread.currentActivityThread().getSystemContext(); 132 133 assertThat(systemContext.isUiContext()).isTrue(); 134 } 135 136 @Test testIsUiContext_systemUiContext_returnsTrue()137 public void testIsUiContext_systemUiContext_returnsTrue() { 138 final Context systemUiContext = 139 ActivityThread.currentActivityThread().getSystemUiContext(); 140 141 assertThat(systemUiContext.isUiContext()).isTrue(); 142 } 143 144 @Test testGetDisplayFromDisplayContextDerivedContextOnPrimaryDisplay()145 public void testGetDisplayFromDisplayContextDerivedContextOnPrimaryDisplay() { 146 verifyGetDisplayFromDisplayContextDerivedContext(false /* onSecondaryDisplay */); 147 } 148 149 @Test testGetDisplayFromDisplayContextDerivedContextOnSecondaryDisplay()150 public void testGetDisplayFromDisplayContextDerivedContextOnSecondaryDisplay() { 151 verifyGetDisplayFromDisplayContextDerivedContext(true /* onSecondaryDisplay */); 152 } 153 verifyGetDisplayFromDisplayContextDerivedContext( boolean onSecondaryDisplay)154 private static void verifyGetDisplayFromDisplayContextDerivedContext( 155 boolean onSecondaryDisplay) { 156 final Context appContext = ApplicationProvider.getApplicationContext(); 157 final DisplayManager displayManager = appContext.getSystemService(DisplayManager.class); 158 final Display display; 159 if (onSecondaryDisplay) { 160 display = getSecondaryDisplay(displayManager); 161 } else { 162 display = displayManager.getDisplay(DEFAULT_DISPLAY); 163 } 164 final Context context = appContext.createDisplayContext(display) 165 .createConfigurationContext(new Configuration()); 166 assertEquals(display, context.getDisplay()); 167 } 168 getSecondaryDisplay(DisplayManager displayManager)169 private static Display getSecondaryDisplay(DisplayManager displayManager) { 170 final int width = 800; 171 final int height = 480; 172 final int density = 160; 173 ImageReader reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 174 2 /* maxImages */); 175 VirtualDisplay virtualDisplay = displayManager.createVirtualDisplay( 176 ContextTest.class.getName(), width, height, density, reader.getSurface(), 177 VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY); 178 return virtualDisplay.getDisplay(); 179 } 180 181 @Test testIsUiContext_ContextWrapper()182 public void testIsUiContext_ContextWrapper() { 183 ContextWrapper wrapper = new ContextWrapper(null /* base */); 184 185 assertFalse(wrapper.isUiContext()); 186 187 wrapper = new ContextWrapper(createUiContext()); 188 189 assertTrue(wrapper.isUiContext()); 190 } 191 192 @Test testIsUiContext_UiContextDerivedContext()193 public void testIsUiContext_UiContextDerivedContext() { 194 final Context uiContext = createUiContext(); 195 Context context = uiContext.createAttributionContext(null /* attributionTag */); 196 197 assertTrue(context.isUiContext()); 198 199 context = uiContext.createConfigurationContext(new Configuration()); 200 201 assertTrue(context.isUiContext()); 202 } 203 204 @Test testIsUiContext_UiContextDerivedDisplayContext()205 public void testIsUiContext_UiContextDerivedDisplayContext() { 206 final Context uiContext = createUiContext(); 207 final Display secondaryDisplay = 208 getSecondaryDisplay(uiContext.getSystemService(DisplayManager.class)); 209 final Context context = uiContext.createDisplayContext(secondaryDisplay); 210 211 assertFalse(context.isUiContext()); 212 } 213 214 @Test testDeviceIdForSystemContext()215 public void testDeviceIdForSystemContext() { 216 final Context systemContext = 217 ActivityThread.currentActivityThread().getSystemContext(); 218 219 assertEquals(systemContext.getDeviceId(), DEVICE_ID_DEFAULT); 220 } 221 222 @Test testDeviceIdForSystemUiContext()223 public void testDeviceIdForSystemUiContext() { 224 final Context systemUiContext = 225 ActivityThread.currentActivityThread().getSystemUiContext(); 226 227 assertEquals(systemUiContext.getDeviceId(), DEVICE_ID_DEFAULT); 228 } 229 230 @Test testDeviceIdForTestContext()231 public void testDeviceIdForTestContext() { 232 final Context testContext = 233 InstrumentationRegistry.getInstrumentation().getTargetContext(); 234 235 assertEquals(testContext.getDeviceId(), DEVICE_ID_DEFAULT); 236 } 237 createUiContext()238 private Context createUiContext() { 239 final Context appContext = ApplicationProvider.getApplicationContext(); 240 final DisplayManager displayManager = appContext.getSystemService(DisplayManager.class); 241 final Display display = displayManager.getDisplay(DEFAULT_DISPLAY); 242 return appContext.createDisplayContext(display) 243 .createWindowContext(TYPE_APPLICATION_OVERLAY, null /* options */); 244 } 245 } 246