• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.view;
18 
19 import android.annotation.NonNull;
20 import android.annotation.SystemApi;
21 import android.app.Presentation;
22 import android.content.Context;
23 import android.content.pm.ActivityInfo;
24 import android.graphics.PixelFormat;
25 import android.graphics.Rect;
26 import android.os.IBinder;
27 import android.os.Parcel;
28 import android.os.Parcelable;
29 import android.text.TextUtils;
30 import android.util.Log;
31 
32 import java.util.List;
33 import java.util.Objects;
34 
35 /**
36  * The interface that apps use to talk to the window manager.
37  * <p>
38  * Use <code>Context.getSystemService(Context.WINDOW_SERVICE)</code> to get one of these.
39  * </p><p>
40  * Each window manager instance is bound to a particular {@link Display}.
41  * To obtain a {@link WindowManager} for a different display, use
42  * {@link Context#createDisplayContext} to obtain a {@link Context} for that
43  * display, then use <code>Context.getSystemService(Context.WINDOW_SERVICE)</code>
44  * to get the WindowManager.
45  * </p><p>
46  * The simplest way to show a window on another display is to create a
47  * {@link Presentation}.  The presentation will automatically obtain a
48  * {@link WindowManager} and {@link Context} for that display.
49  * </p>
50  *
51  * @see android.content.Context#getSystemService
52  * @see android.content.Context#WINDOW_SERVICE
53  */
54 public interface WindowManager extends ViewManager {
55 
56     /** @hide */
57     int DOCKED_INVALID = -1;
58     /** @hide */
59     int DOCKED_LEFT = 1;
60     /** @hide */
61     int DOCKED_TOP = 2;
62     /** @hide */
63     int DOCKED_RIGHT = 3;
64     /** @hide */
65     int DOCKED_BOTTOM = 4;
66 
67     /**
68      * Exception that is thrown when trying to add view whose
69      * {@link LayoutParams} {@link LayoutParams#token}
70      * is invalid.
71      */
72     public static class BadTokenException extends RuntimeException {
BadTokenException()73         public BadTokenException() {
74         }
75 
BadTokenException(String name)76         public BadTokenException(String name) {
77             super(name);
78         }
79     }
80 
81     /**
82      * Exception that is thrown when calling {@link #addView} to a secondary display that cannot
83      * be found. See {@link android.app.Presentation} for more information on secondary displays.
84      */
85     public static class InvalidDisplayException extends RuntimeException {
InvalidDisplayException()86         public InvalidDisplayException() {
87         }
88 
InvalidDisplayException(String name)89         public InvalidDisplayException(String name) {
90             super(name);
91         }
92     }
93 
94     /**
95      * Returns the {@link Display} upon which this {@link WindowManager} instance
96      * will create new windows.
97      * <p>
98      * Despite the name of this method, the display that is returned is not
99      * necessarily the primary display of the system (see {@link Display#DEFAULT_DISPLAY}).
100      * The returned display could instead be a secondary display that this
101      * window manager instance is managing.  Think of it as the display that
102      * this {@link WindowManager} instance uses by default.
103      * </p><p>
104      * To create windows on a different display, you need to obtain a
105      * {@link WindowManager} for that {@link Display}.  (See the {@link WindowManager}
106      * class documentation for more information.)
107      * </p>
108      *
109      * @return The display that this window manager is managing.
110      */
getDefaultDisplay()111     public Display getDefaultDisplay();
112 
113     /**
114      * Special variation of {@link #removeView} that immediately invokes
115      * the given view hierarchy's {@link View#onDetachedFromWindow()
116      * View.onDetachedFromWindow()} methods before returning.  This is not
117      * for normal applications; using it correctly requires great care.
118      *
119      * @param view The view to be removed.
120      */
removeViewImmediate(View view)121     public void removeViewImmediate(View view);
122 
123     /**
124      * Used to asynchronously request Keyboard Shortcuts from the focused window.
125      *
126      * @hide
127      */
128     public interface KeyboardShortcutsReceiver {
129         /**
130          * Callback used when the focused window keyboard shortcuts are ready to be displayed.
131          *
132          * @param result The keyboard shortcuts to be displayed.
133          */
onKeyboardShortcutsReceived(List<KeyboardShortcutGroup> result)134         void onKeyboardShortcutsReceived(List<KeyboardShortcutGroup> result);
135     }
136 
137     /**
138      * Message for taking fullscreen screenshot
139      * @hide
140      */
141     final int TAKE_SCREENSHOT_FULLSCREEN = 1;
142 
143     /**
144      * Message for taking screenshot of selected region.
145      * @hide
146      */
147     final int TAKE_SCREENSHOT_SELECTED_REGION = 2;
148 
149     /**
150      * @hide
151      */
152     public static final String PARCEL_KEY_SHORTCUTS_ARRAY = "shortcuts_array";
153 
154     /**
155      * Request for keyboard shortcuts to be retrieved asynchronously.
156      *
157      * @param receiver The callback to be triggered when the result is ready.
158      *
159      * @hide
160      */
requestAppKeyboardShortcuts(final KeyboardShortcutsReceiver receiver, int deviceId)161     public void requestAppKeyboardShortcuts(final KeyboardShortcutsReceiver receiver, int deviceId);
162 
163     public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
164         /**
165          * X position for this window.  With the default gravity it is ignored.
166          * When using {@link Gravity#LEFT} or {@link Gravity#START} or {@link Gravity#RIGHT} or
167          * {@link Gravity#END} it provides an offset from the given edge.
168          */
169         @ViewDebug.ExportedProperty
170         public int x;
171 
172         /**
173          * Y position for this window.  With the default gravity it is ignored.
174          * When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides
175          * an offset from the given edge.
176          */
177         @ViewDebug.ExportedProperty
178         public int y;
179 
180         /**
181          * Indicates how much of the extra space will be allocated horizontally
182          * to the view associated with these LayoutParams. Specify 0 if the view
183          * should not be stretched. Otherwise the extra pixels will be pro-rated
184          * among all views whose weight is greater than 0.
185          */
186         @ViewDebug.ExportedProperty
187         public float horizontalWeight;
188 
189         /**
190          * Indicates how much of the extra space will be allocated vertically
191          * to the view associated with these LayoutParams. Specify 0 if the view
192          * should not be stretched. Otherwise the extra pixels will be pro-rated
193          * among all views whose weight is greater than 0.
194          */
195         @ViewDebug.ExportedProperty
196         public float verticalWeight;
197 
198         /**
199          * The general type of window.  There are three main classes of
200          * window types:
201          * <ul>
202          * <li> <strong>Application windows</strong> (ranging from
203          * {@link #FIRST_APPLICATION_WINDOW} to
204          * {@link #LAST_APPLICATION_WINDOW}) are normal top-level application
205          * windows.  For these types of windows, the {@link #token} must be
206          * set to the token of the activity they are a part of (this will
207          * normally be done for you if {@link #token} is null).
208          * <li> <strong>Sub-windows</strong> (ranging from
209          * {@link #FIRST_SUB_WINDOW} to
210          * {@link #LAST_SUB_WINDOW}) are associated with another top-level
211          * window.  For these types of windows, the {@link #token} must be
212          * the token of the window it is attached to.
213          * <li> <strong>System windows</strong> (ranging from
214          * {@link #FIRST_SYSTEM_WINDOW} to
215          * {@link #LAST_SYSTEM_WINDOW}) are special types of windows for
216          * use by the system for specific purposes.  They should not normally
217          * be used by applications, and a special permission is required
218          * to use them.
219          * </ul>
220          *
221          * @see #TYPE_BASE_APPLICATION
222          * @see #TYPE_APPLICATION
223          * @see #TYPE_APPLICATION_STARTING
224          * @see #TYPE_DRAWN_APPLICATION
225          * @see #TYPE_APPLICATION_PANEL
226          * @see #TYPE_APPLICATION_MEDIA
227          * @see #TYPE_APPLICATION_SUB_PANEL
228          * @see #TYPE_APPLICATION_ABOVE_SUB_PANEL
229          * @see #TYPE_APPLICATION_ATTACHED_DIALOG
230          * @see #TYPE_STATUS_BAR
231          * @see #TYPE_SEARCH_BAR
232          * @see #TYPE_PHONE
233          * @see #TYPE_SYSTEM_ALERT
234          * @see #TYPE_TOAST
235          * @see #TYPE_SYSTEM_OVERLAY
236          * @see #TYPE_PRIORITY_PHONE
237          * @see #TYPE_STATUS_BAR_PANEL
238          * @see #TYPE_SYSTEM_DIALOG
239          * @see #TYPE_KEYGUARD_DIALOG
240          * @see #TYPE_SYSTEM_ERROR
241          * @see #TYPE_INPUT_METHOD
242          * @see #TYPE_INPUT_METHOD_DIALOG
243          */
244         @ViewDebug.ExportedProperty(mapping = {
245             @ViewDebug.IntToString(from = TYPE_BASE_APPLICATION, to = "TYPE_BASE_APPLICATION"),
246             @ViewDebug.IntToString(from = TYPE_APPLICATION, to = "TYPE_APPLICATION"),
247             @ViewDebug.IntToString(from = TYPE_APPLICATION_STARTING, to = "TYPE_APPLICATION_STARTING"),
248             @ViewDebug.IntToString(from = TYPE_DRAWN_APPLICATION, to = "TYPE_DRAWN_APPLICATION"),
249             @ViewDebug.IntToString(from = TYPE_APPLICATION_PANEL, to = "TYPE_APPLICATION_PANEL"),
250             @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA, to = "TYPE_APPLICATION_MEDIA"),
251             @ViewDebug.IntToString(from = TYPE_APPLICATION_SUB_PANEL, to = "TYPE_APPLICATION_SUB_PANEL"),
252             @ViewDebug.IntToString(from = TYPE_APPLICATION_ABOVE_SUB_PANEL, to = "TYPE_APPLICATION_ABOVE_SUB_PANEL"),
253             @ViewDebug.IntToString(from = TYPE_APPLICATION_ATTACHED_DIALOG, to = "TYPE_APPLICATION_ATTACHED_DIALOG"),
254             @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA_OVERLAY, to = "TYPE_APPLICATION_MEDIA_OVERLAY"),
255             @ViewDebug.IntToString(from = TYPE_STATUS_BAR, to = "TYPE_STATUS_BAR"),
256             @ViewDebug.IntToString(from = TYPE_SEARCH_BAR, to = "TYPE_SEARCH_BAR"),
257             @ViewDebug.IntToString(from = TYPE_PHONE, to = "TYPE_PHONE"),
258             @ViewDebug.IntToString(from = TYPE_SYSTEM_ALERT, to = "TYPE_SYSTEM_ALERT"),
259             @ViewDebug.IntToString(from = TYPE_TOAST, to = "TYPE_TOAST"),
260             @ViewDebug.IntToString(from = TYPE_SYSTEM_OVERLAY, to = "TYPE_SYSTEM_OVERLAY"),
261             @ViewDebug.IntToString(from = TYPE_PRIORITY_PHONE, to = "TYPE_PRIORITY_PHONE"),
262             @ViewDebug.IntToString(from = TYPE_SYSTEM_DIALOG, to = "TYPE_SYSTEM_DIALOG"),
263             @ViewDebug.IntToString(from = TYPE_KEYGUARD_DIALOG, to = "TYPE_KEYGUARD_DIALOG"),
264             @ViewDebug.IntToString(from = TYPE_SYSTEM_ERROR, to = "TYPE_SYSTEM_ERROR"),
265             @ViewDebug.IntToString(from = TYPE_INPUT_METHOD, to = "TYPE_INPUT_METHOD"),
266             @ViewDebug.IntToString(from = TYPE_INPUT_METHOD_DIALOG, to = "TYPE_INPUT_METHOD_DIALOG"),
267             @ViewDebug.IntToString(from = TYPE_WALLPAPER, to = "TYPE_WALLPAPER"),
268             @ViewDebug.IntToString(from = TYPE_STATUS_BAR_PANEL, to = "TYPE_STATUS_BAR_PANEL"),
269             @ViewDebug.IntToString(from = TYPE_SECURE_SYSTEM_OVERLAY, to = "TYPE_SECURE_SYSTEM_OVERLAY"),
270             @ViewDebug.IntToString(from = TYPE_DRAG, to = "TYPE_DRAG"),
271             @ViewDebug.IntToString(from = TYPE_STATUS_BAR_SUB_PANEL, to = "TYPE_STATUS_BAR_SUB_PANEL"),
272             @ViewDebug.IntToString(from = TYPE_POINTER, to = "TYPE_POINTER"),
273             @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR, to = "TYPE_NAVIGATION_BAR"),
274             @ViewDebug.IntToString(from = TYPE_VOLUME_OVERLAY, to = "TYPE_VOLUME_OVERLAY"),
275             @ViewDebug.IntToString(from = TYPE_BOOT_PROGRESS, to = "TYPE_BOOT_PROGRESS"),
276             @ViewDebug.IntToString(from = TYPE_INPUT_CONSUMER, to = "TYPE_INPUT_CONSUMER"),
277             @ViewDebug.IntToString(from = TYPE_DREAM, to = "TYPE_DREAM"),
278             @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR_PANEL, to = "TYPE_NAVIGATION_BAR_PANEL"),
279             @ViewDebug.IntToString(from = TYPE_DISPLAY_OVERLAY, to = "TYPE_DISPLAY_OVERLAY"),
280             @ViewDebug.IntToString(from = TYPE_MAGNIFICATION_OVERLAY, to = "TYPE_MAGNIFICATION_OVERLAY"),
281             @ViewDebug.IntToString(from = TYPE_PRIVATE_PRESENTATION, to = "TYPE_PRIVATE_PRESENTATION"),
282             @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION, to = "TYPE_VOICE_INTERACTION"),
283             @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION_STARTING, to = "TYPE_VOICE_INTERACTION_STARTING"),
284             @ViewDebug.IntToString(from = TYPE_DOCK_DIVIDER, to = "TYPE_DOCK_DIVIDER"),
285             @ViewDebug.IntToString(from = TYPE_QS_DIALOG, to = "TYPE_QS_DIALOG"),
286             @ViewDebug.IntToString(from = TYPE_SCREENSHOT, to = "TYPE_SCREENSHOT")
287         })
288         public int type;
289 
290         /**
291          * Start of window types that represent normal application windows.
292          */
293         public static final int FIRST_APPLICATION_WINDOW = 1;
294 
295         /**
296          * Window type: an application window that serves as the "base" window
297          * of the overall application; all other application windows will
298          * appear on top of it.
299          * In multiuser systems shows only on the owning user's window.
300          */
301         public static final int TYPE_BASE_APPLICATION   = 1;
302 
303         /**
304          * Window type: a normal application window.  The {@link #token} must be
305          * an Activity token identifying who the window belongs to.
306          * In multiuser systems shows only on the owning user's window.
307          */
308         public static final int TYPE_APPLICATION        = 2;
309 
310         /**
311          * Window type: special application window that is displayed while the
312          * application is starting.  Not for use by applications themselves;
313          * this is used by the system to display something until the
314          * application can show its own windows.
315          * In multiuser systems shows on all users' windows.
316          */
317         public static final int TYPE_APPLICATION_STARTING = 3;
318 
319         /**
320          * Window type: a variation on TYPE_APPLICATION that ensures the window
321          * manager will wait for this window to be drawn before the app is shown.
322          * In multiuser systems shows only on the owning user's window.
323          */
324         public static final int TYPE_DRAWN_APPLICATION = 4;
325 
326         /**
327          * End of types of application windows.
328          */
329         public static final int LAST_APPLICATION_WINDOW = 99;
330 
331         /**
332          * Start of types of sub-windows.  The {@link #token} of these windows
333          * must be set to the window they are attached to.  These types of
334          * windows are kept next to their attached window in Z-order, and their
335          * coordinate space is relative to their attached window.
336          */
337         public static final int FIRST_SUB_WINDOW = 1000;
338 
339         /**
340          * Window type: a panel on top of an application window.  These windows
341          * appear on top of their attached window.
342          */
343         public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;
344 
345         /**
346          * Window type: window for showing media (such as video).  These windows
347          * are displayed behind their attached window.
348          */
349         public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW + 1;
350 
351         /**
352          * Window type: a sub-panel on top of an application window.  These
353          * windows are displayed on top their attached window and any
354          * {@link #TYPE_APPLICATION_PANEL} panels.
355          */
356         public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW + 2;
357 
358         /** Window type: like {@link #TYPE_APPLICATION_PANEL}, but layout
359          * of the window happens as that of a top-level window, <em>not</em>
360          * as a child of its container.
361          */
362         public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW + 3;
363 
364         /**
365          * Window type: window for showing overlays on top of media windows.
366          * These windows are displayed between TYPE_APPLICATION_MEDIA and the
367          * application window.  They should be translucent to be useful.  This
368          * is a big ugly hack so:
369          * @hide
370          */
371         public static final int TYPE_APPLICATION_MEDIA_OVERLAY  = FIRST_SUB_WINDOW + 4;
372 
373         /**
374          * Window type: a above sub-panel on top of an application window and it's
375          * sub-panel windows. These windows are displayed on top of their attached window
376          * and any {@link #TYPE_APPLICATION_SUB_PANEL} panels.
377          * @hide
378          */
379         public static final int TYPE_APPLICATION_ABOVE_SUB_PANEL = FIRST_SUB_WINDOW + 5;
380 
381         /**
382          * End of types of sub-windows.
383          */
384         public static final int LAST_SUB_WINDOW = 1999;
385 
386         /**
387          * Start of system-specific window types.  These are not normally
388          * created by applications.
389          */
390         public static final int FIRST_SYSTEM_WINDOW     = 2000;
391 
392         /**
393          * Window type: the status bar.  There can be only one status bar
394          * window; it is placed at the top of the screen, and all other
395          * windows are shifted down so they are below it.
396          * In multiuser systems shows on all users' windows.
397          */
398         public static final int TYPE_STATUS_BAR         = FIRST_SYSTEM_WINDOW;
399 
400         /**
401          * Window type: the search bar.  There can be only one search bar
402          * window; it is placed at the top of the screen.
403          * In multiuser systems shows on all users' windows.
404          */
405         public static final int TYPE_SEARCH_BAR         = FIRST_SYSTEM_WINDOW+1;
406 
407         /**
408          * Window type: phone.  These are non-application windows providing
409          * user interaction with the phone (in particular incoming calls).
410          * These windows are normally placed above all applications, but behind
411          * the status bar.
412          * In multiuser systems shows on all users' windows.
413          */
414         public static final int TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2;
415 
416         /**
417          * Window type: system window, such as low power alert. These windows
418          * are always on top of application windows.
419          * In multiuser systems shows only on the owning user's window.
420          */
421         public static final int TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3;
422 
423         /**
424          * Window type: keyguard window.
425          * In multiuser systems shows on all users' windows.
426          * @removed
427          */
428         public static final int TYPE_KEYGUARD           = FIRST_SYSTEM_WINDOW+4;
429 
430         /**
431          * Window type: transient notifications.
432          * In multiuser systems shows only on the owning user's window.
433          */
434         public static final int TYPE_TOAST              = FIRST_SYSTEM_WINDOW+5;
435 
436         /**
437          * Window type: system overlay windows, which need to be displayed
438          * on top of everything else.  These windows must not take input
439          * focus, or they will interfere with the keyguard.
440          * In multiuser systems shows only on the owning user's window.
441          */
442         public static final int TYPE_SYSTEM_OVERLAY     = FIRST_SYSTEM_WINDOW+6;
443 
444         /**
445          * Window type: priority phone UI, which needs to be displayed even if
446          * the keyguard is active.  These windows must not take input
447          * focus, or they will interfere with the keyguard.
448          * In multiuser systems shows on all users' windows.
449          */
450         public static final int TYPE_PRIORITY_PHONE     = FIRST_SYSTEM_WINDOW+7;
451 
452         /**
453          * Window type: panel that slides out from the status bar
454          * In multiuser systems shows on all users' windows.
455          */
456         public static final int TYPE_SYSTEM_DIALOG      = FIRST_SYSTEM_WINDOW+8;
457 
458         /**
459          * Window type: dialogs that the keyguard shows
460          * In multiuser systems shows on all users' windows.
461          */
462         public static final int TYPE_KEYGUARD_DIALOG    = FIRST_SYSTEM_WINDOW+9;
463 
464         /**
465          * Window type: internal system error windows, appear on top of
466          * everything they can.
467          * In multiuser systems shows only on the owning user's window.
468          */
469         public static final int TYPE_SYSTEM_ERROR       = FIRST_SYSTEM_WINDOW+10;
470 
471         /**
472          * Window type: internal input methods windows, which appear above
473          * the normal UI.  Application windows may be resized or panned to keep
474          * the input focus visible while this window is displayed.
475          * In multiuser systems shows only on the owning user's window.
476          */
477         public static final int TYPE_INPUT_METHOD       = FIRST_SYSTEM_WINDOW+11;
478 
479         /**
480          * Window type: internal input methods dialog windows, which appear above
481          * the current input method window.
482          * In multiuser systems shows only on the owning user's window.
483          */
484         public static final int TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12;
485 
486         /**
487          * Window type: wallpaper window, placed behind any window that wants
488          * to sit on top of the wallpaper.
489          * In multiuser systems shows only on the owning user's window.
490          */
491         public static final int TYPE_WALLPAPER          = FIRST_SYSTEM_WINDOW+13;
492 
493         /**
494          * Window type: panel that slides out from over the status bar
495          * In multiuser systems shows on all users' windows.
496          */
497         public static final int TYPE_STATUS_BAR_PANEL   = FIRST_SYSTEM_WINDOW+14;
498 
499         /**
500          * Window type: secure system overlay windows, which need to be displayed
501          * on top of everything else.  These windows must not take input
502          * focus, or they will interfere with the keyguard.
503          *
504          * This is exactly like {@link #TYPE_SYSTEM_OVERLAY} except that only the
505          * system itself is allowed to create these overlays.  Applications cannot
506          * obtain permission to create secure system overlays.
507          *
508          * In multiuser systems shows only on the owning user's window.
509          * @hide
510          */
511         public static final int TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15;
512 
513         /**
514          * Window type: the drag-and-drop pseudowindow.  There is only one
515          * drag layer (at most), and it is placed on top of all other windows.
516          * In multiuser systems shows only on the owning user's window.
517          * @hide
518          */
519         public static final int TYPE_DRAG               = FIRST_SYSTEM_WINDOW+16;
520 
521         /**
522          * Window type: panel that slides out from under the status bar
523          * In multiuser systems shows on all users' windows.
524          * @hide
525          */
526         public static final int TYPE_STATUS_BAR_SUB_PANEL = FIRST_SYSTEM_WINDOW+17;
527 
528         /**
529          * Window type: (mouse) pointer
530          * In multiuser systems shows on all users' windows.
531          * @hide
532          */
533         public static final int TYPE_POINTER = FIRST_SYSTEM_WINDOW+18;
534 
535         /**
536          * Window type: Navigation bar (when distinct from status bar)
537          * In multiuser systems shows on all users' windows.
538          * @hide
539          */
540         public static final int TYPE_NAVIGATION_BAR = FIRST_SYSTEM_WINDOW+19;
541 
542         /**
543          * Window type: The volume level overlay/dialog shown when the user
544          * changes the system volume.
545          * In multiuser systems shows on all users' windows.
546          * @hide
547          */
548         public static final int TYPE_VOLUME_OVERLAY = FIRST_SYSTEM_WINDOW+20;
549 
550         /**
551          * Window type: The boot progress dialog, goes on top of everything
552          * in the world.
553          * In multiuser systems shows on all users' windows.
554          * @hide
555          */
556         public static final int TYPE_BOOT_PROGRESS = FIRST_SYSTEM_WINDOW+21;
557 
558         /**
559          * Window type to consume input events when the systemUI bars are hidden.
560          * In multiuser systems shows on all users' windows.
561          * @hide
562          */
563         public static final int TYPE_INPUT_CONSUMER = FIRST_SYSTEM_WINDOW+22;
564 
565         /**
566          * Window type: Dreams (screen saver) window, just above keyguard.
567          * In multiuser systems shows only on the owning user's window.
568          * @hide
569          */
570         public static final int TYPE_DREAM = FIRST_SYSTEM_WINDOW+23;
571 
572         /**
573          * Window type: Navigation bar panel (when navigation bar is distinct from status bar)
574          * In multiuser systems shows on all users' windows.
575          * @hide
576          */
577         public static final int TYPE_NAVIGATION_BAR_PANEL = FIRST_SYSTEM_WINDOW+24;
578 
579         /**
580          * Window type: Display overlay window.  Used to simulate secondary display devices.
581          * In multiuser systems shows on all users' windows.
582          * @hide
583          */
584         public static final int TYPE_DISPLAY_OVERLAY = FIRST_SYSTEM_WINDOW+26;
585 
586         /**
587          * Window type: Magnification overlay window. Used to highlight the magnified
588          * portion of a display when accessibility magnification is enabled.
589          * In multiuser systems shows on all users' windows.
590          * @hide
591          */
592         public static final int TYPE_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW+27;
593 
594         /**
595          * Window type: keyguard scrim window. Shows if keyguard needs to be restarted.
596          * In multiuser systems shows on all users' windows.
597          * @hide
598          */
599         public static final int TYPE_KEYGUARD_SCRIM           = FIRST_SYSTEM_WINDOW+29;
600 
601         /**
602          * Window type: Window for Presentation on top of private
603          * virtual display.
604          */
605         public static final int TYPE_PRIVATE_PRESENTATION = FIRST_SYSTEM_WINDOW+30;
606 
607         /**
608          * Window type: Windows in the voice interaction layer.
609          * @hide
610          */
611         public static final int TYPE_VOICE_INTERACTION = FIRST_SYSTEM_WINDOW+31;
612 
613         /**
614          * Window type: Windows that are overlaid <em>only</em> by a connected {@link
615          * android.accessibilityservice.AccessibilityService} for interception of
616          * user interactions without changing the windows an accessibility service
617          * can introspect. In particular, an accessibility service can introspect
618          * only windows that a sighted user can interact with which is they can touch
619          * these windows or can type into these windows. For example, if there
620          * is a full screen accessibility overlay that is touchable, the windows
621          * below it will be introspectable by an accessibility service even though
622          * they are covered by a touchable window.
623          */
624         public static final int TYPE_ACCESSIBILITY_OVERLAY = FIRST_SYSTEM_WINDOW+32;
625 
626         /**
627          * Window type: Starting window for voice interaction layer.
628          * @hide
629          */
630         public static final int TYPE_VOICE_INTERACTION_STARTING = FIRST_SYSTEM_WINDOW+33;
631 
632         /**
633          * Window for displaying a handle used for resizing docked stacks. This window is owned
634          * by the system process.
635          * @hide
636          */
637         public static final int TYPE_DOCK_DIVIDER = FIRST_SYSTEM_WINDOW+34;
638 
639         /**
640          * Window type: like {@link #TYPE_APPLICATION_ATTACHED_DIALOG}, but used
641          * by Quick Settings Tiles.
642          * @hide
643          */
644         public static final int TYPE_QS_DIALOG = FIRST_SYSTEM_WINDOW+35;
645 
646         /**
647          * Window type: shares similar characteristics with {@link #TYPE_DREAM}. The layer is
648          * reserved for screenshot region selection. These windows must not take input focus.
649          * @hide
650          */
651         public static final int TYPE_SCREENSHOT = FIRST_SYSTEM_WINDOW + 36;
652 
653         /**
654          * End of types of system windows.
655          */
656         public static final int LAST_SYSTEM_WINDOW      = 2999;
657 
658         /** @deprecated this is ignored, this value is set automatically when needed. */
659         @Deprecated
660         public static final int MEMORY_TYPE_NORMAL = 0;
661         /** @deprecated this is ignored, this value is set automatically when needed. */
662         @Deprecated
663         public static final int MEMORY_TYPE_HARDWARE = 1;
664         /** @deprecated this is ignored, this value is set automatically when needed. */
665         @Deprecated
666         public static final int MEMORY_TYPE_GPU = 2;
667         /** @deprecated this is ignored, this value is set automatically when needed. */
668         @Deprecated
669         public static final int MEMORY_TYPE_PUSH_BUFFERS = 3;
670 
671         /**
672          * @deprecated this is ignored
673          */
674         @Deprecated
675         public int memoryType;
676 
677         /** Window flag: as long as this window is visible to the user, allow
678          *  the lock screen to activate while the screen is on.
679          *  This can be used independently, or in combination with
680          *  {@link #FLAG_KEEP_SCREEN_ON} and/or {@link #FLAG_SHOW_WHEN_LOCKED} */
681         public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON     = 0x00000001;
682 
683         /** Window flag: everything behind this window will be dimmed.
684          *  Use {@link #dimAmount} to control the amount of dim. */
685         public static final int FLAG_DIM_BEHIND        = 0x00000002;
686 
687         /** Window flag: blur everything behind this window.
688          * @deprecated Blurring is no longer supported. */
689         @Deprecated
690         public static final int FLAG_BLUR_BEHIND        = 0x00000004;
691 
692         /** Window flag: this window won't ever get key input focus, so the
693          * user can not send key or other button events to it.  Those will
694          * instead go to whatever focusable window is behind it.  This flag
695          * will also enable {@link #FLAG_NOT_TOUCH_MODAL} whether or not that
696          * is explicitly set.
697          *
698          * <p>Setting this flag also implies that the window will not need to
699          * interact with
700          * a soft input method, so it will be Z-ordered and positioned
701          * independently of any active input method (typically this means it
702          * gets Z-ordered on top of the input method, so it can use the full
703          * screen for its content and cover the input method if needed.  You
704          * can use {@link #FLAG_ALT_FOCUSABLE_IM} to modify this behavior. */
705         public static final int FLAG_NOT_FOCUSABLE      = 0x00000008;
706 
707         /** Window flag: this window can never receive touch events. */
708         public static final int FLAG_NOT_TOUCHABLE      = 0x00000010;
709 
710         /** Window flag: even when this window is focusable (its
711          * {@link #FLAG_NOT_FOCUSABLE} is not set), allow any pointer events
712          * outside of the window to be sent to the windows behind it.  Otherwise
713          * it will consume all pointer events itself, regardless of whether they
714          * are inside of the window. */
715         public static final int FLAG_NOT_TOUCH_MODAL    = 0x00000020;
716 
717         /** Window flag: when set, if the device is asleep when the touch
718          * screen is pressed, you will receive this first touch event.  Usually
719          * the first touch event is consumed by the system since the user can
720          * not see what they are pressing on.
721          *
722          * @deprecated This flag has no effect.
723          */
724         @Deprecated
725         public static final int FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040;
726 
727         /** Window flag: as long as this window is visible to the user, keep
728          *  the device's screen turned on and bright. */
729         public static final int FLAG_KEEP_SCREEN_ON     = 0x00000080;
730 
731         /** Window flag: place the window within the entire screen, ignoring
732          *  decorations around the border (such as the status bar).  The
733          *  window must correctly position its contents to take the screen
734          *  decoration into account.  This flag is normally set for you
735          *  by Window as described in {@link Window#setFlags}. */
736         public static final int FLAG_LAYOUT_IN_SCREEN   = 0x00000100;
737 
738         /** Window flag: allow window to extend outside of the screen. */
739         public static final int FLAG_LAYOUT_NO_LIMITS   = 0x00000200;
740 
741         /**
742          * Window flag: hide all screen decorations (such as the status bar) while
743          * this window is displayed.  This allows the window to use the entire
744          * display space for itself -- the status bar will be hidden when
745          * an app window with this flag set is on the top layer. A fullscreen window
746          * will ignore a value of {@link #SOFT_INPUT_ADJUST_RESIZE} for the window's
747          * {@link #softInputMode} field; the window will stay fullscreen
748          * and will not resize.
749          *
750          * <p>This flag can be controlled in your theme through the
751          * {@link android.R.attr#windowFullscreen} attribute; this attribute
752          * is automatically set for you in the standard fullscreen themes
753          * such as {@link android.R.style#Theme_NoTitleBar_Fullscreen},
754          * {@link android.R.style#Theme_Black_NoTitleBar_Fullscreen},
755          * {@link android.R.style#Theme_Light_NoTitleBar_Fullscreen},
756          * {@link android.R.style#Theme_Holo_NoActionBar_Fullscreen},
757          * {@link android.R.style#Theme_Holo_Light_NoActionBar_Fullscreen},
758          * {@link android.R.style#Theme_DeviceDefault_NoActionBar_Fullscreen}, and
759          * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_Fullscreen}.</p>
760          */
761         public static final int FLAG_FULLSCREEN      = 0x00000400;
762 
763         /** Window flag: override {@link #FLAG_FULLSCREEN} and force the
764          *  screen decorations (such as the status bar) to be shown. */
765         public static final int FLAG_FORCE_NOT_FULLSCREEN   = 0x00000800;
766 
767         /** Window flag: turn on dithering when compositing this window to
768          *  the screen.
769          * @deprecated This flag is no longer used. */
770         @Deprecated
771         public static final int FLAG_DITHER             = 0x00001000;
772 
773         /** Window flag: treat the content of the window as secure, preventing
774          * it from appearing in screenshots or from being viewed on non-secure
775          * displays.
776          *
777          * <p>See {@link android.view.Display#FLAG_SECURE} for more details about
778          * secure surfaces and secure displays.
779          */
780         public static final int FLAG_SECURE             = 0x00002000;
781 
782         /** Window flag: a special mode where the layout parameters are used
783          * to perform scaling of the surface when it is composited to the
784          * screen. */
785         public static final int FLAG_SCALED             = 0x00004000;
786 
787         /** Window flag: intended for windows that will often be used when the user is
788          * holding the screen against their face, it will aggressively filter the event
789          * stream to prevent unintended presses in this situation that may not be
790          * desired for a particular window, when such an event stream is detected, the
791          * application will receive a CANCEL motion event to indicate this so applications
792          * can handle this accordingly by taking no action on the event
793          * until the finger is released. */
794         public static final int FLAG_IGNORE_CHEEK_PRESSES    = 0x00008000;
795 
796         /** Window flag: a special option only for use in combination with
797          * {@link #FLAG_LAYOUT_IN_SCREEN}.  When requesting layout in the
798          * screen your window may appear on top of or behind screen decorations
799          * such as the status bar.  By also including this flag, the window
800          * manager will report the inset rectangle needed to ensure your
801          * content is not covered by screen decorations.  This flag is normally
802          * set for you by Window as described in {@link Window#setFlags}.*/
803         public static final int FLAG_LAYOUT_INSET_DECOR = 0x00010000;
804 
805         /** Window flag: invert the state of {@link #FLAG_NOT_FOCUSABLE} with
806          * respect to how this window interacts with the current method.  That
807          * is, if FLAG_NOT_FOCUSABLE is set and this flag is set, then the
808          * window will behave as if it needs to interact with the input method
809          * and thus be placed behind/away from it; if FLAG_NOT_FOCUSABLE is
810          * not set and this flag is set, then the window will behave as if it
811          * doesn't need to interact with the input method and can be placed
812          * to use more space and cover the input method.
813          */
814         public static final int FLAG_ALT_FOCUSABLE_IM = 0x00020000;
815 
816         /** Window flag: if you have set {@link #FLAG_NOT_TOUCH_MODAL}, you
817          * can set this flag to receive a single special MotionEvent with
818          * the action
819          * {@link MotionEvent#ACTION_OUTSIDE MotionEvent.ACTION_OUTSIDE} for
820          * touches that occur outside of your window.  Note that you will not
821          * receive the full down/move/up gesture, only the location of the
822          * first down as an ACTION_OUTSIDE.
823          */
824         public static final int FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000;
825 
826         /** Window flag: special flag to let windows be shown when the screen
827          * is locked. This will let application windows take precedence over
828          * key guard or any other lock screens. Can be used with
829          * {@link #FLAG_KEEP_SCREEN_ON} to turn screen on and display windows
830          * directly before showing the key guard window.  Can be used with
831          * {@link #FLAG_DISMISS_KEYGUARD} to automatically fully dismisss
832          * non-secure keyguards.  This flag only applies to the top-most
833          * full-screen window.
834          */
835         public static final int FLAG_SHOW_WHEN_LOCKED = 0x00080000;
836 
837         /** Window flag: ask that the system wallpaper be shown behind
838          * your window.  The window surface must be translucent to be able
839          * to actually see the wallpaper behind it; this flag just ensures
840          * that the wallpaper surface will be there if this window actually
841          * has translucent regions.
842          *
843          * <p>This flag can be controlled in your theme through the
844          * {@link android.R.attr#windowShowWallpaper} attribute; this attribute
845          * is automatically set for you in the standard wallpaper themes
846          * such as {@link android.R.style#Theme_Wallpaper},
847          * {@link android.R.style#Theme_Wallpaper_NoTitleBar},
848          * {@link android.R.style#Theme_Wallpaper_NoTitleBar_Fullscreen},
849          * {@link android.R.style#Theme_Holo_Wallpaper},
850          * {@link android.R.style#Theme_Holo_Wallpaper_NoTitleBar},
851          * {@link android.R.style#Theme_DeviceDefault_Wallpaper}, and
852          * {@link android.R.style#Theme_DeviceDefault_Wallpaper_NoTitleBar}.</p>
853          */
854         public static final int FLAG_SHOW_WALLPAPER = 0x00100000;
855 
856         /** Window flag: when set as a window is being added or made
857          * visible, once the window has been shown then the system will
858          * poke the power manager's user activity (as if the user had woken
859          * up the device) to turn the screen on. */
860         public static final int FLAG_TURN_SCREEN_ON = 0x00200000;
861 
862         /** Window flag: when set the window will cause the keyguard to
863          * be dismissed, only if it is not a secure lock keyguard.  Because such
864          * a keyguard is not needed for security, it will never re-appear if
865          * the user navigates to another window (in contrast to
866          * {@link #FLAG_SHOW_WHEN_LOCKED}, which will only temporarily
867          * hide both secure and non-secure keyguards but ensure they reappear
868          * when the user moves to another UI that doesn't hide them).
869          * If the keyguard is currently active and is secure (requires an
870          * unlock pattern) than the user will still need to confirm it before
871          * seeing this window, unless {@link #FLAG_SHOW_WHEN_LOCKED} has
872          * also been set.
873          */
874         public static final int FLAG_DISMISS_KEYGUARD = 0x00400000;
875 
876         /** Window flag: when set the window will accept for touch events
877          * outside of its bounds to be sent to other windows that also
878          * support split touch.  When this flag is not set, the first pointer
879          * that goes down determines the window to which all subsequent touches
880          * go until all pointers go up.  When this flag is set, each pointer
881          * (not necessarily the first) that goes down determines the window
882          * to which all subsequent touches of that pointer will go until that
883          * pointer goes up thereby enabling touches with multiple pointers
884          * to be split across multiple windows.
885          */
886         public static final int FLAG_SPLIT_TOUCH = 0x00800000;
887 
888         /**
889          * <p>Indicates whether this window should be hardware accelerated.
890          * Requesting hardware acceleration does not guarantee it will happen.</p>
891          *
892          * <p>This flag can be controlled programmatically <em>only</em> to enable
893          * hardware acceleration. To enable hardware acceleration for a given
894          * window programmatically, do the following:</p>
895          *
896          * <pre>
897          * Window w = activity.getWindow(); // in Activity's onCreate() for instance
898          * w.setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
899          *         WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
900          * </pre>
901          *
902          * <p>It is important to remember that this flag <strong>must</strong>
903          * be set before setting the content view of your activity or dialog.</p>
904          *
905          * <p>This flag cannot be used to disable hardware acceleration after it
906          * was enabled in your manifest using
907          * {@link android.R.attr#hardwareAccelerated}. If you need to selectively
908          * and programmatically disable hardware acceleration (for automated testing
909          * for instance), make sure it is turned off in your manifest and enable it
910          * on your activity or dialog when you need it instead, using the method
911          * described above.</p>
912          *
913          * <p>This flag is automatically set by the system if the
914          * {@link android.R.attr#hardwareAccelerated android:hardwareAccelerated}
915          * XML attribute is set to true on an activity or on the application.</p>
916          */
917         public static final int FLAG_HARDWARE_ACCELERATED = 0x01000000;
918 
919         /**
920          * Window flag: allow window contents to extend in to the screen's
921          * overscan area, if there is one.  The window should still correctly
922          * position its contents to take the overscan area into account.
923          *
924          * <p>This flag can be controlled in your theme through the
925          * {@link android.R.attr#windowOverscan} attribute; this attribute
926          * is automatically set for you in the standard overscan themes
927          * such as
928          * {@link android.R.style#Theme_Holo_NoActionBar_Overscan},
929          * {@link android.R.style#Theme_Holo_Light_NoActionBar_Overscan},
930          * {@link android.R.style#Theme_DeviceDefault_NoActionBar_Overscan}, and
931          * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_Overscan}.</p>
932          *
933          * <p>When this flag is enabled for a window, its normal content may be obscured
934          * to some degree by the overscan region of the display.  To ensure key parts of
935          * that content are visible to the user, you can use
936          * {@link View#setFitsSystemWindows(boolean) View.setFitsSystemWindows(boolean)}
937          * to set the point in the view hierarchy where the appropriate offsets should
938          * be applied.  (This can be done either by directly calling this function, using
939          * the {@link android.R.attr#fitsSystemWindows} attribute in your view hierarchy,
940          * or implementing you own {@link View#fitSystemWindows(android.graphics.Rect)
941          * View.fitSystemWindows(Rect)} method).</p>
942          *
943          * <p>This mechanism for positioning content elements is identical to its equivalent
944          * use with layout and {@link View#setSystemUiVisibility(int)
945          * View.setSystemUiVisibility(int)}; here is an example layout that will correctly
946          * position its UI elements with this overscan flag is set:</p>
947          *
948          * {@sample development/samples/ApiDemos/res/layout/overscan_activity.xml complete}
949          */
950         public static final int FLAG_LAYOUT_IN_OVERSCAN = 0x02000000;
951 
952         /**
953          * Window flag: request a translucent status bar with minimal system-provided
954          * background protection.
955          *
956          * <p>This flag can be controlled in your theme through the
957          * {@link android.R.attr#windowTranslucentStatus} attribute; this attribute
958          * is automatically set for you in the standard translucent decor themes
959          * such as
960          * {@link android.R.style#Theme_Holo_NoActionBar_TranslucentDecor},
961          * {@link android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor},
962          * {@link android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor}, and
963          * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor}.</p>
964          *
965          * <p>When this flag is enabled for a window, it automatically sets
966          * the system UI visibility flags {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
967          * {@link View#SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN}.</p>
968          */
969         public static final int FLAG_TRANSLUCENT_STATUS = 0x04000000;
970 
971         /**
972          * Window flag: request a translucent navigation bar with minimal system-provided
973          * background protection.
974          *
975          * <p>This flag can be controlled in your theme through the
976          * {@link android.R.attr#windowTranslucentNavigation} attribute; this attribute
977          * is automatically set for you in the standard translucent decor themes
978          * such as
979          * {@link android.R.style#Theme_Holo_NoActionBar_TranslucentDecor},
980          * {@link android.R.style#Theme_Holo_Light_NoActionBar_TranslucentDecor},
981          * {@link android.R.style#Theme_DeviceDefault_NoActionBar_TranslucentDecor}, and
982          * {@link android.R.style#Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor}.</p>
983          *
984          * <p>When this flag is enabled for a window, it automatically sets
985          * the system UI visibility flags {@link View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
986          * {@link View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}.</p>
987          */
988         public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000;
989 
990         /**
991          * Flag for a window in local focus mode.
992          * Window in local focus mode can control focus independent of window manager using
993          * {@link Window#setLocalFocus(boolean, boolean)}.
994          * Usually window in this mode will not get touch/key events from window manager, but will
995          * get events only via local injection using {@link Window#injectInputEvent(InputEvent)}.
996          */
997         public static final int FLAG_LOCAL_FOCUS_MODE = 0x10000000;
998 
999         /** Window flag: Enable touches to slide out of a window into neighboring
1000          * windows in mid-gesture instead of being captured for the duration of
1001          * the gesture.
1002          *
1003          * This flag changes the behavior of touch focus for this window only.
1004          * Touches can slide out of the window but they cannot necessarily slide
1005          * back in (unless the other window with touch focus permits it).
1006          *
1007          * {@hide}
1008          */
1009         public static final int FLAG_SLIPPERY = 0x20000000;
1010 
1011         /**
1012          * Window flag: When requesting layout with an attached window, the attached window may
1013          * overlap with the screen decorations of the parent window such as the navigation bar. By
1014          * including this flag, the window manager will layout the attached window within the decor
1015          * frame of the parent window such that it doesn't overlap with screen decorations.
1016          */
1017         public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 0x40000000;
1018 
1019         /**
1020          * Flag indicating that this Window is responsible for drawing the background for the
1021          * system bars. If set, the system bars are drawn with a transparent background and the
1022          * corresponding areas in this window are filled with the colors specified in
1023          * {@link Window#getStatusBarColor()} and {@link Window#getNavigationBarColor()}.
1024          */
1025         public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;
1026 
1027         /**
1028          * Various behavioral options/flags.  Default is none.
1029          *
1030          * @see #FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
1031          * @see #FLAG_DIM_BEHIND
1032          * @see #FLAG_NOT_FOCUSABLE
1033          * @see #FLAG_NOT_TOUCHABLE
1034          * @see #FLAG_NOT_TOUCH_MODAL
1035          * @see #FLAG_TOUCHABLE_WHEN_WAKING
1036          * @see #FLAG_KEEP_SCREEN_ON
1037          * @see #FLAG_LAYOUT_IN_SCREEN
1038          * @see #FLAG_LAYOUT_NO_LIMITS
1039          * @see #FLAG_FULLSCREEN
1040          * @see #FLAG_FORCE_NOT_FULLSCREEN
1041          * @see #FLAG_SECURE
1042          * @see #FLAG_SCALED
1043          * @see #FLAG_IGNORE_CHEEK_PRESSES
1044          * @see #FLAG_LAYOUT_INSET_DECOR
1045          * @see #FLAG_ALT_FOCUSABLE_IM
1046          * @see #FLAG_WATCH_OUTSIDE_TOUCH
1047          * @see #FLAG_SHOW_WHEN_LOCKED
1048          * @see #FLAG_SHOW_WALLPAPER
1049          * @see #FLAG_TURN_SCREEN_ON
1050          * @see #FLAG_DISMISS_KEYGUARD
1051          * @see #FLAG_SPLIT_TOUCH
1052          * @see #FLAG_HARDWARE_ACCELERATED
1053          * @see #FLAG_LOCAL_FOCUS_MODE
1054          * @see #FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
1055          */
1056         @ViewDebug.ExportedProperty(flagMapping = {
1057             @ViewDebug.FlagToString(mask = FLAG_ALLOW_LOCK_WHILE_SCREEN_ON, equals = FLAG_ALLOW_LOCK_WHILE_SCREEN_ON,
1058                     name = "FLAG_ALLOW_LOCK_WHILE_SCREEN_ON"),
1059             @ViewDebug.FlagToString(mask = FLAG_DIM_BEHIND, equals = FLAG_DIM_BEHIND,
1060                     name = "FLAG_DIM_BEHIND"),
1061             @ViewDebug.FlagToString(mask = FLAG_BLUR_BEHIND, equals = FLAG_BLUR_BEHIND,
1062                     name = "FLAG_BLUR_BEHIND"),
1063             @ViewDebug.FlagToString(mask = FLAG_NOT_FOCUSABLE, equals = FLAG_NOT_FOCUSABLE,
1064                     name = "FLAG_NOT_FOCUSABLE"),
1065             @ViewDebug.FlagToString(mask = FLAG_NOT_TOUCHABLE, equals = FLAG_NOT_TOUCHABLE,
1066                     name = "FLAG_NOT_TOUCHABLE"),
1067             @ViewDebug.FlagToString(mask = FLAG_NOT_TOUCH_MODAL, equals = FLAG_NOT_TOUCH_MODAL,
1068                     name = "FLAG_NOT_TOUCH_MODAL"),
1069             @ViewDebug.FlagToString(mask = FLAG_TOUCHABLE_WHEN_WAKING, equals = FLAG_TOUCHABLE_WHEN_WAKING,
1070                     name = "FLAG_TOUCHABLE_WHEN_WAKING"),
1071             @ViewDebug.FlagToString(mask = FLAG_KEEP_SCREEN_ON, equals = FLAG_KEEP_SCREEN_ON,
1072                     name = "FLAG_KEEP_SCREEN_ON"),
1073             @ViewDebug.FlagToString(mask = FLAG_LAYOUT_IN_SCREEN, equals = FLAG_LAYOUT_IN_SCREEN,
1074                     name = "FLAG_LAYOUT_IN_SCREEN"),
1075             @ViewDebug.FlagToString(mask = FLAG_LAYOUT_NO_LIMITS, equals = FLAG_LAYOUT_NO_LIMITS,
1076                     name = "FLAG_LAYOUT_NO_LIMITS"),
1077             @ViewDebug.FlagToString(mask = FLAG_FULLSCREEN, equals = FLAG_FULLSCREEN,
1078                     name = "FLAG_FULLSCREEN"),
1079             @ViewDebug.FlagToString(mask = FLAG_FORCE_NOT_FULLSCREEN, equals = FLAG_FORCE_NOT_FULLSCREEN,
1080                     name = "FLAG_FORCE_NOT_FULLSCREEN"),
1081             @ViewDebug.FlagToString(mask = FLAG_DITHER, equals = FLAG_DITHER,
1082                     name = "FLAG_DITHER"),
1083             @ViewDebug.FlagToString(mask = FLAG_SECURE, equals = FLAG_SECURE,
1084                     name = "FLAG_SECURE"),
1085             @ViewDebug.FlagToString(mask = FLAG_SCALED, equals = FLAG_SCALED,
1086                     name = "FLAG_SCALED"),
1087             @ViewDebug.FlagToString(mask = FLAG_IGNORE_CHEEK_PRESSES, equals = FLAG_IGNORE_CHEEK_PRESSES,
1088                     name = "FLAG_IGNORE_CHEEK_PRESSES"),
1089             @ViewDebug.FlagToString(mask = FLAG_LAYOUT_INSET_DECOR, equals = FLAG_LAYOUT_INSET_DECOR,
1090                     name = "FLAG_LAYOUT_INSET_DECOR"),
1091             @ViewDebug.FlagToString(mask = FLAG_ALT_FOCUSABLE_IM, equals = FLAG_ALT_FOCUSABLE_IM,
1092                     name = "FLAG_ALT_FOCUSABLE_IM"),
1093             @ViewDebug.FlagToString(mask = FLAG_WATCH_OUTSIDE_TOUCH, equals = FLAG_WATCH_OUTSIDE_TOUCH,
1094                     name = "FLAG_WATCH_OUTSIDE_TOUCH"),
1095             @ViewDebug.FlagToString(mask = FLAG_SHOW_WHEN_LOCKED, equals = FLAG_SHOW_WHEN_LOCKED,
1096                     name = "FLAG_SHOW_WHEN_LOCKED"),
1097             @ViewDebug.FlagToString(mask = FLAG_SHOW_WALLPAPER, equals = FLAG_SHOW_WALLPAPER,
1098                     name = "FLAG_SHOW_WALLPAPER"),
1099             @ViewDebug.FlagToString(mask = FLAG_TURN_SCREEN_ON, equals = FLAG_TURN_SCREEN_ON,
1100                     name = "FLAG_TURN_SCREEN_ON"),
1101             @ViewDebug.FlagToString(mask = FLAG_DISMISS_KEYGUARD, equals = FLAG_DISMISS_KEYGUARD,
1102                     name = "FLAG_DISMISS_KEYGUARD"),
1103             @ViewDebug.FlagToString(mask = FLAG_SPLIT_TOUCH, equals = FLAG_SPLIT_TOUCH,
1104                     name = "FLAG_SPLIT_TOUCH"),
1105             @ViewDebug.FlagToString(mask = FLAG_HARDWARE_ACCELERATED, equals = FLAG_HARDWARE_ACCELERATED,
1106                     name = "FLAG_HARDWARE_ACCELERATED"),
1107             @ViewDebug.FlagToString(mask = FLAG_LOCAL_FOCUS_MODE, equals = FLAG_LOCAL_FOCUS_MODE,
1108                     name = "FLAG_LOCAL_FOCUS_MODE"),
1109             @ViewDebug.FlagToString(mask = FLAG_TRANSLUCENT_STATUS, equals = FLAG_TRANSLUCENT_STATUS,
1110                     name = "FLAG_TRANSLUCENT_STATUS"),
1111             @ViewDebug.FlagToString(mask = FLAG_TRANSLUCENT_NAVIGATION, equals = FLAG_TRANSLUCENT_NAVIGATION,
1112                     name = "FLAG_TRANSLUCENT_NAVIGATION"),
1113             @ViewDebug.FlagToString(mask = FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, equals = FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
1114                     name = "FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS")
1115         }, formatToHexString = true)
1116         public int flags;
1117 
1118         /**
1119          * If the window has requested hardware acceleration, but this is not
1120          * allowed in the process it is in, then still render it as if it is
1121          * hardware accelerated.  This is used for the starting preview windows
1122          * in the system process, which don't need to have the overhead of
1123          * hardware acceleration (they are just a static rendering), but should
1124          * be rendered as such to match the actual window of the app even if it
1125          * is hardware accelerated.
1126          * Even if the window isn't hardware accelerated, still do its rendering
1127          * as if it was.
1128          * Like {@link #FLAG_HARDWARE_ACCELERATED} except for trusted system windows
1129          * that need hardware acceleration (e.g. LockScreen), where hardware acceleration
1130          * is generally disabled. This flag must be specified in addition to
1131          * {@link #FLAG_HARDWARE_ACCELERATED} to enable hardware acceleration for system
1132          * windows.
1133          *
1134          * @hide
1135          */
1136         public static final int PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED = 0x00000001;
1137 
1138         /**
1139          * In the system process, we globally do not use hardware acceleration
1140          * because there are many threads doing UI there and they conflict.
1141          * If certain parts of the UI that really do want to use hardware
1142          * acceleration, this flag can be set to force it.  This is basically
1143          * for the lock screen.  Anyone else using it, you are probably wrong.
1144          *
1145          * @hide
1146          */
1147         public static final int PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED = 0x00000002;
1148 
1149         /**
1150          * By default, wallpapers are sent new offsets when the wallpaper is scrolled. Wallpapers
1151          * may elect to skip these notifications if they are not doing anything productive with
1152          * them (they do not affect the wallpaper scrolling operation) by calling
1153          * {@link
1154          * android.service.wallpaper.WallpaperService.Engine#setOffsetNotificationsEnabled(boolean)}.
1155          *
1156          * @hide
1157          */
1158         public static final int PRIVATE_FLAG_WANTS_OFFSET_NOTIFICATIONS = 0x00000004;
1159 
1160         /** In a multiuser system if this flag is set and the owner is a system process then this
1161          * window will appear on all user screens. This overrides the default behavior of window
1162          * types that normally only appear on the owning user's screen. Refer to each window type
1163          * to determine its default behavior.
1164          *
1165          * {@hide} */
1166         public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;
1167 
1168         /**
1169          * Never animate position changes of the window.
1170          *
1171          * {@hide} */
1172         public static final int PRIVATE_FLAG_NO_MOVE_ANIMATION = 0x00000040;
1173 
1174         /** Window flag: special flag to limit the size of the window to be
1175          * original size ([320x480] x density). Used to create window for applications
1176          * running under compatibility mode.
1177          *
1178          * {@hide} */
1179         public static final int PRIVATE_FLAG_COMPATIBLE_WINDOW = 0x00000080;
1180 
1181         /** Window flag: a special option intended for system dialogs.  When
1182          * this flag is set, the window will demand focus unconditionally when
1183          * it is created.
1184          * {@hide} */
1185         public static final int PRIVATE_FLAG_SYSTEM_ERROR = 0x00000100;
1186 
1187         /** Window flag: maintain the previous translucent decor state when this window
1188          * becomes top-most.
1189          * {@hide} */
1190         public static final int PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR = 0x00000200;
1191 
1192         /**
1193          * Flag whether the current window is a keyguard window, meaning that it will hide all other
1194          * windows behind it except for windows with flag {@link #FLAG_SHOW_WHEN_LOCKED} set.
1195          * Further, this can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
1196          * {@hide}
1197          */
1198         public static final int PRIVATE_FLAG_KEYGUARD = 0x00000400;
1199 
1200         /**
1201          * Flag that prevents the wallpaper behind the current window from receiving touch events.
1202          *
1203          * {@hide}
1204          */
1205         public static final int PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS = 0x00000800;
1206 
1207         /**
1208          * Flag to force the status bar window to be visible all the time. If the bar is hidden when
1209          * this flag is set it will be shown again and the bar will have a transparent background.
1210          * This can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
1211          *
1212          * {@hide}
1213          */
1214         public static final int PRIVATE_FLAG_FORCE_STATUS_BAR_VISIBLE_TRANSPARENT = 0x00001000;
1215 
1216         /**
1217          * Flag indicating that the x, y, width, and height members should be
1218          * ignored (and thus their previous value preserved). For example
1219          * because they are being managed externally through repositionChild.
1220          *
1221          * {@hide}
1222          */
1223         public static final int PRIVATE_FLAG_PRESERVE_GEOMETRY = 0x00002000;
1224 
1225         /**
1226          * Flag that will make window ignore app visibility and instead depend purely on the decor
1227          * view visibility for determining window visibility. This is used by recents to keep
1228          * drawing after it launches an app.
1229          * @hide
1230          */
1231         public static final int PRIVATE_FLAG_FORCE_DECOR_VIEW_VISIBILITY = 0x00004000;
1232 
1233         /**
1234          * Flag to indicate that this window is not expected to be replaced across
1235          * configuration change triggered activity relaunches. In general the WindowManager
1236          * expects Windows to be replaced after relaunch, and thus it will preserve their surfaces
1237          * until the replacement is ready to show in order to prevent visual glitch. However
1238          * some windows, such as PopupWindows expect to be cleared across configuration change,
1239          * and thus should hint to the WindowManager that it should not wait for a replacement.
1240          * @hide
1241          */
1242         public static final int PRIVATE_FLAG_WILL_NOT_REPLACE_ON_RELAUNCH = 0x00008000;
1243 
1244         /**
1245          * Flag to indicate that this child window should always be laid-out in the parent
1246          * frame regardless of the current windowing mode configuration.
1247          * @hide
1248          */
1249         public static final int PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME = 0x00010000;
1250 
1251         /**
1252          * Flag to indicate that this window is always drawing the status bar background, no matter
1253          * what the other flags are.
1254          * @hide
1255          */
1256         public static final int PRIVATE_FLAG_FORCE_DRAW_STATUS_BAR_BACKGROUND = 0x00020000;
1257 
1258         /**
1259          * Flag to indicate that this window needs Sustained Performance Mode if
1260          * the device supports it.
1261          * @hide
1262          */
1263         public static final int PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE = 0x00040000;
1264 
1265         /**
1266          * Control flags that are private to the platform.
1267          * @hide
1268          */
1269         public int privateFlags;
1270 
1271         /**
1272          * Value for {@link #needsMenuKey} for a window that has not explicitly specified if it
1273          * needs {@link #NEEDS_MENU_SET_TRUE} or doesn't need {@link #NEEDS_MENU_SET_FALSE} a menu
1274          * key. For this case, we should look at windows behind it to determine the appropriate
1275          * value.
1276          *
1277          * @hide
1278          */
1279         public static final int NEEDS_MENU_UNSET = 0;
1280 
1281         /**
1282          * Value for {@link #needsMenuKey} for a window that has explicitly specified it needs a
1283          * menu key.
1284          *
1285          * @hide
1286          */
1287         public static final int NEEDS_MENU_SET_TRUE = 1;
1288 
1289         /**
1290          * Value for {@link #needsMenuKey} for a window that has explicitly specified it doesn't
1291          * needs a menu key.
1292          *
1293          * @hide
1294          */
1295         public static final int NEEDS_MENU_SET_FALSE = 2;
1296 
1297         /**
1298          * State variable for a window belonging to an activity that responds to
1299          * {@link KeyEvent#KEYCODE_MENU} and therefore needs a Menu key. For devices where Menu is a
1300          * physical button this variable is ignored, but on devices where the Menu key is drawn in
1301          * software it may be hidden unless this variable is set to {@link #NEEDS_MENU_SET_TRUE}.
1302          *
1303          *  (Note that Action Bars, when available, are the preferred way to offer additional
1304          * functions otherwise accessed via an options menu.)
1305          *
1306          * {@hide}
1307          */
1308         public int needsMenuKey = NEEDS_MENU_UNSET;
1309 
1310         /**
1311          * Given a particular set of window manager flags, determine whether
1312          * such a window may be a target for an input method when it has
1313          * focus.  In particular, this checks the
1314          * {@link #FLAG_NOT_FOCUSABLE} and {@link #FLAG_ALT_FOCUSABLE_IM}
1315          * flags and returns true if the combination of the two corresponds
1316          * to a window that needs to be behind the input method so that the
1317          * user can type into it.
1318          *
1319          * @param flags The current window manager flags.
1320          *
1321          * @return Returns true if such a window should be behind/interact
1322          * with an input method, false if not.
1323          */
mayUseInputMethod(int flags)1324         public static boolean mayUseInputMethod(int flags) {
1325             switch (flags&(FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM)) {
1326                 case 0:
1327                 case FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM:
1328                     return true;
1329             }
1330             return false;
1331         }
1332 
1333         /**
1334          * Mask for {@link #softInputMode} of the bits that determine the
1335          * desired visibility state of the soft input area for this window.
1336          */
1337         public static final int SOFT_INPUT_MASK_STATE = 0x0f;
1338 
1339         /**
1340          * Visibility state for {@link #softInputMode}: no state has been specified.
1341          */
1342         public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0;
1343 
1344         /**
1345          * Visibility state for {@link #softInputMode}: please don't change the state of
1346          * the soft input area.
1347          */
1348         public static final int SOFT_INPUT_STATE_UNCHANGED = 1;
1349 
1350         /**
1351          * Visibility state for {@link #softInputMode}: please hide any soft input
1352          * area when normally appropriate (when the user is navigating
1353          * forward to your window).
1354          */
1355         public static final int SOFT_INPUT_STATE_HIDDEN = 2;
1356 
1357         /**
1358          * Visibility state for {@link #softInputMode}: please always hide any
1359          * soft input area when this window receives focus.
1360          */
1361         public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3;
1362 
1363         /**
1364          * Visibility state for {@link #softInputMode}: please show the soft
1365          * input area when normally appropriate (when the user is navigating
1366          * forward to your window).
1367          */
1368         public static final int SOFT_INPUT_STATE_VISIBLE = 4;
1369 
1370         /**
1371          * Visibility state for {@link #softInputMode}: please always make the
1372          * soft input area visible when this window receives input focus.
1373          */
1374         public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5;
1375 
1376         /**
1377          * Mask for {@link #softInputMode} of the bits that determine the
1378          * way that the window should be adjusted to accommodate the soft
1379          * input window.
1380          */
1381         public static final int SOFT_INPUT_MASK_ADJUST = 0xf0;
1382 
1383         /** Adjustment option for {@link #softInputMode}: nothing specified.
1384          * The system will try to pick one or
1385          * the other depending on the contents of the window.
1386          */
1387         public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0x00;
1388 
1389         /** Adjustment option for {@link #softInputMode}: set to allow the
1390          * window to be resized when an input
1391          * method is shown, so that its contents are not covered by the input
1392          * method.  This can <em>not</em> be combined with
1393          * {@link #SOFT_INPUT_ADJUST_PAN}; if
1394          * neither of these are set, then the system will try to pick one or
1395          * the other depending on the contents of the window. If the window's
1396          * layout parameter flags include {@link #FLAG_FULLSCREEN}, this
1397          * value for {@link #softInputMode} will be ignored; the window will
1398          * not resize, but will stay fullscreen.
1399          */
1400         public static final int SOFT_INPUT_ADJUST_RESIZE = 0x10;
1401 
1402         /** Adjustment option for {@link #softInputMode}: set to have a window
1403          * pan when an input method is
1404          * shown, so it doesn't need to deal with resizing but just panned
1405          * by the framework to ensure the current input focus is visible.  This
1406          * can <em>not</em> be combined with {@link #SOFT_INPUT_ADJUST_RESIZE}; if
1407          * neither of these are set, then the system will try to pick one or
1408          * the other depending on the contents of the window.
1409          */
1410         public static final int SOFT_INPUT_ADJUST_PAN = 0x20;
1411 
1412         /** Adjustment option for {@link #softInputMode}: set to have a window
1413          * not adjust for a shown input method.  The window will not be resized,
1414          * and it will not be panned to make its focus visible.
1415          */
1416         public static final int SOFT_INPUT_ADJUST_NOTHING = 0x30;
1417 
1418         /**
1419          * Bit for {@link #softInputMode}: set when the user has navigated
1420          * forward to the window.  This is normally set automatically for
1421          * you by the system, though you may want to set it in certain cases
1422          * when you are displaying a window yourself.  This flag will always
1423          * be cleared automatically after the window is displayed.
1424          */
1425         public static final int SOFT_INPUT_IS_FORWARD_NAVIGATION = 0x100;
1426 
1427         /**
1428          * Desired operating mode for any soft input area.  May be any combination
1429          * of:
1430          *
1431          * <ul>
1432          * <li> One of the visibility states
1433          * {@link #SOFT_INPUT_STATE_UNSPECIFIED}, {@link #SOFT_INPUT_STATE_UNCHANGED},
1434          * {@link #SOFT_INPUT_STATE_HIDDEN}, {@link #SOFT_INPUT_STATE_ALWAYS_VISIBLE}, or
1435          * {@link #SOFT_INPUT_STATE_VISIBLE}.
1436          * <li> One of the adjustment options
1437          * {@link #SOFT_INPUT_ADJUST_UNSPECIFIED},
1438          * {@link #SOFT_INPUT_ADJUST_RESIZE}, or
1439          * {@link #SOFT_INPUT_ADJUST_PAN}.
1440          * </ul>
1441          *
1442          *
1443          * <p>This flag can be controlled in your theme through the
1444          * {@link android.R.attr#windowSoftInputMode} attribute.</p>
1445          */
1446         public int softInputMode;
1447 
1448         /**
1449          * Placement of window within the screen as per {@link Gravity}.  Both
1450          * {@link Gravity#apply(int, int, int, android.graphics.Rect, int, int,
1451          * android.graphics.Rect) Gravity.apply} and
1452          * {@link Gravity#applyDisplay(int, android.graphics.Rect, android.graphics.Rect)
1453          * Gravity.applyDisplay} are used during window layout, with this value
1454          * given as the desired gravity.  For example you can specify
1455          * {@link Gravity#DISPLAY_CLIP_HORIZONTAL Gravity.DISPLAY_CLIP_HORIZONTAL} and
1456          * {@link Gravity#DISPLAY_CLIP_VERTICAL Gravity.DISPLAY_CLIP_VERTICAL} here
1457          * to control the behavior of
1458          * {@link Gravity#applyDisplay(int, android.graphics.Rect, android.graphics.Rect)
1459          * Gravity.applyDisplay}.
1460          *
1461          * @see Gravity
1462          */
1463         public int gravity;
1464 
1465         /**
1466          * The horizontal margin, as a percentage of the container's width,
1467          * between the container and the widget.  See
1468          * {@link Gravity#apply(int, int, int, android.graphics.Rect, int, int,
1469          * android.graphics.Rect) Gravity.apply} for how this is used.  This
1470          * field is added with {@link #x} to supply the <var>xAdj</var> parameter.
1471          */
1472         public float horizontalMargin;
1473 
1474         /**
1475          * The vertical margin, as a percentage of the container's height,
1476          * between the container and the widget.  See
1477          * {@link Gravity#apply(int, int, int, android.graphics.Rect, int, int,
1478          * android.graphics.Rect) Gravity.apply} for how this is used.  This
1479          * field is added with {@link #y} to supply the <var>yAdj</var> parameter.
1480          */
1481         public float verticalMargin;
1482 
1483         /**
1484          * Positive insets between the drawing surface and window content.
1485          *
1486          * @hide
1487          */
1488         public final Rect surfaceInsets = new Rect();
1489 
1490         /**
1491          * Whether the surface insets have been manually set. When set to
1492          * {@code false}, the view root will automatically determine the
1493          * appropriate surface insets.
1494          *
1495          * @see #surfaceInsets
1496          * @hide
1497          */
1498         public boolean hasManualSurfaceInsets;
1499 
1500         /**
1501          * Whether the previous surface insets should be used vs. what is currently set. When set
1502          * to {@code true}, the view root will ignore surfaces insets in this object and use what
1503          * it currently has.
1504          *
1505          * @see #surfaceInsets
1506          * @hide
1507          */
1508         public boolean preservePreviousSurfaceInsets = true;
1509 
1510         /**
1511          * The desired bitmap format.  May be one of the constants in
1512          * {@link android.graphics.PixelFormat}.  Default is OPAQUE.
1513          */
1514         public int format;
1515 
1516         /**
1517          * A style resource defining the animations to use for this window.
1518          * This must be a system resource; it can not be an application resource
1519          * because the window manager does not have access to applications.
1520          */
1521         public int windowAnimations;
1522 
1523         /**
1524          * An alpha value to apply to this entire window.
1525          * An alpha of 1.0 means fully opaque and 0.0 means fully transparent
1526          */
1527         public float alpha = 1.0f;
1528 
1529         /**
1530          * When {@link #FLAG_DIM_BEHIND} is set, this is the amount of dimming
1531          * to apply.  Range is from 1.0 for completely opaque to 0.0 for no
1532          * dim.
1533          */
1534         public float dimAmount = 1.0f;
1535 
1536         /**
1537          * Default value for {@link #screenBrightness} and {@link #buttonBrightness}
1538          * indicating that the brightness value is not overridden for this window
1539          * and normal brightness policy should be used.
1540          */
1541         public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f;
1542 
1543         /**
1544          * Value for {@link #screenBrightness} and {@link #buttonBrightness}
1545          * indicating that the screen or button backlight brightness should be set
1546          * to the lowest value when this window is in front.
1547          */
1548         public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f;
1549 
1550         /**
1551          * Value for {@link #screenBrightness} and {@link #buttonBrightness}
1552          * indicating that the screen or button backlight brightness should be set
1553          * to the hightest value when this window is in front.
1554          */
1555         public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f;
1556 
1557         /**
1558          * This can be used to override the user's preferred brightness of
1559          * the screen.  A value of less than 0, the default, means to use the
1560          * preferred screen brightness.  0 to 1 adjusts the brightness from
1561          * dark to full bright.
1562          */
1563         public float screenBrightness = BRIGHTNESS_OVERRIDE_NONE;
1564 
1565         /**
1566          * This can be used to override the standard behavior of the button and
1567          * keyboard backlights.  A value of less than 0, the default, means to
1568          * use the standard backlight behavior.  0 to 1 adjusts the brightness
1569          * from dark to full bright.
1570          */
1571         public float buttonBrightness = BRIGHTNESS_OVERRIDE_NONE;
1572 
1573         /**
1574          * Value for {@link #rotationAnimation} to define the animation used to
1575          * specify that this window will rotate in or out following a rotation.
1576          */
1577         public static final int ROTATION_ANIMATION_ROTATE = 0;
1578 
1579         /**
1580          * Value for {@link #rotationAnimation} to define the animation used to
1581          * specify that this window will fade in or out following a rotation.
1582          */
1583         public static final int ROTATION_ANIMATION_CROSSFADE = 1;
1584 
1585         /**
1586          * Value for {@link #rotationAnimation} to define the animation used to
1587          * specify that this window will immediately disappear or appear following
1588          * a rotation.
1589          */
1590         public static final int ROTATION_ANIMATION_JUMPCUT = 2;
1591 
1592         /**
1593          * Value for {@link #rotationAnimation} to specify seamless rotation mode.
1594          * This works like JUMPCUT but will fall back to CROSSFADE if rotation
1595          * can't be applied without pausing the screen.
1596          *
1597          * @hide
1598          */
1599         public static final int ROTATION_ANIMATION_SEAMLESS = 3;
1600 
1601         /**
1602          * Define the exit and entry animations used on this window when the device is rotated.
1603          * This only has an affect if the incoming and outgoing topmost
1604          * opaque windows have the #FLAG_FULLSCREEN bit set and are not covered
1605          * by other windows. All other situations default to the
1606          * {@link #ROTATION_ANIMATION_ROTATE} behavior.
1607          *
1608          * @see #ROTATION_ANIMATION_ROTATE
1609          * @see #ROTATION_ANIMATION_CROSSFADE
1610          * @see #ROTATION_ANIMATION_JUMPCUT
1611          */
1612         public int rotationAnimation = ROTATION_ANIMATION_ROTATE;
1613 
1614         /**
1615          * Identifier for this window.  This will usually be filled in for
1616          * you.
1617          */
1618         public IBinder token = null;
1619 
1620         /**
1621          * Name of the package owning this window.
1622          */
1623         public String packageName = null;
1624 
1625         /**
1626          * Specific orientation value for a window.
1627          * May be any of the same values allowed
1628          * for {@link android.content.pm.ActivityInfo#screenOrientation}.
1629          * If not set, a default value of
1630          * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_UNSPECIFIED}
1631          * will be used.
1632          */
1633         public int screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
1634 
1635         /**
1636          * The preferred refresh rate for the window.
1637          *
1638          * This must be one of the supported refresh rates obtained for the display(s) the window
1639          * is on. The selected refresh rate will be applied to the display's default mode.
1640          *
1641          * This value is ignored if {@link #preferredDisplayModeId} is set.
1642          *
1643          * @see Display#getSupportedRefreshRates()
1644          * @deprecated use {@link #preferredDisplayModeId} instead
1645          */
1646         @Deprecated
1647         public float preferredRefreshRate;
1648 
1649         /**
1650          * Id of the preferred display mode for the window.
1651          * <p>
1652          * This must be one of the supported modes obtained for the display(s) the window is on.
1653          * A value of {@code 0} means no preference.
1654          *
1655          * @see Display#getSupportedModes()
1656          * @see Display.Mode#getModeId()
1657          */
1658         public int preferredDisplayModeId;
1659 
1660         /**
1661          * Control the visibility of the status bar.
1662          *
1663          * @see View#STATUS_BAR_VISIBLE
1664          * @see View#STATUS_BAR_HIDDEN
1665          */
1666         public int systemUiVisibility;
1667 
1668         /**
1669          * @hide
1670          * The ui visibility as requested by the views in this hierarchy.
1671          * the combined value should be systemUiVisibility | subtreeSystemUiVisibility.
1672          */
1673         public int subtreeSystemUiVisibility;
1674 
1675         /**
1676          * Get callbacks about the system ui visibility changing.
1677          *
1678          * TODO: Maybe there should be a bitfield of optional callbacks that we need.
1679          *
1680          * @hide
1681          */
1682         public boolean hasSystemUiListeners;
1683 
1684         /**
1685          * When this window has focus, disable touch pad pointer gesture processing.
1686          * The window will receive raw position updates from the touch pad instead
1687          * of pointer movements and synthetic touch events.
1688          *
1689          * @hide
1690          */
1691         public static final int INPUT_FEATURE_DISABLE_POINTER_GESTURES = 0x00000001;
1692 
1693         /**
1694          * Does not construct an input channel for this window.  The channel will therefore
1695          * be incapable of receiving input.
1696          *
1697          * @hide
1698          */
1699         public static final int INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002;
1700 
1701         /**
1702          * When this window has focus, does not call user activity for all input events so
1703          * the application will have to do it itself.  Should only be used by
1704          * the keyguard and phone app.
1705          * <p>
1706          * Should only be used by the keyguard and phone app.
1707          * </p>
1708          *
1709          * @hide
1710          */
1711         public static final int INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004;
1712 
1713         /**
1714          * Control special features of the input subsystem.
1715          *
1716          * @see #INPUT_FEATURE_DISABLE_POINTER_GESTURES
1717          * @see #INPUT_FEATURE_NO_INPUT_CHANNEL
1718          * @see #INPUT_FEATURE_DISABLE_USER_ACTIVITY
1719          * @hide
1720          */
1721         public int inputFeatures;
1722 
1723         /**
1724          * Sets the number of milliseconds before the user activity timeout occurs
1725          * when this window has focus.  A value of -1 uses the standard timeout.
1726          * A value of 0 uses the minimum support display timeout.
1727          * <p>
1728          * This property can only be used to reduce the user specified display timeout;
1729          * it can never make the timeout longer than it normally would be.
1730          * </p><p>
1731          * Should only be used by the keyguard and phone app.
1732          * </p>
1733          *
1734          * @hide
1735          */
1736         public long userActivityTimeout = -1;
1737 
1738         /**
1739          * For windows with an anchor (e.g. PopupWindow), keeps track of the View that anchors the
1740          * window.
1741          *
1742          * @hide
1743          */
1744         public int accessibilityIdOfAnchor = -1;
1745 
1746         /**
1747          * The window title isn't kept in sync with what is displayed in the title bar, so we
1748          * separately track the currently shown title to provide to accessibility.
1749          *
1750          * @hide
1751          */
1752         public CharSequence accessibilityTitle;
1753 
1754         /**
1755          * Sets a timeout in milliseconds before which the window will be removed
1756          * by the window manager. Useful for transient notifications like toasts
1757          * so we don't have to rely on client cooperation to ensure the window
1758          * is removed. Must be specified at window creation time.
1759          *
1760          * @hide
1761          */
1762         public long removeTimeoutMilliseconds = -1;
1763 
LayoutParams()1764         public LayoutParams() {
1765             super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
1766             type = TYPE_APPLICATION;
1767             format = PixelFormat.OPAQUE;
1768         }
1769 
LayoutParams(int _type)1770         public LayoutParams(int _type) {
1771             super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
1772             type = _type;
1773             format = PixelFormat.OPAQUE;
1774         }
1775 
LayoutParams(int _type, int _flags)1776         public LayoutParams(int _type, int _flags) {
1777             super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
1778             type = _type;
1779             flags = _flags;
1780             format = PixelFormat.OPAQUE;
1781         }
1782 
LayoutParams(int _type, int _flags, int _format)1783         public LayoutParams(int _type, int _flags, int _format) {
1784             super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
1785             type = _type;
1786             flags = _flags;
1787             format = _format;
1788         }
1789 
LayoutParams(int w, int h, int _type, int _flags, int _format)1790         public LayoutParams(int w, int h, int _type, int _flags, int _format) {
1791             super(w, h);
1792             type = _type;
1793             flags = _flags;
1794             format = _format;
1795         }
1796 
LayoutParams(int w, int h, int xpos, int ypos, int _type, int _flags, int _format)1797         public LayoutParams(int w, int h, int xpos, int ypos, int _type,
1798                 int _flags, int _format) {
1799             super(w, h);
1800             x = xpos;
1801             y = ypos;
1802             type = _type;
1803             flags = _flags;
1804             format = _format;
1805         }
1806 
setTitle(CharSequence title)1807         public final void setTitle(CharSequence title) {
1808             if (null == title)
1809                 title = "";
1810 
1811             mTitle = TextUtils.stringOrSpannedString(title);
1812         }
1813 
getTitle()1814         public final CharSequence getTitle() {
1815             return mTitle != null ? mTitle : "";
1816         }
1817 
1818         /**
1819          * Sets the surface insets based on the elevation (visual z position) of the input view.
1820          * @hide
1821          */
setSurfaceInsets(View view, boolean manual, boolean preservePrevious)1822         public final void setSurfaceInsets(View view, boolean manual, boolean preservePrevious) {
1823             final int surfaceInset = (int) Math.ceil(view.getZ() * 2);
1824             // Partial workaround for b/28318973. Every inset change causes a freeform window
1825             // to jump a little for a few frames. If we never allow surface insets to decrease,
1826             // they will stabilize quickly (often from the very beginning, as most windows start
1827             // as focused).
1828             // TODO(b/22668382) to fix this properly.
1829             if (surfaceInset == 0) {
1830                 // OK to have 0 (this is the case for non-freeform windows).
1831                 surfaceInsets.set(0, 0, 0, 0);
1832             } else {
1833                 surfaceInsets.set(
1834                         Math.max(surfaceInset, surfaceInsets.left),
1835                         Math.max(surfaceInset, surfaceInsets.top),
1836                         Math.max(surfaceInset, surfaceInsets.right),
1837                         Math.max(surfaceInset, surfaceInsets.bottom));
1838             }
1839             hasManualSurfaceInsets = manual;
1840             preservePreviousSurfaceInsets = preservePrevious;
1841         }
1842 
1843         /** @hide */
1844         @SystemApi
setUserActivityTimeout(long timeout)1845         public final void setUserActivityTimeout(long timeout) {
1846             userActivityTimeout = timeout;
1847         }
1848 
1849         /** @hide */
1850         @SystemApi
getUserActivityTimeout()1851         public final long getUserActivityTimeout() {
1852             return userActivityTimeout;
1853         }
1854 
describeContents()1855         public int describeContents() {
1856             return 0;
1857         }
1858 
writeToParcel(Parcel out, int parcelableFlags)1859         public void writeToParcel(Parcel out, int parcelableFlags) {
1860             out.writeInt(width);
1861             out.writeInt(height);
1862             out.writeInt(x);
1863             out.writeInt(y);
1864             out.writeInt(type);
1865             out.writeInt(flags);
1866             out.writeInt(privateFlags);
1867             out.writeInt(softInputMode);
1868             out.writeInt(gravity);
1869             out.writeFloat(horizontalMargin);
1870             out.writeFloat(verticalMargin);
1871             out.writeInt(format);
1872             out.writeInt(windowAnimations);
1873             out.writeFloat(alpha);
1874             out.writeFloat(dimAmount);
1875             out.writeFloat(screenBrightness);
1876             out.writeFloat(buttonBrightness);
1877             out.writeInt(rotationAnimation);
1878             out.writeStrongBinder(token);
1879             out.writeString(packageName);
1880             TextUtils.writeToParcel(mTitle, out, parcelableFlags);
1881             out.writeInt(screenOrientation);
1882             out.writeFloat(preferredRefreshRate);
1883             out.writeInt(preferredDisplayModeId);
1884             out.writeInt(systemUiVisibility);
1885             out.writeInt(subtreeSystemUiVisibility);
1886             out.writeInt(hasSystemUiListeners ? 1 : 0);
1887             out.writeInt(inputFeatures);
1888             out.writeLong(userActivityTimeout);
1889             out.writeInt(surfaceInsets.left);
1890             out.writeInt(surfaceInsets.top);
1891             out.writeInt(surfaceInsets.right);
1892             out.writeInt(surfaceInsets.bottom);
1893             out.writeInt(hasManualSurfaceInsets ? 1 : 0);
1894             out.writeInt(preservePreviousSurfaceInsets ? 1 : 0);
1895             out.writeInt(needsMenuKey);
1896             out.writeInt(accessibilityIdOfAnchor);
1897             TextUtils.writeToParcel(accessibilityTitle, out, parcelableFlags);
1898             out.writeLong(removeTimeoutMilliseconds);
1899         }
1900 
1901         public static final Parcelable.Creator<LayoutParams> CREATOR
1902                     = new Parcelable.Creator<LayoutParams>() {
1903             public LayoutParams createFromParcel(Parcel in) {
1904                 return new LayoutParams(in);
1905             }
1906 
1907             public LayoutParams[] newArray(int size) {
1908                 return new LayoutParams[size];
1909             }
1910         };
1911 
1912 
LayoutParams(Parcel in)1913         public LayoutParams(Parcel in) {
1914             width = in.readInt();
1915             height = in.readInt();
1916             x = in.readInt();
1917             y = in.readInt();
1918             type = in.readInt();
1919             flags = in.readInt();
1920             privateFlags = in.readInt();
1921             softInputMode = in.readInt();
1922             gravity = in.readInt();
1923             horizontalMargin = in.readFloat();
1924             verticalMargin = in.readFloat();
1925             format = in.readInt();
1926             windowAnimations = in.readInt();
1927             alpha = in.readFloat();
1928             dimAmount = in.readFloat();
1929             screenBrightness = in.readFloat();
1930             buttonBrightness = in.readFloat();
1931             rotationAnimation = in.readInt();
1932             token = in.readStrongBinder();
1933             packageName = in.readString();
1934             mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
1935             screenOrientation = in.readInt();
1936             preferredRefreshRate = in.readFloat();
1937             preferredDisplayModeId = in.readInt();
1938             systemUiVisibility = in.readInt();
1939             subtreeSystemUiVisibility = in.readInt();
1940             hasSystemUiListeners = in.readInt() != 0;
1941             inputFeatures = in.readInt();
1942             userActivityTimeout = in.readLong();
1943             surfaceInsets.left = in.readInt();
1944             surfaceInsets.top = in.readInt();
1945             surfaceInsets.right = in.readInt();
1946             surfaceInsets.bottom = in.readInt();
1947             hasManualSurfaceInsets = in.readInt() != 0;
1948             preservePreviousSurfaceInsets = in.readInt() != 0;
1949             needsMenuKey = in.readInt();
1950             accessibilityIdOfAnchor = in.readInt();
1951             accessibilityTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
1952             removeTimeoutMilliseconds = in.readLong();
1953         }
1954 
1955         @SuppressWarnings({"PointlessBitwiseExpression"})
1956         public static final int LAYOUT_CHANGED = 1<<0;
1957         public static final int TYPE_CHANGED = 1<<1;
1958         public static final int FLAGS_CHANGED = 1<<2;
1959         public static final int FORMAT_CHANGED = 1<<3;
1960         public static final int ANIMATION_CHANGED = 1<<4;
1961         public static final int DIM_AMOUNT_CHANGED = 1<<5;
1962         public static final int TITLE_CHANGED = 1<<6;
1963         public static final int ALPHA_CHANGED = 1<<7;
1964         public static final int MEMORY_TYPE_CHANGED = 1<<8;
1965         public static final int SOFT_INPUT_MODE_CHANGED = 1<<9;
1966         public static final int SCREEN_ORIENTATION_CHANGED = 1<<10;
1967         public static final int SCREEN_BRIGHTNESS_CHANGED = 1<<11;
1968         public static final int ROTATION_ANIMATION_CHANGED = 1<<12;
1969         /** {@hide} */
1970         public static final int BUTTON_BRIGHTNESS_CHANGED = 1<<13;
1971         /** {@hide} */
1972         public static final int SYSTEM_UI_VISIBILITY_CHANGED = 1<<14;
1973         /** {@hide} */
1974         public static final int SYSTEM_UI_LISTENER_CHANGED = 1<<15;
1975         /** {@hide} */
1976         public static final int INPUT_FEATURES_CHANGED = 1<<16;
1977         /** {@hide} */
1978         public static final int PRIVATE_FLAGS_CHANGED = 1<<17;
1979         /** {@hide} */
1980         public static final int USER_ACTIVITY_TIMEOUT_CHANGED = 1<<18;
1981         /** {@hide} */
1982         public static final int TRANSLUCENT_FLAGS_CHANGED = 1<<19;
1983         /** {@hide} */
1984         public static final int SURFACE_INSETS_CHANGED = 1<<20;
1985         /** {@hide} */
1986         public static final int PREFERRED_REFRESH_RATE_CHANGED = 1 << 21;
1987         /** {@hide} */
1988         public static final int NEEDS_MENU_KEY_CHANGED = 1 << 22;
1989         /** {@hide} */
1990         public static final int PREFERRED_DISPLAY_MODE_ID = 1 << 23;
1991         /** {@hide} */
1992         public static final int ACCESSIBILITY_ANCHOR_CHANGED = 1 << 24;
1993         /** {@hide} */
1994         public static final int ACCESSIBILITY_TITLE_CHANGED = 1 << 25;
1995         /** {@hide} */
1996         public static final int EVERYTHING_CHANGED = 0xffffffff;
1997 
1998         // internal buffer to backup/restore parameters under compatibility mode.
1999         private int[] mCompatibilityParamsBackup = null;
2000 
copyFrom(LayoutParams o)2001         public final int copyFrom(LayoutParams o) {
2002             int changes = 0;
2003 
2004             if (width != o.width) {
2005                 width = o.width;
2006                 changes |= LAYOUT_CHANGED;
2007             }
2008             if (height != o.height) {
2009                 height = o.height;
2010                 changes |= LAYOUT_CHANGED;
2011             }
2012             if (x != o.x) {
2013                 x = o.x;
2014                 changes |= LAYOUT_CHANGED;
2015             }
2016             if (y != o.y) {
2017                 y = o.y;
2018                 changes |= LAYOUT_CHANGED;
2019             }
2020             if (horizontalWeight != o.horizontalWeight) {
2021                 horizontalWeight = o.horizontalWeight;
2022                 changes |= LAYOUT_CHANGED;
2023             }
2024             if (verticalWeight != o.verticalWeight) {
2025                 verticalWeight = o.verticalWeight;
2026                 changes |= LAYOUT_CHANGED;
2027             }
2028             if (horizontalMargin != o.horizontalMargin) {
2029                 horizontalMargin = o.horizontalMargin;
2030                 changes |= LAYOUT_CHANGED;
2031             }
2032             if (verticalMargin != o.verticalMargin) {
2033                 verticalMargin = o.verticalMargin;
2034                 changes |= LAYOUT_CHANGED;
2035             }
2036             if (type != o.type) {
2037                 type = o.type;
2038                 changes |= TYPE_CHANGED;
2039             }
2040             if (flags != o.flags) {
2041                 final int diff = flags ^ o.flags;
2042                 if ((diff & (FLAG_TRANSLUCENT_STATUS | FLAG_TRANSLUCENT_NAVIGATION)) != 0) {
2043                     changes |= TRANSLUCENT_FLAGS_CHANGED;
2044                 }
2045                 flags = o.flags;
2046                 changes |= FLAGS_CHANGED;
2047             }
2048             if (privateFlags != o.privateFlags) {
2049                 privateFlags = o.privateFlags;
2050                 changes |= PRIVATE_FLAGS_CHANGED;
2051             }
2052             if (softInputMode != o.softInputMode) {
2053                 softInputMode = o.softInputMode;
2054                 changes |= SOFT_INPUT_MODE_CHANGED;
2055             }
2056             if (gravity != o.gravity) {
2057                 gravity = o.gravity;
2058                 changes |= LAYOUT_CHANGED;
2059             }
2060             if (format != o.format) {
2061                 format = o.format;
2062                 changes |= FORMAT_CHANGED;
2063             }
2064             if (windowAnimations != o.windowAnimations) {
2065                 windowAnimations = o.windowAnimations;
2066                 changes |= ANIMATION_CHANGED;
2067             }
2068             if (token == null) {
2069                 // NOTE: token only copied if the recipient doesn't
2070                 // already have one.
2071                 token = o.token;
2072             }
2073             if (packageName == null) {
2074                 // NOTE: packageName only copied if the recipient doesn't
2075                 // already have one.
2076                 packageName = o.packageName;
2077             }
2078             if (!Objects.equals(mTitle, o.mTitle) && o.mTitle != null) {
2079                 // NOTE: mTitle only copied if the originator set one.
2080                 mTitle = o.mTitle;
2081                 changes |= TITLE_CHANGED;
2082             }
2083             if (alpha != o.alpha) {
2084                 alpha = o.alpha;
2085                 changes |= ALPHA_CHANGED;
2086             }
2087             if (dimAmount != o.dimAmount) {
2088                 dimAmount = o.dimAmount;
2089                 changes |= DIM_AMOUNT_CHANGED;
2090             }
2091             if (screenBrightness != o.screenBrightness) {
2092                 screenBrightness = o.screenBrightness;
2093                 changes |= SCREEN_BRIGHTNESS_CHANGED;
2094             }
2095             if (buttonBrightness != o.buttonBrightness) {
2096                 buttonBrightness = o.buttonBrightness;
2097                 changes |= BUTTON_BRIGHTNESS_CHANGED;
2098             }
2099             if (rotationAnimation != o.rotationAnimation) {
2100                 rotationAnimation = o.rotationAnimation;
2101                 changes |= ROTATION_ANIMATION_CHANGED;
2102             }
2103 
2104             if (screenOrientation != o.screenOrientation) {
2105                 screenOrientation = o.screenOrientation;
2106                 changes |= SCREEN_ORIENTATION_CHANGED;
2107             }
2108 
2109             if (preferredRefreshRate != o.preferredRefreshRate) {
2110                 preferredRefreshRate = o.preferredRefreshRate;
2111                 changes |= PREFERRED_REFRESH_RATE_CHANGED;
2112             }
2113 
2114             if (preferredDisplayModeId != o.preferredDisplayModeId) {
2115                 preferredDisplayModeId = o.preferredDisplayModeId;
2116                 changes |= PREFERRED_DISPLAY_MODE_ID;
2117             }
2118 
2119             if (systemUiVisibility != o.systemUiVisibility
2120                     || subtreeSystemUiVisibility != o.subtreeSystemUiVisibility) {
2121                 systemUiVisibility = o.systemUiVisibility;
2122                 subtreeSystemUiVisibility = o.subtreeSystemUiVisibility;
2123                 changes |= SYSTEM_UI_VISIBILITY_CHANGED;
2124             }
2125 
2126             if (hasSystemUiListeners != o.hasSystemUiListeners) {
2127                 hasSystemUiListeners = o.hasSystemUiListeners;
2128                 changes |= SYSTEM_UI_LISTENER_CHANGED;
2129             }
2130 
2131             if (inputFeatures != o.inputFeatures) {
2132                 inputFeatures = o.inputFeatures;
2133                 changes |= INPUT_FEATURES_CHANGED;
2134             }
2135 
2136             if (userActivityTimeout != o.userActivityTimeout) {
2137                 userActivityTimeout = o.userActivityTimeout;
2138                 changes |= USER_ACTIVITY_TIMEOUT_CHANGED;
2139             }
2140 
2141             if (!surfaceInsets.equals(o.surfaceInsets)) {
2142                 surfaceInsets.set(o.surfaceInsets);
2143                 changes |= SURFACE_INSETS_CHANGED;
2144             }
2145 
2146             if (hasManualSurfaceInsets != o.hasManualSurfaceInsets) {
2147                 hasManualSurfaceInsets = o.hasManualSurfaceInsets;
2148                 changes |= SURFACE_INSETS_CHANGED;
2149             }
2150 
2151             if (preservePreviousSurfaceInsets != o.preservePreviousSurfaceInsets) {
2152                 preservePreviousSurfaceInsets = o.preservePreviousSurfaceInsets;
2153                 changes |= SURFACE_INSETS_CHANGED;
2154             }
2155 
2156             if (needsMenuKey != o.needsMenuKey) {
2157                 needsMenuKey = o.needsMenuKey;
2158                 changes |= NEEDS_MENU_KEY_CHANGED;
2159             }
2160 
2161             if (accessibilityIdOfAnchor != o.accessibilityIdOfAnchor) {
2162                 accessibilityIdOfAnchor = o.accessibilityIdOfAnchor;
2163                 changes |= ACCESSIBILITY_ANCHOR_CHANGED;
2164             }
2165 
2166             if (!Objects.equals(accessibilityTitle, o.accessibilityTitle)
2167                     && o.accessibilityTitle != null) {
2168                 // NOTE: accessibilityTitle only copied if the originator set one.
2169                 accessibilityTitle = o.accessibilityTitle;
2170                 changes |= ACCESSIBILITY_TITLE_CHANGED;
2171             }
2172 
2173             // This can't change, it's only set at window creation time.
2174             removeTimeoutMilliseconds = o.removeTimeoutMilliseconds;
2175 
2176             return changes;
2177         }
2178 
2179         @Override
debug(String output)2180         public String debug(String output) {
2181             output += "Contents of " + this + ":";
2182             Log.d("Debug", output);
2183             output = super.debug("");
2184             Log.d("Debug", output);
2185             Log.d("Debug", "");
2186             Log.d("Debug", "WindowManager.LayoutParams={title=" + mTitle + "}");
2187             return "";
2188         }
2189 
2190         @Override
toString()2191         public String toString() {
2192             StringBuilder sb = new StringBuilder(256);
2193             sb.append("WM.LayoutParams{");
2194             sb.append("(");
2195             sb.append(x);
2196             sb.append(',');
2197             sb.append(y);
2198             sb.append(")(");
2199             sb.append((width== MATCH_PARENT ?"fill":(width==WRAP_CONTENT?"wrap":width)));
2200             sb.append('x');
2201             sb.append((height== MATCH_PARENT ?"fill":(height==WRAP_CONTENT?"wrap":height)));
2202             sb.append(")");
2203             if (horizontalMargin != 0) {
2204                 sb.append(" hm=");
2205                 sb.append(horizontalMargin);
2206             }
2207             if (verticalMargin != 0) {
2208                 sb.append(" vm=");
2209                 sb.append(verticalMargin);
2210             }
2211             if (gravity != 0) {
2212                 sb.append(" gr=#");
2213                 sb.append(Integer.toHexString(gravity));
2214             }
2215             if (softInputMode != 0) {
2216                 sb.append(" sim=#");
2217                 sb.append(Integer.toHexString(softInputMode));
2218             }
2219             sb.append(" ty=");
2220             sb.append(type);
2221             sb.append(" fl=#");
2222             sb.append(Integer.toHexString(flags));
2223             if (privateFlags != 0) {
2224                 if ((privateFlags & PRIVATE_FLAG_COMPATIBLE_WINDOW) != 0) {
2225                     sb.append(" compatible=true");
2226                 }
2227                 sb.append(" pfl=0x").append(Integer.toHexString(privateFlags));
2228             }
2229             if (format != PixelFormat.OPAQUE) {
2230                 sb.append(" fmt=");
2231                 sb.append(format);
2232             }
2233             if (windowAnimations != 0) {
2234                 sb.append(" wanim=0x");
2235                 sb.append(Integer.toHexString(windowAnimations));
2236             }
2237             if (screenOrientation != ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
2238                 sb.append(" or=");
2239                 sb.append(screenOrientation);
2240             }
2241             if (alpha != 1.0f) {
2242                 sb.append(" alpha=");
2243                 sb.append(alpha);
2244             }
2245             if (screenBrightness != BRIGHTNESS_OVERRIDE_NONE) {
2246                 sb.append(" sbrt=");
2247                 sb.append(screenBrightness);
2248             }
2249             if (buttonBrightness != BRIGHTNESS_OVERRIDE_NONE) {
2250                 sb.append(" bbrt=");
2251                 sb.append(buttonBrightness);
2252             }
2253             if (rotationAnimation != ROTATION_ANIMATION_ROTATE) {
2254                 sb.append(" rotAnim=");
2255                 sb.append(rotationAnimation);
2256             }
2257             if (preferredRefreshRate != 0) {
2258                 sb.append(" preferredRefreshRate=");
2259                 sb.append(preferredRefreshRate);
2260             }
2261             if (preferredDisplayModeId != 0) {
2262                 sb.append(" preferredDisplayMode=");
2263                 sb.append(preferredDisplayModeId);
2264             }
2265             if (systemUiVisibility != 0) {
2266                 sb.append(" sysui=0x");
2267                 sb.append(Integer.toHexString(systemUiVisibility));
2268             }
2269             if (subtreeSystemUiVisibility != 0) {
2270                 sb.append(" vsysui=0x");
2271                 sb.append(Integer.toHexString(subtreeSystemUiVisibility));
2272             }
2273             if (hasSystemUiListeners) {
2274                 sb.append(" sysuil=");
2275                 sb.append(hasSystemUiListeners);
2276             }
2277             if (inputFeatures != 0) {
2278                 sb.append(" if=0x").append(Integer.toHexString(inputFeatures));
2279             }
2280             if (userActivityTimeout >= 0) {
2281                 sb.append(" userActivityTimeout=").append(userActivityTimeout);
2282             }
2283             if (surfaceInsets.left != 0 || surfaceInsets.top != 0 || surfaceInsets.right != 0 ||
2284                     surfaceInsets.bottom != 0 || hasManualSurfaceInsets
2285                     || !preservePreviousSurfaceInsets) {
2286                 sb.append(" surfaceInsets=").append(surfaceInsets);
2287                 if (hasManualSurfaceInsets) {
2288                     sb.append(" (manual)");
2289                 }
2290                 if (!preservePreviousSurfaceInsets) {
2291                     sb.append(" (!preservePreviousSurfaceInsets)");
2292                 }
2293             }
2294             if (needsMenuKey != NEEDS_MENU_UNSET) {
2295                 sb.append(" needsMenuKey=");
2296                 sb.append(needsMenuKey);
2297             }
2298             sb.append('}');
2299             return sb.toString();
2300         }
2301 
2302         /**
2303          * Scale the layout params' coordinates and size.
2304          * @hide
2305          */
scale(float scale)2306         public void scale(float scale) {
2307             x = (int) (x * scale + 0.5f);
2308             y = (int) (y * scale + 0.5f);
2309             if (width > 0) {
2310                 width = (int) (width * scale + 0.5f);
2311             }
2312             if (height > 0) {
2313                 height = (int) (height * scale + 0.5f);
2314             }
2315         }
2316 
2317         /**
2318          * Backup the layout parameters used in compatibility mode.
2319          * @see LayoutParams#restore()
2320          */
backup()2321         void backup() {
2322             int[] backup = mCompatibilityParamsBackup;
2323             if (backup == null) {
2324                 // we backup 4 elements, x, y, width, height
2325                 backup = mCompatibilityParamsBackup = new int[4];
2326             }
2327             backup[0] = x;
2328             backup[1] = y;
2329             backup[2] = width;
2330             backup[3] = height;
2331         }
2332 
2333         /**
2334          * Restore the layout params' coordinates, size and gravity
2335          * @see LayoutParams#backup()
2336          */
restore()2337         void restore() {
2338             int[] backup = mCompatibilityParamsBackup;
2339             if (backup != null) {
2340                 x = backup[0];
2341                 y = backup[1];
2342                 width = backup[2];
2343                 height = backup[3];
2344             }
2345         }
2346 
2347         private CharSequence mTitle = null;
2348 
2349         /** @hide */
2350         @Override
encodeProperties(@onNull ViewHierarchyEncoder encoder)2351         protected void encodeProperties(@NonNull ViewHierarchyEncoder encoder) {
2352             super.encodeProperties(encoder);
2353 
2354             encoder.addProperty("x", x);
2355             encoder.addProperty("y", y);
2356             encoder.addProperty("horizontalWeight", horizontalWeight);
2357             encoder.addProperty("verticalWeight", verticalWeight);
2358             encoder.addProperty("type", type);
2359             encoder.addProperty("flags", flags);
2360         }
2361     }
2362 }
2363