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 android.os.IBinder; 206e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 216e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.io.PrintWriter; 226e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornimport java.util.ArrayList; 236e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 246e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn/** 256e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * Container of a set of related windows in the window manager. Often this 266e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * is an AppWindowToken, which is the handle for an Activity that it uses 276e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * to display windows. For nested windows, there is a WindowToken created for 286e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn * the parent window to manage its children. 296e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn */ 306e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackbornclass WindowToken { 316e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The window manager! 326e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final WindowManagerService service; 336e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 346e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The actual token. 356e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final IBinder token; 366e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 376e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // The type of window this token is for, as per WindowManager.LayoutParams. 386e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final int windowType; 396e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 406e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set if this token was explicitly added by a client, so should 416e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // not be removed when all windows are removed. 426e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final boolean explicit; 436e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 446e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // For printing. 456e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn String stringName; 466e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 476e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // If this is an AppWindowToken, this is non-null. 486e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn AppWindowToken appWindowToken; 496e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 506e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // All of the windows associated with this token. 516e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn final ArrayList<WindowState> windows = new ArrayList<WindowState>(); 526e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 536e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Is key dispatching paused for this token? 546e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean paused = false; 556e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 566e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Should this token's windows be hidden? 576e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hidden; 586e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 596e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Temporary for finding which tokens no longer have visible windows. 606e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean hasVisible; 616e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 626e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when this token is in a pending transaction where it 636e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // will be shown. 646e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean waitingToShow; 656e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 666e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when this token is in a pending transaction where it 676e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // will be hidden. 686e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean waitingToHide; 696e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 706e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when this token is in a pending transaction where its 716e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows will be put to the bottom of the list. 726e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean sendingToBottom; 736e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 746e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // Set to true when this token is in a pending transaction where its 756e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn // windows will be put to the top of the list. 766e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn boolean sendingToTop; 776e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 786e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn WindowToken(WindowManagerService _service, IBinder _token, int type, boolean _explicit) { 796e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn service = _service; 806e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn token = _token; 816e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn windowType = type; 826e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn explicit = _explicit; 836e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 846e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 856e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn void dump(PrintWriter pw, String prefix) { 866e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("token="); pw.println(token); 876e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("windows="); pw.println(windows); 886e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("windowType="); pw.print(windowType); 896e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" hidden="); pw.print(hidden); 906e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" hasVisible="); pw.println(hasVisible); 916e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (waitingToShow || waitingToHide || sendingToBottom || sendingToTop) { 926e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(prefix); pw.print("waitingToShow="); pw.print(waitingToShow); 936e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" waitingToHide="); pw.print(waitingToHide); 946e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" sendingToBottom="); pw.print(sendingToBottom); 956e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn pw.print(" sendingToTop="); pw.println(sendingToTop); 966e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 976e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 986e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn 996e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn @Override 1006e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn public String toString() { 1016e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn if (stringName == null) { 1026e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn StringBuilder sb = new StringBuilder(); 1036e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append("WindowToken{"); 1046e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 1056e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn sb.append(" token="); sb.append(token); sb.append('}'); 1066e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn stringName = sb.toString(); 1076e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1086e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn return stringName; 1096e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn } 1106e1eb76f02ccc9dbc309b938f62d39312da8cafeDianne Hackborn}