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; 206dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwaleimport static android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; 216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW; 22f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW; 23f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD; 24f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; 256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; 266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; 276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 28f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_CONFIGURATION; 29f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT; 30f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION; 31f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_POWER; 32f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_RESIZE; 33f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwaleimport static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY; 346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 35c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackbornimport android.app.AppOpsManager; 36df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautnerimport android.os.Debug; 37c2932a1be3e320679034212698aff376d5104dbeJeff Brownimport android.os.PowerManager; 38e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.os.RemoteCallbackList; 39df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautnerimport android.os.SystemClock; 40c2932a1be3e320679034212698aff376d5104dbeJeff Brownimport android.os.WorkSource; 41a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackbornimport android.util.TimeUtils; 424604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslavimport android.view.Display; 43e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.view.IWindowFocusObserver; 44e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackbornimport android.view.IWindowId; 45c2932a1be3e320679034212698aff376d5104dbeJeff Brown 464532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brownimport com.android.server.input.InputWindowHandle; 474532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brown 48e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautnerimport android.content.Context; 496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.content.res.Configuration; 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Matrix; 516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.PixelFormat; 526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Rect; 53d040edbae968d826aa2c82d382345811a45c646bDianne Hackbornimport android.graphics.RectF; 546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.graphics.Region; 556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.IBinder; 566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.RemoteException; 579dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautnerimport android.os.UserHandle; 586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.util.Slog; 5959c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautnerimport android.view.DisplayInfo; 606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.Gravity; 616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IApplicationToken; 626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IWindow; 636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.InputChannel; 646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.View; 656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.ViewTreeObserver; 666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManager; 676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManagerPolicy; 686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.io.PrintWriter; 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.util.ArrayList; 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 7259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautnerclass WindowList extends ArrayList<WindowState> { 7359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner} 7459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * A window in the window manager. 776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 78e32c30784191a9244a08450759471c934c85034cCraig Mautnerfinal class WindowState implements WindowManagerPolicy.WindowState { 79d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner static final String TAG = "WindowState"; 80164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner 816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManagerService mService; 82e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final WindowManagerPolicy mPolicy; 83e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner final Context mContext; 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Session mSession; 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IWindow mClient; 86c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn final int mAppOp; 87c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn // UserId and appId of the owner. Don't display windows of non-current user. 88c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn final int mOwnerUid; 89e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn final IWindowId mWindowId; 906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mToken; 916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken mRootToken; 926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mAppToken; 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken mTargetAppToken; 94d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 95d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner // mAttrs.flags is tested in animation without being locked. If the bits tested are ever 96d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner // modified they will need to be locked. 976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManager.LayoutParams mAttrs = new WindowManager.LayoutParams(); 986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final DeathRecipient mDeathRecipient; 996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowState mAttachedWindow; 1007b1aa77a9b25b4b1e8070c9cccfadcde39954952Craig Mautner final WindowList mChildWindows = new WindowList(); 1016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mBaseLayer; 1026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int mSubLayer; 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mLayoutAttached; 1046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsImWindow; 1056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsWallpaper; 1066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean mIsFloatingLayer; 1079a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSeq; 1085fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn boolean mEnforceSizeCompat; 1096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mViewVisibility; 1109a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn int mSystemUiVisibility; 1116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibility = true; 1126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mPolicyVisibilityAfterAnim = true; 113b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn boolean mAppOpVisibility = true; 1146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAppFreezing; 1156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mAttachedHidden; // is our parent window hidden? 1166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mWallpaperVisible; // for wallpaper, what was last vis report? 117ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 118e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn RemoteCallbackList<IWindowFocusObserver> mFocusCallbacks; 119e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 120ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 121ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * The window size that was requested by the application. These are in 122ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * the application's coordinate space (without compatibility scale applied). 123ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 1246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedWidth; 1256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mRequestedHeight; 1261743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedWidth; 1271743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn int mLastRequestedHeight; 128ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 1296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayer; 1306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mHaveFrame; 1316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mObscured; 1326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mTurnOnScreen; 1336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mLayoutSeq = -1; 135a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 13660454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale private Configuration mConfiguration = Configuration.EMPTY; 13760454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale private Configuration mOverrideConfig = Configuration.EMPTY; 138e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Sticky answer to isConfigChanged(), remains true until new Configuration is assigned. 139e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Used only on {@link #TYPE_KEYGUARD}. 140e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner private boolean mConfigHasChanged; 141a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 142ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn /** 143ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Actual frame shown on-screen (may be modified by animation). These 144ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * are in the screen's coordinate space (WITH the compatibility scale 145ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * applied). 146ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn */ 147d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn final RectF mShownFrame = new RectF(); 1486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 150ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * Insets that determine the actually visible area. These are in the application's 151ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleInsets = new Rect(); 1546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastVisibleInsets = new Rect(); 1556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mVisibleInsetsChanged; 1566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1585c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * Insets that are covered by system windows (such as the status bar) and 1595c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn * transient docking windows (such as the IME). These are in the application's 160ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn * coordinate space (without compatibility scale applied). 1616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentInsets = new Rect(); 1636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastContentInsets = new Rect(); 1646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentInsetsChanged; 1656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 167c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn * Insets that determine the area covered by the display overscan region. These are in the 168c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn * application's coordinate space (without compatibility scale applied). 169c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn */ 170c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn final Rect mOverscanInsets = new Rect(); 171c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn final Rect mLastOverscanInsets = new Rect(); 172c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn boolean mOverscanInsetsChanged; 173c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn 174c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn /** 175fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos * Insets that determine the area covered by the stable system windows. These are in the 176fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos * application's coordinate space (without compatibility scale applied). 177fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos */ 178fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos final Rect mStableInsets = new Rect(); 179fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos final Rect mLastStableInsets = new Rect(); 180fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos boolean mStableInsetsChanged; 181fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos 182fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos /** 1832217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski * Outsets determine the area outside of the surface where we want to pretend that it's possible 1842217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski * to draw anyway. 1852217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski */ 1862217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski final Rect mOutsets = new Rect(); 1872217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski final Rect mLastOutsets = new Rect(); 1882217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski boolean mOutsetsChanged = false; 1892217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski 1902217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski /** 1916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Set to true if we are waiting for this window to receive its 1926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * given internal insets before laying out other windows based on it. 1936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mGivenInsetsPending; 1956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 1976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the content insets that were given during layout for 1986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 1996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 2006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenContentInsets = new Rect(); 2016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 2036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * These are the visible insets that were given during layout for 2046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * this window, to be applied to windows behind it. 2056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 2066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mGivenVisibleInsets = new Rect(); 2076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 2096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * This is the given touchable area relative to the window frame, or null if none. 2106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 2116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region mGivenTouchableRegion = new Region(); 2126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 2146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Flag indicating whether the touchable region should be adjusted by 2156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the visible insets; if false the area outside the visible insets is 2166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * NOT touchable, so we must use those to adjust the frame during hit 2176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * tests. 2186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 2196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mTouchableInsets = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME; 2206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 22185afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn /** 22285afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn * This is rectangle of the window's surface that is not covered by 22385afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn * system decorations. 22485afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn */ 22585afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn final Rect mSystemDecorRect = new Rect(); 22685afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn final Rect mLastSystemDecorRect = new Rect(); 22785afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn 2286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Current transformation being applied. 229e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn float mGlobalScale=1; 230ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float mInvGlobalScale=1; 2316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mHScale=1, mVScale=1; 2326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mLastHScale=1, mLastVScale=1; 2336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Matrix mTmpMatrix = new Matrix(); 2346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 235ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // "Real" frame that the application sees, in display coordinate space. 2366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mFrame = new Rect(); 2376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mLastFrame = new Rect(); 238ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Frame that is scaled to the application's coordinate space when in 239ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // screen size compatibility mode. 240ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect mCompatFrame = new Rect(); 2416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContainingFrame = new Rect(); 243c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 244c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale final Rect mParentFrame = new Rect(); 245c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 24694596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale // The entire screen area of the {@link TaskStack} this window is in. Usually equal to the 24794596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale // screen area of the device. 2486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mDisplayFrame = new Rect(); 249c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 250c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // The region of the display frame that the display type supports displaying content on. This 251c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // is mostly a special case for TV where some displays don’t have the entire display usable. 252c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // {@link WindowManager.LayoutParams#FLAG_LAYOUT_IN_OVERSCAN} flag can be used to allow 253c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // window display contents to extend into the overscan region. 254c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn final Rect mOverscanFrame = new Rect(); 255c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 256c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // The display frame minus the stable insets. This value is always constant regardless of if 257c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // the status bar or navigation bar is visible. 258c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale final Rect mStableFrame = new Rect(); 259c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 260c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // The area not occupied by the status and navigation bars. So, if both status and navigation 261c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // bars are visible, the decor frame is equal to the stable frame. 262c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale final Rect mDecorFrame = new Rect(); 263c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 264c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // Equal to the decor frame if the IME (e.g. keyboard) is not present. Equal to the decor frame 265c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // minus the area occupied by the IME if the IME is present. 2666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mContentFrame = new Rect(); 267c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale 268c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // Legacy stuff. Generally equal to the content frame expect when the IME for older apps 269c6061fa78822080e5b7849b243611a778da6c198Wale Ogunwale // displays hint text. 2706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Rect mVisibleFrame = new Rect(); 2716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2722217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski // Frame that includes dead area outside of the surface but where we want to pretend that it's 2732217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski // possible to draw. 2742217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski final Rect mOutsetFrame = new Rect(); 2752217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski 2766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mContentChanged; 2776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: the requested offset for the 2796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // wallpaper; if a wallpaper window: the currently applied offset. 2806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperX = -1; 2816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperY = -1; 2826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If a window showing a wallpaper: what fraction of the offset 2846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // range corresponds to a full virtual screen. 2856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperXStep = -1; 2866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn float mWallpaperYStep = -1; 2876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 288067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn // If a window showing a wallpaper: a raw pixel offset to forcibly apply 289067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn // to its window; if a wallpaper window: not used. 290067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn int mWallpaperDisplayOffsetX = Integer.MIN_VALUE; 291067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn int mWallpaperDisplayOffsetY = Integer.MIN_VALUE; 292067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 2936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Wallpaper windows: pixels offset based on above variables. 2946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mXOffset; 2956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int mYOffset; 2966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2972268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner /** 2982268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner * This is set after IWindowSession.relayout() has been called at 2992268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner * least once for the window. It allows us to detect the situation 3002268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner * where we don't yet have a surface, but should have one soon, so 3012268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner * we can give the window focus before waiting for the relayout. 3022268e7ee5c450c45121ebd5796221592c087ed73Craig Mautner */ 3036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRelayoutCalled; 3046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3050bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** 3060bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * If the application has called relayout() with changes that can 3070bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * impact its window's size, we need to perform a layout pass on it 3080bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * even if it is not currently visible for layout. This is set 3090bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * when in that case until the layout is done. 3100bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner */ 311b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn boolean mLayoutNeeded; 312b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn 3130bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** Currently running an exit animation? */ 3146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mExiting; 3156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3160bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** Currently on the mDestroySurface list? */ 3176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mDestroying; 3186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3190bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** Completely remove from window manager after exit animation? */ 3206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoveOnExit; 3216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3220bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** 3230bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * Set when the orientation is changing and this window has not yet 3240bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * been updated for the new orientation. 3250bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner */ 3266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mOrientationChanging; 3276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 328a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn /** 329a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn * How long we last kept the screen frozen. 330a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn */ 331a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn int mLastFreezeDuration; 332a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn 3330bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** Is this window now (or just being) removed? */ 3346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRemoved; 3356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3360bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner /** 3370bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * Temp for keeping track of windows that have been removed when 3380bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner * rebuilding window list. 3390bf6ec9e377f9fafb67a36f7fb54d3f6676634fcCraig Mautner */ 3406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean mRebuilding; 3416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 3426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Input channel and input window handle used by the input dispatcher. 3439302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown final InputWindowHandle mInputWindowHandle; 3446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn InputChannel mInputChannel; 345164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner 3466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Used to improve performance of toString() 3476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String mStringNameCache; 3486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn CharSequence mLastTitle; 349529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn boolean mWasExiting; 3506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 351a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner final WindowStateAnimator mWinAnimator; 352a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 353c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner boolean mHasSurface = false; 354c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner 35519ab828aa581e398e50c6f42ff4863c6ee522203Craig Mautner boolean mNotOnAppsDisplay = false; 35659c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner DisplayContent mDisplayContent; 3576881a10557acf3b0270de54799d6f19437acf584Craig Mautner 35888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner /** When true this window can be displayed on screens owther than mOwnerUid's */ 35988400d3a31139c40c4014faf86c243647087ef6cCraig Mautner private boolean mShowToOwnerOnly; 3609dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner 361c2932a1be3e320679034212698aff376d5104dbeJeff Brown /** 362c2932a1be3e320679034212698aff376d5104dbeJeff Brown * Wake lock for drawing. 363c2932a1be3e320679034212698aff376d5104dbeJeff Brown * Even though it's slightly more expensive to do so, we will use a separate wake lock 364c2932a1be3e320679034212698aff376d5104dbeJeff Brown * for each app that is requesting to draw while dozing so that we can accurately track 365c2932a1be3e320679034212698aff376d5104dbeJeff Brown * who is preventing the system from suspending. 366c2932a1be3e320679034212698aff376d5104dbeJeff Brown * This lock is only acquired on first use. 367c2932a1be3e320679034212698aff376d5104dbeJeff Brown */ 368c2932a1be3e320679034212698aff376d5104dbeJeff Brown PowerManager.WakeLock mDrawLock; 369c2932a1be3e320679034212698aff376d5104dbeJeff Brown 3706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, 371c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn WindowState attachedWindow, int appOp, int seq, WindowManager.LayoutParams a, 37259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner int viewVisibility, final DisplayContent displayContent) { 3736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService = service; 3746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession = s; 3756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient = c; 376c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn mAppOp = appOp; 3776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mToken = token; 378a2d7b1117abc23a3ff0ccda15a2f9138aaa7f4fcCraig Mautner mOwnerUid = s.mUid; 379e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mWindowId = new IWindowId.Stub() { 380e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 381e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void registerFocusObserver(IWindowFocusObserver observer) { 382e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn WindowState.this.registerFocusObserver(observer); 383e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 384e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 385e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void unregisterFocusObserver(IWindowFocusObserver observer) { 386e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn WindowState.this.unregisterFocusObserver(observer); 387e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 388e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn @Override 389e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public boolean isFocused() { 390e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return WindowState.this.isFocused(); 391e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 392e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn }; 3936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.copyFrom(a); 3946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mViewVisibility = viewVisibility; 39559c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner mDisplayContent = displayContent; 396e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mPolicy = mService.mPolicy; 397e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mContext = mService.mContext; 3986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn DeathRecipient deathRecipient = new DeathRecipient(); 3999a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn mSeq = seq; 40095c42974f719d1fac90fc0438eac778e9795681fAdam Lesinski mEnforceSizeCompat = (mAttrs.privateFlags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0; 4016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 402d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Window " + this + " client=" + c.asBinder() 403ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner + " token=" + token + " (" + mAttrs.token + ")" + " params=" + a); 4046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 4056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn c.asBinder().linkToDeath(deathRecipient, 0); 4066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RemoteException e) { 4076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = null; 4086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 4096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 4106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = false; 4116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = false; 4126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = false; 4136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mBaseLayer = 0; 4146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 4159302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown mInputWindowHandle = null; 416a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner mWinAnimator = null; 4176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return; 4186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mDeathRecipient = deathRecipient; 4206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if ((mAttrs.type >= FIRST_SUB_WINDOW && 4226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttrs.type <= LAST_SUB_WINDOW)) { 4236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 4246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 425e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw( 4266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn attachedWindow.mAttrs.type) * WindowManagerService.TYPE_LAYER_MULTIPLIER 4276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 428e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mSubLayer = mPolicy.subWindowTypeToLayerLw(a.type); 4296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = attachedWindow; 430d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + mAttachedWindow); 431187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki 432e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang final WindowList childWindows = mAttachedWindow.mChildWindows; 433e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang final int numChildWindows = childWindows.size(); 434e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang if (numChildWindows == 0) { 435e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang childWindows.add(this); 436187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki } else { 437e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang boolean added = false; 438e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang for (int i = 0; i < numChildWindows; i++) { 439e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang final int childSubLayer = childWindows.get(i).mSubLayer; 440e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang if (mSubLayer < childSubLayer 441e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang || (mSubLayer == childSubLayer && childSubLayer < 0)) { 442e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang // We insert the child window into the list ordered by the sub-layer. For 443e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang // same sub-layers, the negative one should go below others; the positive 444e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang // one should go above others. 445e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang childWindows.add(i, this); 446e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang added = true; 447187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki break; 448187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki } 449187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki } 450e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang if (!added) { 451e2a98a7492a44170f70f4d564372b5ac97090c21tiger_huang childWindows.add(this); 452187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki } 453187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki } 454187350915315ded09fd97164bd7e8882e7aaefb3takeda.masayuki 4556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = mAttrs.type != 4566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 4576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = attachedWindow.mAttrs.type == TYPE_INPUT_METHOD 4586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || attachedWindow.mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 4596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = attachedWindow.mAttrs.type == TYPE_WALLPAPER; 4606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 4616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 4626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The multiplier here is to reserve space for multiple 4636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows in the same type layer. 464e7ae2505405cf30d9d3140278d5b9a2604d866dfCraig Mautner mBaseLayer = mPolicy.windowTypeToLayerLw(a.type) 4656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * WindowManagerService.TYPE_LAYER_MULTIPLIER 4666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + WindowManagerService.TYPE_LAYER_OFFSET; 4676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSubLayer = 0; 4686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow = null; 4696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayoutAttached = false; 4706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsImWindow = mAttrs.type == TYPE_INPUT_METHOD 4716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_INPUT_METHOD_DIALOG; 4726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsWallpaper = mAttrs.type == TYPE_WALLPAPER; 4736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mIsFloatingLayer = mIsImWindow || mIsWallpaper; 4746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 4766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState appWin = this; 4776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appWin.mAttachedWindow != null) { 478a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner appWin = appWin.mAttachedWindow; 4796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken appToken = appWin.mToken; 4816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (appToken.appWindowToken == null) { 4826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken parent = mService.mTokenMap.get(appToken.token); 4836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (parent == null || appToken == parent) { 4846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 4856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appToken = parent; 4876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 4886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRootToken = appToken; 4896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAppToken = appToken.appWindowToken; 49019ab828aa581e398e50c6f42ff4863c6ee522203Craig Mautner if (mAppToken != null) { 49119ab828aa581e398e50c6f42ff4863c6ee522203Craig Mautner final DisplayContent appDisplay = getDisplayContent(); 49219ab828aa581e398e50c6f42ff4863c6ee522203Craig Mautner mNotOnAppsDisplay = displayContent != appDisplay; 4936dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale 4946dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale if (mAppToken.showForAllUsers) { 4956dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale // Windows for apps that can show for all users should also show when the 4966dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale // device is locked. 4976dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale mAttrs.flags |= FLAG_SHOW_WHEN_LOCKED; 4986dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale } 49919ab828aa581e398e50c6f42ff4863c6ee522203Craig Mautner } 5006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 501322e40315609acd5a608440bc469d873e09559caCraig Mautner mWinAnimator = new WindowStateAnimator(this); 502322e40315609acd5a608440bc469d873e09559caCraig Mautner mWinAnimator.mAlpha = a.alpha; 503322e40315609acd5a608440bc469d873e09559caCraig Mautner 5046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedWidth = 0; 5056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mRequestedHeight = 0; 5061743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = 0; 5071743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = 0; 5086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mXOffset = 0; 5096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mYOffset = 0; 5106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mLayer = 0; 5116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputWindowHandle = new InputWindowHandle( 51259c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner mAppToken != null ? mAppToken.mInputApplicationHandle : null, this, 51359c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner displayContent.getDisplayId()); 5146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void attach() { 5176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.localLOGV) Slog.v( 518d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner TAG, "Attaching " + this + " token=" + mToken 5196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + ", list=" + mToken.windows); 5206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowAddedLocked(); 5216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 523a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 524f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn public int getOwningUid() { 525c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn return mOwnerUid; 526f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn } 527f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn 528f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn @Override 529f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn public String getOwningPackage() { 530f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn return mAttrs.packageName; 531f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn } 532f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn 533f265ea9d8307282ff1da3915978625a94fc2859eDianne Hackborn @Override 5342217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski public void computeFrameLw(Rect pf, Rect df, Rect of, Rect cf, Rect vf, Rect dcf, Rect sf, 5352217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski Rect osf) { 5366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mHaveFrame = true; 5376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 538b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale final TaskStack stack = mAppToken != null ? getStack() : null; 539b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale final boolean nonFullscreenStack = stack != null && !stack.isFullscreen(); 540b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale if (nonFullscreenStack) { 541dd11d4d6d35fd33625116a97e53b1026879b80bfWale Ogunwale stack.getBounds(mContainingFrame); 542f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale final WindowState imeWin = mService.mInputMethodWindow; 543f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale if (imeWin != null && imeWin.isVisibleNow() && mService.mInputMethodTarget == this 544f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale && mContainingFrame.bottom > cf.bottom) { 545f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale // IME is up and obscuring this window. Adjust the window position so it is visible. 546f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale mContainingFrame.top -= mContainingFrame.bottom - cf.bottom; 547c5a6e44f59b7606eb03cd1dc8e319ab45abe21e7Craig Mautner } 548f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale // Make sure the containing frame is within the content frame so we don't layout 549f9c814978e41e56d07701a6795d768abbf7b2be8Wale Ogunwale // resized window under screen decorations. 55006d582d4e42893e7e061477004d991d35b5f0d78Doris Liu if (!mContainingFrame.intersect(cf)) { 55106d582d4e42893e7e061477004d991d35b5f0d78Doris Liu mContainingFrame.set(cf); 55206d582d4e42893e7e061477004d991d35b5f0d78Doris Liu } 55394596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale mDisplayFrame.set(mContainingFrame); 554967212cb542e6eeb308678367b53381bff984c31Craig Mautner } else { 555967212cb542e6eeb308678367b53381bff984c31Craig Mautner mContainingFrame.set(pf); 55694596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale mDisplayFrame.set(df); 557967212cb542e6eeb308678367b53381bff984c31Craig Mautner } 5586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 559967212cb542e6eeb308678367b53381bff984c31Craig Mautner final int pw = mContainingFrame.width(); 560967212cb542e6eeb308678367b53381bff984c31Craig Mautner final int ph = mContainingFrame.height(); 5616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int w,h; 563ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if ((mAttrs.flags & WindowManager.LayoutParams.FLAG_SCALED) != 0) { 564ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width < 0) { 565ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 566ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 567ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mAttrs.width * mGlobalScale + .5f); 568ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 569ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mAttrs.width; 570ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 571ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height < 0) { 572ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 573ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 574ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mAttrs.height * mGlobalScale + .5f); 575ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 576ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mAttrs.height; 577ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 5786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 579ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.width == WindowManager.LayoutParams.MATCH_PARENT) { 580ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = pw; 581ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 582ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = (int)(mRequestedWidth * mGlobalScale + .5f); 583ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 584ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn w = mRequestedWidth; 585ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 586ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mAttrs.height == WindowManager.LayoutParams.MATCH_PARENT) { 587ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = ph; 588ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else if (mEnforceSizeCompat) { 589ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = (int)(mRequestedHeight * mGlobalScale + .5f); 590ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 591ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn h = mRequestedHeight; 592ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 5936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 5946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 5956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!mParentFrame.equals(pf)) { 5966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn //Slog.i(TAG, "Window " + this + " content frame from " + mParentFrame 5976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // + " to " + pf); 5986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mParentFrame.set(pf); 5996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mContentChanged = true; 6006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 6011743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 6021743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedWidth = mRequestedWidth; 6031743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mLastRequestedHeight = mRequestedHeight; 6041743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn mContentChanged = true; 6051743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 6066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 607eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mOverscanFrame.set(of); 608eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mContentFrame.set(cf); 609eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mVisibleFrame.set(vf); 6104664623c304cf162b9a78f3aee3290a92e54b628John Spurlock mDecorFrame.set(dcf); 611fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableFrame.set(sf); 6122217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski final boolean hasOutsets = osf != null; 6132217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski if (hasOutsets) { 6142217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski mOutsetFrame.set(osf); 6152217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski } 616c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn 617eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner final int fw = mFrame.width(); 618eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner final int fh = mFrame.height(); 6196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 620ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn float x, y; 621ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 622ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x * mGlobalScale; 623ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y * mGlobalScale; 624ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } else { 625ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn x = mAttrs.x; 626ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn y = mAttrs.y; 627ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 628ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 629b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale if (nonFullscreenStack) { 630b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale // Make sure window fits in containing frame since it is in a non-fullscreen stack as 631b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale // required by {@link Gravity#apply} call. 632b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale w = Math.min(w, pw); 633b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale h = Math.min(h, ph); 634b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale } 635b171abbca82044b9f2d1998dd4cb42adfb1113faWale Ogunwale 636967212cb542e6eeb308678367b53381bff984c31Craig Mautner Gravity.apply(mAttrs.gravity, w, h, mContainingFrame, 637ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn (int) (x + mAttrs.horizontalMargin * pw), 638eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner (int) (y + mAttrs.verticalMargin * ph), mFrame); 6396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 64094596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale // Now make sure the window fits in the overall display frame. 64194596654393f4a9eac972eb6c06eae458e0ba453Wale Ogunwale Gravity.applyDisplay(mAttrs.gravity, mDisplayFrame, mFrame); 6426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 643aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski // Calculate the outsets before the content frame gets shrinked to the window frame. 644aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski if (hasOutsets) { 645aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski mOutsets.set(Math.max(mContentFrame.left - mOutsetFrame.left, 0), 646aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski Math.max(mContentFrame.top - mOutsetFrame.top, 0), 647aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski Math.max(mOutsetFrame.right - mContentFrame.right, 0), 648aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski Math.max(mOutsetFrame.bottom - mContentFrame.bottom, 0)); 649aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski } else { 650aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski mOutsets.set(0, 0, 0, 0); 651aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski } 652aaf1811dda607f10ab0f0ae80fd2b2b7cf9d0069Filip Gruszczynski 653a248eeec27631750bd416429a129c9b0d25aa911Craig Mautner // Make sure the content and visible frames are inside of the 6546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // final window frame. 655eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mContentFrame.set(Math.max(mContentFrame.left, mFrame.left), 656eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.max(mContentFrame.top, mFrame.top), 657eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.min(mContentFrame.right, mFrame.right), 658eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.min(mContentFrame.bottom, mFrame.bottom)); 659eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner 660eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mVisibleFrame.set(Math.max(mVisibleFrame.left, mFrame.left), 661eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.max(mVisibleFrame.top, mFrame.top), 662eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.min(mVisibleFrame.right, mFrame.right), 663eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner Math.min(mVisibleFrame.bottom, mFrame.bottom)); 664eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner 665fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableFrame.set(Math.max(mStableFrame.left, mFrame.left), 666fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.max(mStableFrame.top, mFrame.top), 667fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.min(mStableFrame.right, mFrame.right), 668fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.min(mStableFrame.bottom, mFrame.bottom)); 669fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos 670c36c8e6f1fb6974ec9b3111d284b243fbb56cab8Craig Mautner mOverscanInsets.set(Math.max(mOverscanFrame.left - mFrame.left, 0), 671c36c8e6f1fb6974ec9b3111d284b243fbb56cab8Craig Mautner Math.max(mOverscanFrame.top - mFrame.top, 0), 6723236f3a93acab03ad2f0cf68faf39273ffb8e2a7Adrian Roos Math.max(mFrame.right - mOverscanFrame.right, 0), 6733236f3a93acab03ad2f0cf68faf39273ffb8e2a7Adrian Roos Math.max(mFrame.bottom - mOverscanFrame.bottom, 0)); 674eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner 675eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mContentInsets.set(mContentFrame.left - mFrame.left, 676eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mContentFrame.top - mFrame.top, 677eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mFrame.right - mContentFrame.right, 678eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mFrame.bottom - mContentFrame.bottom); 679eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner 680eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mVisibleInsets.set(mVisibleFrame.left - mFrame.left, 681eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mVisibleFrame.top - mFrame.top, 682eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mFrame.right - mVisibleFrame.right, 683eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mFrame.bottom - mVisibleFrame.bottom); 684eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner 685fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableInsets.set(Math.max(mStableFrame.left - mFrame.left, 0), 686fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.max(mStableFrame.top - mFrame.top, 0), 687fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.max(mFrame.right - mStableFrame.right, 0), 688fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos Math.max(mFrame.bottom - mStableFrame.bottom, 0)); 689fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos 690eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mCompatFrame.set(mFrame); 691e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 692ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // If there is a size compatibility scale being applied to the 693ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // window, we need to apply this to its insets so that they are 694ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // reported to the app in its coordinate space. 695eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mOverscanInsets.scale(mInvGlobalScale); 696eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mContentInsets.scale(mInvGlobalScale); 697eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner mVisibleInsets.scale(mInvGlobalScale); 698fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableInsets.scale(mInvGlobalScale); 6992217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski mOutsets.scale(mInvGlobalScale); 700ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn 701ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // Also the scaled frame that we report to the app needs to be 702ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn // adjusted to be in its coordinate space. 703ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mCompatFrame.scale(mInvGlobalScale); 704e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 705e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 706eda67299cf14de315af12cbf8d5024e02fa5b1aaCraig Mautner if (mIsWallpaper && (fw != mFrame.width() || fh != mFrame.height())) { 707df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayContent displayContent = getDisplayContent(); 708df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner if (displayContent != null) { 709df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayInfo displayInfo = displayContent.getDisplayInfo(); 710df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mService.updateWallpaperOffsetLocked(this, 711df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner displayInfo.logicalWidth, displayInfo.logicalHeight, false); 712df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 7136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 715b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner if (DEBUG_LAYOUT || WindowManagerService.localLOGV) Slog.v(TAG, 716b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner "Resolving (mRequestedWidth=" 717b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner + mRequestedWidth + ", mRequestedheight=" 718b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner + mRequestedHeight + ") to" + " (pw=" + pw + ", ph=" + ph 719b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner + "): frame=" + mFrame.toShortString() 720b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner + " ci=" + mContentInsets.toShortString() 721fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos + " vi=" + mVisibleInsets.toShortString() 7222217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski + " vi=" + mStableInsets.toShortString() 7232217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski + " of=" + mOutsets.toShortString()); 7246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 726a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getFrameLw() { 7286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mFrame; 7296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 731a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 732d040edbae968d826aa2c82d382345811a45c646bDianne Hackborn public RectF getShownFrameLw() { 7336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mShownFrame; 7346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 736a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getDisplayFrameLw() { 7386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mDisplayFrame; 7396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 741a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 742c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn public Rect getOverscanFrameLw() { 743c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn return mOverscanFrame; 744c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn } 745c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn 746c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn @Override 7476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getContentFrameLw() { 7486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mContentFrame; 7496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 751a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getVisibleFrameLw() { 7536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mVisibleFrame; 7546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 756a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean getGivenInsetsPendingLw() { 7586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenInsetsPending; 7596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 761a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenContentInsetsLw() { 7636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenContentInsets; 7646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 766a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public Rect getGivenVisibleInsetsLw() { 7686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mGivenVisibleInsets; 7696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 771a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner @Override 7726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public WindowManager.LayoutParams getAttrs() { 7736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAttrs; 7746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 7756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 776812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 77773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn public boolean getNeedsMenuLw(WindowManagerPolicy.WindowState bottom) { 77873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn int index = -1; 77973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn WindowState ws = this; 78059c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowList windows = getWindowList(); 78173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn while (true) { 782393b1c1e88cbdd0f65c8f217c495dbbe8de9125dWale Ogunwale if (ws.mAttrs.needsMenuKey != WindowManager.LayoutParams.NEEDS_MENU_UNSET) { 783393b1c1e88cbdd0f65c8f217c495dbbe8de9125dWale Ogunwale return ws.mAttrs.needsMenuKey == WindowManager.LayoutParams.NEEDS_MENU_SET_TRUE; 78473ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 78573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // If we reached the bottom of the range of windows we are considering, 78673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // assume no menu is needed. 78773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (ws == bottom) { 78873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 78973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 79073ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // The current window hasn't specified whether menu key is needed; 79173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // look behind it. 79273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn // First, we may need to determine the starting position. 79373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 79459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner index = windows.indexOf(ws); 79573ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 79673ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn index--; 79773ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn if (index < 0) { 79873ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn return false; 79973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 80059c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner ws = windows.get(index); 80173ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 80273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn } 80373ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn 80419d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner @Override 8059a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn public int getSystemUiVisibility() { 8069a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn return mSystemUiVisibility; 8079a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn } 8089a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn 80919d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner @Override 8106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public int getSurfaceLayer() { 8116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mLayer; 8126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 814812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 815d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek public int getBaseType() { 816d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek WindowState win = this; 817d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek while (win.mAttachedWindow != null) { 818d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek win = win.mAttachedWindow; 819d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek } 820d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek return win.mAttrs.type; 821d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek } 822d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek 823d6623618b28906d058ac61623e11853ebe9ad1deSelim Cinek @Override 8246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public IApplicationToken getAppToken() { 8256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null ? mAppToken.appToken : null; 8266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 82719d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner 828e30e02f5d9a9141c9ee70c712d4f9d52c88ea969Dianne Hackborn @Override 829e30e02f5d9a9141c9ee70c712d4f9d52c88ea969Dianne Hackborn public boolean isVoiceInteraction() { 830e30e02f5d9a9141c9ee70c712d4f9d52c88ea969Dianne Hackborn return mAppToken != null ? mAppToken.voiceInteraction : false; 831e30e02f5d9a9141c9ee70c712d4f9d52c88ea969Dianne Hackborn } 832e30e02f5d9a9141c9ee70c712d4f9d52c88ea969Dianne Hackborn 8334c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner boolean setInsetsChanged() { 8344c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner mOverscanInsetsChanged |= !mLastOverscanInsets.equals(mOverscanInsets); 8354c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner mContentInsetsChanged |= !mLastContentInsets.equals(mContentInsets); 8364c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner mVisibleInsetsChanged |= !mLastVisibleInsets.equals(mVisibleInsets); 837fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableInsetsChanged |= !mLastStableInsets.equals(mStableInsets); 8382217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski mOutsetsChanged |= !mLastOutsets.equals(mOutsets); 8392217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski return mOverscanInsetsChanged || mContentInsetsChanged || mVisibleInsetsChanged 8402217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski || mOutsetsChanged; 8414c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner } 8424c5eb224de2ace5fb60dbbaf9e92b77c07aaaa93Craig Mautner 843df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner public DisplayContent getDisplayContent() { 844f391ebccea9090fac64201d284641be3882f857aChad Jones if (mAppToken == null || mNotOnAppsDisplay) { 845be63495101dba3b0c3c496cdd810df9e30e926d4Craig Mautner return mDisplayContent; 846be63495101dba3b0c3c496cdd810df9e30e926d4Craig Mautner } 847be63495101dba3b0c3c496cdd810df9e30e926d4Craig Mautner final TaskStack stack = getStack(); 848be63495101dba3b0c3c496cdd810df9e30e926d4Craig Mautner return stack == null ? mDisplayContent : stack.getDisplayContent(); 849df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 850df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner 85119d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner public int getDisplayId() { 852df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayContent displayContent = getDisplayContent(); 853df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner if (displayContent == null) { 854df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner return -1; 855df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 856df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner return displayContent.getDisplayId(); 85719d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner } 85819d59bc5ad877e9b1544ab13a08282b7b384fefbCraig Mautner 859d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner TaskStack getStack() { 86005d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner AppWindowToken wtoken = mAppToken == null ? mService.mFocusedApp : mAppToken; 86105d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner if (wtoken != null) { 86283162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner Task task = wtoken.mTask; 863f06b8c1788e28f31e18f9313c3d7efe1a0011b9fCraig Mautner if (task != null) { 864e0a3884cb627efc650e19fbe76b1b3343468cf57Craig Mautner if (task.mStack != null) { 865e0a3884cb627efc650e19fbe76b1b3343468cf57Craig Mautner return task.mStack; 866e0a3884cb627efc650e19fbe76b1b3343468cf57Craig Mautner } 867e0a3884cb627efc650e19fbe76b1b3343468cf57Craig Mautner Slog.e(TAG, "getStack: mStack null for task=" + task); 868e0a3884cb627efc650e19fbe76b1b3343468cf57Craig Mautner } else { 86983162a90278d9d52d8fca7ee20ba314b452261deCraig Mautner Slog.e(TAG, "getStack: " + this + " couldn't find task for " + wtoken 870df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner + " Callers=" + Debug.getCallers(4)); 871f06b8c1788e28f31e18f9313c3d7efe1a0011b9fCraig Mautner } 872d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner } 87305d290365f0b9ed781ffcb30b38a0c7c6e450e9dCraig Mautner return mDisplayContent.getHomeStack(); 874d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner } 875d9a22881fda77e208f54f893a804d0001d27a27eCraig Mautner 876bdc748af8ce62778d2ad15040ecdfada6e4635fdCraig Mautner void getStackBounds(Rect bounds) { 877dd11d4d6d35fd33625116a97e53b1026879b80bfWale Ogunwale final TaskStack stack = getStack(); 8784cd0c13f8f765118a24e31548c058b5029481beaCraig Mautner if (stack != null) { 879bdc748af8ce62778d2ad15040ecdfada6e4635fdCraig Mautner stack.getBounds(bounds); 880bdc748af8ce62778d2ad15040ecdfada6e4635fdCraig Mautner return; 8814cd0c13f8f765118a24e31548c058b5029481beaCraig Mautner } 882bdc748af8ce62778d2ad15040ecdfada6e4635fdCraig Mautner bounds.set(mFrame); 8834cd0c13f8f765118a24e31548c058b5029481beaCraig Mautner } 8844cd0c13f8f765118a24e31548c058b5029481beaCraig Mautner 8856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public long getInputDispatchingTimeoutNanos() { 8866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mAppToken != null 8876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn ? mAppToken.inputDispatchingTimeoutNanos 8886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : WindowManagerService.DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS; 8896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 891e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner @Override 8926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasAppShownWindows() { 893f41209568617f4acfaf6dea8f8b2cbe9c2994a3eCraig Mautner return mAppToken != null && (mAppToken.firstWindowDrawn || mAppToken.startingDisplayed); 8946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 8956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 8966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isIdentityMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { 8976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdx < .99999f || dsdx > 1.00001f) return false; 8986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdy < .99999f || dtdy > 1.00001f) return false; 8996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dtdx < -.000001f || dtdx > .000001f) return false; 9006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (dsdy < -.000001f || dsdy > .000001f) return false; 9016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 9026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 904e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn void prelayout() { 905e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn if (mEnforceSizeCompat) { 906e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn mGlobalScale = mService.mCompatibleScreenScale; 907ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mInvGlobalScale = 1/mGlobalScale; 908e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } else { 909ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mGlobalScale = mInvGlobalScale = 1; 910e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 911e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 912e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 9136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible? It is not visible if there is no 9156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * surface, or we are in the process of running an exit animation 9166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface, or its app token has been hidden. 9176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 91888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner @Override 9196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleLw() { 9206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 921c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 9226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 9236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 9246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like {@link #isVisibleLw}, but also counts a window that is currently 9286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * "hidden" behind the keyguard as visible. This allows us to apply 9296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * things like window flags that impact the keyguard. 9306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * XXX I am starting to think we need to have ANOTHER visibility flag 9316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * for this "hidden behind keyguard" state rather than overloading 9326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * mPolicyVisibility. Ungh. 9336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 93488400d3a31139c40c4014faf86c243647087ef6cCraig Mautner @Override 9356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isVisibleOrBehindKeyguardLw() { 936bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn if (mRootToken.waitingToShow && 937164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner mService.mAppTransition.isTransitionSet()) { 938bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn return false; 939bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn } 9406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 941bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn final boolean animating = atoken != null 942594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner ? (atoken.mAppAnimator.animation != null) : false; 943c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && !mExiting 9446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null ? mPolicyVisibility : !atoken.hiddenRequested) 945bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 946bc1aa7bbc753ebcd32da4507fa23215489b6d314Dianne Hackborn && !mRootToken.hidden) 947a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null || animating); 9486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window visible, ignoring its app token? It is not visible 9526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * if there is no surface, or we are in the process of running an exit animation 9536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * that will remove the surface. 9546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 9556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isWinVisibleLw() { 9566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 957c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 958594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner && (atoken == null || !atoken.hiddenRequested || atoken.mAppAnimator.animating) 9596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 9606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * The same as isVisible(), but follows the current hidden state of 9646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the associated app token, not the pending requested hidden state. 9656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 9666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleNow() { 967c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mAttachedHidden 968c0d2d0ad6ddcd23b7bbe6b1a5668d6d719e4c86cCraig Mautner && (!mRootToken.hidden || mAttrs.type == TYPE_APPLICATION_STARTING) 969c0d2d0ad6ddcd23b7bbe6b1a5668d6d719e4c86cCraig Mautner && !mExiting && !mDestroying; 9706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Can this window possibly be a drag/drop target? The test here is 9746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * a combination of the above "visible now" with the check that the 9756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Input Manager uses when discarding windows from input consideration. 9766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 9776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isPotentialDragTarget() { 978cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown return isVisibleNow() && !mRemoved 979cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown && mInputChannel != null && mInputWindowHandle != null; 9806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Same as isVisible(), but we also count it as visible between the 9846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * call to IWindowSession.add() and the first relayout(). 9856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 9866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isVisibleOrAdding() { 9876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 988bf08af3323117e15a65b74e66b7499d31537f9e1Craig Mautner return (mHasSurface || (!mRelayoutCalled && mViewVisibility == View.VISIBLE)) 9896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && mPolicyVisibility && !mAttachedHidden 9906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (atoken == null || !atoken.hiddenRequested) 9916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mExiting && !mDestroying; 9926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 9936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 9946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 9956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Is this window currently on-screen? It is on-screen either if it 9966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * is visible or it is currently running an animation before no longer 9976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * being visible. 9986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 9996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOnScreen() { 100044f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi return mPolicyVisibility && isOnScreenIgnoringKeyguard(); 100144f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi } 100244f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi 100344f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi /** 100444f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi * Like isOnScreen(), but ignores any force hiding of the window due 100544f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi * to the keyguard. 100644f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi */ 100744f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi boolean isOnScreenIgnoringKeyguard() { 100844f60cca7bb31e2f9b4b7bf25bb2e0cfb0e3e1e1Jorim Jaggi if (!mHasSurface || mDestroying) { 1009c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return false; 1010c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner } 10116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 10126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (atoken != null) { 1013c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return ((!mAttachedHidden && !atoken.hiddenRequested) 1014ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner || mWinAnimator.mAnimation != null || atoken.mAppAnimator.animation != null); 10156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1016c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return !mAttachedHidden || mWinAnimator.mAnimation != null; 10176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 10206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen(), but we don't return true if the window is part 10216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * of a transition that has not yet been started. 10226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 10236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isReadyForDisplay() { 10246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mRootToken.waitingToShow && 1025164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner mService.mAppTransition.isTransitionSet()) { 10266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 10276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1028c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && mPolicyVisibility && !mDestroying 10296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 10306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && !mRootToken.hidden) 1031a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner || mWinAnimator.mAnimation != null 1032594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner || ((mAppToken != null) && (mAppToken.mAppAnimator.animation != null))); 10336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 10366e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn * Like isReadyForDisplay(), but ignores any force hiding of the window due 10376e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn * to the keyguard. 10386e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn */ 10396e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn boolean isReadyForDisplayIgnoringKeyguard() { 1040164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner if (mRootToken.waitingToShow && mService.mAppTransition.isTransitionSet()) { 10416e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return false; 10426e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 10436e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn final AppWindowToken atoken = mAppToken; 10446e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn if (atoken == null && !mPolicyVisibility) { 10456e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn // If this is not an app window, and the policy has asked to force 10466e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn // hide, then we really do want to hide. 10476e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return false; 10486e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 10496e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn return mHasSurface && !mDestroying 10506e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn && ((!mAttachedHidden && mViewVisibility == View.VISIBLE 10516e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn && !mRootToken.hidden) 10526e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn || mWinAnimator.mAnimation != null 10539c5bf3b36f3dd658320f34dbaee9d6d453606bf4Craig Mautner || ((atoken != null) && (atoken.mAppAnimator.animation != null) 10549c5bf3b36f3dd658320f34dbaee9d6d453606bf4Craig Mautner && !mWinAnimator.isDummyAnimation())); 10556e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn } 10566e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn 10576e2281d44c9b71a03a50ed24d654927111cd2b72Dianne Hackborn /** 10586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Like isOnScreen, but returns false if the surface hasn't yet 10596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * been drawn. 10606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 1061e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner @Override 10626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDisplayedLw() { 10636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final AppWindowToken atoken = mAppToken; 1064bf90eaa5d2410bfb60ef84a0efcf3b5eb5022d9fCraig Mautner return isDrawnLw() && mPolicyVisibility 10656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((!mAttachedHidden && 10666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn (atoken == null || !atoken.hiddenRequested)) 1067e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner || mWinAnimator.mAnimating 1068e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner || (atoken != null && atoken.mAppAnimator.animation != null)); 10696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 10706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 10715c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn /** 1072ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner * Return true if this window or its app token is currently animating. 10735c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn */ 1074e6f7d5054a71eeae8c0b10a2305347efdcd8c3d3Craig Mautner @Override 10755c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn public boolean isAnimatingLw() { 1076ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner return mWinAnimator.mAnimation != null 1077ae44659f30ddaba67581fbdf9c9255ac982d45abCraig Mautner || (mAppToken != null && mAppToken.mAppAnimator.animation != null); 10785c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn } 10795c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn 1080812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner @Override 1081cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn public boolean isGoneForLayoutLw() { 1082cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn final AppWindowToken atoken = mAppToken; 1083cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn return mViewVisibility == View.GONE 1084cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || !mRelayoutCalled 1085cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || (atoken == null && mRootToken.hidden) 1086812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) 1087cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn || mAttachedHidden 10880e415c66620871feefc55e617f3f1f61fcd6c7b1Craig Mautner || (mExiting && !isAnimatingLw()) 10890e415c66620871feefc55e617f3f1f61fcd6c7b1Craig Mautner || mDestroying; 1090cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn } 1091cfbf7dedaddd825b608e87d3dcf46adf80a46976Dianne Hackborn 10926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 10936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Returns true if the window has a surface that it has drawn a 10946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * complete UI in to. 1095ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner */ 1096ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner public boolean isDrawFinishedLw() { 1097ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner return mHasSurface && !mDestroying && 1098ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner (mWinAnimator.mDrawState == WindowStateAnimator.COMMIT_DRAW_PENDING 1099ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner || mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW 1100ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner || mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN); 1101ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner } 1102ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner 1103ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner /** 1104ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner * Returns true if the window has a surface that it has drawn a 1105ccc9e9b9365ee149c97589524b2abab2f381c6c8Craig Mautner * complete UI in to. 11066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 110776d2fe42880bd37b80c01fb68c31a4c619ddfdebAdrian Roos @Override 11086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean isDrawnLw() { 1109c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner return mHasSurface && !mDestroying && 1110749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner (mWinAnimator.mDrawState == WindowStateAnimator.READY_TO_SHOW 1111749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner || mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN); 11126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 11146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 11156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Return true if the window is opaque and fully drawn. This indicates 11166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * it may obscure windows behind it. 11176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 11186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isOpaqueDrawn() { 11196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return (mAttrs.format == PixelFormat.OPAQUE 11206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mAttrs.type == TYPE_WALLPAPER) 1121a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner && isDrawnLw() && mWinAnimator.mAnimation == null 1122594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner && (mAppToken == null || mAppToken.mAppAnimator.animation == null); 11236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 11256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn /** 11264557c08c1574da324759798f0d56782ae2956befCraig Mautner * Return whether this window has moved. (Only makes 11276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * sense to call from performLayoutAndPlaceSurfacesLockedInner().) 11286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 11294557c08c1574da324759798f0d56782ae2956befCraig Mautner boolean hasMoved() { 11304557c08c1574da324759798f0d56782ae2956befCraig Mautner return mHasSurface && mContentChanged && !mExiting && !mWinAnimator.mLastHidden 11314557c08c1574da324759798f0d56782ae2956befCraig Mautner && mService.okToDisplay() && (mFrame.top != mLastFrame.top 11326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || mFrame.left != mLastFrame.left) 11334557c08c1574da324759798f0d56782ae2956befCraig Mautner && (mAttachedWindow == null || !mAttachedWindow.hasMoved()); 11346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 11366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean isFullscreen(int screenWidth, int screenHeight) { 1137ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn return mFrame.left <= 0 && mFrame.top <= 0 && 1138ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn mFrame.right >= screenWidth && mFrame.bottom >= screenHeight; 11396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1141812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner boolean isConfigChanged() { 114260454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final TaskStack stack = getStack(); 114360454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final Configuration overrideConfig = 114460454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale (stack != null) ? stack.mOverrideConfig : Configuration.EMPTY; 114560454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final Configuration serviceConfig = mService.mCurConfiguration; 114660454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale boolean configChanged = 114760454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale (mConfiguration != serviceConfig && mConfiguration.diff(serviceConfig) != 0) 114860454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale || (mOverrideConfig != overrideConfig && !mOverrideConfig.equals(overrideConfig)); 1149e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 1150380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if ((mAttrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) { 1151e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner // Retain configuration changed status until resetConfiguration called. 1152e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfigHasChanged |= configChanged; 1153e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner configChanged = mConfigHasChanged; 1154e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner } 1155e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 1156e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner return configChanged; 1157812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner } 1158812d2ca475e88d4e52870a4eeeb096a411f0f077Craig Mautner 11596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void removeLocked() { 11606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn disposeInputChannel(); 1161164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner 11626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null) { 1163d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + this + " from " + mAttachedWindow); 11646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mAttachedWindow.mChildWindows.remove(this); 11656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1166968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mWinAnimator.destroyDeferredSurfaceLocked(); 1167968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mWinAnimator.destroySurfaceLocked(); 11686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mSession.windowRemovedLocked(); 11696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 11706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mClient.asBinder().unlinkToDeath(mDeathRecipient, 0); 11716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RuntimeException e) { 11726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Ignore if it has already been removed (usually because 11736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we are doing this as part of processing a death note.) 11746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 11756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1176cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 117760454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale private void setConfiguration( 117860454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final Configuration newConfig, final Configuration newOverrideConfig) { 1179e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfiguration = newConfig; 118060454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale mOverrideConfig = newOverrideConfig; 1181e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner mConfigHasChanged = false; 1182e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner } 1183e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner 1184cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown void setInputChannel(InputChannel inputChannel) { 1185cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown if (mInputChannel != null) { 1186cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown throw new IllegalStateException("Window already has an input channel."); 1187cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 1188cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 1189cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputChannel = inputChannel; 1190cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = inputChannel; 1191cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown } 1192cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 11936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void disposeInputChannel() { 11946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mInputChannel != null) { 11956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mInputManager.unregisterInputChannel(mInputChannel); 1196164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner 11976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel.dispose(); 11986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputChannel = null; 11996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1200cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown 1201cc4f7db698f88b633a286d8ab1105b28a474cd09Jeff Brown mInputWindowHandle.inputChannel = null; 12026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 12046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn private class DeathRecipient implements IBinder.DeathRecipient { 1205e8552142494bbb4438a8748707f74b1ce241ea48Craig Mautner @Override 12066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void binderDied() { 12076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 12086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn synchronized(mService.mWindowMap) { 12096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = mService.windowForClientLocked(mSession, mClient, false); 1210d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner Slog.i(TAG, "WIN DEATH: " + win); 12116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win != null) { 1212a6ab5c4efbbf438693fa976b54ac84c033109df0Wale Ogunwale mService.removeWindowLocked(win); 1213b3b36ba13895d779159799341d432f6380a0ba8aCraig Mautner } else if (mHasSurface) { 1214a99764e5978b51021db8575912b448d85541379bCraig Mautner Slog.e(TAG, "!!! LEAK !!! Window removed but surface still valid."); 1215a6ab5c4efbbf438693fa976b54ac84c033109df0Wale Ogunwale mService.removeWindowLocked(WindowState.this); 12166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (IllegalArgumentException ex) { 12196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // This will happen if the window has already been 12206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // removed. 12216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1225581068131c192a8c495fac00d3c61807580c7ecaCraig Mautner /** 1226581068131c192a8c495fac00d3c61807580c7ecaCraig Mautner * @return true if this window desires key events. 1227ef25d7a01910d5547b60c9cc52d4fa4a9e40b6faCraig Mautner */ 12286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public final boolean canReceiveKeys() { 1229581068131c192a8c495fac00d3c61807580c7ecaCraig Mautner return isVisibleOrAdding() 12306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && (mViewVisibility == View.VISIBLE) 12316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0); 12326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1234749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner @Override 12356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hasDrawnLw() { 1236749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner return mWinAnimator.mDrawState == WindowStateAnimator.HAS_DRAWN; 12376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1239749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner @Override 12406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean showLw(boolean doAnimation) { 12416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return showLw(doAnimation, true); 12426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 12446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean showLw(boolean doAnimation, boolean requestAnim) { 12455962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner if (isHiddenFromUserLocked()) { 12469dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner return false; 12479dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner } 1248b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn if (!mAppOpVisibility) { 1249b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // Being hidden due to app op request. 1250b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn return false; 1251b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn } 12526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mPolicyVisibility && mPolicyVisibilityAfterAnim) { 1253e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already showing. 12546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 12556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1256d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility true: " + this); 12576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 1258d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "doAnimation: mPolicyVisibility=" 1259a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + mPolicyVisibility + " mAnimation=" + mWinAnimator.mAnimation); 12602fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 12616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 1262a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner } else if (mPolicyVisibility && mWinAnimator.mAnimation == null) { 12636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Check for the case where we are currently visible and 12646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // not animating; we do not want to do animation at such a 12656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // point to become visible when we already are. 12666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 12676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = true; 12706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = true; 12716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 1272c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_ENTER, true); 12736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 1275968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mService.scheduleAnimationLocked(); 12766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 12786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1280f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn @Override 12816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public boolean hideLw(boolean doAnimation) { 12826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return hideLw(doAnimation, true); 12836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 12856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hideLw(boolean doAnimation, boolean requestAnim) { 12866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 12872fb98b147b58210604dfaf1482f635ce8d8a0575Craig Mautner if (!mService.okToDisplay()) { 12886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 12896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean current = doAnimation ? mPolicyVisibilityAfterAnim 12926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn : mPolicyVisibility; 12936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!current) { 1294e32c30784191a9244a08450759471c934c85034cCraig Mautner // Already hiding. 12956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return false; 12966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 12976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 1298c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT, false); 1299a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner if (mWinAnimator.mAnimation == null) { 13006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn doAnimation = false; 13016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (doAnimation) { 13046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 13056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } else { 1306d87946ba48b62a6a83fd971ef7c4c419407db836Craig Mautner if (DEBUG_VISIBILITY) Slog.v(TAG, "Policy visibility false: " + this); 13076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibilityAfterAnim = false; 13086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mPolicyVisibility = false; 13096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Window is no longer visible -- make sure if we were waiting 13106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // for it to be displayed before enabling the display, that 13116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // we allow the display to be enabled now. 13126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.enableScreenIfNeededLocked(); 13136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mService.mCurrentFocus == this) { 13145845812780a29f4594dbdac12e65c4e063ddb4b0Craig Mautner if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.i(TAG, 13155845812780a29f4594dbdac12e65c4e063ddb4b0Craig Mautner "WindowState.hideLw: setting mFocusMayChange true"); 13166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mService.mFocusMayChange = true; 13176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (requestAnim) { 1320968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner mService.scheduleAnimationLocked(); 13216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return true; 13236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 13246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1325fb32c6e9e97e8c7541e85fcbd200ae86e721e7a4Craig Mautner public void setAppOpVisibilityLw(boolean state) { 1326b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn if (mAppOpVisibility != state) { 1327b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn mAppOpVisibility = state; 1328b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn if (state) { 1329b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // If the policy visibility had last been to hide, then this 1330b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // will incorrectly show at this point since we lost that 1331b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // information. Not a big deal -- for the windows that have app 1332b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // ops modifies they should only be hidden by policy due to the 1333b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // lock screen, and the user won't be changing this if locked. 1334b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn // Plus it will quickly be fixed the next time we do a layout. 1335fb32c6e9e97e8c7541e85fcbd200ae86e721e7a4Craig Mautner showLw(true, true); 1336b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn } else { 1337fb32c6e9e97e8c7541e85fcbd200ae86e721e7a4Craig Mautner hideLw(true, true); 1338b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn } 1339b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn } 1340b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn } 1341b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn 1342c2932a1be3e320679034212698aff376d5104dbeJeff Brown public void pokeDrawLockLw(long timeout) { 1343c2932a1be3e320679034212698aff376d5104dbeJeff Brown if (isVisibleOrAdding()) { 1344c2932a1be3e320679034212698aff376d5104dbeJeff Brown if (mDrawLock == null) { 1345c2932a1be3e320679034212698aff376d5104dbeJeff Brown // We want the tag name to be somewhat stable so that it is easier to correlate 1346c2932a1be3e320679034212698aff376d5104dbeJeff Brown // in wake lock statistics. So in particular, we don't want to include the 1347c2932a1be3e320679034212698aff376d5104dbeJeff Brown // window's hash code as in toString(). 1348c2932a1be3e320679034212698aff376d5104dbeJeff Brown CharSequence tag = mAttrs.getTitle(); 1349c2932a1be3e320679034212698aff376d5104dbeJeff Brown if (tag == null) { 1350c2932a1be3e320679034212698aff376d5104dbeJeff Brown tag = mAttrs.packageName; 1351c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 1352c2932a1be3e320679034212698aff376d5104dbeJeff Brown mDrawLock = mService.mPowerManager.newWakeLock( 1353c2932a1be3e320679034212698aff376d5104dbeJeff Brown PowerManager.DRAW_WAKE_LOCK, "Window:" + tag); 1354c2932a1be3e320679034212698aff376d5104dbeJeff Brown mDrawLock.setReferenceCounted(false); 1355c2932a1be3e320679034212698aff376d5104dbeJeff Brown mDrawLock.setWorkSource(new WorkSource(mOwnerUid, mAttrs.packageName)); 1356c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 1357c2932a1be3e320679034212698aff376d5104dbeJeff Brown // Each call to acquire resets the timeout. 1358c2932a1be3e320679034212698aff376d5104dbeJeff Brown if (DEBUG_POWER) { 1359c2932a1be3e320679034212698aff376d5104dbeJeff Brown Slog.d(TAG, "pokeDrawLock: poking draw lock on behalf of visible window owned by " 1360c2932a1be3e320679034212698aff376d5104dbeJeff Brown + mAttrs.packageName); 1361c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 1362c2932a1be3e320679034212698aff376d5104dbeJeff Brown mDrawLock.acquire(timeout); 1363c2932a1be3e320679034212698aff376d5104dbeJeff Brown } else if (DEBUG_POWER) { 1364c2932a1be3e320679034212698aff376d5104dbeJeff Brown Slog.d(TAG, "pokeDrawLock: suppressed draw lock request for invisible window " 1365c2932a1be3e320679034212698aff376d5104dbeJeff Brown + "owned by " + mAttrs.packageName); 1366c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 1367c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 1368c2932a1be3e320679034212698aff376d5104dbeJeff Brown 1369f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn @Override 1370f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn public boolean isAlive() { 1371f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn return mClient.asBinder().isBinderAlive(); 1372f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn } 1373f87d19621dc2a30232bba1f51862a0b671eb9729Dianne Hackborn 1374a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner boolean isClosing() { 1375a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner return mExiting || (mService.mClosingApps.contains(mAppToken)); 1376a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner } 1377a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner 137869b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner @Override 137969b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner public boolean isDefaultDisplay() { 1380df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayContent displayContent = getDisplayContent(); 1381df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner if (displayContent == null) { 1382df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner // Only a window that was on a non-default display can be detached from it. 1383df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner return false; 1384df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 138547a3e65acc35cd3061bf3867e8b20753870fd892Winson Chung return displayContent.isDefaultDisplay; 138669b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner } 138769b0818179201fadc9d2a384d692d8ae4aecd85cCraig Mautner 1388cd3884dfb246855c059e15db376f0935af68d949Adrian Roos @Override 1389cd3884dfb246855c059e15db376f0935af68d949Adrian Roos public boolean isDimming() { 1390cd3884dfb246855c059e15db376f0935af68d949Adrian Roos TaskStack stack = getStack(); 1391cd3884dfb246855c059e15db376f0935af68d949Adrian Roos if (stack == null) { 1392cd3884dfb246855c059e15db376f0935af68d949Adrian Roos return false; 1393cd3884dfb246855c059e15db376f0935af68d949Adrian Roos } 1394cd3884dfb246855c059e15db376f0935af68d949Adrian Roos return stack.isDimming(mWinAnimator); 1395cd3884dfb246855c059e15db376f0935af68d949Adrian Roos } 1396cd3884dfb246855c059e15db376f0935af68d949Adrian Roos 139788400d3a31139c40c4014faf86c243647087ef6cCraig Mautner public void setShowToOwnerOnlyLocked(boolean showToOwnerOnly) { 139888400d3a31139c40c4014faf86c243647087ef6cCraig Mautner mShowToOwnerOnly = showToOwnerOnly; 139988400d3a31139c40c4014faf86c243647087ef6cCraig Mautner } 140088400d3a31139c40c4014faf86c243647087ef6cCraig Mautner 14015962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner boolean isHiddenFromUserLocked() { 1402341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // Attached windows are evaluated based on the window that they are attached to. 1403341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner WindowState win = this; 1404341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner while (win.mAttachedWindow != null) { 1405341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner win = win.mAttachedWindow; 1406341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner } 1407341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner if (win.mAttrs.type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW 14086dfdfd6741c5a3dd8d8a49ddbd6ee5dfe2fd292dWale Ogunwale && win.mAppToken != null && win.mAppToken.showForAllUsers) { 1409341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // Save some cycles by not calling getDisplayInfo unless it is an application 1410341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner // window intended for all users. 1411df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayContent displayContent = win.getDisplayContent(); 1412df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner if (displayContent == null) { 1413df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner return true; 1414df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 1415df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayInfo displayInfo = displayContent.getDisplayInfo(); 1416341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner if (win.mFrame.left <= 0 && win.mFrame.top <= 0 1417341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && win.mFrame.right >= displayInfo.appWidth 1418341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner && win.mFrame.bottom >= displayInfo.appHeight) { 14195962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner // Is a fullscreen window, like the clock alarm. Show to everyone. 14205962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner return false; 14215962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner } 14225962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner } 14235962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner 1424341220fd099b2e74ac605d417f274537dc4bc749Craig Mautner return win.mShowToOwnerOnly 14252a764949c943681a4d25a17a0b203a0127a4a486Kenny Guy && !mService.isCurrentProfileLocked(UserHandle.getUserId(win.mOwnerUid)); 14269dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner } 14279dc52bc44c94854fcd3384a045b4b862e30e25deCraig Mautner 1428ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn private static void applyInsets(Region outRegion, Rect frame, Rect inset) { 1429ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn outRegion.set( 1430ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.left + inset.left, frame.top + inset.top, 1431ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn frame.right - inset.right, frame.bottom - inset.bottom); 1432e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn } 1433e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn 14346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public void getTouchableRegion(Region outRegion) { 1435ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn final Rect frame = mFrame; 14366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn switch (mTouchableInsets) { 14376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn default: 14386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME: 14396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(frame); 14406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 1441e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT: 1442ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenContentInsets); 14436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 1444e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_VISIBLE: 1445ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn applyInsets(outRegion, frame, mGivenVisibleInsets); 14466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 14476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn case ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_REGION: { 14486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final Region givenTouchableRegion = mGivenTouchableRegion; 14496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.set(givenTouchableRegion); 14506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn outRegion.translate(frame.left, frame.top); 14516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn break; 14526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 14536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 14546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 14556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 145659c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner WindowList getWindowList() { 1457df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final DisplayContent displayContent = getDisplayContent(); 1458df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner return displayContent == null ? null : displayContent.getWindowList(); 145959c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner } 146059c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner 1461e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn /** 1462e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * Report a focus change. Must be called with no locks held, and consistently 1463e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn * from the same serialized thread (such as dispatched from a handler). 1464e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn */ 1465e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void reportFocusChangedSerialized(boolean focused, boolean inTouchMode) { 1466e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn try { 1467e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mClient.windowFocusChanged(focused, inTouchMode); 1468e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } catch (RemoteException e) { 1469e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1470e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (mFocusCallbacks != null) { 1471e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn final int N = mFocusCallbacks.beginBroadcast(); 1472e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn for (int i=0; i<N; i++) { 1473e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn IWindowFocusObserver obs = mFocusCallbacks.getBroadcastItem(i); 1474e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn try { 1475e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (focused) { 1476e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn obs.focusGained(mWindowId.asBinder()); 1477e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } else { 1478e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn obs.focusLost(mWindowId.asBinder()); 1479e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1480e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } catch (RemoteException e) { 1481e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1482e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1483e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mFocusCallbacks.finishBroadcast(); 1484e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1485e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1486e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 1487df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner void reportResized() { 1488df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner try { 1489d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG, "Reporting new frame to " + this 1490d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner + ": " + mCompatFrame); 1491d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner boolean configChanged = isConfigChanged(); 149260454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final TaskStack stack = getStack(); 149360454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale final Configuration overrideConfig = 149460454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale (stack != null) ? stack.mOverrideConfig : Configuration.EMPTY; 1495d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner if ((DEBUG_RESIZE || DEBUG_ORIENTATION || DEBUG_CONFIGURATION) && configChanged) { 1496d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner Slog.i(TAG, "Sending new config to window " + this + ": " 149760454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale + mWinAnimator.mSurfaceW + "x" + mWinAnimator.mSurfaceH + " / config=" 149860454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale + mService.mCurConfiguration + " overrideConfig=" + overrideConfig); 1499d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner } 150060454dbc4d815c90ff2713e224953d6547fc3ad5Wale Ogunwale setConfiguration(mService.mCurConfiguration, overrideConfig); 1501d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner if (DEBUG_ORIENTATION && mWinAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING) 1502d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner Slog.i(TAG, "Resizing " + this + " WITH DRAW PENDING"); 1503d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner 1504df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final Rect frame = mFrame; 1505df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final Rect overscanInsets = mLastOverscanInsets; 1506df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final Rect contentInsets = mLastContentInsets; 1507df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner final Rect visibleInsets = mLastVisibleInsets; 1508fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos final Rect stableInsets = mLastStableInsets; 15092217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski final Rect outsets = mLastOutsets; 1510d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner final boolean reportDraw = mWinAnimator.mDrawState == WindowStateAnimator.DRAW_PENDING; 1511d1c2c5421181b988f09fd12d9633e2a7c2a8ab60Craig Mautner final Configuration newConfig = configChanged ? mConfiguration : null; 15128eb48d26ccbde07140da3e798ca32182814ea237Chet Haase if (mAttrs.type != WindowManager.LayoutParams.TYPE_APPLICATION_STARTING 15138eb48d26ccbde07140da3e798ca32182814ea237Chet Haase && mClient instanceof IWindow.Stub) { 1514df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner // To prevent deadlock simulate one-way call if win.mClient is a local object. 1515df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mService.mH.post(new Runnable() { 1516df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner @Override 1517df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner public void run() { 1518df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner try { 1519df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mClient.resized(frame, overscanInsets, contentInsets, 15202217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski visibleInsets, stableInsets, outsets, reportDraw, newConfig); 1521df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } catch (RemoteException e) { 1522df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner // Not a remote call, RemoteException won't be raised. 1523df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 1524df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 1525df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner }); 1526df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } else { 1527fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mClient.resized(frame, overscanInsets, contentInsets, visibleInsets, stableInsets, 15282217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski outsets, reportDraw, newConfig); 1529df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 15304604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav 15314604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav //TODO (multidisplay): Accessibility supported only for the default display. 15324604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav if (mService.mAccessibilityController != null 15334604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav && getDisplayId() == Display.DEFAULT_DISPLAY) { 1534f7174e87b6007000777b0124de9cef70d8618788Svetoslav mService.mAccessibilityController.onSomeWindowResizedOrMovedLocked(); 15354604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav } 15364604abc97d7dd757bb76ff9b7fcf343dc4a15212Svetoslav 1537df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mOverscanInsetsChanged = false; 1538df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mContentInsetsChanged = false; 1539df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mVisibleInsetsChanged = false; 1540fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos mStableInsetsChanged = false; 15412217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski mOutsetsChanged = false; 1542df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mWinAnimator.mSurfaceResized = false; 1543df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } catch (RemoteException e) { 1544df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mOrientationChanging = false; 1545df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner mLastFreezeDuration = (int)(SystemClock.elapsedRealtime() 1546df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner - mService.mDisplayFreezeTime); 1547950ee77fc729526f91646f44616e1e62d9eef076tiger_huang // We are assuming the hosting process is dead or in a zombie state. 1548950ee77fc729526f91646f44616e1e62d9eef076tiger_huang Slog.w(TAG, "Failed to report 'resized' to the client of " + this 1549950ee77fc729526f91646f44616e1e62d9eef076tiger_huang + ", removing this window."); 1550950ee77fc729526f91646f44616e1e62d9eef076tiger_huang mService.mPendingRemove.add(this); 1551950ee77fc729526f91646f44616e1e62d9eef076tiger_huang mService.requestTraversalLocked(); 1552df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 1553df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner } 1554df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner 1555e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void registerFocusObserver(IWindowFocusObserver observer) { 1556e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized(mService.mWindowMap) { 1557e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (mFocusCallbacks == null) { 1558e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mFocusCallbacks = new RemoteCallbackList<IWindowFocusObserver>(); 1559e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1560e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mFocusCallbacks.register(observer); 1561e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1562e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1563e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 1564e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public void unregisterFocusObserver(IWindowFocusObserver observer) { 1565e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized(mService.mWindowMap) { 1566e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn if (mFocusCallbacks != null) { 1567e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn mFocusCallbacks.unregister(observer); 1568e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1569e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1570e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1571e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 1572e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn public boolean isFocused() { 1573e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn synchronized(mService.mWindowMap) { 1574e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn return mService.mCurrentFocus == this; 1575e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1576e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn } 1577e3f23a36d86fedf6c8c6503378cd6d2190c5ab23Dianne Hackborn 1578a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn void dump(PrintWriter pw, String prefix, boolean dumpAll) { 157930cc7bf612db01f3bc710dbef85159d3f57eb021Wale Ogunwale final TaskStack stack = getStack(); 1580df88d73092c62a1a3cd2b2056ca63ae2e70cc238Craig Mautner pw.print(prefix); pw.print("mDisplayId="); pw.print(getDisplayId()); 158130cc7bf612db01f3bc710dbef85159d3f57eb021Wale Ogunwale if (stack != null) { 158230cc7bf612db01f3bc710dbef85159d3f57eb021Wale Ogunwale pw.print(" stackId="); pw.print(stack.mStackId); 158330cc7bf612db01f3bc710dbef85159d3f57eb021Wale Ogunwale } 158459c009776dae5ccbdfb93d7151ff2065ca049dc3Craig Mautner pw.print(" mSession="); pw.print(mSession); 15856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mClient="); pw.println(mClient.asBinder()); 158688400d3a31139c40c4014faf86c243647087ef6cCraig Mautner pw.print(prefix); pw.print("mOwnerUid="); pw.print(mOwnerUid); 1587c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn pw.print(" mShowToOwnerOnly="); pw.print(mShowToOwnerOnly); 1588c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn pw.print(" package="); pw.print(mAttrs.packageName); 1589c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn pw.print(" appop="); pw.println(AppOpsManager.opToName(mAppOp)); 15906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttrs="); pw.println(mAttrs); 1591a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("Requested w="); pw.print(mRequestedWidth); 1592a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" h="); pw.print(mRequestedHeight); 1593a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mLayoutSeq="); pw.println(mLayoutSeq); 15941743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn if (mRequestedWidth != mLastRequestedWidth || mRequestedHeight != mLastRequestedHeight) { 15951743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(prefix); pw.print("LastRequested w="); pw.print(mLastRequestedWidth); 15961743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn pw.print(" h="); pw.println(mLastRequestedHeight); 15971743b64d87cee56e51dedbe4ad60fa2acc28af9cDianne Hackborn } 15986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mAttachedWindow != null || mLayoutAttached) { 15996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mAttachedWindow="); pw.print(mAttachedWindow); 16006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mLayoutAttached="); pw.println(mLayoutAttached); 16016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 16026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mIsImWindow || mIsWallpaper || mIsFloatingLayer) { 16036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mIsImWindow="); pw.print(mIsImWindow); 16046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsWallpaper="); pw.print(mIsWallpaper); 16056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mIsFloatingLayer="); pw.print(mIsFloatingLayer); 16066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperVisible="); pw.println(mWallpaperVisible); 16076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1608a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1609a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer); 1610a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mSubLayer="); pw.print(mSubLayer); 1611a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+"); 1612594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner pw.print((mTargetAppToken != null ? 1613594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner mTargetAppToken.mAppAnimator.animLayerAdjustment 1614594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner : (mAppToken != null ? mAppToken.mAppAnimator.animLayerAdjustment : 0))); 1615c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print("="); pw.print(mWinAnimator.mAnimLayer); 1616c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner pw.print(" mLastLayer="); pw.println(mWinAnimator.mLastLayer); 16176d05fd3c795088ac60f86382df5a66d631e8a0cbDianne Hackborn } 1618a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1619a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mToken="); pw.println(mToken); 1620a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mRootToken="); pw.println(mRootToken); 1621a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mAppToken != null) { 1622a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); 1623a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1624a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTargetAppToken != null) { 1625a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTargetAppToken="); pw.println(mTargetAppToken); 1626a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1627a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mViewVisibility=0x"); 1628a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(Integer.toHexString(mViewVisibility)); 1629a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mHaveFrame="); pw.print(mHaveFrame); 1630a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mObscured="); pw.println(mObscured); 16319a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(prefix); pw.print("mSeq="); pw.print(mSeq); 16329a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.print(" mSystemUiVisibility=0x"); 16339a230e01a1237749a8a19a5de8d46531b0c8ca6aDianne Hackborn pw.println(Integer.toHexString(mSystemUiVisibility)); 16346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1635b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || !mAppOpVisibility 1636b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn || mAttachedHidden) { 16376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mPolicyVisibility="); 16386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibility); 16396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mPolicyVisibilityAfterAnim="); 16406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mPolicyVisibilityAfterAnim); 1641b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn pw.print(" mAppOpVisibility="); 1642b6b23ecdfc262097eaf7afa611e9f22cc543806fDianne Hackborn pw.print(mAppOpVisibility); 16436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAttachedHidden="); pw.println(mAttachedHidden); 16446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1645b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn if (!mRelayoutCalled || mLayoutNeeded) { 1646b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled); 1647b7ff51bde92b76757a002bb5b1889f5790986513Dianne Hackborn pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded); 16486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 16496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mXOffset != 0 || mYOffset != 0) { 16506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("Offsets x="); pw.print(mXOffset); 16516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" y="); pw.println(mYOffset); 16526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1653a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1654a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mGivenContentInsets="); 1655a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenContentInsets.printShortString(pw); 1656a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenVisibleInsets="); 1657a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mGivenVisibleInsets.printShortString(pw); 1658a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1659a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (mTouchableInsets != 0 || mGivenInsetsPending) { 1660a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mTouchableInsets="); pw.print(mTouchableInsets); 1661a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" mGivenInsetsPending="); pw.println(mGivenInsetsPending); 1662a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn Region region = new Region(); 1663a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn getTouchableRegion(region); 1664a4b7f2f75e7803193429ec1179fb5e2eb1c6fbdaDianne Hackborn pw.print(prefix); pw.print("touchable region="); pw.println(region); 1665a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1666a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mConfiguration="); pw.println(mConfiguration); 16677c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale if (mOverrideConfig != Configuration.EMPTY) { 16687c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale pw.print(prefix); pw.print("mOverrideConfig="); pw.println(mOverrideConfig); 16697c72668f19d404b01412abc67937b1b5c660df71Wale Ogunwale } 16706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1671c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner pw.print(prefix); pw.print("mHasSurface="); pw.print(mHasSurface); 1672178af5948d71c841278081c712506f7a7fca34b9Craig Mautner pw.print(" mShownFrame="); mShownFrame.printShortString(pw); 1673178af5948d71c841278081c712506f7a7fca34b9Craig Mautner pw.print(" isReadyForDisplay()="); pw.println(isReadyForDisplay()); 1674a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 1675a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw); 1676a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.print(" last="); mLastFrame.printShortString(pw); 1677a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 167885afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print("mSystemDecorRect="); mSystemDecorRect.printShortString(pw); 167985afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(" last="); mLastSystemDecorRect.printShortString(pw); 168080b1f64280829e7d483302c23518e9d937e7340aCraig Mautner if (mWinAnimator.mHasClipRect) { 168180b1f64280829e7d483302c23518e9d937e7340aCraig Mautner pw.print(" mLastClipRect="); 168280b1f64280829e7d483302c23518e9d937e7340aCraig Mautner mWinAnimator.mLastClipRect.printShortString(pw); 168380b1f64280829e7d483302c23518e9d937e7340aCraig Mautner } 168485afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.println(); 1685a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1686ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn if (mEnforceSizeCompat) { 1687ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw); 1688ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn pw.println(); 1689ffb3d939cc78cae523f14a0f8ab37061b5bffc20Dianne Hackborn } 1690a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn if (dumpAll) { 16915c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(prefix); pw.print("Frames: containing="); 1692a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn mContainingFrame.printShortString(pw); 16935c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" parent="); mParentFrame.printShortString(pw); 1694c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.println(); 1695c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(prefix); pw.print(" display="); mDisplayFrame.printShortString(pw); 1696c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(" overscan="); mOverscanFrame.printShortString(pw); 16975c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.println(); 169885afd1b6f871d471fdff1980134676a5f1690525Dianne Hackborn pw.print(prefix); pw.print(" content="); mContentFrame.printShortString(pw); 16995c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mVisibleFrame.printShortString(pw); 1700a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 17014664623c304cf162b9a78f3aee3290a92e54b628John Spurlock pw.print(prefix); pw.print(" decor="); mDecorFrame.printShortString(pw); 17024664623c304cf162b9a78f3aee3290a92e54b628John Spurlock pw.println(); 17032217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski pw.print(prefix); pw.print(" outset="); mOutsetFrame.printShortString(pw); 17042217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski pw.println(); 1705c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(prefix); pw.print("Cur insets: overscan="); 1706c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn mOverscanInsets.printShortString(pw); 1707c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(" content="); mContentInsets.printShortString(pw); 17085c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mVisibleInsets.printShortString(pw); 1709fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos pw.print(" stable="); mStableInsets.printShortString(pw); 17102217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski pw.print(" outsets="); mOutsets.printShortString(pw); 1711a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1712c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(prefix); pw.print("Lst insets: overscan="); 1713c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn mLastOverscanInsets.printShortString(pw); 1714c4aad01cbbb69c916ef323693e1fd0560b0eccbaDianne Hackborn pw.print(" content="); mLastContentInsets.printShortString(pw); 17155c58de3a523a384c47b0b1e0f5dd9728a74cd9f7Dianne Hackborn pw.print(" visible="); mLastVisibleInsets.printShortString(pw); 1716fa10423fa00f3495e451016acba9b6848eb995c9Adrian Roos pw.print(" stable="); mLastStableInsets.printShortString(pw); 17172217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski pw.print(" physical="); mLastOutsets.printShortString(pw); 17182217f61e51ba4b19c56b19297c1e9cf74d7d860fFilip Gruszczynski pw.print(" outset="); mLastOutsets.printShortString(pw); 1719a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn pw.println(); 1720a44abeb125a0c8a8e5a065f868d316e41354286aDianne Hackborn } 1721529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn pw.print(prefix); pw.print(mWinAnimator); pw.println(":"); 1722529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn mWinAnimator.dump(pw, prefix + " ", dumpAll); 17236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mExiting || mRemoveOnExit || mDestroying || mRemoved) { 17246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mExiting="); pw.print(mExiting); 17256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit); 17266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mDestroying="); pw.print(mDestroying); 17276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mRemoved="); pw.println(mRemoved); 17286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 17296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mOrientationChanging || mAppFreezing || mTurnOnScreen) { 17306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mOrientationChanging="); 17316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(mOrientationChanging); 17326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mAppFreezing="); pw.print(mAppFreezing); 17336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mTurnOnScreen="); pw.println(mTurnOnScreen); 17346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1735a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn if (mLastFreezeDuration != 0) { 1736a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn pw.print(prefix); pw.print("mLastFreezeDuration="); 1737a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn TimeUtils.formatDuration(mLastFreezeDuration, pw); pw.println(); 1738a57c695bf2c0f917517ecac8251043716b34f72dDianne Hackborn } 17396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mHScale != 1 || mVScale != 1) { 17406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mHScale="); pw.print(mHScale); 17416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mVScale="); pw.println(mVScale); 17426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 17436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperX != -1 || mWallpaperY != -1) { 17446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperX="); pw.print(mWallpaperX); 17456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperY="); pw.println(mWallpaperY); 17466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 17476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (mWallpaperXStep != -1 || mWallpaperYStep != -1) { 17486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("mWallpaperXStep="); pw.print(mWallpaperXStep); 17496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" mWallpaperYStep="); pw.println(mWallpaperYStep); 17506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1751067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (mWallpaperDisplayOffsetX != Integer.MIN_VALUE 1752067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn || mWallpaperDisplayOffsetY != Integer.MIN_VALUE) { 1753067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn pw.print(prefix); pw.print("mWallpaperDisplayOffsetX="); 1754067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn pw.print(mWallpaperDisplayOffsetX); 1755067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn pw.print(" mWallpaperDisplayOffsetY="); 1756067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn pw.println(mWallpaperDisplayOffsetY); 1757067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 1758c2932a1be3e320679034212698aff376d5104dbeJeff Brown if (mDrawLock != null) { 175985b90abdf942f7347a829b9f4c576b02345d2579Wale Ogunwale pw.print(prefix); pw.println("mDrawLock=" + mDrawLock); 1760c2932a1be3e320679034212698aff376d5104dbeJeff Brown } 17616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1762164d4bb4c3eeba1488d9b4994980d24c1f6ec961Craig Mautner 17636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String makeInputChannelName() { 17646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return Integer.toHexString(System.identityHashCode(this)) 17656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " " + mAttrs.getTitle(); 17666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 17676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 17686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 17696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 1770c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn CharSequence title = mAttrs.getTitle(); 1771c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn if (title == null || title.length() <= 0) { 1772c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn title = mAttrs.packageName; 1773c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn } 1774c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn if (mStringNameCache == null || mLastTitle != title || mWasExiting != mExiting) { 1775c2293025a25e04b26bf53713d71f85fd9ca5e8e9Dianne Hackborn mLastTitle = title; 1776529e744d3131b9ebeb6b33c8030230c29a44ad12Dianne Hackborn mWasExiting = mExiting; 17776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mStringNameCache = "Window{" + Integer.toHexString(System.identityHashCode(this)) 17785fe7e2a3043d6a8ca933c77ccf95c791b57b221aDianne Hackborn + " u" + UserHandle.getUserId(mSession.mUid) 1779a987d43bc916b6446fe41037d9fcf07e778b3452Craig Mautner + " " + mLastTitle + (mExiting ? " EXITING}" : "}"); 17806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 17816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return mStringNameCache; 17826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1783cef37fb481d16eda2b304887a8738ed599bc1b21satok} 1784