summaryrefslogtreecommitdiff
path: root/core/java/android/app/WindowContext.java
diff options
context:
space:
mode:
authorCharles Chen <charlesccchen@google.com>2020-09-02 17:21:11 +0800
committerCharles Chen <charlesccchen@google.com>2021-03-24 11:26:50 +0800
commitf48ece487503bee929ffb4dae9e9c82e89c659d2 (patch)
tree9098dc44d467f602e41e2369a8810d23df123c19 /core/java/android/app/WindowContext.java
parentad97628537b08097183318c580dfcce1ad98b746 (diff)
Move WindowContext module to window package
In this way, we can clarify the owners and it is easier to maintain. Also refactor to move WindowContext creation logic to ContextImpl. Test: atest WindowContext WindowContextTests WindowContextPolicyTests Bug: 159767464 Bug: 152193787 Change-Id: I78432aa18aa97e001f5a9a04321109e456fd137b
Diffstat (limited to 'core/java/android/app/WindowContext.java')
-rw-r--r--core/java/android/app/WindowContext.java159
1 files changed, 0 insertions, 159 deletions
diff --git a/core/java/android/app/WindowContext.java b/core/java/android/app/WindowContext.java
deleted file mode 100644
index d44918cf0379..000000000000
--- a/core/java/android/app/WindowContext.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.app;
-
-import static android.view.WindowManagerImpl.createWindowContextWindowManager;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.UiContext;
-import android.content.ComponentCallbacks;
-import android.content.ComponentCallbacksController;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.view.Display;
-import android.view.IWindowManager;
-import android.view.WindowManager;
-import android.view.WindowManagerGlobal;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.lang.ref.Reference;
-
-/**
- * {@link WindowContext} is a context for non-activity windows such as
- * {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY} windows or system
- * windows. Its resources and configuration are adjusted to the area of the display that will be
- * used when a new window is added via {@link android.view.WindowManager#addView}.
- *
- * @see Context#createWindowContext(int, Bundle)
- * @hide
- */
-@UiContext
-public class WindowContext extends ContextWrapper {
- private final WindowManager mWindowManager;
- private final IWindowManager mWms;
- private final WindowTokenClient mToken;
- private boolean mListenerRegistered;
- private final ComponentCallbacksController mCallbacksController =
- new ComponentCallbacksController();
-
- /**
- * Default constructor. Will generate a {@link WindowTokenClient} and attach this context to
- * the token.
- *
- * @param base Base {@link Context} for this new instance.
- * @param type Window type to be used with this context.
- * @hide
- */
- public WindowContext(@NonNull Context base, int type, @Nullable Bundle options) {
- this(base, null /* display */, type, options);
- }
-
- /**
- * Default constructor. Will generate a {@link WindowTokenClient} and attach this context to
- * the token.
- *
- * @param base Base {@link Context} for this new instance.
- * @param display the {@link Display} to override.
- * @param type Window type to be used with this context.
- * @hide
- */
- public WindowContext(@NonNull Context base, @Nullable Display display, int type,
- @Nullable Bundle options) {
- // Correct base context will be built once the token is resolved, so passing 'null' here.
- super(null /* base */);
-
- mWms = WindowManagerGlobal.getWindowManagerService();
- mToken = new WindowTokenClient();
-
- final ContextImpl contextImpl = createBaseWindowContext(base, mToken, display);
- attachBaseContext(contextImpl);
- contextImpl.setOuterContext(this);
-
- mToken.attachContext(this);
-
- mWindowManager = createWindowContextWindowManager(this);
-
- try {
- mListenerRegistered = mWms.registerWindowContextListener(mToken, type, getDisplayId(),
- options);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- Reference.reachabilityFence(this);
- }
-
- private static ContextImpl createBaseWindowContext(Context outer, IBinder token,
- Display display) {
- final ContextImpl contextImpl = ContextImpl.getImpl(outer);
- return contextImpl.createBaseWindowContext(token, display);
- }
-
- @Override
- public Object getSystemService(String name) {
- if (WINDOW_SERVICE.equals(name)) {
- return mWindowManager;
- }
- return super.getSystemService(name);
- }
-
- @Override
- protected void finalize() throws Throwable {
- release();
- super.finalize();
- }
-
- /** Used for test to invoke because we can't invoke finalize directly. */
- @VisibleForTesting
- public void release() {
- if (mListenerRegistered) {
- mListenerRegistered = false;
- try {
- mWms.unregisterWindowContextListener(mToken);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
- destroy();
- }
-
- void destroy() {
- mCallbacksController.clearCallbacks();
- final ContextImpl impl = (ContextImpl) getBaseContext();
- impl.scheduleFinalCleanup(getClass().getName(), "WindowContext");
- Reference.reachabilityFence(this);
- }
-
- @Override
- public void registerComponentCallbacks(@NonNull ComponentCallbacks callback) {
- mCallbacksController.registerCallbacks(callback);
- }
-
- @Override
- public void unregisterComponentCallbacks(@NonNull ComponentCallbacks callback) {
- mCallbacksController.unregisterCallbacks(callback);
- }
-
- /** Dispatch {@link Configuration} to each {@link ComponentCallbacks}. */
- void dispatchConfigurationChanged(@NonNull Configuration newConfig) {
- mCallbacksController.dispatchConfigurationChanged(newConfig);
- }
-}