diff options
| -rw-r--r-- | core/java/com/android/internal/policy/DecorContext.java | 16 | ||||
| -rw-r--r-- | core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java | 11 |
2 files changed, 23 insertions, 4 deletions
diff --git a/core/java/com/android/internal/policy/DecorContext.java b/core/java/com/android/internal/policy/DecorContext.java index 51b41198e272..5e34c15c42e2 100644 --- a/core/java/com/android/internal/policy/DecorContext.java +++ b/core/java/com/android/internal/policy/DecorContext.java @@ -20,8 +20,10 @@ import android.content.AutofillOptions; import android.content.ContentCaptureOptions; import android.content.Context; import android.content.res.AssetManager; +import android.content.res.Configuration; import android.content.res.Resources; import android.view.ContextThemeWrapper; +import android.view.Display; import android.view.contentcapture.ContentCaptureManager; import com.android.internal.annotations.VisibleForTesting; @@ -47,9 +49,17 @@ public class DecorContext extends ContextThemeWrapper { public DecorContext(Context baseContext, PhoneWindow phoneWindow) { super(null /* base */, null); setPhoneWindow(phoneWindow); - final Context displayContext = baseContext.createDisplayContext( - // TODO(b/149790106): Non-activity context can be passed. - phoneWindow.getContext().getDisplayNoVerify()); + // TODO(b/149790106): Non-activity context can be passed. + final Display display = phoneWindow.getContext().getDisplayNoVerify(); + final Context displayContext; + if (display.getDisplayId() == Display.DEFAULT_DISPLAY) { + // TODO(b/166174272): Creating a display context for the default display will result + // in additional resource creation. + displayContext = baseContext.createConfigurationContext(Configuration.EMPTY); + displayContext.updateDisplay(Display.DEFAULT_DISPLAY); + } else { + displayContext = baseContext.createDisplayContext(display); + } attachBaseContext(displayContext); } diff --git a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java index 02870a53773e..7f4e9ada7b22 100644 --- a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java +++ b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java @@ -20,6 +20,9 @@ import static android.view.Display.DEFAULT_DISPLAY; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import android.app.Activity; import android.app.EmptyActivity; @@ -41,6 +44,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; /** * Tests {@link DecorContext}. @@ -63,13 +67,18 @@ public final class DecorContextTest { @Test public void testDecorContextWithDefaultDisplay() { + final Context baseContext = Mockito.spy(mContext.getApplicationContext()); Display defaultDisplay = new Display(DisplayManagerGlobal.getInstance(), DEFAULT_DISPLAY, new DisplayInfo(), DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS); final Context defaultDisplayContext = mContext.createDisplayContext(defaultDisplay); final PhoneWindow window = new PhoneWindow(defaultDisplayContext); - DecorContext context = new DecorContext(mContext.getApplicationContext(), window); + DecorContext context = new DecorContext(baseContext, window); assertDecorContextDisplay(DEFAULT_DISPLAY, context); + + // TODO(b/166174272): Creating a display context for the default display will result + // in additional resource creation. + verify(baseContext, never()).createDisplayContext(any()); } @Test |