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