From 441efaec077bd7b65420e200e8e63f5114245a36 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Mon, 20 Apr 2020 15:05:12 +0800 Subject: [PATCH] Fix error in DecorView's ViewConfiguration In ViewConfiguration, we use isUiContext to verify if a context is an visual context. However, DecorContext uses Application context as a base context and return false as intended. This patch overrides isUiContext to report context#isUiContext instead. fixes: 153664027 Test: atest DecorContextTest#testIsUiContextFromVisualDecorContext Change-Id: Ida26b9617c74dc6997fc2c00d97d3420a0978fc7 --- .../com/android/internal/policy/DecorContext.java | 9 +++++++++ .../com/android/internal/policy/DecorContextTest.java | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/core/java/com/android/internal/policy/DecorContext.java b/core/java/com/android/internal/policy/DecorContext.java index 01bedb7b0fc6e..51b41198e272f 100644 --- a/core/java/com/android/internal/policy/DecorContext.java +++ b/core/java/com/android/internal/policy/DecorContext.java @@ -118,4 +118,13 @@ public class DecorContext extends ContextThemeWrapper { } return null; } + + @Override + public boolean isUiContext() { + Context context = mContext.get(); + if (context != null) { + return context.isUiContext(); + } + return false; + } } 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 2764a16de33cf..02870a53773e9 100644 --- a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java +++ b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java @@ -19,6 +19,7 @@ package com.android.internal.policy; import static android.view.Display.DEFAULT_DISPLAY; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import android.app.Activity; import android.app.EmptyActivity; @@ -102,4 +103,14 @@ public final class DecorContextTest { assertEquals(expectedWm.mContext, actualWm.mContext); }); } + + @Test + public void testIsUiContextFromVisualDecorContext() throws Throwable { + mActivityRule.runOnUiThread(() -> { + Activity activity = mActivityRule.getActivity(); + final DecorContext decorContext = new DecorContext(mContext.getApplicationContext(), + (PhoneWindow) activity.getWindow()); + assertTrue(decorContext.isUiContext()); + }); + } }