Loading core/java/android/app/ContextImpl.java +1 −0 Original line number Diff line number Diff line Loading @@ -2747,6 +2747,7 @@ class ContextImpl extends Context { opPackageName = container.mOpPackageName; setResources(container.mResources); mDisplay = container.mDisplay; mIsAssociatedWithDisplay = container.mIsAssociatedWithDisplay; mIsSystemOrSystemUiContext = container.mIsSystemOrSystemUiContext; } else { mBasePackageName = packageInfo.mPackageName; Loading core/tests/coretests/src/android/content/ContextTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.content; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC; import static android.view.Display.DEFAULT_DISPLAY; import static com.google.common.truth.Truth.assertThat; Loading @@ -23,8 +25,13 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import android.app.ActivityThread; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.ImageReader; import android.os.UserHandle; import android.view.Display; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; Loading Loading @@ -127,4 +134,41 @@ public class ContextTest { assertThat(systemUiContext.isUiContext()).isTrue(); } @Test public void testGetDisplayFromDisplayContextDerivedContextOnPrimaryDisplay() { verifyGetDisplayFromDisplayContextDerivedContext(false /* onSecondaryDisplay */); } @Test public void testGetDisplayFromDisplayContextDerivedContextOnSecondaryDisplay() { verifyGetDisplayFromDisplayContextDerivedContext(true /* onSecondaryDisplay */); } private static void verifyGetDisplayFromDisplayContextDerivedContext( boolean onSecondaryDisplay) { final Context appContext = ApplicationProvider.getApplicationContext(); final DisplayManager displayManager = appContext.getSystemService(DisplayManager.class); final Display display; if (onSecondaryDisplay) { display = getSecondaryDisplay(displayManager); } else { display = displayManager.getDisplay(DEFAULT_DISPLAY); } final Context context = appContext.createDisplayContext(display) .createConfigurationContext(new Configuration()); assertEquals(display, context.getDisplay()); } private static Display getSecondaryDisplay(DisplayManager displayManager) { final int width = 800; final int height = 480; final int density = 160; ImageReader reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2 /* maxImages */); VirtualDisplay virtualDisplay = displayManager.createVirtualDisplay( ContextTest.class.getName(), width, height, density, reader.getSurface(), VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY); return virtualDisplay.getDisplay(); } } Loading
core/java/android/app/ContextImpl.java +1 −0 Original line number Diff line number Diff line Loading @@ -2747,6 +2747,7 @@ class ContextImpl extends Context { opPackageName = container.mOpPackageName; setResources(container.mResources); mDisplay = container.mDisplay; mIsAssociatedWithDisplay = container.mIsAssociatedWithDisplay; mIsSystemOrSystemUiContext = container.mIsSystemOrSystemUiContext; } else { mBasePackageName = packageInfo.mPackageName; Loading
core/tests/coretests/src/android/content/ContextTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.content; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC; import static android.view.Display.DEFAULT_DISPLAY; import static com.google.common.truth.Truth.assertThat; Loading @@ -23,8 +25,13 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import android.app.ActivityThread; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.ImageReader; import android.os.UserHandle; import android.view.Display; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; Loading Loading @@ -127,4 +134,41 @@ public class ContextTest { assertThat(systemUiContext.isUiContext()).isTrue(); } @Test public void testGetDisplayFromDisplayContextDerivedContextOnPrimaryDisplay() { verifyGetDisplayFromDisplayContextDerivedContext(false /* onSecondaryDisplay */); } @Test public void testGetDisplayFromDisplayContextDerivedContextOnSecondaryDisplay() { verifyGetDisplayFromDisplayContextDerivedContext(true /* onSecondaryDisplay */); } private static void verifyGetDisplayFromDisplayContextDerivedContext( boolean onSecondaryDisplay) { final Context appContext = ApplicationProvider.getApplicationContext(); final DisplayManager displayManager = appContext.getSystemService(DisplayManager.class); final Display display; if (onSecondaryDisplay) { display = getSecondaryDisplay(displayManager); } else { display = displayManager.getDisplay(DEFAULT_DISPLAY); } final Context context = appContext.createDisplayContext(display) .createConfigurationContext(new Configuration()); assertEquals(display, context.getDisplay()); } private static Display getSecondaryDisplay(DisplayManager displayManager) { final int width = 800; final int height = 480; final int density = 160; ImageReader reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2 /* maxImages */); VirtualDisplay virtualDisplay = displayManager.createVirtualDisplay( ContextTest.class.getName(), width, height, density, reader.getSurface(), VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY); return virtualDisplay.getDisplay(); } }