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; 24e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautnerimport static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD; 256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 274532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brownimport com.android.server.input.InputWindowHandle; 284532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brown 29e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport android.content.Context; 306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.content.res.Configuration; 316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Matrix; 326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.PixelFormat; 336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Rect; 34d040edbae968d826aa2c82d382345811a45c646bDianne Hackbornimport android.graphics.RectF; 356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Region; 366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.IBinder; 376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.RemoteException; 389dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautnerimport android.os.UserHandle; 396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.util.Slog; 4059c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautnerimport android.view.DisplayInfo; 416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.Gravity; 426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IApplicationToken; 436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IWindow; 446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.InputChannel; 456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.View; 466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.ViewTreeObserver; 476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManager; 486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManagerPolicy; 496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.io.PrintWriter; 516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.util.ArrayList; 526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautnerclass WindowList extends ArrayList<WindowState> { 5459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner} 5559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * A window in the window manager. 586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 59e32c30784191a9244a08450759471c934c85034cCraig Mautnerfinal class WindowState implements WindowManagerPolicy.WindowState { 60d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner static final String TAG = "WindowState"; 61d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner 625fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean DEBUG_VISIBILITY = WindowManagerService.DEBUG_VISIBILITY; 635fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean SHOW_TRANSACTIONS = WindowManagerService.SHOW_TRANSACTIONS; 6436991744a221c30a47085442e6416bdde40b85e8Dianne Hackborn static final boolean SHOW_LIGHT_TRANSACTIONS = WindowManagerService.SHOW_LIGHT_TRANSACTIONS; 655fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn static final boolean SHOW_SURFACE_ALLOC = WindowManagerService.SHOW_SURFACE_ALLOC; 665fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn 676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManagerService mService; 68e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final WindowManagerPolicy mPolicy; 69e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final Context mContext; 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Session mSession; 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IWindow mClient; 726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mToken; 736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mRootToken; 746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mAppToken; 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mTargetAppToken; 76d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 77d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner // mAttrs.flags is tested in animation without being locked. If the bits tested are ever 78d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner // modified they will need to be locked. 796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); 806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final DeathRecipient mDeathRecipient; 816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowState mAttachedWindow; 827b1aa77a9b25b4b1e8070c9cccfadcde39954952Craig Mautner final WindowList mChildWindows = new WindowList(); 836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mBaseLayer; 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mSubLayer; 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mLayoutAttached; 866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsImWindow; 876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsWallpaper; 886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsFloatingLayer; 899a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSeq; 905fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn boolean mEnforceSizeCompat; 916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mViewVisibility; 929a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSystemUiVisibility; 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibility = true; 946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibilityAfterAnim = true; 956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAppFreezing; 966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAttachedHidden; // is our parent window hidden? 976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mWallpaperVisible; // for wallpaper, what was last vis report? 98ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 99ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 100ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * The window size that was requested by the application. These are in 101ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * the application's coordinate space (without compatibility scale applied). 102ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedWidth; 1046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedHeight; 1051743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedWidth; 1061743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedHeight; 107ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 1086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayer; 1096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mHaveFrame; 1106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mObscured; 1116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mTurnOnScreen; 1126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayoutSeq = -1; 114a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 1156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Configuration mConfiguration = null; 116e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Sticky answer to isConfigChanged(), remains true until new Configuration is assigned. 117e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Used only on {@link #TYPE_KEYGUARD}. 118e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner private boolean mConfigHasChanged; 119a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 120ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 121ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Actual frame shown on-screen (may be modified by animation). These 122ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * are in the screen's coordinate space (WITH the compatibility scale 123ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * applied). 124ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 125d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn final RectF mShownFrame = new RectF(); 1266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 128ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Insets that determine the actually visible area. These are in the application's 129ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleInsets = new Rect(); 1326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastVisibleInsets = new Rect(); 1336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mVisibleInsetsChanged; 1346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1365c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * Insets that are covered by system windows (such as the status bar) and 1375c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * transient docking windows (such as the IME). These are in the application's 138ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentInsets = new Rect(); 1416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastContentInsets = new Rect(); 1426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentInsetsChanged; 1436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Set to true if we are waiting for this window to receive its 1466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * given internal insets before laying out other windows based on it. 1476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mGivenInsetsPending; 1496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the content insets that were given during layout for 1526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 1536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenContentInsets = new Rect(); 1556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the visible insets that were given during layout for 1586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 1596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenVisibleInsets = new Rect(); 1616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * This is the given touchable area relative to the window frame, or null if none. 1646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region mGivenTouchableRegion = new Region(); 1666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Flag indicating whether the touchable region should be adjusted by 1696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the visible insets; if false the area outside the visible insets is 1706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * NOT touchable, so we must use those to adjust the frame during hit 1716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * tests. 1726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mTouchableInsets = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME; 1746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 17585afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn /** 17685afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn * This is rectangle of the window's surface that is not covered by 17785afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn * system decorations. 17885afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn */ 17985afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn final Rect mSystemDecorRect = new Rect(); 18085afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn final Rect mLastSystemDecorRect = new Rect(); 18185afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn 1826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Current transformation being applied. 183e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn float mGlobalScale=1; 184ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float mInvGlobalScale=1; 1856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mHScale=1, mVScale=1; 1866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mLastHScale=1, mLastVScale=1; 1876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Matrix mTmpMatrix = new Matrix(); 1886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 189ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // "Real" frame that the application sees, in display coordinate space. 1906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mFrame = new Rect(); 1916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastFrame = new Rect(); 192ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Frame that is scaled to the application's coordinate space when in 193ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // screen size compatibility mode. 194ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect mCompatFrame = new Rect(); 1956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContainingFrame = new Rect(); 1976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mDisplayFrame = new Rect(); 1986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentFrame = new Rect(); 1996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mParentFrame = new Rect(); 2006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleFrame = new Rect(); 2016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentChanged; 2036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: the requested offset for the 2056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // wallpaper; if a wallpaper window: the currently applied offset. 2066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperX = -1; 2076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperY = -1; 2086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: what fraction of the offset 2106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // range corresponds to a full virtual screen. 2116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperXStep = -1; 2126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperYStep = -1; 2136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Wallpaper windows: pixels offset based on above variables. 2156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mXOffset; 2166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mYOffset; 2176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This is set after IWindowSession.relayout() has been called at 2196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // least once for the window. It allows us to detect the situation 2206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // where we don't yet have a surface, but should have one soon, so 2216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we can give the window focus before waiting for the relayout. 2226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRelayoutCalled; 2236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 224b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // If the application has called relayout() with changes that can 225b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // impact its window's size, we need to perform a layout pass on it 226b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // even if it is not currently visible for layout. This is set 227b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn // when in that case until the layout is done. 228b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn boolean mLayoutNeeded; 229b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn 2306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Currently running an exit animation? 2316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mExiting; 2326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Currently on the mDestroySurface list? 2346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mDestroying; 2356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Completely remove from window manager after exit animation? 2376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoveOnExit; 2386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set when the orientation is changing and this window has not yet 2406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // been updated for the new orientation. 2416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mOrientationChanging; 2426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this window now (or just being) removed? 2446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoved; 2456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Temp for keeping track of windows that have been removed when 2476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // rebuilding window list. 2486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRebuilding; 2496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Input channel and input window handle used by the input dispatcher. 2519302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown final InputWindowHandle mInputWindowHandle; 2526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn InputChannel mInputChannel; 2536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Used to improve performance of toString() 2556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String mStringNameCache; 2566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn CharSequence mLastTitle; 257529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn boolean mWasExiting; 2586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 259a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final WindowStateAnimator mWinAnimator; 260a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 261c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner boolean mHasSurface = false; 262c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner 26359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner DisplayContent mDisplayContent; 2646881a10557acf3b0270de54799d6f19437acf584Craig Mautner 265a2d7b1117abc23a3ff0ccda15a2f9138aaa7f4fcCraig Mautner // UserId and appId of the owner. Don't display windows of non-current user. 26688400d3a31139c40c4014faf86c243647087ef6cCraig Mautner int mOwnerUid; 26788400d3a31139c40c4014faf86c243647087ef6cCraig Mautner 26888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner /** When true this window can be displayed on screens owther than mOwnerUid's */ 26988400d3a31139c40c4014faf86c243647087ef6cCraig Mautner private boolean mShowToOwnerOnly; 2709dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner 2716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, 2729a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn WindowState attachedWindow, int seq, WindowManager.LayoutParams a, 27359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner int viewVisibility, final DisplayContent displayContent) { 2746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService = service; 2756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession = s; 2766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient = c; 2776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mToken = token; 278a2d7b1117abc23a3ff0ccda15a2f9138aaa7f4fcCraig Mautner mOwnerUid = s.mUid; 2796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.copyFrom(a); 2806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mViewVisibility = viewVisibility; 28159c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner mDisplayContent = displayContent; 282e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mPolicy = mService.mPolicy; 283e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mContext = mService.mContext; 2846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn DeathRecipient deathRecipient = new DeathRecipient(); 2859a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn mSeq = seq; 286e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn mEnforceSizeCompat = (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0; 2876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 288d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Window " + this + " client=" + c.asBinder() 289ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner + " token=" + token + " (" + mAttrs.token + ")" + " params=" + a); 2906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 2916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn c.asBinder().linkToDeath(deathRecipient, 0); 2926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RemoteException e) { 2936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = null; 2946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 2956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 2966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = false; 2976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = false; 2986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = false; 2996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mBaseLayer = 0; 3006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 3019302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown mInputWindowHandle = null; 302a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner mWinAnimator = null; 3036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return; 3046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = deathRecipient; 3066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if ((mAttrs.type >= FIRST_SUB_WINDOW && 3086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.type <= LAST_SUB_WINDOW)) { 3096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 3106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 311e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw( 3126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn attachedWindow.mAttrs.type) * WindowManagerService.TYPE_LAYER_MULTIPLIER 3136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 314e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mSubLayer = mPolicy.subWindowTypeToLayerLw(a.type); 3156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = attachedWindow; 316d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + mAttachedWindow); 3176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow.mChildWindows.add(this); 3186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = mAttrs.type != 3196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 3206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = attachedWindow.mAttrs.type == TYPE_INPUT_METHOD 3216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || attachedWindow.mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 3226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = attachedWindow.mAttrs.type == TYPE_WALLPAPER; 3236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 3246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 3256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 3266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 327e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw(a.type) 3286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * WindowManagerService.TYPE_LAYER_MULTIPLIER 3296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 3306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 3316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 3326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 3336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = mAttrs.type == TYPE_INPUT_METHOD 3346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 3356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = mAttrs.type == TYPE_WALLPAPER; 3366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 3376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState appWin = this; 3406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appWin.mAttachedWindow != null) { 341a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner appWin = appWin.mAttachedWindow; 3426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken appToken = appWin.mToken; 3446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appToken.appWindowToken == null) { 3456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken parent = mService.mTokenMap.get(appToken.token); 3466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (parent == null || appToken == parent) { 3476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 3486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appToken = parent; 3506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRootToken = appToken; 3526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAppToken = appToken.appWindowToken; 3536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 354322e40315609acd5a608440bc469d873e09559caCraig Mautner mWinAnimator = new WindowStateAnimator(this); 355322e40315609acd5a608440bc469d873e09559caCraig Mautner mWinAnimator.mAlpha = a.alpha; 356322e40315609acd5a608440bc469d873e09559caCraig Mautner 3576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedWidth = 0; 3586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedHeight = 0; 3591743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = 0; 3601743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = 0; 3616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mXOffset = 0; 3626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mYOffset = 0; 3636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayer = 0; 3646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputWindowHandle = new InputWindowHandle( 36559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner mAppToken != null ? mAppToken.mInputApplicationHandle : null, this, 36659c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner displayContent.getDisplayId()); 3676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void attach() { 3706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 371d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Attaching " + this + " token=" + mToken 3726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + ", list=" + mToken.windows); 3736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowAddedLocked(); 3746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 3756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 376a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 37785afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn public void computeFrameLw(Rect pf, Rect df, Rect cf, Rect vf) { 3786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mHaveFrame = true; 3796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect container = mContainingFrame; 3816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn container.set(pf); 3826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect display = mDisplayFrame; 3846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn display.set(df); 3856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int pw = container.right - container.left; 3876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int ph = container.bottom - container.top; 3886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int w,h; 390ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if ((mAttrs.flags & WindowManager.LayoutParams.FLAG_SCALED) != 0) { 391ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width < 0) { 392ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 393ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 394ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mAttrs.width * mGlobalScale + .5f); 395ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 396ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mAttrs.width; 397ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 398ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height < 0) { 399ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 400ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 401ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mAttrs.height * mGlobalScale + .5f); 402ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 403ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mAttrs.height; 404ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 4056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 406ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width == WindowManager.LayoutParams.MATCH_PARENT) { 407ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 408ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 409ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mRequestedWidth * mGlobalScale + .5f); 410ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 411ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mRequestedWidth; 412ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 413ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height == WindowManager.LayoutParams.MATCH_PARENT) { 414ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 415ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 416ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mRequestedHeight * mGlobalScale + .5f); 417ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 418ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mRequestedHeight; 419ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 4206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!mParentFrame.equals(pf)) { 4236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //Slog.i(TAG, "Window " + this + " content frame from " + mParentFrame 4246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // + " to " + pf); 4256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mParentFrame.set(pf); 4266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mContentChanged = true; 4276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4281743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 4291743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = mRequestedWidth; 4301743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = mRequestedHeight; 4311743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mContentChanged = true; 4321743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 4336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect content = mContentFrame; 4356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn content.set(cf); 4366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect visible = mVisibleFrame; 4386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visible.set(vf); 4396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect frame = mFrame; 4416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int fw = frame.width(); 4426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int fh = frame.height(); 4436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //System.out.println("In: w=" + w + " h=" + h + " container=" + 4456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // container + " x=" + mAttrs.x + " y=" + mAttrs.y); 4466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 447ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float x, y; 448ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 449ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x * mGlobalScale; 450ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y * mGlobalScale; 451ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 452ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x; 453ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y; 454ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 455ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 4566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Gravity.apply(mAttrs.gravity, w, h, container, 457ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn (int) (x + mAttrs.horizontalMargin * pw), 458ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn (int) (y + mAttrs.verticalMargin * ph), frame); 4596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //System.out.println("Out: " + mFrame); 4616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Now make sure the window fits in the overall display. 4636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Gravity.applyDisplay(mAttrs.gravity, df, frame); 4646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4655c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn // Make sure the system, content and visible frames are inside of the 4666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // final window frame. 4676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.left < frame.left) content.left = frame.left; 4686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.top < frame.top) content.top = frame.top; 4696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.right > frame.right) content.right = frame.right; 4706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (content.bottom > frame.bottom) content.bottom = frame.bottom; 4716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.left < frame.left) visible.left = frame.left; 4726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.top < frame.top) visible.top = frame.top; 4736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.right > frame.right) visible.right = frame.right; 4746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (visible.bottom > frame.bottom) visible.bottom = frame.bottom; 4756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect contentInsets = mContentInsets; 4776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.left = content.left-frame.left; 4786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.top = content.top-frame.top; 4796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.right = frame.right-content.right; 4806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn contentInsets.bottom = frame.bottom-content.bottom; 4816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect visibleInsets = mVisibleInsets; 4836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.left = visible.left-frame.left; 4846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.top = visible.top-frame.top; 4856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.right = frame.right-visible.right; 4866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn visibleInsets.bottom = frame.bottom-visible.bottom; 4876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 488ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mCompatFrame.set(frame); 489e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 490ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // If there is a size compatibility scale being applied to the 491ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // window, we need to apply this to its insets so that they are 492ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // reported to the app in its coordinate space. 493ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn contentInsets.scale(mInvGlobalScale); 494ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn visibleInsets.scale(mInvGlobalScale); 495ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 496ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Also the scaled frame that we report to the app needs to be 497ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // adjusted to be in its coordinate space. 498ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mCompatFrame.scale(mInvGlobalScale); 499e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 500e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 5016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mIsWallpaper && (fw != frame.width() || fh != frame.height())) { 50259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo(); 50359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner mService.updateWallpaperOffsetLocked(this, displayInfo.appWidth, displayInfo.appHeight, 50459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner false); 5056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) { 5086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //if ("com.google.android.youtube".equals(mAttrs.packageName) 5096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // && mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_PANEL) { 510d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner Slog.v(TAG, "Resolving (mRequestedWidth=" 5116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + mRequestedWidth + ", mRequestedheight=" 5126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + mRequestedHeight + ") to" + " (pw=" + pw + ", ph=" + ph 5136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + "): frame=" + mFrame.toShortString() 5146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " ci=" + contentInsets.toShortString() 5156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " vi=" + visibleInsets.toShortString()); 5166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //} 5176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5201cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov MagnificationSpec getWindowMagnificationSpecLocked() { 5211cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov MagnificationSpec spec = mDisplayContent.mMagnificationSpec; 5221cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov if (spec != null && !spec.isNop()) { 5231cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov if (mAttachedWindow != null) { 524f1b674197577e815040cd75ef86d611965d603adCraig Mautner if (!mPolicy.canMagnifyWindowLw(mAttachedWindow.mAttrs)) { 5251cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov return null; 5261cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov } 5271cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov } 528f1b674197577e815040cd75ef86d611965d603adCraig Mautner if (!mPolicy.canMagnifyWindowLw(mAttrs)) { 5291cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov return null; 5301cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov } 5311cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov } 5321cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov return spec; 5331cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov } 5341cf70bbf96930662cab0e699d70b62865766ff52Svetoslav Ganov 535a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getFrameLw() { 5376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mFrame; 5386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 540a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 541d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn public RectF getShownFrameLw() { 5426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mShownFrame; 5436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 545a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getDisplayFrameLw() { 5476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mDisplayFrame; 5486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 550a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getContentFrameLw() { 5526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mContentFrame; 5536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 555a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getVisibleFrameLw() { 5576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mVisibleFrame; 5586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 560a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean getGivenInsetsPendingLw() { 5626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenInsetsPending; 5636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 565a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenContentInsetsLw() { 5676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenContentInsets; 5686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 570a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenVisibleInsetsLw() { 5726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenVisibleInsets; 5736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 575a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 5766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public WindowManager.LayoutParams getAttrs() { 5776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAttrs; 5786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 580812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 58173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn public boolean getNeedsMenuLw(WindowManagerPolicy.WindowState bottom) { 58273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn int index = -1; 58373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn WindowState ws = this; 58459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowList windows = getWindowList(); 58573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn while (true) { 58673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if ((ws.mAttrs.privateFlags 58773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn & WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY) != 0) { 58873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return (ws.mAttrs.flags & WindowManager.LayoutParams.FLAG_NEEDS_MENU_KEY) != 0; 58973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 59073ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // If we reached the bottom of the range of windows we are considering, 59173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // assume no menu is needed. 59273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (ws == bottom) { 59373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 59473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 59573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // The current window hasn't specified whether menu key is needed; 59673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // look behind it. 59773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // First, we may need to determine the starting position. 59873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 59959c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner index = windows.indexOf(ws); 60073ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 60173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn index--; 60273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 60373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 60473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 60559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner ws = windows.get(index); 60673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 60773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 60873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn 60919d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner @Override 6109a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn public int getSystemUiVisibility() { 6119a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn return mSystemUiVisibility; 6129a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn } 6139a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn 61419d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner @Override 6156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public int getSurfaceLayer() { 6166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mLayer; 6176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 619812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 6206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public IApplicationToken getAppToken() { 6216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null ? mAppToken.appToken : null; 6226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 62319d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner 62419d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner public int getDisplayId() { 62519d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner return mDisplayContent.getDisplayId(); 62619d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner } 62719d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner 6286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public long getInputDispatchingTimeoutNanos() { 6296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null 6306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn ? mAppToken.inputDispatchingTimeoutNanos 6316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; 6326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 634e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner @Override 6356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasAppShownWindows() { 636f41209568617f4acfaf6dea8f8b2cbe9c2994a3eCraig Mautner return mAppToken != null && (mAppToken.firstWindowDrawn || mAppToken.startingDisplayed); 6376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isIdentityMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { 6406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdx < .99999f || dsdx > 1.00001f) return false; 6416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdy < .99999f || dtdy > 1.00001f) return false; 6426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdx < -.000001f || dtdx > .000001f) return false; 6436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdy < -.000001f || dsdy > .000001f) return false; 6446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 6456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 647e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn void prelayout() { 648e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 649e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn mGlobalScale = mService.mCompatibleScreenScale; 650ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mInvGlobalScale = 1/mGlobalScale; 651e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } else { 652ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mGlobalScale = mInvGlobalScale = 1; 653e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 654e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 655e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 6566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible? It is not visible if there is no 6586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * surface, or we are in the process of running an exit animation 6596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface, or its app token has been hidden. 6606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 66188400d3a31139c40c4014faf86c243647087ef6cCraig Mautner @Override 6626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleLw() { 6636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 664c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 6656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 6666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 6676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like {@link #isVisibleLw}, but also counts a window that is currently 6716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * "hidden" behind the keyguard as visible. This allows us to apply 6726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * things like window flags that impact the keyguard. 6736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * XXX I am starting to think we need to have ANOTHER visibility flag 6746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * for this "hidden behind keyguard" state rather than overloading 6756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * mPolicyVisibility. Ungh. 6766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 67788400d3a31139c40c4014faf86c243647087ef6cCraig Mautner @Override 6786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleOrBehindKeyguardLw() { 679bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn if (mRootToken.waitingToShow && 680bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { 681bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn return false; 682bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn } 6836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 684bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn final boolean animating = atoken != null 685594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner ? (atoken.mAppAnimator.animation != null) : false; 686c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && !mExiting 6876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested) 688bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 689bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && !mRootToken.hidden) 690a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null || animating); 6916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 6936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 6946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible, ignoring its app token? It is not visible 6956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * if there is no surface, or we are in the process of running an exit animation 6966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface. 6976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 6986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isWinVisibleLw() { 6996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 700c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 701594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner && (atoken == null || !atoken.hiddenRequested || atoken.mAppAnimator.animating) 7026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 7036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * The same as isVisible(), but follows the current hidden state of 7076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the associated app token, not the pending requested hidden state. 7086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleNow() { 710c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 7116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mRootToken.hidden && !mExiting && !mDestroying; 7126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Can this window possibly be a drag/drop target? The test here is 7166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * a combination of the above "visible now" with the check that the 7176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Input Manager uses when discarding windows from input consideration. 7186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isPotentialDragTarget() { 720cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return isVisibleNow() && !mRemoved 721cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown && mInputChannel != null && mInputWindowHandle != null; 7226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Same as isVisible(), but we also count it as visible between the 7266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * call to IWindowSession.add() and the first relayout(). 7276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleOrAdding() { 7296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 730bf08af3323117e15a65b74e66b7499d31537f9e1Craig Mautner return (mHasSurface || (!mRelayoutCalled && mViewVisibility == View.VISIBLE)) 7316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && mPolicyVisibility && !mAttachedHidden 7326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 7336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 7346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window currently on-screen? It is on-screen either if it 7386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * is visible or it is currently running an animation before no longer 7396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * being visible. 7406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOnScreen() { 742c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner if (!mHasSurface || !mPolicyVisibility || mDestroying) { 743c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return false; 744c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner } 7456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 7466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (atoken != null) { 747c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return ((!mAttachedHidden && !atoken.hiddenRequested) 748594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner || mWinAnimator.mAnimation != null || atoken.mAppAnimator.animation != null); 7496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 750c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return !mAttachedHidden || mWinAnimator.mAnimation != null; 7516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen(), but we don't return true if the window is part 7556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * of a transition that has not yet been started. 7566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 7576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isReadyForDisplay() { 7586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mRootToken.waitingToShow && 7596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { 7606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 7616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 762c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mDestroying 7636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 7646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mRootToken.hidden) 765a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null 766594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner || ((mAppToken != null) && (mAppToken.mAppAnimator.animation != null))); 7676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 7706e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn * Like isReadyForDisplay(), but ignores any force hiding of the window due 7716e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn * to the keyguard. 7726e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn */ 7736e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn boolean isReadyForDisplayIgnoringKeyguard() { 7746e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn if (mRootToken.waitingToShow && 7756e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn mService.mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) { 7766e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return false; 7776e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 7786e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn final AppWindowToken atoken = mAppToken; 7796e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn if (atoken == null && !mPolicyVisibility) { 7806e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn // If this is not an app window, and the policy has asked to force 7816e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn // hide, then we really do want to hide. 7826e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return false; 7836e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 7846e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return mHasSurface && !mDestroying 7856e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 7866e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn && !mRootToken.hidden) 7876e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn || mWinAnimator.mAnimation != null 7889c5bf3b36f3dd658320f34dbaee9d6d453606bf4Craig Mautner || ((atoken != null) && (atoken.mAppAnimator.animation != null) 7899c5bf3b36f3dd658320f34dbaee9d6d453606bf4Craig Mautner && !mWinAnimator.isDummyAnimation())); 7906e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 7916e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn 7926e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn /** 7936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen, but returns false if the surface hasn't yet 7946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * been drawn. 7956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 796e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner @Override 7976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDisplayedLw() { 7986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 799bf90eaa5d2410bfb60ef84a0efcf3b5eb5022d9fCraig Mautner return isDrawnLw() && mPolicyVisibility 8006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && 8016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn (atoken == null || !atoken.hiddenRequested)) 802e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner || mWinAnimator.mAnimating 803e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner || (atoken != null && atoken.mAppAnimator.animation != null)); 8046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8065c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn /** 8075c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * Return true if this window (or a window it is attached to, but not 8085c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * considering its app token) is currently animating. 8095c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn */ 810e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner @Override 8115c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn public boolean isAnimatingLw() { 8125c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn return mWinAnimator.mAnimation != null; 8135c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn } 8145c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn 815812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 816cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn public boolean isGoneForLayoutLw() { 817cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn final AppWindowToken atoken = mAppToken; 818cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn return mViewVisibility == View.GONE 819cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || !mRelayoutCalled 820cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || (atoken == null && mRootToken.hidden) 821812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) 822cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || mAttachedHidden 823cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || mExiting || mDestroying; 824cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn } 825cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn 8266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 8276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Returns true if the window has a surface that it has drawn a 8286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * complete UI in to. 8296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 8306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDrawnLw() { 831c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && 832749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner (mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW 833749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner || mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN); 8346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 8376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Return true if the window is opaque and fully drawn. This indicates 8386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * it may obscure windows behind it. 8396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 8406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOpaqueDrawn() { 8416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return (mAttrs.format == PixelFormat.OPAQUE 8426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_WALLPAPER) 843a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner && isDrawnLw() && mWinAnimator.mAnimation == null 844594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner && (mAppToken == null || mAppToken.mAppAnimator.animation == null); 8456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 8486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Return whether this window is wanting to have a translation 8496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * animation applied to it for an in-progress move. (Only makes 8506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * sense to call from performLayoutAndPlaceSurfacesLockedInner().) 8516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 8526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean shouldAnimateMove() { 853749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner return mContentChanged && !mExiting && !mWinAnimator.mLastHidden && mService.okToDisplay() 8546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (mFrame.top != mLastFrame.top 8556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mFrame.left != mLastFrame.left) 8562fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner && (mAttachedWindow == null || !mAttachedWindow.shouldAnimateMove()); 8576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isFullscreen(int screenWidth, int screenHeight) { 860ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn return mFrame.left <= 0 && mFrame.top <= 0 && 861ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mFrame.right >= screenWidth && mFrame.bottom >= screenHeight; 8626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 864812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner boolean isConfigChanged() { 865e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner boolean configChanged = mConfiguration != mService.mCurConfiguration 866812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner && (mConfiguration == null 867812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner || (mConfiguration.diff(mService.mCurConfiguration) != 0)); 868e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 869e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner if (mAttrs.type == TYPE_KEYGUARD) { 870e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Retain configuration changed status until resetConfiguration called. 871e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfigHasChanged |= configChanged; 872e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner configChanged = mConfigHasChanged; 873e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner } 874e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 875e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner return configChanged; 876812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner } 877812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner 878812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner boolean isConfigDiff(int mask) { 879812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner return mConfiguration != mService.mCurConfiguration 880812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner && mConfiguration != null 881812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner && (mConfiguration.diff(mService.mCurConfiguration) & mask) != 0; 882812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner } 883812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner 8846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void removeLocked() { 8856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn disposeInputChannel(); 8866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null) { 888d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + this + " from " + mAttachedWindow); 8896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow.mChildWindows.remove(this); 8906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 89198129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn mWinAnimator.destroyDeferredSurfaceLocked(false); 89298129739afcb3786a6ec9f3efe774d8e01f6d632Dianne Hackborn mWinAnimator.destroySurfaceLocked(false); 8936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowRemovedLocked(); 8946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 8956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient.asBinder().unlinkToDeath(mDeathRecipient, 0); 8966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RuntimeException e) { 8976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Ignore if it has already been removed (usually because 8986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we are doing this as part of processing a death note.) 8996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 901cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 902e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner void setConfiguration(final Configuration newConfig) { 903e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfiguration = newConfig; 904e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfigHasChanged = false; 905e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner } 906e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 907cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown void setInputChannel(InputChannel inputChannel) { 908cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown if (mInputChannel != null) { 909cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown throw new IllegalStateException("Window already has an input channel."); 910cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 911cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 912cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputChannel = inputChannel; 913cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = inputChannel; 914cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 915cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 9166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void disposeInputChannel() { 9176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mInputChannel != null) { 9186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mInputManager.unregisterInputChannel(mInputChannel); 9196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel.dispose(); 9216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel = null; 9226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 923cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 924cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = null; 9256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn private class DeathRecipient implements IBinder.DeathRecipient { 928e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner @Override 9296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void binderDied() { 9306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 9316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn synchronized(mService.mWindowMap) { 9326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = mService.windowForClientLocked(mSession, mClient, false); 933d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner Slog.i(TAG, "WIN DEATH: " + win); 9346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win != null) { 9356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.removeWindowLocked(mSession, win); 9366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (IllegalArgumentException ex) { 9396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This will happen if the window has already been 9406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // removed. 9416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 945ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner /** Returns true if this window desires key events. 946ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner * TODO(cmautner): Is this the same as {@link WindowManagerService#canBeImeTarget} 947ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner */ 9486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public final boolean canReceiveKeys() { 9496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return isVisibleOrAdding() 9506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (mViewVisibility == View.VISIBLE) 9516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0); 9526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 954749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner @Override 9556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasDrawnLw() { 956749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner return mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN; 9576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 959749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner @Override 9606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean showLw(boolean doAnimation) { 9616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return showLw(doAnimation, true); 9626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean showLw(boolean doAnimation, boolean requestAnim) { 9655962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner if (isHiddenFromUserLocked()) { 96688400d3a31139c40c4014faf86c243647087ef6cCraig Mautner Slog.w(TAG, "current user violation " + mService.mCurrentUserId + " trying to display " 967a2d7b1117abc23a3ff0ccda15a2f9138aaa7f4fcCraig Mautner + this + ", type " + mAttrs.type + ", belonging to " + mOwnerUid); 9689dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner return false; 9699dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner } 9706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mPolicyVisibility && mPolicyVisibilityAfterAnim) { 971e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already showing. 9726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 9736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 974d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility true: " + this); 9756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 976d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "doAnimation: mPolicyVisibility=" 977a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + mPolicyVisibility + " mAnimation=" + mWinAnimator.mAnimation); 9782fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 9796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 980a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner } else if (mPolicyVisibility && mWinAnimator.mAnimation == null) { 9816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Check for the case where we are currently visible and 9826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // not animating; we do not want to do animation at such a 9836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // point to become visible when we already are. 9846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 9856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = true; 9886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = true; 9896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 990c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_ENTER, true); 9916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 993711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner mService.updateLayoutToAnimationLocked(); 9946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 9966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 998f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn @Override 9996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hideLw(boolean doAnimation) { 10006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return hideLw(doAnimation, true); 10016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hideLw(boolean doAnimation, boolean requestAnim) { 10046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 10052fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 10066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 10076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean current = doAnimation ? mPolicyVisibilityAfterAnim 10106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : mPolicyVisibility; 10116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!current) { 1012e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already hiding. 10136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 10146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 1016c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT, false); 1017a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner if (mWinAnimator.mAnimation == null) { 10186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 10196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 10226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 10236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 1024d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility false: " + this); 10256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 10266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = false; 10276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Window is no longer visible -- make sure if we were waiting 10286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // for it to be displayed before enabling the display, that 10296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we allow the display to be enabled now. 10306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.enableScreenIfNeededLocked(); 10316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mService.mCurrentFocus == this) { 10326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mFocusMayChange = true; 10336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 1036711f90a7c1e99a435fa8f5335f13772f0b41270bCraig Mautner mService.updateLayoutToAnimationLocked(); 10376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 10396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1041f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn @Override 1042f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn public boolean isAlive() { 1043f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn return mClient.asBinder().isBinderAlive(); 1044f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn } 1045f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn 1046a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner boolean isClosing() { 1047a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner return mExiting || (mService.mClosingApps.contains(mAppToken)); 1048a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner } 1049a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner 105069b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner @Override 105169b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner public boolean isDefaultDisplay() { 105269b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner return mDisplayContent.isDefaultDisplay; 105369b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner } 105469b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner 105588400d3a31139c40c4014faf86c243647087ef6cCraig Mautner public void setShowToOwnerOnlyLocked(boolean showToOwnerOnly) { 105688400d3a31139c40c4014faf86c243647087ef6cCraig Mautner mShowToOwnerOnly = showToOwnerOnly; 105788400d3a31139c40c4014faf86c243647087ef6cCraig Mautner } 105888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner 10595962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner boolean isHiddenFromUserLocked() { 1060341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // Attached windows are evaluated based on the window that they are attached to. 1061341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner WindowState win = this; 1062341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner while (win.mAttachedWindow != null) { 1063341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner win = win.mAttachedWindow; 1064341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner } 1065341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner if (win.mAttrs.type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW 1066341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && win.mAppToken != null && win.mAppToken.showWhenLocked) { 1067341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // Save some cycles by not calling getDisplayInfo unless it is an application 1068341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // window intended for all users. 1069341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner final DisplayInfo displayInfo = win.mDisplayContent.getDisplayInfo(); 1070341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner if (win.mFrame.left <= 0 && win.mFrame.top <= 0 1071341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && win.mFrame.right >= displayInfo.appWidth 1072341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && win.mFrame.bottom >= displayInfo.appHeight) { 10735962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner // Is a fullscreen window, like the clock alarm. Show to everyone. 10745962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner return false; 10755962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner } 10765962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner } 10775962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner 1078341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner return win.mShowToOwnerOnly 1079341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && UserHandle.getUserId(win.mOwnerUid) != mService.mCurrentUserId; 10809dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner } 10819dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner 1082ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn private static void applyInsets(Region outRegion, Rect frame, Rect inset) { 1083ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn outRegion.set( 1084ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.left + inset.left, frame.top + inset.top, 1085ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.right - inset.right, frame.bottom - inset.bottom); 1086e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 1087e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 10886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void getTouchableRegion(Region outRegion) { 1089ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect frame = mFrame; 10906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn switch (mTouchableInsets) { 10916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn default: 10926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: 10936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(frame); 10946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 1095e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: 1096ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenContentInsets); 10976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 1098e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: 1099ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenVisibleInsets); 11006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 11016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION: { 11026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region givenTouchableRegion = mGivenTouchableRegion; 11036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(givenTouchableRegion); 11046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.translate(frame.left, frame.top); 11056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 11066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 111059c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowList getWindowList() { 111159c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner return mDisplayContent.getWindowList(); 111259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner } 111359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 1114a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn void dump(PrintWriter pw, String prefix, boolean dumpAll) { 111559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner pw.print(prefix); pw.print("mDisplayId="); pw.print(mDisplayContent.getDisplayId()); 111659c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner pw.print(" mSession="); pw.print(mSession); 11176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mClient="); pw.println(mClient.asBinder()); 111888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner pw.print(prefix); pw.print("mOwnerUid="); pw.print(mOwnerUid); 111988400d3a31139c40c4014faf86c243647087ef6cCraig Mautner pw.print(" mShowToOwnerOnly="); pw.println(mShowToOwnerOnly); 11206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs); 1121a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth); 1122a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" h="); pw.print(mRequestedHeight); 1123a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); 11241743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 11251743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(prefix); pw.print("LastRequested w="); pw.print(mLastRequestedWidth); 11261743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(" h="); pw.println(mLastRequestedHeight); 11271743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 11286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null || mLayoutAttached) { 11296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttachedWindow="); pw.print(mAttachedWindow); 11306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mLayoutAttached="); pw.println(mLayoutAttached); 11316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mIsImWindow || mIsWallpaper || mIsFloatingLayer) { 11336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mIsImWindow="); pw.print(mIsImWindow); 11346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsWallpaper="); pw.print(mIsWallpaper); 11356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsFloatingLayer="); pw.print(mIsFloatingLayer); 11366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperVisible="); pw.println(mWallpaperVisible); 11376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1138a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1139a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); 1140a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mSubLayer="); pw.print(mSubLayer); 1141a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+"); 1142594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner pw.print((mTargetAppToken != null ? 1143594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner mTargetAppToken.mAppAnimator.animLayerAdjustment 1144594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner : (mAppToken != null ? mAppToken.mAppAnimator.animLayerAdjustment : 0))); 1145c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print("="); pw.print(mWinAnimator.mAnimLayer); 1146c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print(" mLastLayer="); pw.println(mWinAnimator.mLastLayer); 11476d05fd3c795088ac60f86382df5a66d631e8a0cbDianne Hackborn } 1148a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1149a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mToken="); pw.println(mToken); 1150a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mRootToken="); pw.println(mRootToken); 1151a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mAppToken != null) { 1152a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); 1153a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1154a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTargetAppToken != null) { 1155a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTargetAppToken="); pw.println(mTargetAppToken); 1156a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1157a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mViewVisibility=0x"); 1158a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(Integer.toHexString(mViewVisibility)); 1159a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mHaveFrame="); pw.print(mHaveFrame); 1160a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mObscured="); pw.println(mObscured); 11619a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(prefix); pw.print("mSeq="); pw.print(mSeq); 11629a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(" mSystemUiVisibility=0x"); 11639a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.println(Integer.toHexString(mSystemUiVisibility)); 11646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || mAttachedHidden) { 11666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mPolicyVisibility="); 11676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibility); 11686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mPolicyVisibilityAfterAnim="); 11696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibilityAfterAnim); 11706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAttachedHidden="); pw.println(mAttachedHidden); 11716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1172b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn if (!mRelayoutCalled || mLayoutNeeded) { 1173b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled); 1174b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded); 11756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mXOffset != 0 || mYOffset != 0) { 11776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("Offsets x="); pw.print(mXOffset); 11786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" y="); pw.println(mYOffset); 11796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1180a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1181a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mGivenContentInsets="); 1182a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenContentInsets.printShortString(pw); 1183a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenVisibleInsets="); 1184a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenVisibleInsets.printShortString(pw); 1185a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1186a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTouchableInsets != 0 || mGivenInsetsPending) { 1187a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets); 1188a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending); 1189a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn Region region = new Region(); 1190a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn getTouchableRegion(region); 1191a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn pw.print(prefix); pw.print("touchable region="); pw.println(region); 1192a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1193a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration); 11946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1195c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface); 1196178af5948d71c841278081c712506f7a7fca34b9Craig Mautner pw.print(" mShownFrame="); mShownFrame.printShortString(pw); 1197178af5948d71c841278081c712506f7a7fca34b9Craig Mautner pw.print(" isReadyForDisplay()="); pw.println(isReadyForDisplay()); 1198a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1199a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw); 1200a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" last="); mLastFrame.printShortString(pw); 1201a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 120285afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print("mSystemDecorRect="); mSystemDecorRect.printShortString(pw); 120385afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(" last="); mLastSystemDecorRect.printShortString(pw); 120485afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.println(); 1205a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1206ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 1207ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw); 1208ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.println(); 1209ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 1210a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 12115c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(prefix); pw.print("Frames: containing="); 1212a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mContainingFrame.printShortString(pw); 12135c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" parent="); mParentFrame.printShortString(pw); 12145c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" display="); mDisplayFrame.printShortString(pw); 12155c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.println(); 121685afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print(" content="); mContentFrame.printShortString(pw); 12175c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mVisibleFrame.printShortString(pw); 1218a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 121985afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print("Cur insets: content="); 122085afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn mContentInsets.printShortString(pw); 12215c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mVisibleInsets.printShortString(pw); 1222a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 122385afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print("Lst insets: content="); 122485afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn mLastContentInsets.printShortString(pw); 12255c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mLastVisibleInsets.printShortString(pw); 1226a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1227a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1228529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print(mWinAnimator); pw.println(":"); 1229529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn mWinAnimator.dump(pw, prefix + " ", dumpAll); 12306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mExiting || mRemoveOnExit || mDestroying || mRemoved) { 12316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mExiting="); pw.print(mExiting); 12326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit); 12336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mDestroying="); pw.print(mDestroying); 12346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoved="); pw.println(mRemoved); 12356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mOrientationChanging || mAppFreezing || mTurnOnScreen) { 12376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mOrientationChanging="); 12386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mOrientationChanging); 12396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAppFreezing="); pw.print(mAppFreezing); 12406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mTurnOnScreen="); pw.println(mTurnOnScreen); 12416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mHScale != 1 || mVScale != 1) { 12436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); 12446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mVScale="); pw.println(mVScale); 12456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperX != -1 || mWallpaperY != -1) { 12476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperX="); pw.print(mWallpaperX); 12486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperY="); pw.println(mWallpaperY); 12496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperXStep != -1 || mWallpaperYStep != -1) { 12516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperXStep="); pw.print(mWallpaperXStep); 12526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperYStep="); pw.println(mWallpaperYStep); 12536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 12566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String makeInputChannelName() { 12576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return Integer.toHexString(System.identityHashCode(this)) 12586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " " + mAttrs.getTitle(); 12596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 12616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 12626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 12636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mStringNameCache == null || mLastTitle != mAttrs.getTitle() 1264529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn || mWasExiting != mExiting) { 12656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLastTitle = mAttrs.getTitle(); 1266529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn mWasExiting = mExiting; 12676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mStringNameCache = "Window{" + Integer.toHexString(System.identityHashCode(this)) 12685fe7e2a3043d6a8ca933c77ccf95c791b57b221aDianne Hackborn + " u" + UserHandle.getUserId(mSession.mUid) 1269a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner + " " + mLastTitle + (mExiting ? " EXITING}" : "}"); 12706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mStringNameCache; 12726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1273cef37fb481d16eda2b304887a8738ed599bc1b21satok} 1274