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