summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/policy/DecorContext.java16
-rw-r--r--core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java11
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