1 /* 2 * Copyright (C) 2017 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 com.android.server.policy; 18 19 import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; 20 import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW; 21 import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; 22 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL; 23 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG; 24 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; 25 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; 26 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; 27 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; 28 import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; 29 import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS; 30 import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY; 31 import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; 32 import static android.view.WindowManager.LayoutParams.TYPE_DRAG; 33 import static android.view.WindowManager.LayoutParams.TYPE_DREAM; 34 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER; 35 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; 36 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG; 37 import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; 38 import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY; 39 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; 40 import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; 41 import static android.view.WindowManager.LayoutParams.TYPE_PHONE; 42 import static android.view.WindowManager.LayoutParams.TYPE_POINTER; 43 import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; 44 import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; 45 import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; 46 import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG; 47 import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; 48 import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR; 49 import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY; 50 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; 51 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL; 52 import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL; 53 import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; 54 import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG; 55 import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; 56 import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; 57 import static android.view.WindowManager.LayoutParams.TYPE_TOAST; 58 import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; 59 import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING; 60 import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; 61 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 62 import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType; 63 64 import static java.lang.annotation.RetentionPolicy.SOURCE; 65 66 import android.Manifest; 67 import android.annotation.IntDef; 68 import android.annotation.Nullable; 69 import android.app.ActivityManager; 70 import android.content.Context; 71 import android.content.pm.ActivityInfo; 72 import android.content.res.CompatibilityInfo; 73 import android.content.res.Configuration; 74 import android.graphics.Point; 75 import android.graphics.Rect; 76 import android.os.Bundle; 77 import android.os.IBinder; 78 import android.os.Looper; 79 import android.os.RemoteException; 80 import android.util.Slog; 81 import android.util.proto.ProtoOutputStream; 82 import android.view.Display; 83 import android.view.DisplayCutout; 84 import android.view.IApplicationToken; 85 import android.view.IWindowManager; 86 import android.view.InputEventReceiver; 87 import android.view.KeyEvent; 88 import android.view.Surface; 89 import android.view.WindowManager; 90 import android.view.WindowManagerGlobal; 91 import android.view.WindowManagerPolicyConstants; 92 import android.view.animation.Animation; 93 94 import com.android.internal.policy.IKeyguardDismissCallback; 95 import com.android.internal.policy.IShortcutService; 96 import com.android.server.wm.DisplayFrames; 97 import com.android.server.wm.utils.WmDisplayCutout; 98 99 import java.io.PrintWriter; 100 import java.lang.annotation.Retention; 101 import java.lang.annotation.RetentionPolicy; 102 103 /** 104 * This interface supplies all UI-specific behavior of the window manager. An 105 * instance of it is created by the window manager when it starts up, and allows 106 * customization of window layering, special window types, key dispatching, and 107 * layout. 108 * 109 * <p>Because this provides deep interaction with the system window manager, 110 * specific methods on this interface can be called from a variety of contexts 111 * with various restrictions on what they can do. These are encoded through 112 * a suffixes at the end of a method encoding the thread the method is called 113 * from and any locks that are held when it is being called; if no suffix 114 * is attached to a method, then it is not called with any locks and may be 115 * called from the main window manager thread or another thread calling into 116 * the window manager. 117 * 118 * <p>The current suffixes are: 119 * 120 * <dl> 121 * <dt> Ti <dd> Called from the input thread. This is the thread that 122 * collects pending input events and dispatches them to the appropriate window. 123 * It may block waiting for events to be processed, so that the input stream is 124 * properly serialized. 125 * <dt> Tq <dd> Called from the low-level input queue thread. This is the 126 * thread that reads events out of the raw input devices and places them 127 * into the global input queue that is read by the <var>Ti</var> thread. 128 * This thread should not block for a long period of time on anything but the 129 * key driver. 130 * <dt> Lw <dd> Called with the main window manager lock held. Because the 131 * window manager is a very low-level system service, there are few other 132 * system services you can call with this lock held. It is explicitly okay to 133 * make calls into the package manager and power manager; it is explicitly not 134 * okay to make calls into the activity manager or most other services. Note that 135 * {@link android.content.Context#checkPermission(String, int, int)} and 136 * variations require calling into the activity manager. 137 * <dt> Li <dd> Called with the input thread lock held. This lock can be 138 * acquired by the window manager while it holds the window lock, so this is 139 * even more restrictive than <var>Lw</var>. 140 * </dl> 141 */ 142 public interface WindowManagerPolicy extends WindowManagerPolicyConstants { 143 @Retention(SOURCE) 144 @IntDef({NAV_BAR_LEFT, NAV_BAR_RIGHT, NAV_BAR_BOTTOM}) 145 @interface NavigationBarPosition {} 146 147 /** 148 * Pass this event to the user / app. To be returned from 149 * {@link #interceptKeyBeforeQueueing}. 150 */ 151 int ACTION_PASS_TO_USER = 0x00000001; 152 /** Layout state may have changed (so another layout will be performed) */ 153 int FINISH_LAYOUT_REDO_LAYOUT = 0x0001; 154 /** Configuration state may have changed */ 155 int FINISH_LAYOUT_REDO_CONFIG = 0x0002; 156 /** Wallpaper may need to move */ 157 int FINISH_LAYOUT_REDO_WALLPAPER = 0x0004; 158 /** Need to recompute animations */ 159 int FINISH_LAYOUT_REDO_ANIM = 0x0008; 160 161 /** 162 * Register shortcuts for window manager to dispatch. 163 * Shortcut code is packed as (metaState << Integer.SIZE) | keyCode 164 * @hide 165 */ registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver)166 void registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver) 167 throws RemoteException; 168 169 /** 170 * Called when the Keyguard occluded state changed. 171 * @param occluded Whether Keyguard is currently occluded or not. 172 */ onKeyguardOccludedChangedLw(boolean occluded)173 void onKeyguardOccludedChangedLw(boolean occluded); 174 175 /** 176 * Called when the resource overlays change. 177 */ onOverlayChangedLw()178 default void onOverlayChangedLw() {} 179 180 /** 181 * Interface to the Window Manager state associated with a particular 182 * window. You can hold on to an instance of this interface from the call 183 * to prepareAddWindow() until removeWindow(). 184 */ 185 public interface WindowState { 186 /** 187 * Return the uid of the app that owns this window. 188 */ getOwningUid()189 int getOwningUid(); 190 191 /** 192 * Return the package name of the app that owns this window. 193 */ getOwningPackage()194 String getOwningPackage(); 195 196 /** 197 * Perform standard frame computation. The result can be obtained with 198 * getFrame() if so desired. Must be called with the window manager 199 * lock held. 200 * 201 * @param parentFrame The frame of the parent container this window 202 * is in, used for computing its basic position. 203 * @param displayFrame The frame of the overall display in which this 204 * window can appear, used for constraining the overall dimensions 205 * of the window. 206 * @param overlayFrame The frame within the display that is inside 207 * of the overlay region. 208 * @param contentFrame The frame within the display in which we would 209 * like active content to appear. This will cause windows behind to 210 * be resized to match the given content frame. 211 * @param visibleFrame The frame within the display that the window 212 * is actually visible, used for computing its visible insets to be 213 * given to windows behind. 214 * This can be used as a hint for scrolling (avoiding resizing) 215 * the window to make certain that parts of its content 216 * are visible. 217 * @param decorFrame The decor frame specified by policy specific to this window, 218 * to use for proper cropping during animation. 219 * @param stableFrame The frame around which stable system decoration is positioned. 220 * @param outsetFrame The frame that includes areas that aren't part of the surface but we 221 * want to treat them as such. 222 * @param displayCutout the display cutout 223 * @param parentFrameWasClippedByDisplayCutout true if the parent frame would have been 224 * different if there was no display cutout. 225 */ computeFrameLw(Rect parentFrame, Rect displayFrame, Rect overlayFrame, Rect contentFrame, Rect visibleFrame, Rect decorFrame, Rect stableFrame, @Nullable Rect outsetFrame, WmDisplayCutout displayCutout, boolean parentFrameWasClippedByDisplayCutout)226 public void computeFrameLw(Rect parentFrame, Rect displayFrame, 227 Rect overlayFrame, Rect contentFrame, Rect visibleFrame, Rect decorFrame, 228 Rect stableFrame, @Nullable Rect outsetFrame, WmDisplayCutout displayCutout, 229 boolean parentFrameWasClippedByDisplayCutout); 230 231 /** 232 * Retrieve the current frame of the window that has been assigned by 233 * the window manager. Must be called with the window manager lock held. 234 * 235 * @return Rect The rectangle holding the window frame. 236 */ getFrameLw()237 public Rect getFrameLw(); 238 239 /** 240 * Retrieve the frame of the display that this window was last 241 * laid out in. Must be called with the 242 * window manager lock held. 243 * 244 * @return Rect The rectangle holding the display frame. 245 */ getDisplayFrameLw()246 public Rect getDisplayFrameLw(); 247 248 /** 249 * Retrieve the frame of the area inside the overscan region of the 250 * display that this window was last laid out in. Must be called with the 251 * window manager lock held. 252 * 253 * @return Rect The rectangle holding the display overscan frame. 254 */ getOverscanFrameLw()255 public Rect getOverscanFrameLw(); 256 257 /** 258 * Retrieve the frame of the content area that this window was last 259 * laid out in. This is the area in which the content of the window 260 * should be placed. It will be smaller than the display frame to 261 * account for screen decorations such as a status bar or soft 262 * keyboard. Must be called with the 263 * window manager lock held. 264 * 265 * @return Rect The rectangle holding the content frame. 266 */ getContentFrameLw()267 public Rect getContentFrameLw(); 268 269 /** 270 * Retrieve the frame of the visible area that this window was last 271 * laid out in. This is the area of the screen in which the window 272 * will actually be fully visible. It will be smaller than the 273 * content frame to account for transient UI elements blocking it 274 * such as an input method's candidates UI. Must be called with the 275 * window manager lock held. 276 * 277 * @return Rect The rectangle holding the visible frame. 278 */ getVisibleFrameLw()279 public Rect getVisibleFrameLw(); 280 281 /** 282 * Returns true if this window is waiting to receive its given 283 * internal insets from the client app, and so should not impact the 284 * layout of other windows. 285 */ getGivenInsetsPendingLw()286 public boolean getGivenInsetsPendingLw(); 287 288 /** 289 * Retrieve the insets given by this window's client for the content 290 * area of windows behind it. Must be called with the 291 * window manager lock held. 292 * 293 * @return Rect The left, top, right, and bottom insets, relative 294 * to the window's frame, of the actual contents. 295 */ getGivenContentInsetsLw()296 public Rect getGivenContentInsetsLw(); 297 298 /** 299 * Retrieve the insets given by this window's client for the visible 300 * area of windows behind it. Must be called with the 301 * window manager lock held. 302 * 303 * @return Rect The left, top, right, and bottom insets, relative 304 * to the window's frame, of the actual visible area. 305 */ getGivenVisibleInsetsLw()306 public Rect getGivenVisibleInsetsLw(); 307 308 /** 309 * Retrieve the current LayoutParams of the window. 310 * 311 * @return WindowManager.LayoutParams The window's internal LayoutParams 312 * instance. 313 */ getAttrs()314 public WindowManager.LayoutParams getAttrs(); 315 316 /** 317 * Return whether this window needs the menu key shown. Must be called 318 * with window lock held, because it may need to traverse down through 319 * window list to determine the result. 320 * @param bottom The bottom-most window to consider when determining this. 321 */ getNeedsMenuLw(WindowState bottom)322 public boolean getNeedsMenuLw(WindowState bottom); 323 324 /** 325 * Retrieve the current system UI visibility flags associated with 326 * this window. 327 */ getSystemUiVisibility()328 public int getSystemUiVisibility(); 329 330 /** 331 * Get the layer at which this window's surface will be Z-ordered. 332 */ getSurfaceLayer()333 public int getSurfaceLayer(); 334 335 /** 336 * Retrieve the type of the top-level window. 337 * 338 * @return the base type of the parent window if attached or its own type otherwise 339 */ getBaseType()340 public int getBaseType(); 341 342 /** 343 * Return the token for the application (actually activity) that owns 344 * this window. May return null for system windows. 345 * 346 * @return An IApplicationToken identifying the owning activity. 347 */ getAppToken()348 public IApplicationToken getAppToken(); 349 350 /** 351 * Return true if this window is participating in voice interaction. 352 */ isVoiceInteraction()353 public boolean isVoiceInteraction(); 354 355 /** 356 * Return true if, at any point, the application token associated with 357 * this window has actually displayed any windows. This is most useful 358 * with the "starting up" window to determine if any windows were 359 * displayed when it is closed. 360 * 361 * @return Returns true if one or more windows have been displayed, 362 * else false. 363 */ hasAppShownWindows()364 public boolean hasAppShownWindows(); 365 366 /** 367 * Is this window visible? It is not visible if there is no 368 * surface, or we are in the process of running an exit animation 369 * that will remove the surface. 370 */ isVisibleLw()371 boolean isVisibleLw(); 372 373 /** 374 * Is this window currently visible to the user on-screen? It is 375 * displayed either if it is visible or it is currently running an 376 * animation before no longer being visible. Must be called with the 377 * window manager lock held. 378 */ isDisplayedLw()379 boolean isDisplayedLw(); 380 381 /** 382 * Return true if this window (or a window it is attached to, but not 383 * considering its app token) is currently animating. 384 */ isAnimatingLw()385 boolean isAnimatingLw(); 386 387 /** 388 * @return Whether the window can affect SystemUI flags, meaning that SystemUI (system bars, 389 * for example) will be affected by the flags specified in this window. This is the 390 * case when the surface is on screen but not exiting. 391 */ canAffectSystemUiFlags()392 boolean canAffectSystemUiFlags(); 393 394 /** 395 * Is this window considered to be gone for purposes of layout? 396 */ isGoneForLayoutLw()397 boolean isGoneForLayoutLw(); 398 399 /** 400 * Returns true if the window has a surface that it has drawn a 401 * complete UI in to. Note that this is different from {@link #hasDrawnLw()} 402 * in that it also returns true if the window is READY_TO_SHOW, but was not yet 403 * promoted to HAS_DRAWN. 404 */ isDrawnLw()405 boolean isDrawnLw(); 406 407 /** 408 * Returns true if this window has been shown on screen at some time in 409 * the past. Must be called with the window manager lock held. 410 * 411 * @deprecated Use {@link #isDrawnLw} or any of the other drawn/visibility methods. 412 */ 413 @Deprecated hasDrawnLw()414 public boolean hasDrawnLw(); 415 416 /** 417 * Can be called by the policy to force a window to be hidden, 418 * regardless of whether the client or window manager would like 419 * it shown. Must be called with the window manager lock held. 420 * Returns true if {@link #showLw} was last called for the window. 421 */ hideLw(boolean doAnimation)422 public boolean hideLw(boolean doAnimation); 423 424 /** 425 * Can be called to undo the effect of {@link #hideLw}, allowing a 426 * window to be shown as long as the window manager and client would 427 * also like it to be shown. Must be called with the window manager 428 * lock held. 429 * Returns true if {@link #hideLw} was last called for the window. 430 */ showLw(boolean doAnimation)431 public boolean showLw(boolean doAnimation); 432 433 /** 434 * Check whether the process hosting this window is currently alive. 435 */ isAlive()436 public boolean isAlive(); 437 438 /** 439 * Check if window is on {@link Display#DEFAULT_DISPLAY}. 440 * @return true if window is on default display. 441 */ isDefaultDisplay()442 public boolean isDefaultDisplay(); 443 444 /** 445 * Check whether the window is currently dimming. 446 */ isDimming()447 public boolean isDimming(); 448 449 /** 450 * Returns true if the window is letterboxed for the display cutout. 451 */ isLetterboxedForDisplayCutoutLw()452 default boolean isLetterboxedForDisplayCutoutLw() { 453 return false; 454 } 455 456 /** 457 * Returns true if the window has a letterbox and any part of that letterbox overlaps with 458 * the given {@code rect}. 459 */ isLetterboxedOverlappingWith(Rect rect)460 default boolean isLetterboxedOverlappingWith(Rect rect) { 461 return false; 462 } 463 464 /** @return the current windowing mode of this window. */ getWindowingMode()465 int getWindowingMode(); 466 467 /** 468 * Returns true if the window is current in multi-windowing mode. i.e. it shares the 469 * screen with other application windows. 470 */ isInMultiWindowMode()471 public boolean isInMultiWindowMode(); 472 getRotationAnimationHint()473 public int getRotationAnimationHint(); 474 isInputMethodWindow()475 public boolean isInputMethodWindow(); 476 isInputMethodTarget()477 public boolean isInputMethodTarget(); 478 getDisplayId()479 public int getDisplayId(); 480 481 /** 482 * Returns true if the window owner can add internal system windows. 483 * That is, they have {@link Manifest.permission#INTERNAL_SYSTEM_WINDOW}. 484 */ canAddInternalSystemWindow()485 default boolean canAddInternalSystemWindow() { 486 return false; 487 } 488 489 /** 490 * Returns true if the window owner has the permission to acquire a sleep token when it's 491 * visible. That is, they have the permission {@link Manifest.permission#DEVICE_POWER}. 492 */ canAcquireSleepToken()493 boolean canAcquireSleepToken(); 494 495 /** 496 * Writes {@link com.android.server.wm.IdentifierProto} to stream. 497 */ writeIdentifierToProto(ProtoOutputStream proto, long fieldId)498 void writeIdentifierToProto(ProtoOutputStream proto, long fieldId); 499 } 500 501 /** 502 * Representation of a input consumer that the policy has added to the 503 * window manager to consume input events going to windows below it. 504 */ 505 public interface InputConsumer { 506 /** 507 * Remove the input consumer from the window manager. 508 */ dismiss()509 void dismiss(); 510 } 511 512 /** 513 * Holds the contents of a starting window. {@link #addSplashScreen} needs to wrap the 514 * contents of the starting window into an class implementing this interface, which then will be 515 * held by WM and released with {@link #remove} when no longer needed. 516 */ 517 interface StartingSurface { 518 519 /** 520 * Removes the starting window surface. Do not hold the window manager lock when calling 521 * this method! 522 */ remove()523 void remove(); 524 } 525 526 /** 527 * Interface for calling back in to the window manager that is private 528 * between it and the policy. 529 */ 530 public interface WindowManagerFuncs { 531 public static final int LID_ABSENT = -1; 532 public static final int LID_CLOSED = 0; 533 public static final int LID_OPEN = 1; 534 535 public static final int CAMERA_LENS_COVER_ABSENT = -1; 536 public static final int CAMERA_LENS_UNCOVERED = 0; 537 public static final int CAMERA_LENS_COVERED = 1; 538 539 /** 540 * Ask the window manager to re-evaluate the system UI flags. 541 */ reevaluateStatusBarVisibility()542 public void reevaluateStatusBarVisibility(); 543 544 /** 545 * Add a input consumer which will consume all input events going to any window below it. 546 */ createInputConsumer(Looper looper, String name, InputEventReceiver.Factory inputEventReceiverFactory)547 public InputConsumer createInputConsumer(Looper looper, String name, 548 InputEventReceiver.Factory inputEventReceiverFactory); 549 550 /** 551 * Returns a code that describes the current state of the lid switch. 552 */ getLidState()553 public int getLidState(); 554 555 /** 556 * Lock the device now. 557 */ lockDeviceNow()558 public void lockDeviceNow(); 559 560 /** 561 * Returns a code that descripbes whether the camera lens is covered or not. 562 */ getCameraLensCoverState()563 public int getCameraLensCoverState(); 564 565 /** 566 * Switch the keyboard layout for the given device. 567 * Direction should be +1 or -1 to go to the next or previous keyboard layout. 568 */ switchKeyboardLayout(int deviceId, int direction)569 public void switchKeyboardLayout(int deviceId, int direction); 570 571 /** 572 * Switch the input method, to be precise, input method subtype. 573 * 574 * @param forwardDirection {@code true} to rotate in a forward direction. 575 */ switchInputMethod(boolean forwardDirection)576 public void switchInputMethod(boolean forwardDirection); 577 shutdown(boolean confirm)578 public void shutdown(boolean confirm); reboot(boolean confirm)579 public void reboot(boolean confirm); rebootSafeMode(boolean confirm)580 public void rebootSafeMode(boolean confirm); 581 582 /** 583 * Return the window manager lock needed to correctly call "Lw" methods. 584 */ getWindowManagerLock()585 public Object getWindowManagerLock(); 586 587 /** Register a system listener for touch events */ registerPointerEventListener(PointerEventListener listener)588 void registerPointerEventListener(PointerEventListener listener); 589 590 /** Unregister a system listener for touch events */ unregisterPointerEventListener(PointerEventListener listener)591 void unregisterPointerEventListener(PointerEventListener listener); 592 593 /** 594 * @return The content insets of the docked divider window. 595 */ getDockedDividerInsetsLw()596 int getDockedDividerInsetsLw(); 597 598 /** 599 * Retrieves the {@param outBounds} from the stack matching the {@param windowingMode} and 600 * {@param activityType}. 601 */ getStackBounds(int windowingMode, int activityType, Rect outBounds)602 void getStackBounds(int windowingMode, int activityType, Rect outBounds); 603 604 /** 605 * Notifies window manager that {@link #isShowingDreamLw} has changed. 606 */ notifyShowingDreamChanged()607 void notifyShowingDreamChanged(); 608 609 /** 610 * @return The currently active input method window. 611 */ getInputMethodWindowLw()612 WindowState getInputMethodWindowLw(); 613 614 /** 615 * Notifies window manager that {@link #isKeyguardTrustedLw} has changed. 616 */ notifyKeyguardTrustedChanged()617 void notifyKeyguardTrustedChanged(); 618 619 /** 620 * Notifies the window manager that screen is being turned off. 621 * 622 * @param listener callback to call when display can be turned off 623 */ screenTurningOff(ScreenOffListener listener)624 void screenTurningOff(ScreenOffListener listener); 625 626 /** 627 * Convert the lid state to a human readable format. 628 */ lidStateToString(int lid)629 static String lidStateToString(int lid) { 630 switch (lid) { 631 case LID_ABSENT: 632 return "LID_ABSENT"; 633 case LID_CLOSED: 634 return "LID_CLOSED"; 635 case LID_OPEN: 636 return "LID_OPEN"; 637 default: 638 return Integer.toString(lid); 639 } 640 } 641 642 /** 643 * Convert the camera lens state to a human readable format. 644 */ cameraLensStateToString(int lens)645 static String cameraLensStateToString(int lens) { 646 switch (lens) { 647 case CAMERA_LENS_COVER_ABSENT: 648 return "CAMERA_LENS_COVER_ABSENT"; 649 case CAMERA_LENS_UNCOVERED: 650 return "CAMERA_LENS_UNCOVERED"; 651 case CAMERA_LENS_COVERED: 652 return "CAMERA_LENS_COVERED"; 653 default: 654 return Integer.toString(lens); 655 } 656 } 657 658 /** 659 * Hint to window manager that the user has started a navigation action that should 660 * abort animations that have no timeout, in case they got stuck. 661 */ triggerAnimationFailsafe()662 void triggerAnimationFailsafe(); 663 664 /** 665 * The keyguard showing state has changed 666 */ onKeyguardShowingAndNotOccludedChanged()667 void onKeyguardShowingAndNotOccludedChanged(); 668 } 669 670 /** Window has been added to the screen. */ 671 public static final int TRANSIT_ENTER = 1; 672 /** Window has been removed from the screen. */ 673 public static final int TRANSIT_EXIT = 2; 674 /** Window has been made visible. */ 675 public static final int TRANSIT_SHOW = 3; 676 /** Window has been made invisible. 677 * TODO: Consider removal as this is unused. */ 678 public static final int TRANSIT_HIDE = 4; 679 /** The "application starting" preview window is no longer needed, and will 680 * animate away to show the real window. */ 681 public static final int TRANSIT_PREVIEW_DONE = 5; 682 683 // NOTE: screen off reasons are in order of significance, with more 684 // important ones lower than less important ones. 685 686 /** @hide */ 687 @IntDef({USER_ROTATION_FREE, USER_ROTATION_LOCKED}) 688 @Retention(RetentionPolicy.SOURCE) 689 public @interface UserRotationMode {} 690 691 /** When not otherwise specified by the activity's screenOrientation, rotation should be 692 * determined by the system (that is, using sensors). */ 693 public final int USER_ROTATION_FREE = 0; 694 /** When not otherwise specified by the activity's screenOrientation, rotation is set by 695 * the user. */ 696 public final int USER_ROTATION_LOCKED = 1; 697 698 /** 699 * Perform initialization of the policy. 700 * 701 * @param context The system context we are running in. 702 */ init(Context context, IWindowManager windowManager, WindowManagerFuncs windowManagerFuncs)703 public void init(Context context, IWindowManager windowManager, 704 WindowManagerFuncs windowManagerFuncs); 705 706 /** 707 * @return true if com.android.internal.R.bool#config_forceDefaultOrientation is true. 708 */ isDefaultOrientationForced()709 public boolean isDefaultOrientationForced(); 710 711 /** 712 * Called by window manager once it has the initial, default native 713 * display dimensions. 714 */ setInitialDisplaySize(Display display, int width, int height, int density)715 public void setInitialDisplaySize(Display display, int width, int height, int density); 716 717 /** 718 * Check permissions when adding a window. 719 * 720 * @param attrs The window's LayoutParams. 721 * @param outAppOp First element will be filled with the app op corresponding to 722 * this window, or OP_NONE. 723 * 724 * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed; 725 * else an error code, usually 726 * {@link WindowManagerGlobal#ADD_PERMISSION_DENIED}, to abort the add. 727 */ checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp)728 public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp); 729 730 /** 731 * Check permissions when adding a window. 732 * 733 * @param attrs The window's LayoutParams. 734 * 735 * @return True if the window may only be shown to the current user, false if the window can 736 * be shown on all users' windows. 737 */ checkShowToOwnerOnly(WindowManager.LayoutParams attrs)738 public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs); 739 740 /** 741 * Sanitize the layout parameters coming from a client. Allows the policy 742 * to do things like ensure that windows of a specific type can't take 743 * input focus. 744 * 745 * @param attrs The window layout parameters to be modified. These values 746 * are modified in-place. 747 */ adjustWindowParamsLw(WindowState win, WindowManager.LayoutParams attrs, boolean hasStatusBarServicePermission)748 public void adjustWindowParamsLw(WindowState win, WindowManager.LayoutParams attrs, 749 boolean hasStatusBarServicePermission); 750 751 /** 752 * After the window manager has computed the current configuration based 753 * on its knowledge of the display and input devices, it gives the policy 754 * a chance to adjust the information contained in it. If you want to 755 * leave it as-is, simply do nothing. 756 * 757 * <p>This method may be called by any thread in the window manager, but 758 * no internal locks in the window manager will be held. 759 * 760 * @param config The Configuration being computed, for you to change as 761 * desired. 762 * @param keyboardPresence Flags that indicate whether internal or external 763 * keyboards are present. 764 * @param navigationPresence Flags that indicate whether internal or external 765 * navigation devices are present. 766 */ adjustConfigurationLw(Configuration config, int keyboardPresence, int navigationPresence)767 public void adjustConfigurationLw(Configuration config, int keyboardPresence, 768 int navigationPresence); 769 770 /** 771 * Returns the layer assignment for the window state. Allows you to control how different 772 * kinds of windows are ordered on-screen. 773 * 774 * @param win The window state 775 * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. 776 */ getWindowLayerLw(WindowState win)777 default int getWindowLayerLw(WindowState win) { 778 return getWindowLayerFromTypeLw(win.getBaseType(), win.canAddInternalSystemWindow()); 779 } 780 781 /** 782 * Returns the layer assignment for the window type. Allows you to control how different 783 * kinds of windows are ordered on-screen. 784 * 785 * @param type The type of window being assigned. 786 * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. 787 */ getWindowLayerFromTypeLw(int type)788 default int getWindowLayerFromTypeLw(int type) { 789 if (isSystemAlertWindowType(type)) { 790 throw new IllegalArgumentException("Use getWindowLayerFromTypeLw() or" 791 + " getWindowLayerLw() for alert window types"); 792 } 793 return getWindowLayerFromTypeLw(type, false /* canAddInternalSystemWindow */); 794 } 795 796 /** 797 * Returns the layer assignment for the window type. Allows you to control how different 798 * kinds of windows are ordered on-screen. 799 * 800 * @param type The type of window being assigned. 801 * @param canAddInternalSystemWindow If the owner window associated with the type we are 802 * evaluating can add internal system windows. I.e they have 803 * {@link Manifest.permission#INTERNAL_SYSTEM_WINDOW}. If true, alert window 804 * types {@link android.view.WindowManager.LayoutParams#isSystemAlertWindowType(int)} 805 * can be assigned layers greater than the layer for 806 * {@link android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY} Else, their 807 * layers would be lesser. 808 * @return int An arbitrary integer used to order windows, with lower numbers below higher ones. 809 */ getWindowLayerFromTypeLw(int type, boolean canAddInternalSystemWindow)810 default int getWindowLayerFromTypeLw(int type, boolean canAddInternalSystemWindow) { 811 if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) { 812 return APPLICATION_LAYER; 813 } 814 815 switch (type) { 816 case TYPE_WALLPAPER: 817 // wallpaper is at the bottom, though the window manager may move it. 818 return 1; 819 case TYPE_PRESENTATION: 820 case TYPE_PRIVATE_PRESENTATION: 821 return APPLICATION_LAYER; 822 case TYPE_DOCK_DIVIDER: 823 return APPLICATION_LAYER; 824 case TYPE_QS_DIALOG: 825 return APPLICATION_LAYER; 826 case TYPE_PHONE: 827 return 3; 828 case TYPE_SEARCH_BAR: 829 case TYPE_VOICE_INTERACTION_STARTING: 830 return 4; 831 case TYPE_VOICE_INTERACTION: 832 // voice interaction layer is almost immediately above apps. 833 return 5; 834 case TYPE_INPUT_CONSUMER: 835 return 6; 836 case TYPE_SYSTEM_DIALOG: 837 return 7; 838 case TYPE_TOAST: 839 // toasts and the plugged-in battery thing 840 return 8; 841 case TYPE_PRIORITY_PHONE: 842 // SIM errors and unlock. Not sure if this really should be in a high layer. 843 return 9; 844 case TYPE_SYSTEM_ALERT: 845 // like the ANR / app crashed dialogs 846 return canAddInternalSystemWindow ? 11 : 10; 847 case TYPE_APPLICATION_OVERLAY: 848 return 12; 849 case TYPE_DREAM: 850 // used for Dreams (screensavers with TYPE_DREAM windows) 851 return 13; 852 case TYPE_INPUT_METHOD: 853 // on-screen keyboards and other such input method user interfaces go here. 854 return 14; 855 case TYPE_INPUT_METHOD_DIALOG: 856 // on-screen keyboards and other such input method user interfaces go here. 857 return 15; 858 case TYPE_STATUS_BAR: 859 return 17; 860 case TYPE_STATUS_BAR_PANEL: 861 return 18; 862 case TYPE_STATUS_BAR_SUB_PANEL: 863 return 19; 864 case TYPE_KEYGUARD_DIALOG: 865 return 20; 866 case TYPE_VOLUME_OVERLAY: 867 // the on-screen volume indicator and controller shown when the user 868 // changes the device volume 869 return 21; 870 case TYPE_SYSTEM_OVERLAY: 871 // the on-screen volume indicator and controller shown when the user 872 // changes the device volume 873 return canAddInternalSystemWindow ? 22 : 11; 874 case TYPE_NAVIGATION_BAR: 875 // the navigation bar, if available, shows atop most things 876 return 23; 877 case TYPE_NAVIGATION_BAR_PANEL: 878 // some panels (e.g. search) need to show on top of the navigation bar 879 return 24; 880 case TYPE_SCREENSHOT: 881 // screenshot selection layer shouldn't go above system error, but it should cover 882 // navigation bars at the very least. 883 return 25; 884 case TYPE_SYSTEM_ERROR: 885 // system-level error dialogs 886 return canAddInternalSystemWindow ? 26 : 10; 887 case TYPE_MAGNIFICATION_OVERLAY: 888 // used to highlight the magnified portion of a display 889 return 27; 890 case TYPE_DISPLAY_OVERLAY: 891 // used to simulate secondary display devices 892 return 28; 893 case TYPE_DRAG: 894 // the drag layer: input for drag-and-drop is associated with this window, 895 // which sits above all other focusable windows 896 return 29; 897 case TYPE_ACCESSIBILITY_OVERLAY: 898 // overlay put by accessibility services to intercept user interaction 899 return 30; 900 case TYPE_SECURE_SYSTEM_OVERLAY: 901 return 31; 902 case TYPE_BOOT_PROGRESS: 903 return 32; 904 case TYPE_POINTER: 905 // the (mouse) pointer layer 906 return 33; 907 default: 908 Slog.e("WindowManager", "Unknown window type: " + type); 909 return APPLICATION_LAYER; 910 } 911 } 912 913 /** 914 * Return how to Z-order sub-windows in relation to the window they are attached to. 915 * Return positive to have them ordered in front, negative for behind. 916 * 917 * @param type The sub-window type code. 918 * 919 * @return int Layer in relation to the attached window, where positive is 920 * above and negative is below. 921 */ getSubWindowLayerFromTypeLw(int type)922 default int getSubWindowLayerFromTypeLw(int type) { 923 switch (type) { 924 case TYPE_APPLICATION_PANEL: 925 case TYPE_APPLICATION_ATTACHED_DIALOG: 926 return APPLICATION_PANEL_SUBLAYER; 927 case TYPE_APPLICATION_MEDIA: 928 return APPLICATION_MEDIA_SUBLAYER; 929 case TYPE_APPLICATION_MEDIA_OVERLAY: 930 return APPLICATION_MEDIA_OVERLAY_SUBLAYER; 931 case TYPE_APPLICATION_SUB_PANEL: 932 return APPLICATION_SUB_PANEL_SUBLAYER; 933 case TYPE_APPLICATION_ABOVE_SUB_PANEL: 934 return APPLICATION_ABOVE_SUB_PANEL_SUBLAYER; 935 } 936 Slog.e("WindowManager", "Unknown sub-window type: " + type); 937 return 0; 938 } 939 940 /** 941 * Get the highest layer (actually one more than) that the wallpaper is 942 * allowed to be in. 943 */ getMaxWallpaperLayer()944 public int getMaxWallpaperLayer(); 945 946 /** 947 * Return the display width available after excluding any screen 948 * decorations that could never be removed in Honeycomb. That is, system bar or 949 * button bar. 950 */ getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId, DisplayCutout displayCutout)951 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, 952 int uiMode, int displayId, DisplayCutout displayCutout); 953 954 /** 955 * Return the display height available after excluding any screen 956 * decorations that could never be removed in Honeycomb. That is, system bar or 957 * button bar. 958 */ getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId, DisplayCutout displayCutout)959 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, 960 int uiMode, int displayId, DisplayCutout displayCutout); 961 962 /** 963 * Return the available screen width that we should report for the 964 * configuration. This must be no larger than 965 * {@link #getNonDecorDisplayWidth(int, int, int, int, int, DisplayCutout)}; it may be smaller 966 * than that to account for more transient decoration like a status bar. 967 */ getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId, DisplayCutout displayCutout)968 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, 969 int uiMode, int displayId, DisplayCutout displayCutout); 970 971 /** 972 * Return the available screen height that we should report for the 973 * configuration. This must be no larger than 974 * {@link #getNonDecorDisplayHeight(int, int, int, int, int, DisplayCutout)}; it may be smaller 975 * than that to account for more transient decoration like a status bar. 976 */ getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId, DisplayCutout displayCutout)977 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, 978 int uiMode, int displayId, DisplayCutout displayCutout); 979 980 /** 981 * Return whether the given window can become the Keyguard window. Typically returns true for 982 * the StatusBar. 983 */ isKeyguardHostWindow(WindowManager.LayoutParams attrs)984 public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs); 985 986 /** 987 * @return whether {@param win} can be hidden by Keyguard 988 */ canBeHiddenByKeyguardLw(WindowState win)989 public boolean canBeHiddenByKeyguardLw(WindowState win); 990 991 /** 992 * Called when the system would like to show a UI to indicate that an 993 * application is starting. You can use this to add a 994 * APPLICATION_STARTING_TYPE window with the given appToken to the window 995 * manager (using the normal window manager APIs) that will be shown until 996 * the application displays its own window. This is called without the 997 * window manager locked so that you can call back into it. 998 * 999 * @param appToken Token of the application being started. 1000 * @param packageName The name of the application package being started. 1001 * @param theme Resource defining the application's overall visual theme. 1002 * @param nonLocalizedLabel The default title label of the application if 1003 * no data is found in the resource. 1004 * @param labelRes The resource ID the application would like to use as its name. 1005 * @param icon The resource ID the application would like to use as its icon. 1006 * @param windowFlags Window layout flags. 1007 * @param overrideConfig override configuration to consider when generating 1008 * context to for resources. 1009 * @param displayId Id of the display to show the splash screen at. 1010 * 1011 * @return The starting surface. 1012 * 1013 */ addSplashScreen(IBinder appToken, String packageName, int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, int logo, int windowFlags, Configuration overrideConfig, int displayId)1014 public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, 1015 CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, 1016 int logo, int windowFlags, Configuration overrideConfig, int displayId); 1017 1018 /** 1019 * Prepare for a window being added to the window manager. You can throw an 1020 * exception here to prevent the window being added, or do whatever setup 1021 * you need to keep track of the window. 1022 * 1023 * @param win The window being added. 1024 * @param attrs The window's LayoutParams. 1025 * 1026 * @return {@link WindowManagerGlobal#ADD_OKAY} if the add can proceed, else an 1027 * error code to abort the add. 1028 */ prepareAddWindowLw(WindowState win, WindowManager.LayoutParams attrs)1029 public int prepareAddWindowLw(WindowState win, 1030 WindowManager.LayoutParams attrs); 1031 1032 /** 1033 * Called when a window is being removed from a window manager. Must not 1034 * throw an exception -- clean up as much as possible. 1035 * 1036 * @param win The window being removed. 1037 */ removeWindowLw(WindowState win)1038 public void removeWindowLw(WindowState win); 1039 1040 /** 1041 * Control the animation to run when a window's state changes. Return a 1042 * non-0 number to force the animation to a specific resource ID, or 0 1043 * to use the default animation. 1044 * 1045 * @param win The window that is changing. 1046 * @param transit What is happening to the window: {@link #TRANSIT_ENTER}, 1047 * {@link #TRANSIT_EXIT}, {@link #TRANSIT_SHOW}, or 1048 * {@link #TRANSIT_HIDE}. 1049 * 1050 * @return Resource ID of the actual animation to use, or 0 for none. 1051 */ selectAnimationLw(WindowState win, int transit)1052 public int selectAnimationLw(WindowState win, int transit); 1053 1054 /** 1055 * Determine the animation to run for a rotation transition based on the 1056 * top fullscreen windows {@link WindowManager.LayoutParams#rotationAnimation} 1057 * and whether it is currently fullscreen and frontmost. 1058 * 1059 * @param anim The exiting animation resource id is stored in anim[0], the 1060 * entering animation resource id is stored in anim[1]. 1061 */ selectRotationAnimationLw(int anim[])1062 public void selectRotationAnimationLw(int anim[]); 1063 1064 /** 1065 * Validate whether the current top fullscreen has specified the same 1066 * {@link WindowManager.LayoutParams#rotationAnimation} value as that 1067 * being passed in from the previous top fullscreen window. 1068 * 1069 * @param exitAnimId exiting resource id from the previous window. 1070 * @param enterAnimId entering resource id from the previous window. 1071 * @param forceDefault For rotation animations only, if true ignore the 1072 * animation values and just return false. 1073 * @return true if the previous values are still valid, false if they 1074 * should be replaced with the default. 1075 */ validateRotationAnimationLw(int exitAnimId, int enterAnimId, boolean forceDefault)1076 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId, 1077 boolean forceDefault); 1078 1079 /** 1080 * Create and return an animation to re-display a window that was force hidden by Keyguard. 1081 */ createHiddenByKeyguardExit(boolean onWallpaper, boolean goingToNotificationShade)1082 public Animation createHiddenByKeyguardExit(boolean onWallpaper, 1083 boolean goingToNotificationShade); 1084 1085 /** 1086 * Create and return an animation to let the wallpaper disappear after being shown behind 1087 * Keyguard. 1088 */ createKeyguardWallpaperExit(boolean goingToNotificationShade)1089 public Animation createKeyguardWallpaperExit(boolean goingToNotificationShade); 1090 1091 /** 1092 * Called from the input reader thread before a key is enqueued. 1093 * 1094 * <p>There are some actions that need to be handled here because they 1095 * affect the power state of the device, for example, the power keys. 1096 * Generally, it's best to keep as little as possible in the queue thread 1097 * because it's the most fragile. 1098 * @param event The key event. 1099 * @param policyFlags The policy flags associated with the key. 1100 * 1101 * @return Actions flags: may be {@link #ACTION_PASS_TO_USER}. 1102 */ interceptKeyBeforeQueueing(KeyEvent event, int policyFlags)1103 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags); 1104 1105 /** 1106 * Called from the input reader thread before a motion is enqueued when the device is in a 1107 * non-interactive state. 1108 * 1109 * <p>There are some actions that need to be handled here because they 1110 * affect the power state of the device, for example, waking on motions. 1111 * Generally, it's best to keep as little as possible in the queue thread 1112 * because it's the most fragile. 1113 * @param policyFlags The policy flags associated with the motion. 1114 * 1115 * @return Actions flags: may be {@link #ACTION_PASS_TO_USER}. 1116 */ interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags)1117 public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags); 1118 1119 /** 1120 * Called from the input dispatcher thread before a key is dispatched to a window. 1121 * 1122 * <p>Allows you to define 1123 * behavior for keys that can not be overridden by applications. 1124 * This method is called from the input thread, with no locks held. 1125 * 1126 * @param win The window that currently has focus. This is where the key 1127 * event will normally go. 1128 * @param event The key event. 1129 * @param policyFlags The policy flags associated with the key. 1130 * @return 0 if the key should be dispatched immediately, -1 if the key should 1131 * not be dispatched ever, or a positive value indicating the number of 1132 * milliseconds by which the key dispatch should be delayed before trying 1133 * again. 1134 */ interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags)1135 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags); 1136 1137 /** 1138 * Called from the input dispatcher thread when an application did not handle 1139 * a key that was dispatched to it. 1140 * 1141 * <p>Allows you to define default global behavior for keys that were not handled 1142 * by applications. This method is called from the input thread, with no locks held. 1143 * 1144 * @param win The window that currently has focus. This is where the key 1145 * event will normally go. 1146 * @param event The key event. 1147 * @param policyFlags The policy flags associated with the key. 1148 * @return Returns an alternate key event to redispatch as a fallback, or null to give up. 1149 * The caller is responsible for recycling the key event. 1150 */ dispatchUnhandledKey(WindowState win, KeyEvent event, int policyFlags)1151 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, int policyFlags); 1152 1153 /** 1154 * Called when layout of the windows is about to start. 1155 * 1156 * @param displayFrames frames of the display we are doing layout on. 1157 * @param uiMode The current uiMode in configuration. 1158 */ beginLayoutLw(DisplayFrames displayFrames, int uiMode)1159 default void beginLayoutLw(DisplayFrames displayFrames, int uiMode) {} 1160 1161 /** 1162 * Returns the bottom-most layer of the system decor, above which no policy decor should 1163 * be applied. 1164 */ getSystemDecorLayerLw()1165 public int getSystemDecorLayerLw(); 1166 1167 /** 1168 * Called for each window attached to the window manager as layout is proceeding. The 1169 * implementation of this function must take care of setting the window's frame, either here or 1170 * in finishLayout(). 1171 * 1172 * @param win The window being positioned. 1173 * @param attached For sub-windows, the window it is attached to; this 1174 * window will already have had layoutWindow() called on it 1175 * so you can use its Rect. Otherwise null. 1176 * @param displayFrames The display frames. 1177 */ layoutWindowLw( WindowState win, WindowState attached, DisplayFrames displayFrames)1178 default void layoutWindowLw( 1179 WindowState win, WindowState attached, DisplayFrames displayFrames) {} 1180 1181 1182 /** 1183 * Return the layout hints for a newly added window. These values are computed on the 1184 * most recent layout, so they are not guaranteed to be correct. 1185 * 1186 * @param attrs The LayoutParams of the window. 1187 * @param taskBounds The bounds of the task this window is on or {@code null} if no task is 1188 * associated with the window. 1189 * @param displayFrames display frames. 1190 * @param outFrame The frame of the window. 1191 * @param outContentInsets The areas covered by system windows, expressed as positive insets. 1192 * @param outStableInsets The areas covered by stable system windows irrespective of their 1193 * current visibility. Expressed as positive insets. 1194 * @param outOutsets The areas that are not real display, but we would like to treat as such. 1195 * @param outDisplayCutout The area that has been cut away from the display. 1196 * @return Whether to always consume the navigation bar. 1197 * See {@link #isNavBarForcedShownLw(WindowState)}. 1198 */ getLayoutHintLw(WindowManager.LayoutParams attrs, Rect taskBounds, DisplayFrames displayFrames, Rect outFrame, Rect outContentInsets, Rect outStableInsets, Rect outOutsets, DisplayCutout.ParcelableWrapper outDisplayCutout)1199 default boolean getLayoutHintLw(WindowManager.LayoutParams attrs, Rect taskBounds, 1200 DisplayFrames displayFrames, Rect outFrame, Rect outContentInsets, 1201 Rect outStableInsets, Rect outOutsets, 1202 DisplayCutout.ParcelableWrapper outDisplayCutout) { 1203 return false; 1204 } 1205 1206 /** 1207 * Called following layout of all windows before each window has policy applied. 1208 * 1209 * @param displayWidth The current full width of the screen. 1210 * @param displayHeight The current full height of the screen. 1211 */ beginPostLayoutPolicyLw(int displayWidth, int displayHeight)1212 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight); 1213 1214 /** 1215 * Called following layout of all window to apply policy to each window. 1216 * 1217 * @param win The window being positioned. 1218 * @param attrs The LayoutParams of the window. 1219 * @param attached For sub-windows, the window it is attached to. Otherwise null. 1220 */ applyPostLayoutPolicyLw(WindowState win, WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget)1221 public void applyPostLayoutPolicyLw(WindowState win, 1222 WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget); 1223 1224 /** 1225 * Called following layout of all windows and after policy has been applied 1226 * to each window. If in this function you do 1227 * something that may have modified the animation state of another window, 1228 * be sure to return non-zero in order to perform another pass through layout. 1229 * 1230 * @return Return any bit set of {@link #FINISH_LAYOUT_REDO_LAYOUT}, 1231 * {@link #FINISH_LAYOUT_REDO_CONFIG}, {@link #FINISH_LAYOUT_REDO_WALLPAPER}, 1232 * or {@link #FINISH_LAYOUT_REDO_ANIM}. 1233 */ finishPostLayoutPolicyLw()1234 public int finishPostLayoutPolicyLw(); 1235 1236 /** 1237 * Return true if it is okay to perform animations for an app transition 1238 * that is about to occur. You may return false for this if, for example, 1239 * the dream window is currently displayed so the switch should happen 1240 * immediately. 1241 */ allowAppAnimationsLw()1242 public boolean allowAppAnimationsLw(); 1243 1244 /** 1245 * A new window has been focused. 1246 */ focusChangedLw(WindowState lastFocus, WindowState newFocus)1247 public int focusChangedLw(WindowState lastFocus, WindowState newFocus); 1248 1249 /** 1250 * Called when the device has started waking up. 1251 */ startedWakingUp()1252 public void startedWakingUp(); 1253 1254 /** 1255 * Called when the device has finished waking up. 1256 */ finishedWakingUp()1257 public void finishedWakingUp(); 1258 1259 /** 1260 * Called when the device has started going to sleep. 1261 * 1262 * @param why {@link #OFF_BECAUSE_OF_USER}, {@link #OFF_BECAUSE_OF_ADMIN}, 1263 * or {@link #OFF_BECAUSE_OF_TIMEOUT}. 1264 */ startedGoingToSleep(int why)1265 public void startedGoingToSleep(int why); 1266 1267 /** 1268 * Called when the device has finished going to sleep. 1269 * 1270 * @param why {@link #OFF_BECAUSE_OF_USER}, {@link #OFF_BECAUSE_OF_ADMIN}, 1271 * or {@link #OFF_BECAUSE_OF_TIMEOUT}. 1272 */ finishedGoingToSleep(int why)1273 public void finishedGoingToSleep(int why); 1274 1275 /** 1276 * Called when the device is about to turn on the screen to show content. 1277 * When waking up, this method will be called once after the call to wakingUp(). 1278 * When dozing, the method will be called sometime after the call to goingToSleep() and 1279 * may be called repeatedly in the case where the screen is pulsing on and off. 1280 * 1281 * Must call back on the listener to tell it when the higher-level system 1282 * is ready for the screen to go on (i.e. the lock screen is shown). 1283 */ screenTurningOn(ScreenOnListener screenOnListener)1284 public void screenTurningOn(ScreenOnListener screenOnListener); 1285 1286 /** 1287 * Called when the device has actually turned on the screen, i.e. the display power state has 1288 * been set to ON and the screen is unblocked. 1289 */ screenTurnedOn()1290 public void screenTurnedOn(); 1291 1292 /** 1293 * Called when the display would like to be turned off. This gives policy a chance to do some 1294 * things before the display power state is actually changed to off. 1295 * 1296 * @param screenOffListener Must be called to tell that the display power state can actually be 1297 * changed now after policy has done its work. 1298 */ screenTurningOff(ScreenOffListener screenOffListener)1299 public void screenTurningOff(ScreenOffListener screenOffListener); 1300 1301 /** 1302 * Called when the device has turned the screen off. 1303 */ screenTurnedOff()1304 public void screenTurnedOff(); 1305 1306 public interface ScreenOnListener { onScreenOn()1307 void onScreenOn(); 1308 } 1309 1310 /** 1311 * See {@link #screenTurnedOff} 1312 */ 1313 public interface ScreenOffListener { onScreenOff()1314 void onScreenOff(); 1315 } 1316 1317 /** 1318 * Return whether the default display is on and not blocked by a black surface. 1319 */ isScreenOn()1320 public boolean isScreenOn(); 1321 1322 /** 1323 * @return whether the device is currently allowed to animate. 1324 * 1325 * Note: this can be true even if it is not appropriate to animate for reasons that are outside 1326 * of the policy's authority. 1327 */ okToAnimate()1328 boolean okToAnimate(); 1329 1330 /** 1331 * Tell the policy that the lid switch has changed state. 1332 * @param whenNanos The time when the change occurred in uptime nanoseconds. 1333 * @param lidOpen True if the lid is now open. 1334 */ notifyLidSwitchChanged(long whenNanos, boolean lidOpen)1335 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen); 1336 1337 /** 1338 * Tell the policy that the camera lens has been covered or uncovered. 1339 * @param whenNanos The time when the change occurred in uptime nanoseconds. 1340 * @param lensCovered True if the lens is covered. 1341 */ notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered)1342 public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered); 1343 1344 /** 1345 * Tell the policy if anyone is requesting that keyguard not come on. 1346 * 1347 * @param enabled Whether keyguard can be on or not. does not actually 1348 * turn it on, unless it was previously disabled with this function. 1349 * 1350 * @see android.app.KeyguardManager.KeyguardLock#disableKeyguard() 1351 * @see android.app.KeyguardManager.KeyguardLock#reenableKeyguard() 1352 */ 1353 @SuppressWarnings("javadoc") enableKeyguard(boolean enabled)1354 public void enableKeyguard(boolean enabled); 1355 1356 /** 1357 * Callback used by {@link #exitKeyguardSecurely} 1358 */ 1359 interface OnKeyguardExitResult { onKeyguardExitResult(boolean success)1360 void onKeyguardExitResult(boolean success); 1361 } 1362 1363 /** 1364 * Tell the policy if anyone is requesting the keyguard to exit securely 1365 * (this would be called after the keyguard was disabled) 1366 * @param callback Callback to send the result back. 1367 * @see android.app.KeyguardManager#exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult) 1368 */ 1369 @SuppressWarnings("javadoc") exitKeyguardSecurely(OnKeyguardExitResult callback)1370 void exitKeyguardSecurely(OnKeyguardExitResult callback); 1371 1372 /** 1373 * isKeyguardLocked 1374 * 1375 * Return whether the keyguard is currently locked. 1376 * 1377 * @return true if in keyguard is locked. 1378 */ isKeyguardLocked()1379 public boolean isKeyguardLocked(); 1380 1381 /** 1382 * isKeyguardSecure 1383 * 1384 * Return whether the keyguard requires a password to unlock. 1385 * @param userId 1386 * 1387 * @return true if in keyguard is secure. 1388 */ isKeyguardSecure(int userId)1389 public boolean isKeyguardSecure(int userId); 1390 1391 /** 1392 * Return whether the keyguard is currently occluded. 1393 * 1394 * @return true if in keyguard is occluded, false otherwise 1395 */ isKeyguardOccluded()1396 public boolean isKeyguardOccluded(); 1397 1398 /** 1399 * @return true if in keyguard is on and not occluded. 1400 */ isKeyguardShowingAndNotOccluded()1401 public boolean isKeyguardShowingAndNotOccluded(); 1402 1403 /** 1404 * @return whether Keyguard is in trusted state and can be dismissed without credentials 1405 */ isKeyguardTrustedLw()1406 public boolean isKeyguardTrustedLw(); 1407 1408 /** 1409 * inKeyguardRestrictedKeyInputMode 1410 * 1411 * If keyguard screen is showing or in restricted key input mode (i.e. in 1412 * keyguard password emergency screen). When in such mode, certain keys, 1413 * such as the Home key and the right soft keys, don't work. 1414 * 1415 * @return true if in keyguard restricted input mode. 1416 */ inKeyguardRestrictedKeyInputMode()1417 public boolean inKeyguardRestrictedKeyInputMode(); 1418 1419 /** 1420 * Ask the policy to dismiss the keyguard, if it is currently shown. 1421 * 1422 * @param callback Callback to be informed about the result. 1423 * @param message A message that should be displayed in the keyguard. 1424 */ dismissKeyguardLw(@ullable IKeyguardDismissCallback callback, CharSequence message)1425 public void dismissKeyguardLw(@Nullable IKeyguardDismissCallback callback, 1426 CharSequence message); 1427 1428 /** 1429 * Ask the policy whether the Keyguard has drawn. If the Keyguard is disabled, this method 1430 * returns true as soon as we know that Keyguard is disabled. 1431 * 1432 * @return true if the keyguard has drawn. 1433 */ isKeyguardDrawnLw()1434 public boolean isKeyguardDrawnLw(); 1435 isShowingDreamLw()1436 public boolean isShowingDreamLw(); 1437 1438 /** 1439 * Given an orientation constant, returns the appropriate surface rotation, 1440 * taking into account sensors, docking mode, rotation lock, and other factors. 1441 * 1442 * @param orientation An orientation constant, such as 1443 * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. 1444 * @param lastRotation The most recently used rotation. 1445 * @param defaultDisplay Flag indicating whether the rotation is computed for the default 1446 * display. Currently for all non-default displays sensors, docking mode, 1447 * rotation lock and other factors are ignored. 1448 * @return The surface rotation to use. 1449 */ rotationForOrientationLw(@ctivityInfo.ScreenOrientation int orientation, int lastRotation, boolean defaultDisplay)1450 public int rotationForOrientationLw(@ActivityInfo.ScreenOrientation int orientation, 1451 int lastRotation, boolean defaultDisplay); 1452 1453 /** 1454 * Given an orientation constant and a rotation, returns true if the rotation 1455 * has compatible metrics to the requested orientation. For example, if 1456 * the application requested landscape and got seascape, then the rotation 1457 * has compatible metrics; if the application requested portrait and got landscape, 1458 * then the rotation has incompatible metrics; if the application did not specify 1459 * a preference, then anything goes. 1460 * 1461 * @param orientation An orientation constant, such as 1462 * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. 1463 * @param rotation The rotation to check. 1464 * @return True if the rotation is compatible with the requested orientation. 1465 */ rotationHasCompatibleMetricsLw(@ctivityInfo.ScreenOrientation int orientation, int rotation)1466 public boolean rotationHasCompatibleMetricsLw(@ActivityInfo.ScreenOrientation int orientation, 1467 int rotation); 1468 1469 /** 1470 * Called by the window manager when the rotation changes. 1471 * 1472 * @param rotation The new rotation. 1473 */ setRotationLw(int rotation)1474 public void setRotationLw(int rotation); 1475 1476 /** 1477 * Called when the system is mostly done booting to set whether 1478 * the system should go into safe mode. 1479 */ setSafeMode(boolean safeMode)1480 public void setSafeMode(boolean safeMode); 1481 1482 /** 1483 * Called when the system is mostly done booting. 1484 */ systemReady()1485 public void systemReady(); 1486 1487 /** 1488 * Called when the system is done booting to the point where the 1489 * user can start interacting with it. 1490 */ systemBooted()1491 public void systemBooted(); 1492 1493 /** 1494 * Show boot time message to the user. 1495 */ showBootMessage(final CharSequence msg, final boolean always)1496 public void showBootMessage(final CharSequence msg, final boolean always); 1497 1498 /** 1499 * Hide the UI for showing boot messages, never to be displayed again. 1500 */ hideBootMessages()1501 public void hideBootMessages(); 1502 1503 /** 1504 * Called when userActivity is signalled in the power manager. 1505 * This is safe to call from any thread, with any window manager locks held or not. 1506 */ userActivity()1507 public void userActivity(); 1508 1509 /** 1510 * Called when we have finished booting and can now display the home 1511 * screen to the user. This will happen after systemReady(), and at 1512 * this point the display is active. 1513 */ enableScreenAfterBoot()1514 public void enableScreenAfterBoot(); 1515 setCurrentOrientationLw(@ctivityInfo.ScreenOrientation int newOrientation)1516 public void setCurrentOrientationLw(@ActivityInfo.ScreenOrientation int newOrientation); 1517 1518 /** 1519 * Call from application to perform haptic feedback on its window. 1520 */ performHapticFeedbackLw(WindowState win, int effectId, boolean always)1521 public boolean performHapticFeedbackLw(WindowState win, int effectId, boolean always); 1522 1523 /** 1524 * Called when we have started keeping the screen on because a window 1525 * requesting this has become visible. 1526 */ keepScreenOnStartedLw()1527 public void keepScreenOnStartedLw(); 1528 1529 /** 1530 * Called when we have stopped keeping the screen on because the last window 1531 * requesting this is no longer visible. 1532 */ keepScreenOnStoppedLw()1533 public void keepScreenOnStoppedLw(); 1534 1535 /** 1536 * Gets the current user rotation mode. 1537 * 1538 * @return The rotation mode. 1539 * 1540 * @see #USER_ROTATION_LOCKED 1541 * @see #USER_ROTATION_FREE 1542 */ 1543 @UserRotationMode getUserRotationMode()1544 public int getUserRotationMode(); 1545 1546 /** 1547 * Inform the policy that the user has chosen a preferred orientation ("rotation lock"). 1548 * 1549 * @param mode One of {@link #USER_ROTATION_LOCKED} or {@link #USER_ROTATION_FREE}. 1550 * @param rotation One of {@link Surface#ROTATION_0}, {@link Surface#ROTATION_90}, 1551 * {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}. 1552 */ setUserRotationMode(@serRotationMode int mode, @Surface.Rotation int rotation)1553 public void setUserRotationMode(@UserRotationMode int mode, @Surface.Rotation int rotation); 1554 1555 /** 1556 * Called when a new system UI visibility is being reported, allowing 1557 * the policy to adjust what is actually reported. 1558 * @param visibility The raw visibility reported by the status bar. 1559 * @return The new desired visibility. 1560 */ adjustSystemUiVisibilityLw(int visibility)1561 public int adjustSystemUiVisibilityLw(int visibility); 1562 1563 /** 1564 * Called by System UI to notify of changes to the visibility of Recents. 1565 */ setRecentsVisibilityLw(boolean visible)1566 public void setRecentsVisibilityLw(boolean visible); 1567 1568 /** 1569 * Called by System UI to notify of changes to the visibility of PIP. 1570 */ setPipVisibilityLw(boolean visible)1571 void setPipVisibilityLw(boolean visible); 1572 1573 /** 1574 * Called by System UI to enable or disable haptic feedback on the navigation bar buttons. 1575 */ setNavBarVirtualKeyHapticFeedbackEnabledLw(boolean enabled)1576 void setNavBarVirtualKeyHapticFeedbackEnabledLw(boolean enabled); 1577 1578 /** 1579 * Specifies whether there is an on-screen navigation bar separate from the status bar. 1580 */ hasNavigationBar()1581 public boolean hasNavigationBar(); 1582 1583 /** 1584 * Lock the device now. 1585 */ lockNow(Bundle options)1586 public void lockNow(Bundle options); 1587 1588 /** 1589 * Set the last used input method window state. This state is used to make IME transition 1590 * smooth. 1591 * @hide 1592 */ setLastInputMethodWindowLw(WindowState ime, WindowState target)1593 public void setLastInputMethodWindowLw(WindowState ime, WindowState target); 1594 1595 /** 1596 * An internal callback (from InputMethodManagerService) to notify a state change regarding 1597 * whether the back key should dismiss the software keyboard (IME) or not. 1598 * 1599 * @param newValue {@code true} if the software keyboard is shown and the back key is expected 1600 * to dismiss the software keyboard. 1601 * @hide 1602 */ setDismissImeOnBackKeyPressed(boolean newValue)1603 default void setDismissImeOnBackKeyPressed(boolean newValue) { 1604 // Default implementation does nothing. 1605 } 1606 1607 /** 1608 * Show the recents task list app. 1609 * @hide 1610 */ showRecentApps()1611 public void showRecentApps(); 1612 1613 /** 1614 * Show the global actions dialog. 1615 * @hide 1616 */ showGlobalActions()1617 public void showGlobalActions(); 1618 1619 /** 1620 * Called when the current user changes. Guaranteed to be called before the broadcast 1621 * of the new user id is made to all listeners. 1622 * 1623 * @param newUserId The id of the incoming user. 1624 */ setCurrentUserLw(int newUserId)1625 public void setCurrentUserLw(int newUserId); 1626 1627 /** 1628 * For a given user-switch operation, this will be called once with switching=true before the 1629 * user-switch and once with switching=false afterwards (or if the user-switch was cancelled). 1630 * This gives the policy a chance to alter its behavior for the duration of a user-switch. 1631 * 1632 * @param switching true if a user-switch is in progress 1633 */ setSwitchingUser(boolean switching)1634 void setSwitchingUser(boolean switching); 1635 1636 /** 1637 * Print the WindowManagerPolicy's state into the given stream. 1638 * 1639 * @param prefix Text to print at the front of each line. 1640 * @param writer The PrintWriter to which you should dump your state. This will be 1641 * closed for you after you return. 1642 * @param args additional arguments to the dump request. 1643 */ dump(String prefix, PrintWriter writer, String[] args)1644 public void dump(String prefix, PrintWriter writer, String[] args); 1645 1646 /** 1647 * Write the WindowManagerPolicy's state into the protocol buffer. 1648 * The message is described in {@link com.android.server.wm.WindowManagerPolicyProto} 1649 * 1650 * @param proto The protocol buffer output stream to write to. 1651 */ writeToProto(ProtoOutputStream proto, long fieldId)1652 void writeToProto(ProtoOutputStream proto, long fieldId); 1653 1654 /** 1655 * Returns whether a given window type is considered a top level one. 1656 * A top level window does not have a container, i.e. attached window, 1657 * or if it has a container it is laid out as a top-level window, not 1658 * as a child of its container. 1659 * 1660 * @param windowType The window type. 1661 * @return True if the window is a top level one. 1662 */ isTopLevelWindow(int windowType)1663 public boolean isTopLevelWindow(int windowType); 1664 1665 /** 1666 * Notifies the keyguard to start fading out. 1667 * 1668 * @param startTime the start time of the animation in uptime milliseconds 1669 * @param fadeoutDuration the duration of the exit animation, in milliseconds 1670 */ startKeyguardExitAnimation(long startTime, long fadeoutDuration)1671 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration); 1672 1673 /** 1674 * Calculates the stable insets without running a layout. 1675 * 1676 * @param displayRotation the current display rotation 1677 * @param displayWidth the current display width 1678 * @param displayHeight the current display height 1679 * @param displayCutout the current display cutout 1680 * @param outInsets the insets to return 1681 */ getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight, DisplayCutout displayCutout, Rect outInsets)1682 public void getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight, 1683 DisplayCutout displayCutout, Rect outInsets); 1684 1685 1686 /** 1687 * @return true if the navigation bar is forced to stay visible 1688 */ isNavBarForcedShownLw(WindowState win)1689 public boolean isNavBarForcedShownLw(WindowState win); 1690 1691 /** 1692 * @return The side of the screen where navigation bar is positioned. 1693 * @see #NAV_BAR_LEFT 1694 * @see #NAV_BAR_RIGHT 1695 * @see #NAV_BAR_BOTTOM 1696 */ 1697 @NavigationBarPosition getNavBarPosition()1698 int getNavBarPosition(); 1699 1700 /** 1701 * Calculates the insets for the areas that could never be removed in Honeycomb, i.e. system 1702 * bar or button bar. See {@link #getNonDecorDisplayWidth}. 1703 * 1704 * @param displayRotation the current display rotation 1705 * @param displayWidth the current display width 1706 * @param displayHeight the current display height 1707 * @param displayCutout the current display cutout 1708 * @param outInsets the insets to return 1709 */ getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight, DisplayCutout displayCutout, Rect outInsets)1710 public void getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight, 1711 DisplayCutout displayCutout, Rect outInsets); 1712 1713 /** 1714 * @param displayRotation the current display rotation 1715 * @param displayWidth the current display width 1716 * @param displayHeight the current display height 1717 * @param dockSide the dockside asking if allowed 1718 * @param originalDockSide the side that was original docked to in split screen 1719 * @return True if a specified {@param dockSide} is allowed on the current device, or false 1720 * otherwise. It is guaranteed that at least one dock side for a particular orientation 1721 * is allowed, so for example, if DOCKED_RIGHT is not allowed, DOCKED_LEFT is allowed. 1722 * If navigation bar is movable then the docked side would bias towards the 1723 * {@param originalDockSide}. 1724 */ isDockSideAllowed(int dockSide, int originalDockSide, int displayWidth, int displayHeight, int displayRotation)1725 public boolean isDockSideAllowed(int dockSide, int originalDockSide, int displayWidth, 1726 int displayHeight, int displayRotation); 1727 1728 /** 1729 * Called when the configuration has changed, and it's safe to load new values from resources. 1730 */ onConfigurationChanged()1731 public void onConfigurationChanged(); 1732 shouldRotateSeamlessly(int oldRotation, int newRotation)1733 public boolean shouldRotateSeamlessly(int oldRotation, int newRotation); 1734 1735 /** 1736 * Called when System UI has been started. 1737 */ onSystemUiStarted()1738 void onSystemUiStarted(); 1739 1740 /** 1741 * Checks whether the policy is ready for dismissing the boot animation and completing the boot. 1742 * 1743 * @return true if ready; false otherwise. 1744 */ canDismissBootAnimation()1745 boolean canDismissBootAnimation(); 1746 1747 /** 1748 * Convert the user rotation mode to a human readable format. 1749 */ userRotationModeToString(int mode)1750 static String userRotationModeToString(int mode) { 1751 switch(mode) { 1752 case USER_ROTATION_FREE: 1753 return "USER_ROTATION_FREE"; 1754 case USER_ROTATION_LOCKED: 1755 return "USER_ROTATION_LOCKED"; 1756 default: 1757 return Integer.toString(mode); 1758 } 1759 } 1760 1761 /** 1762 * Requests that the WindowManager sends WindowManagerPolicy#ACTION_USER_ACTIVITY_NOTIFICATION 1763 * on the next user activity. 1764 */ requestUserActivityNotification()1765 public void requestUserActivityNotification(); 1766 1767 /** 1768 * Called when the state of lock task mode changes. This should be used to disable immersive 1769 * mode confirmation. 1770 * 1771 * @param lockTaskState the new lock task mode state. One of 1772 * {@link ActivityManager#LOCK_TASK_MODE_NONE}, 1773 * {@link ActivityManager#LOCK_TASK_MODE_LOCKED}, 1774 * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. 1775 */ onLockTaskStateChangedLw(int lockTaskState)1776 void onLockTaskStateChangedLw(int lockTaskState); 1777 1778 /** 1779 * Updates the flag about whether AOD is showing. 1780 * 1781 * @return whether the value was changed. 1782 */ setAodShowing(boolean aodShowing)1783 boolean setAodShowing(boolean aodShowing); 1784 } 1785