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