blob: 38a98b26d5f1e294a312686c1a3402510423dfb1 [file] [log] [blame]
Wale Ogunwaleb699ce02016-07-18 12:05:30 -07001/*
2 * Copyright (C) 2016 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
17package com.android.server.wm;
18
19import com.android.internal.policy.IShortcutService;
Wale Ogunwalecfca2582016-10-19 09:53:25 -070020import com.android.server.input.InputManagerService;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -070021
22import android.content.Context;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -070023import android.content.res.CompatibilityInfo;
24import android.content.res.Configuration;
25import android.graphics.Rect;
26import android.os.Bundle;
27import android.os.IBinder;
28import android.os.RemoteException;
Wale Ogunwaleadde52e2016-07-16 13:11:55 -070029import android.util.Log;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -070030import android.view.Display;
31import android.view.IWindowManager;
32import android.view.KeyEvent;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -070033import android.view.View;
34import android.view.WindowManager;
35import android.view.WindowManagerPolicy;
36import android.view.animation.Animation;
37
38import java.io.PrintWriter;
39
Wale Ogunwaleadde52e2016-07-16 13:11:55 -070040import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
41import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
42import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
43import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL;
44import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
45import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
46import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY;
47import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
48import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL;
49import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
50import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY;
51import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
52import static android.view.WindowManager.LayoutParams.TYPE_DRAG;
53import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
54import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
55import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
56import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
57import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
Wale Ogunwaleadde52e2016-07-16 13:11:55 -070058import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
59import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
60import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
61import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
62import static android.view.WindowManager.LayoutParams.TYPE_POINTER;
63import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
Wale Ogunwale5b6714c2016-11-01 20:54:46 -070064import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
Wale Ogunwaleadde52e2016-07-16 13:11:55 -070065import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
66import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
67import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT;
68import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR;
69import static android.view.WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY;
70import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
71import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;
72import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL;
73import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
74import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
75import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
76import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
77import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
78import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
79import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING;
80import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
81import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
82
Wale Ogunwalecfca2582016-10-19 09:53:25 -070083import static org.mockito.Mockito.mock;
84
85class TestWindowManagerPolicy implements WindowManagerPolicy {
Wale Ogunwaleadde52e2016-07-16 13:11:55 -070086 private static final String TAG = "TestWindowManagerPolicy";
Wale Ogunwaleb699ce02016-07-18 12:05:30 -070087
Wale Ogunwale51362492016-09-08 17:49:17 -070088 private static WindowManagerService sWm = null;
89
90 static synchronized WindowManagerService getWindowManagerService(Context context) {
91 if (sWm == null) {
92 // We only want to do this once for the test process as we don't want WM to try to
93 // register a bunch of local services again.
Wale Ogunwalecfca2582016-10-19 09:53:25 -070094 sWm = WindowManagerService.main(context, mock(InputManagerService.class), true, false,
95 false, new TestWindowManagerPolicy());
Wale Ogunwale51362492016-09-08 17:49:17 -070096 }
97 return sWm;
98 }
99
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700100 @Override
101 public void registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver)
102 throws RemoteException {
103
104 }
105
106 @Override
107 public void init(Context context, IWindowManager windowManager,
108 WindowManagerFuncs windowManagerFuncs) {
109
110 }
111
112 @Override
113 public boolean isDefaultOrientationForced() {
114 return false;
115 }
116
117 @Override
118 public void setInitialDisplaySize(Display display, int width, int height, int density) {
119
120 }
121
122 @Override
123 public void setDisplayOverscan(Display display, int left, int top, int right, int bottom) {
124
125 }
126
127 @Override
128 public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {
129 return 0;
130 }
131
132 @Override
133 public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs) {
134 return false;
135 }
136
137 @Override
138 public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) {
139
140 }
141
142 @Override
143 public void adjustConfigurationLw(Configuration config, int keyboardPresence,
144 int navigationPresence) {
145
146 }
147
148 @Override
149 public int windowTypeToLayerLw(int type) {
Wale Ogunwaleadde52e2016-07-16 13:11:55 -0700150 // TODO: figure-out a good way to keep this in-sync with PhoneWindowManager...sigh!
151 if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) {
152 return 2;
153 }
154 switch (type) {
Wale Ogunwale5b6714c2016-11-01 20:54:46 -0700155 case TYPE_PRESENTATION:
Wale Ogunwaleadde52e2016-07-16 13:11:55 -0700156 case TYPE_PRIVATE_PRESENTATION:
157 return 2;
158 case TYPE_WALLPAPER:
159 // wallpaper is at the bottom, though the window manager may move it.
160 return 2;
161 case TYPE_DOCK_DIVIDER:
162 return 2;
163 case TYPE_QS_DIALOG:
164 return 2;
165 case TYPE_PHONE:
166 return 3;
167 case TYPE_SEARCH_BAR:
168 case TYPE_VOICE_INTERACTION_STARTING:
169 return 4;
170 case TYPE_VOICE_INTERACTION:
171 // voice interaction layer is almost immediately above apps.
172 return 5;
173 case TYPE_INPUT_CONSUMER:
174 return 6;
175 case TYPE_SYSTEM_DIALOG:
176 return 7;
177 case TYPE_TOAST:
178 // toasts and the plugged-in battery thing
179 return 8;
180 case TYPE_PRIORITY_PHONE:
181 // SIM errors and unlock. Not sure if this really should be in a high layer.
182 return 9;
183 case TYPE_DREAM:
184 // used for Dreams (screensavers with TYPE_DREAM windows)
185 return 10;
186 case TYPE_SYSTEM_ALERT:
187 // like the ANR / app crashed dialogs
188 return 11;
189 case TYPE_INPUT_METHOD:
190 // on-screen keyboards and other such input method user interfaces go here.
191 return 12;
192 case TYPE_INPUT_METHOD_DIALOG:
193 // on-screen keyboards and other such input method user interfaces go here.
194 return 13;
Wale Ogunwaleadde52e2016-07-16 13:11:55 -0700195 case TYPE_STATUS_BAR_SUB_PANEL:
196 return 15;
197 case TYPE_STATUS_BAR:
198 return 16;
199 case TYPE_STATUS_BAR_PANEL:
200 return 17;
201 case TYPE_KEYGUARD_DIALOG:
202 return 18;
203 case TYPE_VOLUME_OVERLAY:
204 // the on-screen volume indicator and controller shown when the user
205 // changes the device volume
206 return 19;
207 case TYPE_SYSTEM_OVERLAY:
208 // the on-screen volume indicator and controller shown when the user
209 // changes the device volume
210 return 20;
211 case TYPE_NAVIGATION_BAR:
212 // the navigation bar, if available, shows atop most things
213 return 21;
214 case TYPE_NAVIGATION_BAR_PANEL:
215 // some panels (e.g. search) need to show on top of the navigation bar
216 return 22;
217 case TYPE_SCREENSHOT:
218 // screenshot selection layer shouldn't go above system error, but it should cover
219 // navigation bars at the very least.
220 return 23;
221 case TYPE_SYSTEM_ERROR:
222 // system-level error dialogs
223 return 24;
224 case TYPE_MAGNIFICATION_OVERLAY:
225 // used to highlight the magnified portion of a display
226 return 25;
227 case TYPE_DISPLAY_OVERLAY:
228 // used to simulate secondary display devices
229 return 26;
230 case TYPE_DRAG:
231 // the drag layer: input for drag-and-drop is associated with this window,
232 // which sits above all other focusable windows
233 return 27;
234 case TYPE_ACCESSIBILITY_OVERLAY:
235 // overlay put by accessibility services to intercept user interaction
236 return 28;
237 case TYPE_SECURE_SYSTEM_OVERLAY:
238 return 29;
239 case TYPE_BOOT_PROGRESS:
240 return 30;
241 case TYPE_POINTER:
242 // the (mouse) pointer layer
243 return 31;
244 }
245 Log.e(TAG, "Unknown window type: " + type);
246 return 2;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700247 }
248
249 @Override
250 public int subWindowTypeToLayerLw(int type) {
Wale Ogunwaleadde52e2016-07-16 13:11:55 -0700251 // TODO: figure-out a good way to keep this in-sync with PhoneWindowManager...
252 switch (type) {
253 case TYPE_APPLICATION_PANEL:
254 case TYPE_APPLICATION_ATTACHED_DIALOG:
255 return 1;
256 case TYPE_APPLICATION_MEDIA:
257 return -2;
258 case TYPE_APPLICATION_MEDIA_OVERLAY:
259 return -1;
260 case TYPE_APPLICATION_SUB_PANEL:
261 return 2;
262 case TYPE_APPLICATION_ABOVE_SUB_PANEL:
263 return 3;
264 }
265 Log.e(TAG, "Unknown sub-window type: " + type);
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700266 return 0;
267 }
268
269 @Override
270 public int getMaxWallpaperLayer() {
271 return 0;
272 }
273
274 @Override
275 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) {
276 return 0;
277 }
278
279 @Override
280 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) {
281 return 0;
282 }
283
284 @Override
285 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) {
286 return 0;
287 }
288
289 @Override
290 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) {
291 return 0;
292 }
293
294 @Override
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700295 public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs) {
296 return false;
297 }
298
299 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200300 public boolean canBeHiddenByKeyguardLw(WindowState win) {
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700301 return false;
302 }
303
304 @Override
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700305 public View addStartingWindow(IBinder appToken, String packageName, int theme,
306 CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon,
307 int logo, int windowFlags, Configuration overrideConfig) {
308 return null;
309 }
310
311 @Override
312 public void removeStartingWindow(IBinder appToken, View window) {
313
314 }
315
316 @Override
317 public int prepareAddWindowLw(WindowState win,
318 WindowManager.LayoutParams attrs) {
319 return 0;
320 }
321
322 @Override
323 public void removeWindowLw(WindowState win) {
324
325 }
326
327 @Override
328 public int selectAnimationLw(WindowState win, int transit) {
329 return 0;
330 }
331
332 @Override
333 public void selectRotationAnimationLw(int[] anim) {
334
335 }
336
337 @Override
338 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId,
339 boolean forceDefault) {
340 return false;
341 }
342
343 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200344 public Animation createHiddenByKeyguardExit(boolean onWallpaper,
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700345 boolean goingToNotificationShade) {
346 return null;
347 }
348
349 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200350 public Animation createKeyguardWallpaperExit(boolean goingToNotificationShade) {
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700351 return null;
352 }
353
354 @Override
355 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
356 return 0;
357 }
358
359 @Override
360 public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags) {
361 return 0;
362 }
363
364 @Override
365 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event,
366 int policyFlags) {
367 return 0;
368 }
369
370 @Override
371 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event,
372 int policyFlags) {
373 return null;
374 }
375
376 @Override
377 public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight,
378 int displayRotation, int uiMode) {
379
380 }
381
382 @Override
383 public int getSystemDecorLayerLw() {
384 return 0;
385 }
386
387 @Override
388 public void getContentRectLw(Rect r) {
389
390 }
391
392 @Override
393 public void layoutWindowLw(WindowState win,
394 WindowState attached) {
395
396 }
397
398 @Override
399 public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds,
400 int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets,
401 Rect outStableInsets, Rect outOutsets) {
402 return false;
403 }
404
405 @Override
406 public void finishLayoutLw() {
407
408 }
409
410 @Override
411 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) {
412
413 }
414
415 @Override
416 public void applyPostLayoutPolicyLw(WindowState win,
Jorim Jaggife762342016-10-13 14:33:27 +0200417 WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget) {
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700418 }
419
420 @Override
421 public int finishPostLayoutPolicyLw() {
422 return 0;
423 }
424
425 @Override
426 public boolean allowAppAnimationsLw() {
427 return false;
428 }
429
430 @Override
431 public int focusChangedLw(WindowState lastFocus,
432 WindowState newFocus) {
433 return 0;
434 }
435
436 @Override
437 public void startedWakingUp() {
438
439 }
440
441 @Override
442 public void finishedWakingUp() {
443
444 }
445
446 @Override
447 public void startedGoingToSleep(int why) {
448
449 }
450
451 @Override
452 public void finishedGoingToSleep(int why) {
453
454 }
455
456 @Override
457 public void screenTurningOn(ScreenOnListener screenOnListener) {
458
459 }
460
461 @Override
462 public void screenTurnedOn() {
463
464 }
465
466 @Override
467 public void screenTurnedOff() {
468
469 }
470
471 @Override
472 public boolean isScreenOn() {
473 return false;
474 }
475
476 @Override
477 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) {
478
479 }
480
481 @Override
482 public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered) {
483
484 }
485
486 @Override
487 public void enableKeyguard(boolean enabled) {
488
489 }
490
491 @Override
492 public void exitKeyguardSecurely(OnKeyguardExitResult callback) {
493
494 }
495
496 @Override
497 public boolean isKeyguardLocked() {
498 return false;
499 }
500
501 @Override
502 public boolean isKeyguardSecure(int userId) {
503 return false;
504 }
505
506 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200507 public boolean isKeyguardOccluded() {
508 return false;
509 }
510
511 @Override
512 public boolean isKeyguardTrustedLw() {
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700513 return false;
514 }
515
516 @Override
517 public boolean isKeyguardShowingAndNotOccluded() {
518 return false;
519 }
520
521 @Override
522 public boolean inKeyguardRestrictedKeyInputMode() {
523 return false;
524 }
525
526 @Override
527 public void dismissKeyguardLw() {
528
529 }
530
531 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200532 public boolean isKeyguardDrawnLw() {
533 return false;
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700534 }
535
536 @Override
Jorim Jaggi77e10432016-10-26 17:43:56 -0700537 public boolean isShowingDreamLw() {
538 return false;
539 }
540
541 @Override
Jorim Jaggife762342016-10-13 14:33:27 +0200542 public void onKeyguardOccludedChangedLw(boolean occluded) {
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700543 }
544
545 @Override
546 public int rotationForOrientationLw(int orientation,
547 int lastRotation) {
548 return 0;
549 }
550
551 @Override
552 public boolean rotationHasCompatibleMetricsLw(int orientation,
553 int rotation) {
554 return false;
555 }
556
557 @Override
558 public void setRotationLw(int rotation) {
559
560 }
561
562 @Override
563 public void setSafeMode(boolean safeMode) {
564
565 }
566
567 @Override
568 public void systemReady() {
569
570 }
571
572 @Override
573 public void systemBooted() {
574
575 }
576
577 @Override
578 public void showBootMessage(CharSequence msg, boolean always) {
579
580 }
581
582 @Override
583 public void hideBootMessages() {
584
585 }
586
587 @Override
588 public void userActivity() {
589
590 }
591
592 @Override
593 public void enableScreenAfterBoot() {
594
595 }
596
597 @Override
598 public void setCurrentOrientationLw(int newOrientation) {
599
600 }
601
602 @Override
603 public boolean performHapticFeedbackLw(WindowState win, int effectId,
604 boolean always) {
605 return false;
606 }
607
608 @Override
609 public void keepScreenOnStartedLw() {
610
611 }
612
613 @Override
614 public void keepScreenOnStoppedLw() {
615
616 }
617
618 @Override
619 public int getUserRotationMode() {
620 return 0;
621 }
622
623 @Override
624 public void setUserRotationMode(int mode,
625 int rotation) {
626
627 }
628
629 @Override
630 public int adjustSystemUiVisibilityLw(int visibility) {
631 return 0;
632 }
633
634 @Override
635 public boolean hasNavigationBar() {
636 return false;
637 }
638
639 @Override
640 public void lockNow(Bundle options) {
641
642 }
643
644 @Override
645 public void setLastInputMethodWindowLw(WindowState ime,
646 WindowState target) {
647
648 }
649
650 @Override
651 public void showRecentApps(boolean fromHome) {
652
653 }
654
655 @Override
656 public void showGlobalActions() {
657
658 }
659
660 @Override
661 public int getInputMethodWindowVisibleHeightLw() {
662 return 0;
663 }
664
665 @Override
666 public void setCurrentUserLw(int newUserId) {
667
668 }
669
670 @Override
Evan Rosky18396452016-07-27 15:19:37 -0700671 public void setSwitchingUser(boolean switching) {
672
673 }
674
675 @Override
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700676 public void dump(String prefix, PrintWriter writer, String[] args) {
677
678 }
679
680 @Override
681 public boolean canMagnifyWindow(int windowType) {
682 return false;
683 }
684
685 @Override
686 public boolean isTopLevelWindow(int windowType) {
687 return false;
688 }
689
690 @Override
691 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) {
692
693 }
694
695 @Override
696 public void getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight,
697 Rect outInsets) {
698
699 }
700
701 @Override
702 public boolean isNavBarForcedShownLw(WindowState win) {
703 return false;
704 }
705
706 @Override
707 public void getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight,
708 Rect outInsets) {
709
710 }
711
712 @Override
713 public boolean isDockSideAllowed(int dockSide) {
714 return false;
715 }
716
717 @Override
718 public void onConfigurationChanged() {
719
720 }
721
722 @Override
723 public boolean shouldRotateSeamlessly(int oldRotation, int newRotation) {
724 return false;
725 }
Brian Carlstrom7203d622016-09-21 01:00:36 -0700726
727 @Override
728 public void setTvPipVisibilityLw(boolean visible) {
729
730 }
731
732 @Override
733 public void setRecentsVisibilityLw(boolean visible) {
734
735 }
Wale Ogunwaleb699ce02016-07-18 12:05:30 -0700736}