19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
2098365d7663cbd82979a5700faf0050220b01084dJeff Brown * Provides low-level communication with the system window manager for
2198365d7663cbd82979a5700faf0050220b01084dJeff Brown * operations that are bound to a particular context, display or parent window.
2298365d7663cbd82979a5700faf0050220b01084dJeff Brown * Instances of this object are sensitive to the compatibility info associated
2398365d7663cbd82979a5700faf0050220b01084dJeff Brown * with the running application.
2498365d7663cbd82979a5700faf0050220b01084dJeff Brown *
2598365d7663cbd82979a5700faf0050220b01084dJeff Brown * This object implements the {@link ViewManager} interface,
2698365d7663cbd82979a5700faf0050220b01084dJeff Brown * allowing you to add any View subclass as a top-level window on the screen.
2798365d7663cbd82979a5700faf0050220b01084dJeff Brown * Additional window manager specific layout parameters are defined for
2898365d7663cbd82979a5700faf0050220b01084dJeff Brown * control over how windows are displayed.  It also implements the {@link WindowManager}
2998365d7663cbd82979a5700faf0050220b01084dJeff Brown * interface, allowing you to control the displays attached to the device.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Applications will not normally use WindowManager directly, instead relying
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the higher-level facilities in {@link android.app.Activity} and
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Dialog}.
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Even for low-level window manager access, it is almost never correct to use
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this class.  For example, {@link android.app.Activity#getWindowManager}
3798365d7663cbd82979a5700faf0050220b01084dJeff Brown * provides a window manager for adding windows that are associated with that
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity -- the window manager will not normally allow you to add arbitrary
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * windows that are not associated with an activity.
4098365d7663cbd82979a5700faf0050220b01084dJeff Brown *
4198365d7663cbd82979a5700faf0050220b01084dJeff Brown * @see WindowManager
4298365d7663cbd82979a5700faf0050220b01084dJeff Brown * @see WindowManagerGlobal
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
4598365d7663cbd82979a5700faf0050220b01084dJeff Brownpublic final class WindowManagerImpl implements WindowManager {
4698365d7663cbd82979a5700faf0050220b01084dJeff Brown    private final WindowManagerGlobal mGlobal = WindowManagerGlobal.getInstance();
4798365d7663cbd82979a5700faf0050220b01084dJeff Brown    private final Display mDisplay;
48d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    private final Window mParentWindow;
49a53de0629f3b94472c0f160f5bbe1090b020feabDianne Hackborn
50a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public WindowManagerImpl(Display display) {
51a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown        this(display, null);
52d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
535be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
54a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    private WindowManagerImpl(Display display, Window parentWindow) {
5598365d7663cbd82979a5700faf0050220b01084dJeff Brown        mDisplay = display;
5698365d7663cbd82979a5700faf0050220b01084dJeff Brown        mParentWindow = parentWindow;
57d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
585be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
5998365d7663cbd82979a5700faf0050220b01084dJeff Brown    public WindowManagerImpl createLocalWindowManager(Window parentWindow) {
60a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown        return new WindowManagerImpl(mDisplay, parentWindow);
61a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    }
62a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown
63a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown    public WindowManagerImpl createPresentationWindowManager(Display display) {
64a492c3a7b2c18426fd0cb4d017eacbc368195dc5Jeff Brown        return new WindowManagerImpl(display, mParentWindow);
65d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
665be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
67d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    @Override
68d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    public void addView(View view, ViewGroup.LayoutParams params) {
6998365d7663cbd82979a5700faf0050220b01084dJeff Brown        mGlobal.addView(view, params, mDisplay, mParentWindow);
70d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
715be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
72d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    @Override
73d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    public void updateViewLayout(View view, ViewGroup.LayoutParams params) {
7498365d7663cbd82979a5700faf0050220b01084dJeff Brown        mGlobal.updateViewLayout(view, params);
75d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
765be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
77d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    @Override
78d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    public void removeView(View view) {
7998365d7663cbd82979a5700faf0050220b01084dJeff Brown        mGlobal.removeView(view, false);
80d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    }
815be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
82d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    @Override
83d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    public void removeViewImmediate(View view) {
8498365d7663cbd82979a5700faf0050220b01084dJeff Brown        mGlobal.removeView(view, true);
855be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn    }
865be8de3420ba4c9d816b98e29bdec11715f6b626Dianne Hackborn
87d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    @Override
88d32460c5b7bea7b06e345397fdbaca58d9732dcfJeff Brown    public Display getDefaultDisplay() {
8998365d7663cbd82979a5700faf0050220b01084dJeff Brown        return mDisplay;
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
92