WindowState.java revision c8bc97e53044cd62c0e023fdc441fd13127d0283
16e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/* 26e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Copyright (C) 2011 The Android Open Source Project 36e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * 46e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 56e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * you may not use this file except in compliance with the License. 66e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * You may obtain a copy of the License at 76e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * 86e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 96e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * 106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Unless required by applicable law or agreed to in writing, software 116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * See the License for the specific language governing permissions and 146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * limitations under the License. 156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornpackage com.android.server.wm; 186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW; 206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW; 216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW; 226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; 236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; 246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 26e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport android.content.Context; 276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.content.res.Configuration; 286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Matrix; 296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.PixelFormat; 306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Rect; 31d040edbae968d826aa2c82d382345811a45c646bDianne Hackbornimport android.graphics.RectF; 326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Region; 336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.IBinder; 346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.RemoteException; 356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.util.Slog; 366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.Gravity; 376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IApplicationToken; 386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IWindow; 396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.InputChannel; 406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.View; 416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.ViewTreeObserver; 426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManager; 436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManagerPolicy; 446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.io.PrintWriter; 466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.util.ArrayList; 476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * A window in the window manager. 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 51e32c30784191a9244a08450759471c934c85034cCraig Mautnerfinal class WindowState implements WindowManagerPolicy.WindowState { 52d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner static final String TAG = "WindowState"; 53d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner 545fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean DEBUG_VISIBILITY = WindowManagerService.DEBUG_VISIBILITY; 555fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean SHOW_TRANSACTIONS = WindowManagerService.SHOW_TRANSACTIONS; 5636991744a221c30a47085442e6416bdde40b85e8Dianne Hackborn static final boolean SHOW_LIGHT_TRANSACTIONS = WindowManagerService.SHOW_LIGHT_TRANSACTIONS; 575fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean SHOW_SURFACE_ALLOC = WindowManagerService.SHOW_SURFACE_ALLOC; 585fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn 596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManagerService mService; 60e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final WindowManagerPolicy mPolicy; 61e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final Context mContext; 626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Session mSession; 636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IWindow mClient; 646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mToken; 656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mRootToken; 666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mAppToken; 676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mTargetAppToken; 686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); 696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final DeathRecipient mDeathRecipient; 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowState mAttachedWindow; 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final ArrayList<WindowState> mChildWindows = new ArrayList<WindowState>(); 726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mBaseLayer; 736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mSubLayer; 746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mLayoutAttached; 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsImWindow; 766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsWallpaper; 776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsFloatingLayer; 789a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSeq; 795fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn boolean mEnforceSizeCompat; 806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mViewVisibility; 819a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSystemUiVisibility; 826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibility = true; 836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibilityAfterAnim = true; 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAppFreezing; 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAttachedHidden; // is our parent window hidden? 866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mLastHidden; // was this window last hidden? 876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mWallpaperVisible; // for wallpaper, what was last vis report? 88ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 89ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 90ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * The window size that was requested by the application. These are in 91ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * the application's coordinate space (without compatibility scale applied). 92ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedWidth; 946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedHeight; 951743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedWidth; 961743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedHeight; 97ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayer; 996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mHaveFrame; 1006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mObscured; 1016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mTurnOnScreen; 1026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayoutSeq = -1; 104a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 1056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Configuration mConfiguration = null; 106a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 107ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 108ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Actual frame shown on-screen (may be modified by animation). These 109ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * are in the screen's coordinate space (WITH the compatibility scale 110ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * applied). 111ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 112d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn final RectF mShownFrame = new RectF(); 1136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 115ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Insets that determine the actually visible area. These are in the application's 116ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleInsets = new Rect(); 1196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastVisibleInsets = new Rect(); 1206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mVisibleInsetsChanged; 1216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 123ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Insets that are covered by system windows. These are in the application's 124ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentInsets = new Rect(); 1276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastContentInsets = new Rect(); 1286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentInsetsChanged; 1296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Set to true if we are waiting for this window to receive its 1326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * given internal insets before laying out other windows based on it. 1336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mGivenInsetsPending; 1356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the content insets that were given during layout for 1386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 1396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenContentInsets = new Rect(); 1416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the visible insets that were given during layout for 1446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 1456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenVisibleInsets = new Rect(); 1476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * This is the given touchable area relative to the window frame, or null if none. 1506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region mGivenTouchableRegion = new Region(); 1526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Flag indicating whether the touchable region should be adjusted by 1556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the visible insets; if false the area outside the visible insets is 1566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * NOT touchable, so we must use those to adjust the frame during hit 1576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * tests. 1586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mTouchableInsets = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME; 1606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Current transformation being applied. 162e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn float mGlobalScale=1; 163ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float mInvGlobalScale=1; 1646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mHScale=1, mVScale=1; 1656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mLastHScale=1, mLastVScale=1; 1666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Matrix mTmpMatrix = new Matrix(); 1676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 168ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // "Real" frame that the application sees, in display coordinate space. 1696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mFrame = new Rect(); 1706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastFrame = new Rect(); 171ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Frame that is scaled to the application's coordinate space when in 172ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // screen size compatibility mode. 173ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect mCompatFrame = new Rect(); 1746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContainingFrame = new Rect(); 1766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mDisplayFrame = new Rect(); 1776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentFrame = new Rect(); 1786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mParentFrame = new Rect(); 1796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleFrame = new Rect(); 1806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentChanged; 1826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: the requested offset for the 1846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // wallpaper; if a wallpaper window: the currently applied offset. 1856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperX = -1; 1866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperY = -1; 1876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: what fraction of the offset 1896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // range corresponds to a full virtual screen. 1906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperXStep = -1; 1916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperYStep = -1; 1926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Wallpaper windows: pixels offset based on above variables. 1946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mXOffset; 1956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mYOffset; 1966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This is set after IWindowSession.relayout() has been called at 1986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // least once for the window. It allows us to detect the situation 1996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // where we don't yet have a surface, but should have one soon, so 2006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we can give the window focus before waiting for the relayout. 2016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRelayoutCalled; 2026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 203b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // If the application has called relayout() with changes that can 204b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // impact its window's size, we need to perform a layout pass on it 205b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // even if it is not currently visible for layout. This is set 206b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // when in that case until the layout is done. 207b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn boolean mLayoutNeeded; 208b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn 2096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This is set during the time after the window's drawing has been 2106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // committed, and before its surface is actually shown. It is used 2116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // to delay showing the surface until all windows in a token are ready 2126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // to be shown. 2136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mReadyToShow; 2146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set when the window has been shown in the screen the first time. 2166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mHasDrawn; 2176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Currently running an exit animation? 2196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mExiting; 2206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Currently on the mDestroySurface list? 2226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mDestroying; 2236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Completely remove from window manager after exit animation? 2256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoveOnExit; 2266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set when the orientation is changing and this window has not yet 2286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // been updated for the new orientation. 2296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mOrientationChanging; 2306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this window now (or just being) removed? 2326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoved; 2336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Temp for keeping track of windows that have been removed when 2356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // rebuilding window list. 2366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRebuilding; 2376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Input channel and input window handle used by the input dispatcher. 2399302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown final InputWindowHandle mInputWindowHandle; 2406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn InputChannel mInputChannel; 2416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Used to improve performance of toString() 2436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String mStringNameCache; 2446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn CharSequence mLastTitle; 2456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mWasPaused; 2466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 247a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final WindowStateAnimator mWinAnimator; 248a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 249c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner boolean mHasSurface = false; 250c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner 2516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, 2529a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn WindowState attachedWindow, int seq, WindowManager.LayoutParams a, 2536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int viewVisibility) { 2546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService = service; 2556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession = s; 2566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient = c; 2576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mToken = token; 2586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.copyFrom(a); 2596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mViewVisibility = viewVisibility; 260e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mPolicy = mService.mPolicy; 261e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mContext = mService.mContext; 2626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn DeathRecipient deathRecipient = new DeathRecipient(); 2639a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn mSeq = seq; 264e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn mEnforceSizeCompat = (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0; 2656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 266d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Window " + this + " client=" + c.asBinder() 2676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " token=" + token + " (" + mAttrs.token + ")"); 2686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 2696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn c.asBinder().linkToDeath(deathRecipient, 0); 2706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RemoteException e) { 2716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = null; 2726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 2736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 2746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = false; 2756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = false; 2766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = false; 2776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mBaseLayer = 0; 2786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 2799302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown mInputWindowHandle = null; 280a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner mWinAnimator = null; 2816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return; 2826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = deathRecipient; 2846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if ((mAttrs.type >= FIRST_SUB_WINDOW && 2866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.type <= LAST_SUB_WINDOW)) { 2876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 2886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 289e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw( 2906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn attachedWindow.mAttrs.type) * WindowManagerService.TYPE_LAYER_MULTIPLIER 2916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 292e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mSubLayer = mPolicy.subWindowTypeToLayerLw(a.type); 2936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = attachedWindow; 294d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + mAttachedWindow); 2956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow.mChildWindows.add(this); 2966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = mAttrs.type != 2976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 2986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = attachedWindow.mAttrs.type == TYPE_INPUT_METHOD 2996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || attachedWindow.mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 3006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = attachedWindow.mAttrs.type == TYPE_WALLPAPER; 3016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 3026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 3036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 3046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 305e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw(a.type) 3066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * WindowManagerService.TYPE_LAYER_MULTIPLIER 3076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 3086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 3096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 3106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 3116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = mAttrs.type == TYPE_INPUT_METHOD 3126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 3136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = mAttrs.type == TYPE_WALLPAPER; 3146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 3156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 317a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner mWinAnimator = new WindowStateAnimator(service, this, mAttachedWindow); 318c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.mAlpha = a.alpha; 319a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 3206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState appWin = this; 3216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appWin.mAttachedWindow != null) { 322a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner appWin = appWin.mAttachedWindow; 3236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken appToken = appWin.mToken; 3256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appToken.appWindowToken == null) { 3266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken parent = mService.mTokenMap.get(appToken.token); 3276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (parent == null || appToken == parent) { 3286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 3296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appToken = parent; 3316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRootToken = appToken; 3336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAppToken = appToken.appWindowToken; 3346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedWidth = 0; 3366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedHeight = 0; 3371743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = 0; 3381743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = 0; 3396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mXOffset = 0; 3406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mYOffset = 0; 3416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayer = 0; 3426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputWindowHandle = new InputWindowHandle( 3436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAppToken != null ? mAppToken.mInputApplicationHandle : null, this); 3446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void attach() { 3476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 348d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Attaching " + this + " token=" + mToken 3496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + ", list=" + mToken.windows); 3506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowAddedLocked(); 3516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 353a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 3546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void computeFrameLw(Rect pf, Rect df, Rect cf, Rect vf) { 3556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mHaveFrame = true; 3566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect container = mContainingFrame; 3586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn container.set(pf); 3596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect display = mDisplayFrame; 3616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn display.set(df); 3626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int pw = container.right - container.left; 3646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int ph = container.bottom - container.top; 3656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int w,h; 367ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if ((mAttrs.flags & WindowManager.LayoutParams.FLAG_SCALED) != 0) { 368ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width < 0) { 369ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 370ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 371ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mAttrs.width * mGlobalScale + .5f); 372ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 373ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mAttrs.width; 374ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 375ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height < 0) { 376ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 377ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 378ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mAttrs.height * mGlobalScale + .5f); 379ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 380ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mAttrs.height; 381ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 3826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 383ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width == WindowManager.LayoutParams.MATCH_PARENT) { 384ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 385ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 386ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mRequestedWidth * mGlobalScale + .5f); 387ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 388ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mRequestedWidth; 389ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 390ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height == WindowManager.LayoutParams.MATCH_PARENT) { 391ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 392ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 393ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mRequestedHeight * mGlobalScale + .5f); 394ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 395ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mRequestedHeight; 396ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 3976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!mParentFrame.equals(pf)) { 4006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //Slog.i(TAG, "Window " + this + " content frame from " + mParentFrame 4016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // + " to " + pf); 4026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mParentFrame.set(pf); 4036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mContentChanged = true; 4046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4051743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 4061743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = mRequestedWidth; 4071743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = mRequestedHeight; 4081743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mContentChanged = true; 4091743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 4106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect content = mContentFrame; 4126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn content.set(cf); 4136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect visible = mVisibleFrame; 4156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visible.set(vf); 4166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect frame = mFrame; 4186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int fw = frame.width(); 4196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int fh = frame.height(); 4206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //System.out.println("In: w=" + w + " h=" + h + " container=" + 4226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // container + " x=" + mAttrs.x + " y=" + mAttrs.y); 4236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 424ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float x, y; 425ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 426ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x * mGlobalScale; 427ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y * mGlobalScale; 428ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 429ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x; 430ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y; 431ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 432ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 4336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Gravity.apply(mAttrs.gravity, w, h, container, 434ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn (int) (x + mAttrs.horizontalMargin * pw), 435ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn (int) (y + mAttrs.verticalMargin * ph), frame); 4366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //System.out.println("Out: " + mFrame); 4386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Now make sure the window fits in the overall display. 4406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Gravity.applyDisplay(mAttrs.gravity, df, frame); 4416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Make sure the content and visible frames are inside of the 4436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // final window frame. 4446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.left < frame.left) content.left = frame.left; 4456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.top < frame.top) content.top = frame.top; 4466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.right > frame.right) content.right = frame.right; 4476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.bottom > frame.bottom) content.bottom = frame.bottom; 4486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.left < frame.left) visible.left = frame.left; 4496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.top < frame.top) visible.top = frame.top; 4506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.right > frame.right) visible.right = frame.right; 4516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.bottom > frame.bottom) visible.bottom = frame.bottom; 4526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect contentInsets = mContentInsets; 4546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.left = content.left-frame.left; 4556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.top = content.top-frame.top; 4566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.right = frame.right-content.right; 4576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.bottom = frame.bottom-content.bottom; 4586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect visibleInsets = mVisibleInsets; 4606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.left = visible.left-frame.left; 4616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.top = visible.top-frame.top; 4626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.right = frame.right-visible.right; 4636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.bottom = frame.bottom-visible.bottom; 4646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 465ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mCompatFrame.set(frame); 466e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 467ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // If there is a size compatibility scale being applied to the 468ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // window, we need to apply this to its insets so that they are 469ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // reported to the app in its coordinate space. 470ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn contentInsets.scale(mInvGlobalScale); 471ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn visibleInsets.scale(mInvGlobalScale); 472ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 473ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Also the scaled frame that we report to the app needs to be 474ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // adjusted to be in its coordinate space. 475ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mCompatFrame.scale(mInvGlobalScale); 476e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 477e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 4786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mIsWallpaper && (fw != frame.width() || fh != frame.height())) { 479bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown mService.updateWallpaperOffsetLocked(this, 480bc68a59c024bdb745dac8e2ec7408a9f30595f1aJeff Brown mService.mAppDisplayWidth, mService.mAppDisplayHeight, false); 4816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) { 4846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //if ("com.google.android.youtube".equals(mAttrs.packageName) 4856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // && mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) { 486d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner Slog.v(TAG, "Resolving (mRequestedWidth=" 4876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + mRequestedWidth + ", mRequestedheight=" 4886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + mRequestedHeight + ") to" + " (pw=" + pw + ", ph=" + ph 4896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + "): frame=" + mFrame.toShortString() 4906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " ci=" + contentInsets.toShortString() 4916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " vi=" + visibleInsets.toShortString()); 4926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //} 4936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 496a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 4976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getFrameLw() { 4986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mFrame; 4996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 501a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 502d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn public RectF getShownFrameLw() { 5036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mShownFrame; 5046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 506a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getDisplayFrameLw() { 5086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mDisplayFrame; 5096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 511a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getContentFrameLw() { 5136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mContentFrame; 5146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 516a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getVisibleFrameLw() { 5186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mVisibleFrame; 5196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 521a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean getGivenInsetsPendingLw() { 5236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenInsetsPending; 5246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 526a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenContentInsetsLw() { 5286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenContentInsets; 5296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 531a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenVisibleInsetsLw() { 5336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenVisibleInsets; 5346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 536a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public WindowManager.LayoutParams getAttrs() { 5386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAttrs; 5396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 54173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn public boolean getNeedsMenuLw(WindowManagerPolicy.WindowState bottom) { 54273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn int index = -1; 54373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn WindowState ws = this; 54473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn while (true) { 54573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if ((ws.mAttrs.privateFlags 54673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn & WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY) != 0) { 54773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return (ws.mAttrs.flags & WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0; 54873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 54973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // If we reached the bottom of the range of windows we are considering, 55073ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // assume no menu is needed. 55173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (ws == bottom) { 55273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 55373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 55473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // The current window hasn't specified whether menu key is needed; 55573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // look behind it. 55673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // First, we may need to determine the starting position. 55773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 55873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn index = mService.mWindows.indexOf(ws); 55973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 56073ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn index--; 56173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 56273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 56373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 56473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn ws = mService.mWindows.get(index); 56573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 56673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 56773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn 5689a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn public int getSystemUiVisibility() { 5699a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn return mSystemUiVisibility; 5709a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn } 5719a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn 5726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public int getSurfaceLayer() { 5736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mLayer; 5746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public IApplicationToken getAppToken() { 5776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null ? mAppToken.appToken : null; 5786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public long getInputDispatchingTimeoutNanos() { 5816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null 5826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn ? mAppToken.inputDispatchingTimeoutNanos 5836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; 5846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasAppShownWindows() { 5876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null ? mAppToken.firstWindowDrawn : false; 5886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isIdentityMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { 5916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdx < .99999f || dsdx > 1.00001f) return false; 5926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdy < .99999f || dtdy > 1.00001f) return false; 5936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdx < -.000001f || dtdx > .000001f) return false; 5946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdy < -.000001f || dsdy > .000001f) return false; 5956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 5966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 598e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn void prelayout() { 599e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 600e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn mGlobalScale = mService.mCompatibleScreenScale; 601ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mInvGlobalScale = 1/mGlobalScale; 602e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } else { 603ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mGlobalScale = mInvGlobalScale = 1; 604e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 605e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 606e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 6076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible? It is not visible if there is no 6096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * surface, or we are in the process of running an exit animation 6106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface, or its app token has been hidden. 6116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleLw() { 6136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 614c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 6156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 6166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 6176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like {@link #isVisibleLw}, but also counts a window that is currently 6216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * "hidden" behind the keyguard as visible. This allows us to apply 6226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * things like window flags that impact the keyguard. 6236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * XXX I am starting to think we need to have ANOTHER visibility flag 6246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * for this "hidden behind keyguard" state rather than overloading 6256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * mPolicyVisibility. Ungh. 6266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleOrBehindKeyguardLw() { 628bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn if (mRootToken.waitingToShow && 629bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { 630bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn return false; 631bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn } 6326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 633bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn final boolean animating = atoken != null 634bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn ? (atoken.animation != null) : false; 635c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && !mExiting 6366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested) 637bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 638bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && !mRootToken.hidden) 639a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null || animating); 6406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible, ignoring its app token? It is not visible 6446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * if there is no surface, or we are in the process of running an exit animation 6456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface. 6466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isWinVisibleLw() { 6486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 649c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 6506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested || atoken.animating) 6516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 6526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * The same as isVisible(), but follows the current hidden state of 6566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the associated app token, not the pending requested hidden state. 6576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleNow() { 659c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 6606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mRootToken.hidden && !mExiting && !mDestroying; 6616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Can this window possibly be a drag/drop target? The test here is 6656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * a combination of the above "visible now" with the check that the 6666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Input Manager uses when discarding windows from input consideration. 6676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isPotentialDragTarget() { 669cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return isVisibleNow() && !mRemoved 670cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown && mInputChannel != null && mInputWindowHandle != null; 6716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Same as isVisible(), but we also count it as visible between the 6756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * call to IWindowSession.add() and the first relayout(). 6766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleOrAdding() { 6786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 679c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return ((mHasSurface && !mWinAnimator.mReportDestroySurface) 6806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || (!mRelayoutCalled && mViewVisibility == View.VISIBLE)) 6816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && mPolicyVisibility && !mAttachedHidden 6826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 6836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 6846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window currently on-screen? It is on-screen either if it 6886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * is visible or it is currently running an animation before no longer 6896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * being visible. 6906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOnScreen() { 692c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner if (!mHasSurface || !mPolicyVisibility || mDestroying) { 693c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return false; 694c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner } 6956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 6966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (atoken != null) { 697c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return ((!mAttachedHidden && !atoken.hiddenRequested) 698a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null || atoken.animation != null); 6996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 700c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return !mAttachedHidden || mWinAnimator.mAnimation != null; 7016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen(), but we don't return true if the window is part 7056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * of a transition that has not yet been started. 7066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isReadyForDisplay() { 7086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mRootToken.waitingToShow && 7096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { 7106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 7116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 712c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mDestroying 7136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 7146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mRootToken.hidden) 715a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null 716ad3a9bb628e912b39e10f8d8a8bde0badefd8bd0Craig Mautner || ((mAppToken != null) && (mAppToken.animation != null))); 7176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen, but returns false if the surface hasn't yet 7216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * been drawn. 7226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDisplayedLw() { 7246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 725bf90eaa5d2410bfb60ef84a0efcf3b5eb5022d9fCraig Mautner return isDrawnLw() && mPolicyVisibility 7266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && 7276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn (atoken == null || !atoken.hiddenRequested)) 728a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimating); 7296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 731cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn public boolean isGoneForLayoutLw() { 732cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn final AppWindowToken atoken = mAppToken; 733cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn return mViewVisibility == View.GONE 734cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || !mRelayoutCalled 735cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || (atoken == null && mRootToken.hidden) 736b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) 737cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || mAttachedHidden 738cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || mExiting || mDestroying; 739cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn } 740cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn 7416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Returns true if the window has a surface that it has drawn a 7436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * complete UI in to. 7446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDrawnLw() { 746c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && 747c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner !mWinAnimator.mDrawPending && !mWinAnimator.mCommitDrawPending; 7486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Return true if the window is opaque and fully drawn. This indicates 7526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * it may obscure windows behind it. 7536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOpaqueDrawn() { 7556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return (mAttrs.format == PixelFormat.OPAQUE 7566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_WALLPAPER) 757a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner && isDrawnLw() && mWinAnimator.mAnimation == null 758bf90eaa5d2410bfb60ef84a0efcf3b5eb5022d9fCraig Mautner && (mAppToken == null || mAppToken.animation == null); 7596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Return whether this window is wanting to have a translation 7636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * animation applied to it for an in-progress move. (Only makes 7646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * sense to call from performLayoutAndPlaceSurfacesLockedInner().) 7656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean shouldAnimateMove() { 7672fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner return mContentChanged && !mExiting && !mLastHidden && mService.okToDisplay() 7686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (mFrame.top != mLastFrame.top 7696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mFrame.left != mLastFrame.left) 7702fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner && (mAttachedWindow == null || !mAttachedWindow.shouldAnimateMove()); 7716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isFullscreen(int screenWidth, int screenHeight) { 774ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn return mFrame.left <= 0 && mFrame.top <= 0 && 775ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mFrame.right >= screenWidth && mFrame.bottom >= screenHeight; 7766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void removeLocked() { 7796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn disposeInputChannel(); 7806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null) { 782d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + this + " from " + mAttachedWindow); 7836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow.mChildWindows.remove(this); 7846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 785c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.destroyDeferredSurfaceLocked(); 786c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.destroySurfaceLocked(); 7876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowRemovedLocked(); 7886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 7896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient.asBinder().unlinkToDeath(mDeathRecipient, 0); 7906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RuntimeException e) { 7916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Ignore if it has already been removed (usually because 7926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we are doing this as part of processing a death note.) 7936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 795cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 796cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown void setInputChannel(InputChannel inputChannel) { 797cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown if (mInputChannel != null) { 798cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown throw new IllegalStateException("Window already has an input channel."); 799cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 800cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 801cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputChannel = inputChannel; 802cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = inputChannel; 803cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 804cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 8056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void disposeInputChannel() { 8066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mInputChannel != null) { 8076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mInputManager.unregisterInputChannel(mInputChannel); 8086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel.dispose(); 8106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel = null; 8116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 812cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 813cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = null; 8146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn private class DeathRecipient implements IBinder.DeathRecipient { 8176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void binderDied() { 8186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 8196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn synchronized(mService.mWindowMap) { 8206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = mService.windowForClientLocked(mSession, mClient, false); 821d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner Slog.i(TAG, "WIN DEATH: " + win); 8226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win != null) { 8236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.removeWindowLocked(mSession, win); 8246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (IllegalArgumentException ex) { 8276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This will happen if the window has already been 8286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // removed. 8296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** Returns true if this window desires key events. */ 8346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public final boolean canReceiveKeys() { 8356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return isVisibleOrAdding() 8366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (mViewVisibility == View.VISIBLE) 8376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0); 8386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasDrawnLw() { 8416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mHasDrawn; 8426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean showLw(boolean doAnimation) { 8456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return showLw(doAnimation, true); 8466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean showLw(boolean doAnimation, boolean requestAnim) { 8496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mPolicyVisibility && mPolicyVisibilityAfterAnim) { 850e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already showing. 8516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 8526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 853d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility true: " + this); 8546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 855d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "doAnimation: mPolicyVisibility=" 856a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + mPolicyVisibility + " mAnimation=" + mWinAnimator.mAnimation); 8572fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 8586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 859a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner } else if (mPolicyVisibility && mWinAnimator.mAnimation == null) { 8606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Check for the case where we are currently visible and 8616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // not animating; we do not want to do animation at such a 8626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // point to become visible when we already are. 8636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 8646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = true; 8676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = true; 8686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 869c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_ENTER, true); 8706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 8724a06c8008b2edd6677f9a411af79b0a4971b87feJeff Brown mService.scheduleAnimationLocked(); 8736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 8756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hideLw(boolean doAnimation) { 8786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return hideLw(doAnimation, true); 8796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hideLw(boolean doAnimation, boolean requestAnim) { 8826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 8832fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 8846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 8856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean current = doAnimation ? mPolicyVisibilityAfterAnim 8886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : mPolicyVisibility; 8896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!current) { 890e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already hiding. 8916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 8926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 894c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT, false); 895a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner if (mWinAnimator.mAnimation == null) { 8966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 8976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 9006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 9016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 902d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility false: " + this); 9036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 9046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = false; 9056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Window is no longer visible -- make sure if we were waiting 9066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // for it to be displayed before enabling the display, that 9076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we allow the display to be enabled now. 9086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.enableScreenIfNeededLocked(); 9096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mService.mCurrentFocus == this) { 9106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mFocusMayChange = true; 9116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 9144a06c8008b2edd6677f9a411af79b0a4971b87feJeff Brown mService.scheduleAnimationLocked(); 9156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 9176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 919ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn private static void applyInsets(Region outRegion, Rect frame, Rect inset) { 920ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn outRegion.set( 921ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.left + inset.left, frame.top + inset.top, 922ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.right - inset.right, frame.bottom - inset.bottom); 923e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 924e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 9256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void getTouchableRegion(Region outRegion) { 926ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect frame = mFrame; 9276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn switch (mTouchableInsets) { 9286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn default: 9296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: 9306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(frame); 9316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 932e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: 933ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenContentInsets); 9346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 935e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: 936ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenVisibleInsets); 9376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 9386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION: { 9396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region givenTouchableRegion = mGivenTouchableRegion; 9406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(givenTouchableRegion); 9416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.translate(frame.left, frame.top); 9426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 9436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 947a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn void dump(PrintWriter pw, String prefix, boolean dumpAll) { 9486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mSession="); pw.print(mSession); 9496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mClient="); pw.println(mClient.asBinder()); 9506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs); 951a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth); 952a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" h="); pw.print(mRequestedHeight); 953a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); 9541743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 9551743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(prefix); pw.print("LastRequested w="); pw.print(mLastRequestedWidth); 9561743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(" h="); pw.println(mLastRequestedHeight); 9571743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 9586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null || mLayoutAttached) { 9596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttachedWindow="); pw.print(mAttachedWindow); 9606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mLayoutAttached="); pw.println(mLayoutAttached); 9616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mIsImWindow || mIsWallpaper || mIsFloatingLayer) { 9636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mIsImWindow="); pw.print(mIsImWindow); 9646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsWallpaper="); pw.print(mIsWallpaper); 9656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsFloatingLayer="); pw.print(mIsFloatingLayer); 9666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperVisible="); pw.println(mWallpaperVisible); 9676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 968a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 969a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); 970a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mSubLayer="); pw.print(mSubLayer); 971a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+"); 972a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print((mTargetAppToken != null ? mTargetAppToken.animLayerAdjustment 973a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn : (mAppToken != null ? mAppToken.animLayerAdjustment : 0))); 974c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print("="); pw.print(mWinAnimator.mAnimLayer); 975c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print(" mLastLayer="); pw.println(mWinAnimator.mLastLayer); 9766d05fd3c795088ac60f86382df5a66d631e8a0cbDianne Hackborn } 977a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 978a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mToken="); pw.println(mToken); 979a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mRootToken="); pw.println(mRootToken); 980a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mAppToken != null) { 981a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); 982a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 983a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTargetAppToken != null) { 984a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTargetAppToken="); pw.println(mTargetAppToken); 985a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 986a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mViewVisibility=0x"); 987a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(Integer.toHexString(mViewVisibility)); 988a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mLastHidden="); pw.print(mLastHidden); 989a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mHaveFrame="); pw.print(mHaveFrame); 990a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mObscured="); pw.println(mObscured); 9919a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(prefix); pw.print("mSeq="); pw.print(mSeq); 9929a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(" mSystemUiVisibility=0x"); 9939a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.println(Integer.toHexString(mSystemUiVisibility)); 9946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || mAttachedHidden) { 9966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mPolicyVisibility="); 9976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibility); 9986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mPolicyVisibilityAfterAnim="); 9996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibilityAfterAnim); 10006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAttachedHidden="); pw.println(mAttachedHidden); 10016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1002b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn if (!mRelayoutCalled || mLayoutNeeded) { 1003b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled); 1004b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded); 10056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mXOffset != 0 || mYOffset != 0) { 10076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("Offsets x="); pw.print(mXOffset); 10086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" y="); pw.println(mYOffset); 10096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1010a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1011a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mGivenContentInsets="); 1012a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenContentInsets.printShortString(pw); 1013a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenVisibleInsets="); 1014a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenVisibleInsets.printShortString(pw); 1015a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1016a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTouchableInsets != 0 || mGivenInsetsPending) { 1017a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets); 1018a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending); 1019a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1020a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration); 10216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1022c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface); 1023c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner pw.print(" mShownFrame="); mShownFrame.printShortString(pw); pw.println(); 1024a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1025a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw); 1026a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" last="); mLastFrame.printShortString(pw); 1027a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1028a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1029ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 1030ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw); 1031ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.println(); 1032ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 1033a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1034a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mContainingFrame="); 1035a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mContainingFrame.printShortString(pw); 1036a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mParentFrame="); 1037a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mParentFrame.printShortString(pw); 1038a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mDisplayFrame="); 1039a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mDisplayFrame.printShortString(pw); 1040a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1041a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mContentFrame="); mContentFrame.printShortString(pw); 1042a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mVisibleFrame="); mVisibleFrame.printShortString(pw); 1043a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1044a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mContentInsets="); mContentInsets.printShortString(pw); 1045a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" last="); mLastContentInsets.printShortString(pw); 1046a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mVisibleInsets="); mVisibleInsets.printShortString(pw); 1047a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" last="); mLastVisibleInsets.printShortString(pw); 1048a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1049a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1050a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner mWinAnimator.dump(pw, prefix, dumpAll); 1051a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1052a608b882327fbb393bde3854953cd322a6fea675Craig Mautner pw.print(prefix); pw.print("mDrawPending="); pw.print(mWinAnimator.mDrawPending); 1053a608b882327fbb393bde3854953cd322a6fea675Craig Mautner pw.print(" mCommitDrawPending="); pw.print(mWinAnimator.mCommitDrawPending); 1054a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mReadyToShow="); pw.print(mReadyToShow); 1055a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mHasDrawn="); pw.println(mHasDrawn); 1056a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 10576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mExiting || mRemoveOnExit || mDestroying || mRemoved) { 10586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mExiting="); pw.print(mExiting); 10596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit); 10606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mDestroying="); pw.print(mDestroying); 10616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoved="); pw.println(mRemoved); 10626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mOrientationChanging || mAppFreezing || mTurnOnScreen) { 10646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mOrientationChanging="); 10656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mOrientationChanging); 10666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAppFreezing="); pw.print(mAppFreezing); 10676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mTurnOnScreen="); pw.println(mTurnOnScreen); 10686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mHScale != 1 || mVScale != 1) { 10706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); 10716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mVScale="); pw.println(mVScale); 10726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperX != -1 || mWallpaperY != -1) { 10746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperX="); pw.print(mWallpaperX); 10756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperY="); pw.println(mWallpaperY); 10766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperXStep != -1 || mWallpaperYStep != -1) { 10786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperXStep="); pw.print(mWallpaperXStep); 10796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperYStep="); pw.println(mWallpaperYStep); 10806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String makeInputChannelName() { 10846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return Integer.toHexString(System.identityHashCode(this)) 10856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " " + mAttrs.getTitle(); 10866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 10896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 10906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mStringNameCache == null || mLastTitle != mAttrs.getTitle() 10916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mWasPaused != mToken.paused) { 10926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLastTitle = mAttrs.getTitle(); 10936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mWasPaused = mToken.paused; 10946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mStringNameCache = "Window{" + Integer.toHexString(System.identityHashCode(this)) 10956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " " + mLastTitle + " paused=" + mWasPaused + "}"; 10966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mStringNameCache; 10986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1099cef37fb481d16eda2b304887a8738ed599bc1b21satok} 1100