1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.view; 18 19 import android.content.Context; 20 import android.content.res.CompatibilityInfo; 21 import android.content.res.Configuration; 22 import android.graphics.Rect; 23 import android.graphics.RectF; 24 import android.os.Bundle; 25 import android.os.IBinder; 26 import android.os.Looper; 27 import android.view.animation.Animation; 28 29 import java.io.PrintWriter; 30 31 /** 32 * This interface supplies all UI-specific behavior of the window manager. An 33 * instance of it is created by the window manager when it starts up, and allows 34 * customization of window layering, special window types, key dispatching, and 35 * layout. 36 * 37 * <p>Because this provides deep interaction with the system window manager, 38 * specific methods on this interface can be called from a variety of contexts 39 * with various restrictions on what they can do. These are encoded through 40 * a suffixes at the end of a method encoding the thread the method is called 41 * from and any locks that are held when it is being called; if no suffix 42 * is attached to a method, then it is not called with any locks and may be 43 * called from the main window manager thread or another thread calling into 44 * the window manager. 45 * 46 * <p>The current suffixes are: 47 * 48 * <dl> 49 * <dt> Ti <dd> Called from the input thread. This is the thread that 50 * collects pending input events and dispatches them to the appropriate window. 51 * It may block waiting for events to be processed, so that the input stream is 52 * properly serialized. 53 * <dt> Tq <dd> Called from the low-level input queue thread. This is the 54 * thread that reads events out of the raw input devices and places them 55 * into the global input queue that is read by the <var>Ti</var> thread. 56 * This thread should not block for a long period of time on anything but the 57 * key driver. 58 * <dt> Lw <dd> Called with the main window manager lock held. Because the 59 * window manager is a very low-level system service, there are few other 60 * system services you can call with this lock held. It is explicitly okay to 61 * make calls into the package manager and power manager; it is explicitly not 62 * okay to make calls into the activity manager or most other services. Note that 63 * {@link android.content.Context#checkPermission(String, int, int)} and 64 * variations require calling into the activity manager. 65 * <dt> Li <dd> Called with the input thread lock held. This lock can be 66 * acquired by the window manager while it holds the window lock, so this is 67 * even more restrictive than <var>Lw</var>. 68 * </dl> 69 * 70 * @hide 71 */ 72 public interface WindowManagerPolicy { 73 // Policy flags. These flags are also defined in frameworks/base/include/ui/Input.h. 74 public final static int FLAG_WAKE = 0x00000001; 75 public final static int FLAG_WAKE_DROPPED = 0x00000002; 76 public final static int FLAG_SHIFT = 0x00000004; 77 public final static int FLAG_CAPS_LOCK = 0x00000008; 78 public final static int FLAG_ALT = 0x00000010; 79 public final static int FLAG_ALT_GR = 0x00000020; 80 public final static int FLAG_MENU = 0x00000040; 81 public final static int FLAG_LAUNCHER = 0x00000080; 82 public final static int FLAG_VIRTUAL = 0x00000100; 83 84 public final static int FLAG_INJECTED = 0x01000000; 85 public final static int FLAG_TRUSTED = 0x02000000; 86 public final static int FLAG_FILTERED = 0x04000000; 87 public final static int FLAG_DISABLE_KEY_REPEAT = 0x08000000; 88 89 public final static int FLAG_WOKE_HERE = 0x10000000; 90 public final static int FLAG_BRIGHT_HERE = 0x20000000; 91 public final static int FLAG_PASS_TO_USER = 0x40000000; 92 93 // Flags used for indicating whether the internal and/or external input devices 94 // of some type are available. 95 public final static int PRESENCE_INTERNAL = 1 << 0; 96 public final static int PRESENCE_EXTERNAL = 1 << 1; 97 98 public final static boolean WATCH_POINTER = false; 99 100 /** 101 * Sticky broadcast of the current HDMI plugged state. 102 */ 103 public final static String ACTION_HDMI_PLUGGED = "android.intent.action.HDMI_PLUGGED"; 104 105 /** 106 * Extra in {@link #ACTION_HDMI_PLUGGED} indicating the state: true if 107 * plugged in to HDMI, false if not. 108 */ 109 public final static String EXTRA_HDMI_PLUGGED_STATE = "state"; 110 111 /** 112 * Pass this event to the user / app. To be returned from 113 * {@link #interceptKeyBeforeQueueing}. 114 */ 115 public final static int ACTION_PASS_TO_USER = 0x00000001; 116 117 /** 118 * This key event should wake the device. 119 * To be returned from {@link #interceptKeyBeforeQueueing}. 120 * Do not return this and {@link #ACTION_GO_TO_SLEEP} or {@link #ACTION_PASS_TO_USER}. 121 */ 122 public final static int ACTION_WAKE_UP = 0x00000002; 123 124 /** 125 * This key event should put the device to sleep (and engage keyguard if necessary) 126 * To be returned from {@link #interceptKeyBeforeQueueing}. 127 * Do not return this and {@link #ACTION_WAKE_UP} or {@link #ACTION_PASS_TO_USER}. 128 */ 129 public final static int ACTION_GO_TO_SLEEP = 0x00000004; 130 131 /** 132 * Interface to the Window Manager state associated with a particular 133 * window. You can hold on to an instance of this interface from the call 134 * to prepareAddWindow() until removeWindow(). 135 */ 136 public interface WindowState { 137 /** 138 * Return the uid of the app that owns this window. 139 */ 140 int getOwningUid(); 141 142 /** 143 * Return the package name of the app that owns this window. 144 */ 145 String getOwningPackage(); 146 147 /** 148 * Perform standard frame computation. The result can be obtained with 149 * getFrame() if so desired. Must be called with the window manager 150 * lock held. 151 * 152 * @param parentFrame The frame of the parent container this window 153 * is in, used for computing its basic position. 154 * @param displayFrame The frame of the overall display in which this 155 * window can appear, used for constraining the overall dimensions 156 * of the window. 157 * @param overlayFrame The frame within the display that is inside 158 * of the overlay region. 159 * @param contentFrame The frame within the display in which we would 160 * like active content to appear. This will cause windows behind to 161 * be resized to match the given content frame. 162 * @param visibleFrame The frame within the display that the window 163 * is actually visible, used for computing its visible insets to be 164 * given to windows behind. 165 * This can be used as a hint for scrolling (avoiding resizing) 166 * the window to make certain that parts of its content 167 * are visible. 168 * @param decorFrame The decor frame specified by policy specific to this window, 169 * to use for proper cropping during animation. 170 */ 171 public void computeFrameLw(Rect parentFrame, Rect displayFrame, 172 Rect overlayFrame, Rect contentFrame, Rect visibleFrame, Rect decorFrame); 173 174 /** 175 * Retrieve the current frame of the window that has been assigned by 176 * the window manager. Must be called with the window manager lock held. 177 * 178 * @return Rect The rectangle holding the window frame. 179 */ 180 public Rect getFrameLw(); 181 182 /** 183 * Retrieve the current frame of the window that is actually shown. 184 * Must be called with the window manager lock held. 185 * 186 * @return Rect The rectangle holding the shown window frame. 187 */ 188 public RectF getShownFrameLw(); 189 190 /** 191 * Retrieve the frame of the display that this window was last 192 * laid out in. Must be called with the 193 * window manager lock held. 194 * 195 * @return Rect The rectangle holding the display frame. 196 */ 197 public Rect getDisplayFrameLw(); 198 199 /** 200 * Retrieve the frame of the area inside the overscan region of the 201 * display that this window was last laid out in. Must be called with the 202 * window manager lock held. 203 * 204 * @return Rect The rectangle holding the display overscan frame. 205 */ 206 public Rect getOverscanFrameLw(); 207 208 /** 209 * Retrieve the frame of the content area that this window was last 210 * laid out in. This is the area in which the content of the window 211 * should be placed. It will be smaller than the display frame to 212 * account for screen decorations such as a status bar or soft 213 * keyboard. Must be called with the 214 * window manager lock held. 215 * 216 * @return Rect The rectangle holding the content frame. 217 */ 218 public Rect getContentFrameLw(); 219 220 /** 221 * Retrieve the frame of the visible area that this window was last 222 * laid out in. This is the area of the screen in which the window 223 * will actually be fully visible. It will be smaller than the 224 * content frame to account for transient UI elements blocking it 225 * such as an input method's candidates UI. Must be called with the 226 * window manager lock held. 227 * 228 * @return Rect The rectangle holding the visible frame. 229 */ 230 public Rect getVisibleFrameLw(); 231 232 /** 233 * Returns true if this window is waiting to receive its given 234 * internal insets from the client app, and so should not impact the 235 * layout of other windows. 236 */ 237 public boolean getGivenInsetsPendingLw(); 238 239 /** 240 * Retrieve the insets given by this window's client for the content 241 * area of windows behind it. Must be called with the 242 * window manager lock held. 243 * 244 * @return Rect The left, top, right, and bottom insets, relative 245 * to the window's frame, of the actual contents. 246 */ 247 public Rect getGivenContentInsetsLw(); 248 249 /** 250 * Retrieve the insets given by this window's client for the visible 251 * area of windows behind it. Must be called with the 252 * window manager lock held. 253 * 254 * @return Rect The left, top, right, and bottom insets, relative 255 * to the window's frame, of the actual visible area. 256 */ 257 public Rect getGivenVisibleInsetsLw(); 258 259 /** 260 * Retrieve the current LayoutParams of the window. 261 * 262 * @return WindowManager.LayoutParams The window's internal LayoutParams 263 * instance. 264 */ 265 public WindowManager.LayoutParams getAttrs(); 266 267 /** 268 * Return whether this window needs the menu key shown. Must be called 269 * with window lock held, because it may need to traverse down through 270 * window list to determine the result. 271 * @param bottom The bottom-most window to consider when determining this. 272 */ 273 public boolean getNeedsMenuLw(WindowState bottom); 274 275 /** 276 * Retrieve the current system UI visibility flags associated with 277 * this window. 278 */ 279 public int getSystemUiVisibility(); 280 281 /** 282 * Get the layer at which this window's surface will be Z-ordered. 283 */ 284 public int getSurfaceLayer(); 285 286 /** 287 * Return the token for the application (actually activity) that owns 288 * this window. May return null for system windows. 289 * 290 * @return An IApplicationToken identifying the owning activity. 291 */ 292 public IApplicationToken getAppToken(); 293 294 /** 295 * Return true if, at any point, the application token associated with 296 * this window has actually displayed any windows. This is most useful 297 * with the "starting up" window to determine if any windows were 298 * displayed when it is closed. 299 * 300 * @return Returns true if one or more windows have been displayed, 301 * else false. 302 */ 303 public boolean hasAppShownWindows(); 304 305 /** 306 * Is this window visible? It is not visible if there is no 307 * surface, or we are in the process of running an exit animation 308 * that will remove the surface. 309 */ 310 boolean isVisibleLw(); 311 312 /** 313 * Like {@link #isVisibleLw}, but also counts a window that is currently 314 * "hidden" behind the keyguard as visible. This allows us to apply 315 * things like window flags that impact the keyguard. 316 */ 317 boolean isVisibleOrBehindKeyguardLw(); 318 319 /** 320 * Is this window currently visible to the user on-screen? It is 321 * displayed either if it is visible or it is currently running an 322 * animation before no longer being visible. Must be called with the 323 * window manager lock held. 324 */ 325 boolean isDisplayedLw(); 326 327 /** 328 * Return true if this window (or a window it is attached to, but not 329 * considering its app token) is currently animating. 330 */ 331 public boolean isAnimatingLw(); 332 333 /** 334 * Is this window considered to be gone for purposes of layout? 335 */ 336 boolean isGoneForLayoutLw(); 337 338 /** 339 * Returns true if this window has been shown on screen at some time in 340 * the past. Must be called with the window manager lock held. 341 */ 342 public boolean hasDrawnLw(); 343 344 /** 345 * Can be called by the policy to force a window to be hidden, 346 * regardless of whether the client or window manager would like 347 * it shown. Must be called with the window manager lock held. 348 * Returns true if {@link #showLw} was last called for the window. 349 */ 350 public boolean hideLw(boolean doAnimation); 351 352 /** 353 * Can be called to undo the effect of {@link #hideLw}, allowing a 354 * window to be shown as long as the window manager and client would 355 * also like it to be shown. Must be called with the window manager 356 * lock held. 357 * Returns true if {@link #hideLw} was last called for the window. 358 */ 359 public boolean showLw(boolean doAnimation); 360 361 /** 362 * Check whether the process hosting this window is currently alive. 363 */ 364 public boolean isAlive(); 365 366 /** 367 * Check if window is on {@link Display#DEFAULT_DISPLAY}. 368 * @return true if window is on default display. 369 */ 370 public boolean isDefaultDisplay(); 371 } 372 373 /** 374 * Representation of a "fake window" that the policy has added to the 375 * window manager to consume events. 376 */ 377 public interface FakeWindow { 378 /** 379 * Remove the fake window from the window manager. 380 */ 381 void dismiss(); 382 } 383 384 /** 385 * Interface for calling back in to the window manager that is private 386 * between it and the policy. 387 */ 388 public interface WindowManagerFuncs { 389 public static final int LID_ABSENT = -1; 390 public static final int LID_CLOSED = 0; 391 public static final int LID_OPEN = 1; 392 393 /** 394 * Ask the window manager to re-evaluate the system UI flags. 395 */ 396 public void reevaluateStatusBarVisibility(); 397 398 /** 399 * Add a fake window to the window manager. This window sits 400 * at the top of the other windows and consumes events. 401 */ 402 public FakeWindow addFakeWindow(Looper looper, 403 InputEventReceiver.Factory inputEventReceiverFactory, 404 String name, int windowType, int layoutParamsFlags, int layoutParamsPrivateFlags, 405 boolean canReceiveKeys, boolean hasFocus, boolean touchFullscreen); 406 407 /** 408 * Returns a code that describes the current state of the lid switch. 409 */ 410 public int getLidState(); 411 412 /** 413 * Switch the keyboard layout for the given device. 414 * Direction should be +1 or -1 to go to the next or previous keyboard layout. 415 */ 416 public void switchKeyboardLayout(int deviceId, int direction); 417 418 public void shutdown(boolean confirm); 419 public void rebootSafeMode(boolean confirm); 420 421 /** 422 * Return the window manager lock needed to correctly call "Lw" methods. 423 */ 424 public Object getWindowManagerLock(); 425 426 /** Register a system listener for touch events */ 427 void registerPointerEventListener(PointerEventListener listener); 428 429 /** Unregister a system listener for touch events */ 430 void unregisterPointerEventListener(PointerEventListener listener); 431 } 432 433 public interface PointerEventListener { 434 /** 435 * 1. onPointerEvent will be called on the service.UiThread. 436 * 2. motionEvent will be recycled after onPointerEvent returns so if it is needed later a 437 * copy() must be made and the copy must be recycled. 438 **/ 439 public void onPointerEvent(MotionEvent motionEvent); 440 } 441 442 /** Window has been added to the screen. */ 443 public static final int TRANSIT_ENTER = 1; 444 /** Window has been removed from the screen. */ 445 public static final int TRANSIT_EXIT = 2; 446 /** Window has been made visible. */ 447 public static final int TRANSIT_SHOW = 3; 448 /** Window has been made invisible. 449 * TODO: Consider removal as this is unused. */ 450 public static final int TRANSIT_HIDE = 4; 451 /** The "application starting" preview window is no longer needed, and will 452 * animate away to show the real window. */ 453 public static final int TRANSIT_PREVIEW_DONE = 5; 454 455 // NOTE: screen off reasons are in order of significance, with more 456 // important ones lower than less important ones. 457 458 /** Screen turned off because of a device admin */ 459 public final int OFF_BECAUSE_OF_ADMIN = 1; 460 /** Screen turned off because of power button */ 461 public final int OFF_BECAUSE_OF_USER = 2; 462 /** Screen turned off because of timeout */ 463 public final int OFF_BECAUSE_OF_TIMEOUT = 3; 464 /** Screen turned off because of proximity sensor */ 465 public final int OFF_BECAUSE_OF_PROX_SENSOR = 4; 466 467 /** When not otherwise specified by the activity's screenOrientation, rotation should be 468 * determined by the system (that is, using sensors). */ 469 public final int USER_ROTATION_FREE = 0; 470 /** When not otherwise specified by the activity's screenOrientation, rotation is set by 471 * the user. */ 472 public final int USER_ROTATION_LOCKED = 1; 473 474 /** 475 * Perform initialization of the policy. 476 * 477 * @param context The system context we are running in. 478 */ 479 public void init(Context context, IWindowManager windowManager, 480 WindowManagerFuncs windowManagerFuncs); 481 482 /** 483 * @return true if com.android.internal.R.bool#config_forceDefaultOrientation is true. 484 */ 485 public boolean isDefaultOrientationForced(); 486 487 /** 488 * Called by window manager once it has the initial, default native 489 * display dimensions. 490 */ 491 public void setInitialDisplaySize(Display display, int width, int height, int density); 492 493 /** 494 * Called by window manager to set the overscan region that should be used for the 495 * given display. 496 */ 497 public void setDisplayOverscan(Display display, int left, int top, int right, int bottom); 498 499 /** 500 * Check permissions when adding a window. 501 * 502 * @param attrs The window's LayoutParams. 503 * @param outAppOp First element will be filled with the app op corresponding to 504 * this window, or OP_NONE. 505 * 506 * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed; 507 * else an error code, usually 508 * {@link WindowManagerGlobal#ADD_PERMISSION_DENIED}, to abort the add. 509 */ 510 public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp); 511 512 /** 513 * Check permissions when adding a window. 514 * 515 * @param attrs The window's LayoutParams. 516 * 517 * @return True if the window may only be shown to the current user, false if the window can 518 * be shown on all users' windows. 519 */ 520 public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs); 521 522 /** 523 * Sanitize the layout parameters coming from a client. Allows the policy 524 * to do things like ensure that windows of a specific type can't take 525 * input focus. 526 * 527 * @param attrs The window layout parameters to be modified. These values 528 * are modified in-place. 529 */ 530 public void adjustWindowParamsLw(WindowManager.LayoutParams attrs); 531 532 /** 533 * After the window manager has computed the current configuration based 534 * on its knowledge of the display and input devices, it gives the policy 535 * a chance to adjust the information contained in it. If you want to 536 * leave it as-is, simply do nothing. 537 * 538 * <p>This method may be called by any thread in the window manager, but 539 * no internal locks in the window manager will be held. 540 * 541 * @param config The Configuration being computed, for you to change as 542 * desired. 543 * @param keyboardPresence Flags that indicate whether internal or external 544 * keyboards are present. 545 * @param navigationPresence Flags that indicate whether internal or external 546 * navigation devices are present. 547 */ 548 public void adjustConfigurationLw(Configuration config, int keyboardPresence, 549 int navigationPresence); 550 551 /** 552 * Assign a window type to a layer. Allows you to control how different 553 * kinds of windows are ordered on-screen. 554 * 555 * @param type The type of window being assigned. 556 * 557 * @return int An arbitrary integer used to order windows, with lower 558 * numbers below higher ones. 559 */ 560 public int windowTypeToLayerLw(int type); 561 562 /** 563 * Return how to Z-order sub-windows in relation to the window they are 564 * attached to. Return positive to have them ordered in front, negative for 565 * behind. 566 * 567 * @param type The sub-window type code. 568 * 569 * @return int Layer in relation to the attached window, where positive is 570 * above and negative is below. 571 */ 572 public int subWindowTypeToLayerLw(int type); 573 574 /** 575 * Get the highest layer (actually one more than) that the wallpaper is 576 * allowed to be in. 577 */ 578 public int getMaxWallpaperLayer(); 579 580 /** 581 * Return the window layer at which windows appear above the normal 582 * universe (that is no longer impacted by the universe background 583 * transform). 584 */ 585 public int getAboveUniverseLayer(); 586 587 /** 588 * Return the display width available after excluding any screen 589 * decorations that can never be removed. That is, system bar or 590 * button bar. 591 */ 592 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation); 593 594 /** 595 * Return the display height available after excluding any screen 596 * decorations that can never be removed. That is, system bar or 597 * button bar. 598 */ 599 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation); 600 601 /** 602 * Return the available screen width that we should report for the 603 * configuration. This must be no larger than 604 * {@link #getNonDecorDisplayWidth(int, int, int)}; it may be smaller than 605 * that to account for more transient decoration like a status bar. 606 */ 607 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation); 608 609 /** 610 * Return the available screen height that we should report for the 611 * configuration. This must be no larger than 612 * {@link #getNonDecorDisplayHeight(int, int, int)}; it may be smaller than 613 * that to account for more transient decoration like a status bar. 614 */ 615 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation); 616 617 /** 618 * Return whether the given window should forcibly hide everything 619 * behind it. Typically returns true for the keyguard. 620 */ 621 public boolean doesForceHide(WindowState win, WindowManager.LayoutParams attrs); 622 623 /** 624 * Determine if a window that is behind one that is force hiding 625 * (as determined by {@link #doesForceHide}) should actually be hidden. 626 * For example, typically returns false for the status bar. Be careful 627 * to return false for any window that you may hide yourself, since this 628 * will conflict with what you set. 629 */ 630 public boolean canBeForceHidden(WindowState win, WindowManager.LayoutParams attrs); 631 632 /** 633 * Called when the system would like to show a UI to indicate that an 634 * application is starting. You can use this to add a 635 * APPLICATION_STARTING_TYPE window with the given appToken to the window 636 * manager (using the normal window manager APIs) that will be shown until 637 * the application displays its own window. This is called without the 638 * window manager locked so that you can call back into it. 639 * 640 * @param appToken Token of the application being started. 641 * @param packageName The name of the application package being started. 642 * @param theme Resource defining the application's overall visual theme. 643 * @param nonLocalizedLabel The default title label of the application if 644 * no data is found in the resource. 645 * @param labelRes The resource ID the application would like to use as its name. 646 * @param icon The resource ID the application would like to use as its icon. 647 * @param windowFlags Window layout flags. 648 * 649 * @return Optionally you can return the View that was used to create the 650 * window, for easy removal in removeStartingWindow. 651 * 652 * @see #removeStartingWindow 653 */ 654 public View addStartingWindow(IBinder appToken, String packageName, 655 int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, 656 int labelRes, int icon, int logo, int windowFlags); 657 658 /** 659 * Called when the first window of an application has been displayed, while 660 * {@link #addStartingWindow} has created a temporary initial window for 661 * that application. You should at this point remove the window from the 662 * window manager. This is called without the window manager locked so 663 * that you can call back into it. 664 * 665 * <p>Note: due to the nature of these functions not being called with the 666 * window manager locked, you must be prepared for this function to be 667 * called multiple times and/or an initial time with a null View window 668 * even if you previously returned one. 669 * 670 * @param appToken Token of the application that has started. 671 * @param window Window View that was returned by createStartingWindow. 672 * 673 * @see #addStartingWindow 674 */ 675 public void removeStartingWindow(IBinder appToken, View window); 676 677 /** 678 * Prepare for a window being added to the window manager. You can throw an 679 * exception here to prevent the window being added, or do whatever setup 680 * you need to keep track of the window. 681 * 682 * @param win The window being added. 683 * @param attrs The window's LayoutParams. 684 * 685 * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed, else an 686 * error code to abort the add. 687 */ 688 public int prepareAddWindowLw(WindowState win, 689 WindowManager.LayoutParams attrs); 690 691 /** 692 * Called when a window is being removed from a window manager. Must not 693 * throw an exception -- clean up as much as possible. 694 * 695 * @param win The window being removed. 696 */ 697 public void removeWindowLw(WindowState win); 698 699 /** 700 * Control the animation to run when a window's state changes. Return a 701 * non-0 number to force the animation to a specific resource ID, or 0 702 * to use the default animation. 703 * 704 * @param win The window that is changing. 705 * @param transit What is happening to the window: {@link #TRANSIT_ENTER}, 706 * {@link #TRANSIT_EXIT}, {@link #TRANSIT_SHOW}, or 707 * {@link #TRANSIT_HIDE}. 708 * 709 * @return Resource ID of the actual animation to use, or 0 for none. 710 */ 711 public int selectAnimationLw(WindowState win, int transit); 712 713 /** 714 * Determine the animation to run for a rotation transition based on the 715 * top fullscreen windows {@link WindowManager.LayoutParams#rotationAnimation} 716 * and whether it is currently fullscreen and frontmost. 717 * 718 * @param anim The exiting animation resource id is stored in anim[0], the 719 * entering animation resource id is stored in anim[1]. 720 */ 721 public void selectRotationAnimationLw(int anim[]); 722 723 /** 724 * Validate whether the current top fullscreen has specified the same 725 * {@link WindowManager.LayoutParams#rotationAnimation} value as that 726 * being passed in from the previous top fullscreen window. 727 * 728 * @param exitAnimId exiting resource id from the previous window. 729 * @param enterAnimId entering resource id from the previous window. 730 * @param forceDefault For rotation animations only, if true ignore the 731 * animation values and just return false. 732 * @return true if the previous values are still valid, false if they 733 * should be replaced with the default. 734 */ 735 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId, 736 boolean forceDefault); 737 738 /** 739 * Create and return an animation to re-display a force hidden window. 740 */ 741 public Animation createForceHideEnterAnimation(boolean onWallpaper); 742 743 /** 744 * Called from the input reader thread before a key is enqueued. 745 * 746 * <p>There are some actions that need to be handled here because they 747 * affect the power state of the device, for example, the power keys. 748 * Generally, it's best to keep as little as possible in the queue thread 749 * because it's the most fragile. 750 * @param event The key event. 751 * @param policyFlags The policy flags associated with the key. 752 * @param isScreenOn True if the screen is already on 753 * 754 * @return The bitwise or of the {@link #ACTION_PASS_TO_USER}, 755 * {@link #ACTION_WAKE_UP} and {@link #ACTION_GO_TO_SLEEP} flags. 756 */ 757 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn); 758 759 /** 760 * Called from the input reader thread before a motion is enqueued when the screen is off. 761 * 762 * <p>There are some actions that need to be handled here because they 763 * affect the power state of the device, for example, waking on motions. 764 * Generally, it's best to keep as little as possible in the queue thread 765 * because it's the most fragile. 766 * @param policyFlags The policy flags associated with the motion. 767 * 768 * @return The bitwise or of the {@link #ACTION_PASS_TO_USER}, 769 * {@link #ACTION_WAKE_UP} and {@link #ACTION_GO_TO_SLEEP} flags. 770 */ 771 public int interceptMotionBeforeQueueingWhenScreenOff(int policyFlags); 772 773 /** 774 * Called from the input dispatcher thread before a key is dispatched to a window. 775 * 776 * <p>Allows you to define 777 * behavior for keys that can not be overridden by applications. 778 * This method is called from the input thread, with no locks held. 779 * 780 * @param win The window that currently has focus. This is where the key 781 * event will normally go. 782 * @param event The key event. 783 * @param policyFlags The policy flags associated with the key. 784 * @return 0 if the key should be dispatched immediately, -1 if the key should 785 * not be dispatched ever, or a positive value indicating the number of 786 * milliseconds by which the key dispatch should be delayed before trying 787 * again. 788 */ 789 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags); 790 791 /** 792 * Called from the input dispatcher thread when an application did not handle 793 * a key that was dispatched to it. 794 * 795 * <p>Allows you to define default global behavior for keys that were not handled 796 * by applications. This method is called from the input thread, with no locks held. 797 * 798 * @param win The window that currently has focus. This is where the key 799 * event will normally go. 800 * @param event The key event. 801 * @param policyFlags The policy flags associated with the key. 802 * @return Returns an alternate key event to redispatch as a fallback, or null to give up. 803 * The caller is responsible for recycling the key event. 804 */ 805 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, int policyFlags); 806 807 /** 808 * Called when layout of the windows is about to start. 809 * 810 * @param isDefaultDisplay true if window is on {@link Display#DEFAULT_DISPLAY}. 811 * @param displayWidth The current full width of the screen. 812 * @param displayHeight The current full height of the screen. 813 * @param displayRotation The current rotation being applied to the base 814 * window. 815 */ 816 public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight, 817 int displayRotation); 818 819 /** 820 * Returns the bottom-most layer of the system decor, above which no policy decor should 821 * be applied. 822 */ 823 public int getSystemDecorLayerLw(); 824 825 /** 826 * Return the rectangle of the screen that is available for applications to run in. 827 * This will be called immediately after {@link #beginLayoutLw}. 828 * 829 * @param r The rectangle to be filled with the boundaries available to applications. 830 */ 831 public void getContentRectLw(Rect r); 832 833 /** 834 * Called for each window attached to the window manager as layout is 835 * proceeding. The implementation of this function must take care of 836 * setting the window's frame, either here or in finishLayout(). 837 * 838 * @param win The window being positioned. 839 * @param attrs The LayoutParams of the window. 840 * @param attached For sub-windows, the window it is attached to; this 841 * window will already have had layoutWindow() called on it 842 * so you can use its Rect. Otherwise null. 843 */ 844 public void layoutWindowLw(WindowState win, 845 WindowManager.LayoutParams attrs, WindowState attached); 846 847 848 /** 849 * Return the insets for the areas covered by system windows. These values 850 * are computed on the most recent layout, so they are not guaranteed to 851 * be correct. 852 * 853 * @param attrs The LayoutParams of the window. 854 * @param contentInset The areas covered by system windows, expressed as positive insets 855 * 856 */ 857 public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset); 858 859 /** 860 * Called when layout of the windows is finished. After this function has 861 * returned, all windows given to layoutWindow() <em>must</em> have had a 862 * frame assigned. 863 */ 864 public void finishLayoutLw(); 865 866 /** Layout state may have changed (so another layout will be performed) */ 867 static final int FINISH_LAYOUT_REDO_LAYOUT = 0x0001; 868 /** Configuration state may have changed */ 869 static final int FINISH_LAYOUT_REDO_CONFIG = 0x0002; 870 /** Wallpaper may need to move */ 871 static final int FINISH_LAYOUT_REDO_WALLPAPER = 0x0004; 872 /** Need to recompute animations */ 873 static final int FINISH_LAYOUT_REDO_ANIM = 0x0008; 874 875 /** 876 * Called following layout of all windows before each window has policy applied. 877 * 878 * @param displayWidth The current full width of the screen. 879 * @param displayHeight The current full height of the screen. 880 */ 881 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight); 882 883 /** 884 * Called following layout of all window to apply policy to each window. 885 * 886 * @param win The window being positioned. 887 * @param attrs The LayoutParams of the window. 888 */ 889 public void applyPostLayoutPolicyLw(WindowState win, 890 WindowManager.LayoutParams attrs); 891 892 /** 893 * Called following layout of all windows and after policy has been applied 894 * to each window. If in this function you do 895 * something that may have modified the animation state of another window, 896 * be sure to return non-zero in order to perform another pass through layout. 897 * 898 * @return Return any bit set of {@link #FINISH_LAYOUT_REDO_LAYOUT}, 899 * {@link #FINISH_LAYOUT_REDO_CONFIG}, {@link #FINISH_LAYOUT_REDO_WALLPAPER}, 900 * or {@link #FINISH_LAYOUT_REDO_ANIM}. 901 */ 902 public int finishPostLayoutPolicyLw(); 903 904 /** 905 * Return true if it is okay to perform animations for an app transition 906 * that is about to occur. You may return false for this if, for example, 907 * the lock screen is currently displayed so the switch should happen 908 * immediately. 909 */ 910 public boolean allowAppAnimationsLw(); 911 912 913 /** 914 * A new window has been focused. 915 */ 916 public int focusChangedLw(WindowState lastFocus, WindowState newFocus); 917 918 /** 919 * Called after the screen turns off. 920 * 921 * @param why {@link #OFF_BECAUSE_OF_USER} or 922 * {@link #OFF_BECAUSE_OF_TIMEOUT}. 923 */ 924 public void screenTurnedOff(int why); 925 926 public interface ScreenOnListener { 927 void onScreenOn(); 928 } 929 930 /** 931 * Called when the power manager would like to turn the screen on. 932 * Must call back on the listener to tell it when the higher-level system 933 * is ready for the screen to go on (i.e. the lock screen is shown). 934 */ 935 public void screenTurningOn(ScreenOnListener screenOnListener); 936 937 /** 938 * Return whether the screen is about to turn on or is currently on. 939 */ 940 public boolean isScreenOnEarly(); 941 942 /** 943 * Return whether the screen is fully turned on. 944 */ 945 public boolean isScreenOnFully(); 946 947 /** 948 * Tell the policy that the lid switch has changed state. 949 * @param whenNanos The time when the change occurred in uptime nanoseconds. 950 * @param lidOpen True if the lid is now open. 951 */ 952 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen); 953 954 /** 955 * Tell the policy if anyone is requesting that keyguard not come on. 956 * 957 * @param enabled Whether keyguard can be on or not. does not actually 958 * turn it on, unless it was previously disabled with this function. 959 * 960 * @see android.app.KeyguardManager.KeyguardLock#disableKeyguard() 961 * @see android.app.KeyguardManager.KeyguardLock#reenableKeyguard() 962 */ 963 @SuppressWarnings("javadoc") 964 public void enableKeyguard(boolean enabled); 965 966 /** 967 * Callback used by {@link WindowManagerPolicy#exitKeyguardSecurely} 968 */ 969 interface OnKeyguardExitResult { 970 void onKeyguardExitResult(boolean success); 971 } 972 973 /** 974 * Tell the policy if anyone is requesting the keyguard to exit securely 975 * (this would be called after the keyguard was disabled) 976 * @param callback Callback to send the result back. 977 * @see android.app.KeyguardManager#exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult) 978 */ 979 @SuppressWarnings("javadoc") 980 void exitKeyguardSecurely(OnKeyguardExitResult callback); 981 982 /** 983 * isKeyguardLocked 984 * 985 * Return whether the keyguard is currently locked. 986 * 987 * @return true if in keyguard is locked. 988 */ 989 public boolean isKeyguardLocked(); 990 991 /** 992 * isKeyguardSecure 993 * 994 * Return whether the keyguard requires a password to unlock. 995 * 996 * @return true if in keyguard is secure. 997 */ 998 public boolean isKeyguardSecure(); 999 1000 /** 1001 * inKeyguardRestrictedKeyInputMode 1002 * 1003 * if keyguard screen is showing or in restricted key input mode (i.e. in 1004 * keyguard password emergency screen). When in such mode, certain keys, 1005 * such as the Home key and the right soft keys, don't work. 1006 * 1007 * @return true if in keyguard restricted input mode. 1008 */ 1009 public boolean inKeyguardRestrictedKeyInputMode(); 1010 1011 /** 1012 * Ask the policy to dismiss the keyguard, if it is currently shown. 1013 */ 1014 public void dismissKeyguardLw(); 1015 1016 /** 1017 * Given an orientation constant, returns the appropriate surface rotation, 1018 * taking into account sensors, docking mode, rotation lock, and other factors. 1019 * 1020 * @param orientation An orientation constant, such as 1021 * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. 1022 * @param lastRotation The most recently used rotation. 1023 * @return The surface rotation to use. 1024 */ 1025 public int rotationForOrientationLw(int orientation, int lastRotation); 1026 1027 /** 1028 * Given an orientation constant and a rotation, returns true if the rotation 1029 * has compatible metrics to the requested orientation. For example, if 1030 * the application requested landscape and got seascape, then the rotation 1031 * has compatible metrics; if the application requested portrait and got landscape, 1032 * then the rotation has incompatible metrics; if the application did not specify 1033 * a preference, then anything goes. 1034 * 1035 * @param orientation An orientation constant, such as 1036 * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. 1037 * @param rotation The rotation to check. 1038 * @return True if the rotation is compatible with the requested orientation. 1039 */ 1040 public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation); 1041 1042 /** 1043 * Called by the window manager when the rotation changes. 1044 * 1045 * @param rotation The new rotation. 1046 */ 1047 public void setRotationLw(int rotation); 1048 1049 /** 1050 * Called when the system is mostly done booting to set whether 1051 * the system should go into safe mode. 1052 */ 1053 public void setSafeMode(boolean safeMode); 1054 1055 /** 1056 * Called when the system is mostly done booting. 1057 */ 1058 public void systemReady(); 1059 1060 /** 1061 * Called when the system is done booting to the point where the 1062 * user can start interacting with it. 1063 */ 1064 public void systemBooted(); 1065 1066 /** 1067 * Show boot time message to the user. 1068 */ 1069 public void showBootMessage(final CharSequence msg, final boolean always); 1070 1071 /** 1072 * Hide the UI for showing boot messages, never to be displayed again. 1073 */ 1074 public void hideBootMessages(); 1075 1076 /** 1077 * Called when userActivity is signalled in the power manager. 1078 * This is safe to call from any thread, with any window manager locks held or not. 1079 */ 1080 public void userActivity(); 1081 1082 /** 1083 * Called when we have finished booting and can now display the home 1084 * screen to the user. This will happen after systemReady(), and at 1085 * this point the display is active. 1086 */ 1087 public void enableScreenAfterBoot(); 1088 1089 public void setCurrentOrientationLw(int newOrientation); 1090 1091 /** 1092 * Call from application to perform haptic feedback on its window. 1093 */ 1094 public boolean performHapticFeedbackLw(WindowState win, int effectId, boolean always); 1095 1096 /** 1097 * Called when we have started keeping the screen on because a window 1098 * requesting this has become visible. 1099 */ 1100 public void keepScreenOnStartedLw(); 1101 1102 /** 1103 * Called when we have stopped keeping the screen on because the last window 1104 * requesting this is no longer visible. 1105 */ 1106 public void keepScreenOnStoppedLw(); 1107 1108 /** 1109 * Gets the current user rotation mode. 1110 * 1111 * @return The rotation mode. 1112 * 1113 * @see WindowManagerPolicy#USER_ROTATION_LOCKED 1114 * @see WindowManagerPolicy#USER_ROTATION_FREE 1115 */ 1116 public int getUserRotationMode(); 1117 1118 /** 1119 * Inform the policy that the user has chosen a preferred orientation ("rotation lock"). 1120 * 1121 * @param mode One of {@link WindowManagerPolicy#USER_ROTATION_LOCKED} or 1122 * {@link WindowManagerPolicy#USER_ROTATION_FREE}. 1123 * @param rotation One of {@link Surface#ROTATION_0}, {@link Surface#ROTATION_90}, 1124 * {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}. 1125 */ 1126 public void setUserRotationMode(int mode, int rotation); 1127 1128 /** 1129 * Called when a new system UI visibility is being reported, allowing 1130 * the policy to adjust what is actually reported. 1131 * @param visibility The raw visiblity reported by the status bar. 1132 * @return The new desired visibility. 1133 */ 1134 public int adjustSystemUiVisibilityLw(int visibility); 1135 1136 /** 1137 * Specifies whether there is an on-screen navigation bar separate from the status bar. 1138 */ 1139 public boolean hasNavigationBar(); 1140 1141 /** 1142 * Lock the device now. 1143 */ 1144 public void lockNow(Bundle options); 1145 1146 /** 1147 * Set the last used input method window state. This state is used to make IME transition 1148 * smooth. 1149 * @hide 1150 */ 1151 public void setLastInputMethodWindowLw(WindowState ime, WindowState target); 1152 1153 /** 1154 * Called when the current user changes. Guaranteed to be called before the broadcast 1155 * of the new user id is made to all listeners. 1156 * 1157 * @param newUserId The id of the incoming user. 1158 */ 1159 public void setCurrentUserLw(int newUserId); 1160 1161 /** 1162 * Print the WindowManagerPolicy's state into the given stream. 1163 * 1164 * @param prefix Text to print at the front of each line. 1165 * @param writer The PrintWriter to which you should dump your state. This will be 1166 * closed for you after you return. 1167 * @param args additional arguments to the dump request. 1168 */ 1169 public void dump(String prefix, PrintWriter writer, String[] args); 1170 1171 /** 1172 * Returns whether a given window type can be magnified. 1173 * 1174 * @param windowType The window type. 1175 * @return True if the window can be magnified. 1176 */ 1177 public boolean canMagnifyWindow(int windowType); 1178 1179 /** 1180 * Returns whether a given window type is considered a top level one. 1181 * A top level window does not have a container, i.e. attached window, 1182 * or if it has a container it is laid out as a top-level window, not 1183 * as a child of its container. 1184 * 1185 * @param windowType The window type. 1186 * @return True if the window is a top level one. 1187 */ 1188 public boolean isTopLevelWindow(int windowType); 1189 1190 /** 1191 * Sets the current touch exploration state. 1192 * 1193 * @param enabled Whether touch exploration is enabled. 1194 */ 1195 public void setTouchExplorationEnabled(boolean enabled); 1196 } 1197