diff options
| author | Charles Chen <charlesccchen@google.com> | 2020-09-02 17:21:11 +0800 |
|---|---|---|
| committer | Charles Chen <charlesccchen@google.com> | 2021-03-24 11:26:50 +0800 |
| commit | f48ece487503bee929ffb4dae9e9c82e89c659d2 (patch) | |
| tree | 9098dc44d467f602e41e2369a8810d23df123c19 /core/java/android/app/WindowContext.java | |
| parent | ad97628537b08097183318c580dfcce1ad98b746 (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.java | 159 |
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); - } -} |
