diff options
3 files changed, 32 insertions, 56 deletions
diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 561ee604aa7f..316a5f2c88d2 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -36,7 +36,6 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; -import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.IResultReceiver; import java.util.List; @@ -70,8 +69,7 @@ import java.util.List; public final class WindowManagerImpl implements WindowManager { @UnsupportedAppUsage private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance(); - @VisibleForTesting - public final Context mContext; + private final Context mContext; private final Window mParentWindow; private IBinder mDefaultToken; diff --git a/core/java/com/android/internal/policy/DecorContext.java b/core/java/com/android/internal/policy/DecorContext.java index f00776897f2c..99b4b5fb7707 100644 --- a/core/java/com/android/internal/policy/DecorContext.java +++ b/core/java/com/android/internal/policy/DecorContext.java @@ -41,17 +41,17 @@ import java.lang.ref.WeakReference; public class DecorContext extends ContextThemeWrapper { private PhoneWindow mPhoneWindow; private WindowManager mWindowManager; - private Resources mResources; + private Resources mActivityResources; private ContentCaptureManager mContentCaptureManager; - private WeakReference<Context> mContext; + private WeakReference<Context> mActivityContext; // TODO(b/149928768): Non-activity context can be passed. @VisibleForTesting - public DecorContext(Context baseContext, Context context) { - super(baseContext.createDisplayContext(context.getDisplayNoVerify()), null); - mContext = new WeakReference<>(context); - mResources = context.getResources(); + public DecorContext(Context context, Context activityContext) { + super(context.createDisplayContext(activityContext.getDisplayNoVerify()), null); + mActivityContext = new WeakReference<>(activityContext); + mActivityResources = activityContext.getResources(); } void setPhoneWindow(PhoneWindow phoneWindow) { @@ -61,56 +61,58 @@ public class DecorContext extends ContextThemeWrapper { @Override public Object getSystemService(String name) { - final Context context = mContext.get(); if (Context.WINDOW_SERVICE.equals(name)) { - if (context != null && mWindowManager == null) { - WindowManagerImpl wm = (WindowManagerImpl) context.getSystemService(name); + if (mWindowManager == null) { + WindowManagerImpl wm = + (WindowManagerImpl) super.getSystemService(Context.WINDOW_SERVICE); mWindowManager = wm.createLocalWindowManager(mPhoneWindow); } return mWindowManager; } if (Context.CONTENT_CAPTURE_MANAGER_SERVICE.equals(name)) { - if (context != null && mContentCaptureManager == null) { - mContentCaptureManager = (ContentCaptureManager) context.getSystemService(name); + if (mContentCaptureManager == null) { + Context activityContext = mActivityContext.get(); + if (activityContext != null) { + mContentCaptureManager = (ContentCaptureManager) activityContext + .getSystemService(name); + } } return mContentCaptureManager; } - // LayoutInflater and WallpaperManagerService should also be obtained from context - // instead of application context. - return (context != null) ? context.getSystemService(name) : super.getSystemService(name); + return super.getSystemService(name); } @Override public Resources getResources() { - Context context = mContext.get(); + Context activityContext = mActivityContext.get(); // Attempt to update the local cached Resources from the activity context. If the activity // is no longer around, return the old cached values. - if (context != null) { - mResources = context.getResources(); + if (activityContext != null) { + mActivityResources = activityContext.getResources(); } - return mResources; + return mActivityResources; } @Override public AssetManager getAssets() { - return mResources.getAssets(); + return mActivityResources.getAssets(); } @Override public AutofillOptions getAutofillOptions() { - Context context = mContext.get(); - if (context != null) { - return context.getAutofillOptions(); + Context activityContext = mActivityContext.get(); + if (activityContext != null) { + return activityContext.getAutofillOptions(); } return null; } @Override public ContentCaptureOptions getContentCaptureOptions() { - Context context = mContext.get(); - if (context != null) { - return context.getContentCaptureOptions(); + Context activityContext = mActivityContext.get(); + if (activityContext != null) { + return activityContext.getContentCaptureOptions(); } return null; } 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 d019704fb684..3e40466e4b64 100644 --- a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java +++ b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java @@ -20,24 +20,19 @@ import static android.view.Display.DEFAULT_DISPLAY; import static org.junit.Assert.assertEquals; -import android.app.Activity; -import android.app.EmptyActivity; import android.content.Context; import android.hardware.display.DisplayManagerGlobal; import android.platform.test.annotations.Presubmit; import android.view.Display; import android.view.DisplayAdjustments; import android.view.DisplayInfo; -import android.view.WindowManager; -import android.view.WindowManagerImpl; -import androidx.test.core.app.ApplicationProvider; +import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; -import androidx.test.rule.ActivityTestRule; import androidx.test.runner.AndroidJUnit4; + import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -51,13 +46,9 @@ public final class DecorContextTest { private Context mContext; private static final int EXTERNAL_DISPLAY = DEFAULT_DISPLAY + 1; - @Rule - public ActivityTestRule<EmptyActivity> mActivityRule = - new ActivityTestRule<>(EmptyActivity.class); - @Before - public void setUp() { - mContext = ApplicationProvider.getApplicationContext(); + public void setUp() throws Exception { + mContext = InstrumentationRegistry.getContext(); } @Test @@ -85,19 +76,4 @@ public final class DecorContextTest { Display associatedDisplay = decorContext.getDisplay(); assertEquals(expectedDisplayId, associatedDisplay.getDisplayId()); } - - @Test - public void testGetWindowManagerFromVisualDecorContext() throws Throwable { - mActivityRule.runOnUiThread(() -> { - Activity activity = mActivityRule.getActivity(); - final DecorContext decorContext = new DecorContext(mContext.getApplicationContext(), - activity); - WindowManagerImpl actualWm = (WindowManagerImpl) - decorContext.getSystemService(WindowManager.class); - WindowManagerImpl expectedWm = (WindowManagerImpl) - activity.getSystemService(WindowManager.class); - // Verify that window manager is from activity not application context. - assertEquals(expectedWm.mContext, actualWm.mContext); - }); - } } |