AppWindowToken.java revision 7636dfbc3331dec0cea374a9540a1f31fb7dbf77
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.TYPE_APPLICATION_STARTING; 206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 214532e6158474a263d9d26c2b42240bcf7ce9b172Jeff Brownimport com.android.server.input.InputApplicationHandle; 226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport com.android.server.wm.WindowManagerService.H; 236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.content.pm.ActivityInfo; 256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.Message; 266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.os.RemoteException; 276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.util.Slog; 286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.IApplicationToken; 296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.View; 306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport android.view.WindowManager; 316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.io.PrintWriter; 336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.util.ArrayList; 346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Version of WindowToken that is specifically for a particular application (or 376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * really activity) that is displaying windows. 386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 39e32c30784191a9244a08450759471c934c85034cCraig Mautnerclass AppWindowToken extends WindowToken { 406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Non-null only for application tokens. 416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IApplicationToken appToken; 426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // All of the windows and child windows that are included in this 446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // application token. Note this list is NOT sorted! 456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final ArrayList<WindowState> allAppWindows = new ArrayList<WindowState>(); 46594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner final AppWindowAnimator mAppAnimator; 476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 48d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner final WindowAnimator mAnimator; 49d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int groupId = -1; 516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean appFullscreen; 526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 535962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner boolean showWhenLocked; 54a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The input dispatching timeout for this application token in nanoseconds. 566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn long inputDispatchingTimeoutNanos; 576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // These are used for determining when all windows associated with 596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // an activity have been drawn, so they can be made visible together 606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // at the same time. 61764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // initialize so that it doesn't match mTransactionSequence which is an int. 62764983d16925daeeba3f29fd1f844187655d1386Craig Mautner long lastTransactionSequence = Long.MIN_VALUE; 636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numInterestingWindows; 646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numDrawnWindows; 656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean inPendingTransaction; 666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean allDrawn; 677636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner // Set to true when this app creates a surface while in the middle of an animation. In that 687636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner // case do not clear allDrawn until the animation completes. 697636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner boolean deferClearAllDrawn; 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this token going to be hidden in a little while? If so, it 726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // won't be taken into account for setting the screen orientation. 736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean willBeHidden; 746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this window's surface needed? This is almost like hidden, except 766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // it will sometimes be true a little earlier: when the token has 776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // been shown, but is still waiting for its app transition to execute 786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // before making its windows shown. 796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hiddenRequested; 806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Have we told the window clients to hide themselves? 826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean clientHidden; 836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Last visibility state we reported to the app token. 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean reportedVisible; 866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 872c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn // Last drawn state we reported to the app token. 882c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn boolean reportedDrawn; 892c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when the token has been removed from the window mgr. 916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean removed; 926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Information about an application starting window if displayed. 946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn StartingData startingData; 956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState startingWindow; 966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn View startingView; 976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean startingDisplayed; 986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean startingMoved; 996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean firstWindowDrawn; 1006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Input application handle used by the input dispatcher. 1029302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown final InputApplicationHandle mInputApplicationHandle; 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken(WindowManagerService _service, IApplicationToken _token) { 1056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn super(_service, _token.asBinder(), 1066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManager.LayoutParams.TYPE_APPLICATION, true); 1076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appWindowToken = this; 1086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appToken = _token; 1096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputApplicationHandle = new InputApplicationHandle(this); 110d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mAnimator = service.mAnimator; 111322e40315609acd5a608440bc469d873e09559caCraig Mautner mAppAnimator = new AppWindowAnimator(this); 1126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void sendAppVisibilityToClients() { 1156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int N = allAppWindows.size(); 1166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn for (int i=0; i<N; i++) { 1176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = allAppWindows.get(i); 1186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win == startingWindow && clientHidden) { 1196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Don't hide the starting window. 1206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn continue; 1216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 1236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, 1246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn "Setting visibility of " + win + ": " + (!clientHidden)); 1256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn win.mClient.dispatchAppVisibility(!clientHidden); 1266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RemoteException e) { 1276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void updateReportedVisibilityLocked() { 1326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (appToken == null) { 1336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return; 1346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numInteresting = 0; 1376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numVisible = 0; 1382c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn int numDrawn = 0; 1396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean nowGone = true; 1406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 141c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, 142c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner "Update reported visibility: " + this); 1436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int N = allAppWindows.size(); 1446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn for (int i=0; i<N; i++) { 1456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = allAppWindows.get(i); 1466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win == startingWindow || win.mAppFreezing 1476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mViewVisibility != View.VISIBLE 1486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mAttrs.type == TYPE_APPLICATION_STARTING 1496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mDestroying) { 1506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn continue; 1516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) { 1536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Slog.v(WindowManagerService.TAG, "Win " + win + ": isDrawn=" 1546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + win.isDrawnLw() 155a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + ", isAnimating=" + win.mWinAnimator.isAnimating()); 1566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!win.isDrawnLw()) { 157c2f9be0b7fe14258e01d73f6bc43dd94c3e711d4Craig Mautner Slog.v(WindowManagerService.TAG, "Not displayed: s=" + win.mWinAnimator.mSurface 1586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " pv=" + win.mPolicyVisibility 159749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner + " mDrawState=" + win.mWinAnimator.mDrawState 1606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " ah=" + win.mAttachedHidden 1616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " th=" 1626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + (win.mAppToken != null 1636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn ? win.mAppToken.hiddenRequested : false) 164a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + " a=" + win.mWinAnimator.mAnimating); 1656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn numInteresting++; 1686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win.isDrawnLw()) { 1692c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn numDrawn++; 170a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner if (!win.mWinAnimator.isAnimating()) { 1716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn numVisible++; 1726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone = false; 174a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner } else if (win.mWinAnimator.isAnimating()) { 1756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone = false; 1766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1792c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn boolean nowDrawn = numInteresting > 0 && numDrawn >= numInteresting; 1806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean nowVisible = numInteresting > 0 && numVisible >= numInteresting; 1812c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowGone) { 1822c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn // If the app is not yet gone, then it can only become visible/drawn. 1832c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowDrawn) { 1842c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn nowDrawn = reportedDrawn; 1852c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1862c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowVisible) { 1872c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn nowVisible = reportedVisible; 1882c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1892c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "VIS " + this + ": interesting=" 1916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + numInteresting + " visible=" + numVisible); 1922c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (nowDrawn != reportedDrawn) { 1932c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (nowDrawn) { 1942c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn Message m = service.mH.obtainMessage( 1952c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn H.REPORT_APPLICATION_TOKEN_DRAWN, this); 1962c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn service.mH.sendMessage(m); 1972c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1982c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn reportedDrawn = nowDrawn; 1992c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 2006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (nowVisible != reportedVisible) { 2016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v( 2026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManagerService.TAG, "Visibility changed in " + this 2036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + ": vis=" + nowVisible); 2046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn reportedVisible = nowVisible; 2056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Message m = service.mH.obtainMessage( 2066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn H.REPORT_APPLICATION_TOKEN_WINDOWS, 2076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowVisible ? 1 : 0, 2086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone ? 1 : 0, 2096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn this); 2106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn service.mH.sendMessage(m); 2116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState findMainWindow() { 2156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int j = windows.size(); 2166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (j > 0) { 2176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn j--; 2186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = windows.get(j); 2196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win.mAttrs.type == WindowManager.LayoutParams.TYPE_BASE_APPLICATION 2206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING) { 2216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return win; 2226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return null; 2256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 227dbb7991b4e4638b284814b50e79cacc1e1c9d8cdCraig Mautner @Override 2286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void dump(PrintWriter pw, String prefix) { 2296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn super.dump(pw, prefix); 2306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (appToken != null) { 2316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.println("app=true"); 2326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (allAppWindows.size() > 0) { 2346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("allAppWindows="); pw.println(allAppWindows); 2356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("groupId="); pw.print(groupId); 2376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" appFullscreen="); pw.print(appFullscreen); 2386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" requestedOrientation="); pw.println(requestedOrientation); 2396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("hiddenRequested="); pw.print(hiddenRequested); 2406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" clientHidden="); pw.print(clientHidden); 2416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" willBeHidden="); pw.print(willBeHidden); 2422c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn pw.print(" reportedDrawn="); pw.print(reportedDrawn); 2436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" reportedVisible="); pw.println(reportedVisible); 244594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (paused) { 245594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner pw.print(prefix); pw.print("paused="); pw.println(paused); 2466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (numInterestingWindows != 0 || numDrawnWindows != 0 2486fbda63e68513ece4409dac845588711ab25c39dCraig Mautner || allDrawn || mAppAnimator.allDrawn) { 2496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("numInterestingWindows="); 2506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(numInterestingWindows); 2516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" numDrawnWindows="); pw.print(numDrawnWindows); 2526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" inPendingTransaction="); pw.print(inPendingTransaction); 2536fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(" allDrawn="); pw.print(allDrawn); 2546fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(" (animator="); pw.print(mAppAnimator.allDrawn); 2556fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.println(")"); 2566fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } 2576fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (inPendingTransaction) { 2586fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(prefix); pw.print("inPendingTransaction="); 2596fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.println(inPendingTransaction); 2606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (startingData != null || removed || firstWindowDrawn) { 2626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("startingData="); pw.print(startingData); 2636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" removed="); pw.print(removed); 2646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" firstWindowDrawn="); pw.println(firstWindowDrawn); 2656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (startingWindow != null || startingView != null 2676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || startingDisplayed || startingMoved) { 2686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("startingWindow="); pw.print(startingWindow); 2696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingView="); pw.print(startingView); 2706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingDisplayed="); pw.print(startingDisplayed); 2716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingMoved"); pw.println(startingMoved); 2726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 2766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 2776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (stringName == null) { 2786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn StringBuilder sb = new StringBuilder(); 2796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append("AppWindowToken{"); 2806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 2816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(" token="); sb.append(token); sb.append('}'); 2826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn stringName = sb.toString(); 2836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return stringName; 2856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 286e9bdb31ea1dc3c1c2b1833a4bf0031d85928a45bJeff Brown} 287