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 Hackborn 346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Version of WindowToken that is specifically for a particular application (or 366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * really activity) that is displaying windows. 376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 38e32c30784191a9244a08450759471c934c85034cCraig Mautnerclass AppWindowToken extends WindowToken { 396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Non-null only for application tokens. 406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IApplicationToken appToken; 416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // All of the windows and child windows that are included in this 436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // application token. Note this list is NOT sorted! 44968683335e17c06504a11bc2e38a2580f613ea16Craig Mautner final WindowList allAppWindows = new WindowList(); 45594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner final AppWindowAnimator mAppAnimator; 466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 47d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner final WindowAnimator mAnimator; 48d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner 496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int groupId = -1; 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean appFullscreen; 516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 525962b12bedc4a1d0354816c1cd6b06ba04f6d807Craig Mautner boolean showWhenLocked; 53a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner 546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The input dispatching timeout for this application token in nanoseconds. 556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn long inputDispatchingTimeoutNanos; 566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // These are used for determining when all windows associated with 586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // an activity have been drawn, so they can be made visible together 596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // at the same time. 60764983d16925daeeba3f29fd1f844187655d1386Craig Mautner // initialize so that it doesn't match mTransactionSequence which is an int. 61764983d16925daeeba3f29fd1f844187655d1386Craig Mautner long lastTransactionSequence = Long.MIN_VALUE; 626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numInterestingWindows; 636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numDrawnWindows; 646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean inPendingTransaction; 656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean allDrawn; 667636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner // Set to true when this app creates a surface while in the middle of an animation. In that 677636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner // case do not clear allDrawn until the animation completes. 687636dfbc3331dec0cea374a9540a1f31fb7dbf77Craig Mautner boolean deferClearAllDrawn; 696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this token going to be hidden in a little while? If so, it 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // won't be taken into account for setting the screen orientation. 726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean willBeHidden; 736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is this window's surface needed? This is almost like hidden, except 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // it will sometimes be true a little earlier: when the token has 766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // been shown, but is still waiting for its app transition to execute 776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // before making its windows shown. 786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hiddenRequested; 796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Have we told the window clients to hide themselves? 816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean clientHidden; 826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Last visibility state we reported to the app token. 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean reportedVisible; 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 862c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn // Last drawn state we reported to the app token. 872c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn boolean reportedDrawn; 882c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn 896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when the token has been removed from the window mgr. 906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean removed; 916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Information about an application starting window if displayed. 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn StartingData startingData; 946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState startingWindow; 956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn View startingView; 966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean startingDisplayed; 976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean startingMoved; 986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean firstWindowDrawn; 996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Input application handle used by the input dispatcher. 1019302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown final InputApplicationHandle mInputApplicationHandle; 1026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken(WindowManagerService _service, IApplicationToken _token) { 1046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn super(_service, _token.asBinder(), 1056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManager.LayoutParams.TYPE_APPLICATION, true); 1066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appWindowToken = this; 1076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn appToken = _token; 1086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn mInputApplicationHandle = new InputApplicationHandle(this); 109d09cc4ba247e896cc95a57ed7a3247b55b1b68fcCraig Mautner mAnimator = service.mAnimator; 110322e40315609acd5a608440bc469d873e09559caCraig Mautner mAppAnimator = new AppWindowAnimator(this); 1116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void sendAppVisibilityToClients() { 1146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int N = allAppWindows.size(); 1156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn for (int i=0; i<N; i++) { 1166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = allAppWindows.get(i); 1176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win == startingWindow && clientHidden) { 1186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Don't hide the starting window. 1196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn continue; 1206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn try { 1226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, 1236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn "Setting visibility of " + win + ": " + (!clientHidden)); 1246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn win.mClient.dispatchAppVisibility(!clientHidden); 1256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } catch (RemoteException e) { 1266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void updateReportedVisibilityLocked() { 1316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (appToken == null) { 1326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return; 1336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numInteresting = 0; 1366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int numVisible = 0; 1372c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn int numDrawn = 0; 1386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean nowGone = true; 1396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 140c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, 141c8bc97e53044cd62c0e023fdc441fd13127d0283Craig Mautner "Update reported visibility: " + this); 1426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int N = allAppWindows.size(); 1436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn for (int i=0; i<N; i++) { 1446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = allAppWindows.get(i); 1456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win == startingWindow || win.mAppFreezing 1466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mViewVisibility != View.VISIBLE 1476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mAttrs.type == TYPE_APPLICATION_STARTING 1486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mDestroying) { 1496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn continue; 1506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) { 1526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Slog.v(WindowManagerService.TAG, "Win " + win + ": isDrawn=" 1536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + win.isDrawnLw() 154a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + ", isAnimating=" + win.mWinAnimator.isAnimating()); 1556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (!win.isDrawnLw()) { 15629479ebe1007361222bf6ab4d5e2a27927d4b8e8Mathias Agopian Slog.v(WindowManagerService.TAG, "Not displayed: s=" + win.mWinAnimator.mSurfaceControl 1576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " pv=" + win.mPolicyVisibility 158749a7bb28b2aff7a77a8c7dce01e086c2bd82c6bCraig Mautner + " mDrawState=" + win.mWinAnimator.mDrawState 1596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " ah=" + win.mAttachedHidden 1606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + " th=" 1616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + (win.mAppToken != null 1626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn ? win.mAppToken.hiddenRequested : false) 163a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner + " a=" + win.mWinAnimator.mAnimating); 1646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn numInteresting++; 1676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win.isDrawnLw()) { 1682c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn numDrawn++; 169a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner if (!win.mWinAnimator.isAnimating()) { 1706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn numVisible++; 1716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone = false; 173a2c77053b8dfa5f06bdd927bdbab4df2d00bb4e2Craig Mautner } else if (win.mWinAnimator.isAnimating()) { 1746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone = false; 1756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 1782c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn boolean nowDrawn = numInteresting > 0 && numDrawn >= numInteresting; 1796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean nowVisible = numInteresting > 0 && numVisible >= numInteresting; 1802c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowGone) { 1812c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn // If the app is not yet gone, then it can only become visible/drawn. 1822c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowDrawn) { 1832c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn nowDrawn = reportedDrawn; 1842c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1852c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (!nowVisible) { 1862c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn nowVisible = reportedVisible; 1872c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1882c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "VIS " + this + ": interesting=" 1906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + numInteresting + " visible=" + numVisible); 1912c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (nowDrawn != reportedDrawn) { 1922c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn if (nowDrawn) { 1932c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn Message m = service.mH.obtainMessage( 1942c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn H.REPORT_APPLICATION_TOKEN_DRAWN, this); 1952c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn service.mH.sendMessage(m); 1962c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1972c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn reportedDrawn = nowDrawn; 1982c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn } 1996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (nowVisible != reportedVisible) { 2006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (WindowManagerService.DEBUG_VISIBILITY) Slog.v( 2016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowManagerService.TAG, "Visibility changed in " + this 2026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn + ": vis=" + nowVisible); 2036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn reportedVisible = nowVisible; 2046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn Message m = service.mH.obtainMessage( 2056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn H.REPORT_APPLICATION_TOKEN_WINDOWS, 2066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowVisible ? 1 : 0, 2076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn nowGone ? 1 : 0, 2086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn this); 2096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn service.mH.sendMessage(m); 2106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2116e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2126e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2136e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState findMainWindow() { 2146e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn int j = windows.size(); 2156e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn while (j > 0) { 2166e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn j--; 2176e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowState win = windows.get(j); 2186e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (win.mAttrs.type == WindowManager.LayoutParams.TYPE_BASE_APPLICATION 2196e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || win.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING) { 2206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return win; 2216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return null; 2246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 22672669d18016446d874e4fa1005464e36375124e4Craig Mautner boolean isVisible() { 22772669d18016446d874e4fa1005464e36375124e4Craig Mautner final int N = allAppWindows.size(); 22872669d18016446d874e4fa1005464e36375124e4Craig Mautner for (int i=0; i<N; i++) { 22972669d18016446d874e4fa1005464e36375124e4Craig Mautner WindowState win = allAppWindows.get(i); 23072669d18016446d874e4fa1005464e36375124e4Craig Mautner if (!win.mAppFreezing 23172669d18016446d874e4fa1005464e36375124e4Craig Mautner && (win.mViewVisibility == View.VISIBLE || 23272669d18016446d874e4fa1005464e36375124e4Craig Mautner (win.mWinAnimator.isAnimating() && 23372669d18016446d874e4fa1005464e36375124e4Craig Mautner !service.mAppTransition.isTransitionSet())) 23472669d18016446d874e4fa1005464e36375124e4Craig Mautner && !win.mDestroying && win.isDrawnLw()) { 23572669d18016446d874e4fa1005464e36375124e4Craig Mautner return true; 23672669d18016446d874e4fa1005464e36375124e4Craig Mautner } 23772669d18016446d874e4fa1005464e36375124e4Craig Mautner } 23872669d18016446d874e4fa1005464e36375124e4Craig Mautner return false; 23972669d18016446d874e4fa1005464e36375124e4Craig Mautner } 24072669d18016446d874e4fa1005464e36375124e4Craig Mautner 241dbb7991b4e4638b284814b50e79cacc1e1c9d8cdCraig Mautner @Override 2426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void dump(PrintWriter pw, String prefix) { 2436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn super.dump(pw, prefix); 2446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (appToken != null) { 2456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.println("app=true"); 2466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (allAppWindows.size() > 0) { 2486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("allAppWindows="); pw.println(allAppWindows); 2496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("groupId="); pw.print(groupId); 2516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" appFullscreen="); pw.print(appFullscreen); 2526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" requestedOrientation="); pw.println(requestedOrientation); 2536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("hiddenRequested="); pw.print(hiddenRequested); 2546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" clientHidden="); pw.print(clientHidden); 2556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" willBeHidden="); pw.print(willBeHidden); 2562c84cfc001fb92a71811bf7384b7f865ff31ff9dDianne Hackborn pw.print(" reportedDrawn="); pw.print(reportedDrawn); 2576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" reportedVisible="); pw.println(reportedVisible); 258594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner if (paused) { 259594316361d38d88b53c85bd5c8d58a92345e8187Craig Mautner pw.print(prefix); pw.print("paused="); pw.println(paused); 2606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (numInterestingWindows != 0 || numDrawnWindows != 0 2626fbda63e68513ece4409dac845588711ab25c39dCraig Mautner || allDrawn || mAppAnimator.allDrawn) { 2636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("numInterestingWindows="); 2646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(numInterestingWindows); 2656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" numDrawnWindows="); pw.print(numDrawnWindows); 2666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" inPendingTransaction="); pw.print(inPendingTransaction); 2676fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(" allDrawn="); pw.print(allDrawn); 2686fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(" (animator="); pw.print(mAppAnimator.allDrawn); 2696fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.println(")"); 2706fbda63e68513ece4409dac845588711ab25c39dCraig Mautner } 2716fbda63e68513ece4409dac845588711ab25c39dCraig Mautner if (inPendingTransaction) { 2726fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.print(prefix); pw.print("inPendingTransaction="); 2736fbda63e68513ece4409dac845588711ab25c39dCraig Mautner pw.println(inPendingTransaction); 2746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (startingData != null || removed || firstWindowDrawn) { 2766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("startingData="); pw.print(startingData); 2776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" removed="); pw.print(removed); 2786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" firstWindowDrawn="); pw.println(firstWindowDrawn); 2796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (startingWindow != null || startingView != null 2816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn || startingDisplayed || startingMoved) { 2826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("startingWindow="); pw.print(startingWindow); 2836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingView="); pw.print(startingView); 2846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingDisplayed="); pw.print(startingDisplayed); 2856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" startingMoved"); pw.println(startingMoved); 2866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 2896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 2906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 2916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (stringName == null) { 2926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn StringBuilder sb = new StringBuilder(); 2936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append("AppWindowToken{"); 2946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 2956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(" token="); sb.append(token); sb.append('}'); 2966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn stringName = sb.toString(); 2976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 2986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return stringName; 2996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 300e9bdb31ea1dc3c1c2b1833a4bf0031d85928a45bJeff Brown} 301