TestWindowManagerPolicy.java revision 17f175ca1a75d5a4864b88126f5d2a59935d52fd
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 static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING; 20import static org.mockito.Mockito.mock; 21import static org.mockito.Mockito.any; 22import static org.mockito.Mockito.doAnswer; 23import org.mockito.invocation.InvocationOnMock; 24 25import android.annotation.Nullable; 26import android.app.ActivityManagerInternal; 27import android.content.Context; 28import android.content.res.CompatibilityInfo; 29import android.content.res.Configuration; 30import android.graphics.Rect; 31import android.hardware.display.DisplayManagerInternal; 32import android.os.Bundle; 33import android.os.IBinder; 34import android.os.RemoteException; 35import android.view.Display; 36import android.view.IWindowManager; 37import android.view.KeyEvent; 38import android.view.WindowManager; 39import android.view.WindowManagerPolicy; 40import android.view.animation.Animation; 41import android.os.PowerManagerInternal; 42 43import com.android.internal.policy.IKeyguardDismissCallback; 44import com.android.internal.policy.IShortcutService; 45import com.android.server.input.InputManagerService; 46import com.android.server.LocalServices; 47 48import java.io.PrintWriter; 49 50class TestWindowManagerPolicy implements WindowManagerPolicy { 51 private static final String TAG = "TestWindowManagerPolicy"; 52 53 private static WindowManagerService sWm = null; 54 55 int rotationToReport = 0; 56 57 private Runnable mRunnableWhenAddingSplashScreen; 58 59 static synchronized WindowManagerService getWindowManagerService(Context context) { 60 if (sWm == null) { 61 // We only want to do this once for the test process as we don't want WM to try to 62 // register a bunch of local services again. 63 if (LocalServices.getService(DisplayManagerInternal.class) == null) { 64 LocalServices.addService(DisplayManagerInternal.class, 65 mock(DisplayManagerInternal.class)); 66 } 67 if (LocalServices.getService(PowerManagerInternal.class) == null) { 68 LocalServices.addService(PowerManagerInternal.class, 69 mock(PowerManagerInternal.class)); 70 } 71 if (LocalServices.getService(ActivityManagerInternal.class) == null) { 72 LocalServices.addService(ActivityManagerInternal.class, 73 mock(ActivityManagerInternal.class)); 74 final ActivityManagerInternal am = 75 LocalServices.getService(ActivityManagerInternal.class); 76 doAnswer((InvocationOnMock invocationOnMock) -> { 77 final Runnable runnable = invocationOnMock.getArgumentAt(0, Runnable.class); 78 if (runnable != null) { 79 runnable.run(); 80 } 81 return null; 82 }).when(am).notifyKeyguardFlagsChanged(any()); 83 } 84 sWm = WindowManagerService.main(context, mock(InputManagerService.class), true, false, 85 false, new TestWindowManagerPolicy()); 86 } 87 return sWm; 88 } 89 90 @Override 91 public void registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver) 92 throws RemoteException { 93 94 } 95 96 @Override 97 public void init(Context context, IWindowManager windowManager, 98 WindowManagerFuncs windowManagerFuncs) { 99 100 } 101 102 @Override 103 public boolean isDefaultOrientationForced() { 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 getMaxWallpaperLayer() { 140 return 0; 141 } 142 143 @Override 144 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 145 int displayId) { 146 return 0; 147 } 148 149 @Override 150 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 151 int displayId) { 152 return 0; 153 } 154 155 @Override 156 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 157 int displayId) { 158 return 0; 159 } 160 161 @Override 162 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 163 int displayId) { 164 return 0; 165 } 166 167 @Override 168 public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs) { 169 return false; 170 } 171 172 @Override 173 public boolean canBeHiddenByKeyguardLw(WindowState win) { 174 return false; 175 } 176 177 /** 178 * Sets a runnable to run when adding a splash screen which gets executed after the window has 179 * been added but before returning the surface. 180 */ 181 void setRunnableWhenAddingSplashScreen(Runnable r) { 182 mRunnableWhenAddingSplashScreen = r; 183 } 184 185 @Override 186 public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, 187 CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, 188 int logo, int windowFlags, Configuration overrideConfig, int displayId) { 189 final com.android.server.wm.WindowState window; 190 final AppWindowToken atoken; 191 synchronized (sWm.mWindowMap) { 192 atoken = WindowTestsBase.sDisplayContent.getAppWindowToken(appToken); 193 window = WindowTestsBase.createWindow(null, TYPE_APPLICATION_STARTING, atoken, 194 "Starting window"); 195 atoken.startingWindow = window; 196 } 197 if (mRunnableWhenAddingSplashScreen != null) { 198 mRunnableWhenAddingSplashScreen.run(); 199 mRunnableWhenAddingSplashScreen = null; 200 } 201 return () -> { 202 synchronized (sWm.mWindowMap) { 203 atoken.removeChild(window); 204 atoken.startingWindow = null; 205 } 206 }; 207 } 208 209 @Override 210 public int prepareAddWindowLw(WindowState win, 211 WindowManager.LayoutParams attrs) { 212 return 0; 213 } 214 215 @Override 216 public void removeWindowLw(WindowState win) { 217 218 } 219 220 @Override 221 public int selectAnimationLw(WindowState win, int transit) { 222 return 0; 223 } 224 225 @Override 226 public void selectRotationAnimationLw(int[] anim) { 227 228 } 229 230 @Override 231 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId, 232 boolean forceDefault) { 233 return false; 234 } 235 236 @Override 237 public Animation createHiddenByKeyguardExit(boolean onWallpaper, 238 boolean goingToNotificationShade) { 239 return null; 240 } 241 242 @Override 243 public Animation createKeyguardWallpaperExit(boolean goingToNotificationShade) { 244 return null; 245 } 246 247 @Override 248 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) { 249 return 0; 250 } 251 252 @Override 253 public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags) { 254 return 0; 255 } 256 257 @Override 258 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, 259 int policyFlags) { 260 return 0; 261 } 262 263 @Override 264 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, 265 int policyFlags) { 266 return null; 267 } 268 269 @Override 270 public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight, 271 int displayRotation, int uiMode) { 272 273 } 274 275 @Override 276 public int getSystemDecorLayerLw() { 277 return 0; 278 } 279 280 @Override 281 public void getContentRectLw(Rect r) { 282 283 } 284 285 @Override 286 public void layoutWindowLw(WindowState win, 287 WindowState attached) { 288 289 } 290 291 @Override 292 public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds, 293 int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets, 294 Rect outStableInsets, Rect outOutsets) { 295 return false; 296 } 297 298 @Override 299 public void finishLayoutLw() { 300 301 } 302 303 @Override 304 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) { 305 306 } 307 308 @Override 309 public void applyPostLayoutPolicyLw(WindowState win, 310 WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget) { 311 } 312 313 @Override 314 public int finishPostLayoutPolicyLw() { 315 return 0; 316 } 317 318 @Override 319 public boolean allowAppAnimationsLw() { 320 return false; 321 } 322 323 @Override 324 public int focusChangedLw(WindowState lastFocus, 325 WindowState newFocus) { 326 return 0; 327 } 328 329 @Override 330 public void startedWakingUp() { 331 332 } 333 334 @Override 335 public void finishedWakingUp() { 336 337 } 338 339 @Override 340 public void startedGoingToSleep(int why) { 341 342 } 343 344 @Override 345 public void finishedGoingToSleep(int why) { 346 347 } 348 349 @Override 350 public void screenTurningOn(ScreenOnListener screenOnListener) { 351 352 } 353 354 @Override 355 public void screenTurnedOn() { 356 357 } 358 359 @Override 360 public void screenTurnedOff() { 361 362 } 363 364 @Override 365 public boolean isScreenOn() { 366 return true; 367 } 368 369 @Override 370 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) { 371 372 } 373 374 @Override 375 public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered) { 376 377 } 378 379 @Override 380 public void enableKeyguard(boolean enabled) { 381 382 } 383 384 @Override 385 public void exitKeyguardSecurely(OnKeyguardExitResult callback) { 386 387 } 388 389 @Override 390 public boolean isKeyguardLocked() { 391 return false; 392 } 393 394 @Override 395 public boolean isKeyguardSecure(int userId) { 396 return false; 397 } 398 399 @Override 400 public boolean isKeyguardOccluded() { 401 return false; 402 } 403 404 @Override 405 public boolean isKeyguardTrustedLw() { 406 return false; 407 } 408 409 @Override 410 public boolean isKeyguardShowingAndNotOccluded() { 411 return false; 412 } 413 414 @Override 415 public boolean inKeyguardRestrictedKeyInputMode() { 416 return false; 417 } 418 419 @Override 420 public void dismissKeyguardLw(@Nullable IKeyguardDismissCallback callback) { 421 } 422 423 @Override 424 public boolean isKeyguardDrawnLw() { 425 return false; 426 } 427 428 @Override 429 public boolean isShowingDreamLw() { 430 return false; 431 } 432 433 @Override 434 public void onKeyguardOccludedChangedLw(boolean occluded) { 435 } 436 437 @Override 438 public int rotationForOrientationLw(int orientation, 439 int lastRotation) { 440 return rotationToReport; 441 } 442 443 @Override 444 public boolean rotationHasCompatibleMetricsLw(int orientation, 445 int rotation) { 446 return false; 447 } 448 449 @Override 450 public void setRotationLw(int rotation) { 451 452 } 453 454 @Override 455 public void setSafeMode(boolean safeMode) { 456 457 } 458 459 @Override 460 public void systemReady() { 461 462 } 463 464 @Override 465 public void systemBooted() { 466 467 } 468 469 @Override 470 public void showBootMessage(CharSequence msg, boolean always) { 471 472 } 473 474 @Override 475 public void hideBootMessages() { 476 477 } 478 479 @Override 480 public void userActivity() { 481 482 } 483 484 @Override 485 public void enableScreenAfterBoot() { 486 487 } 488 489 @Override 490 public void setCurrentOrientationLw(int newOrientation) { 491 492 } 493 494 @Override 495 public boolean performHapticFeedbackLw(WindowState win, int effectId, 496 boolean always) { 497 return false; 498 } 499 500 @Override 501 public void keepScreenOnStartedLw() { 502 503 } 504 505 @Override 506 public void keepScreenOnStoppedLw() { 507 508 } 509 510 @Override 511 public int getUserRotationMode() { 512 return 0; 513 } 514 515 @Override 516 public void setUserRotationMode(int mode, 517 int rotation) { 518 519 } 520 521 @Override 522 public int adjustSystemUiVisibilityLw(int visibility) { 523 return 0; 524 } 525 526 @Override 527 public boolean hasNavigationBar() { 528 return false; 529 } 530 531 @Override 532 public void lockNow(Bundle options) { 533 534 } 535 536 @Override 537 public void setLastInputMethodWindowLw(WindowState ime, 538 WindowState target) { 539 540 } 541 542 @Override 543 public void showRecentApps(boolean fromHome) { 544 545 } 546 547 @Override 548 public void showGlobalActions() { 549 550 } 551 552 @Override 553 public int getInputMethodWindowVisibleHeightLw() { 554 return 0; 555 } 556 557 @Override 558 public void setCurrentUserLw(int newUserId) { 559 560 } 561 562 @Override 563 public void setSwitchingUser(boolean switching) { 564 565 } 566 567 @Override 568 public void dump(String prefix, PrintWriter writer, String[] args) { 569 570 } 571 572 @Override 573 public boolean canMagnifyWindow(int windowType) { 574 return false; 575 } 576 577 @Override 578 public boolean isTopLevelWindow(int windowType) { 579 return false; 580 } 581 582 @Override 583 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) { 584 585 } 586 587 @Override 588 public void getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight, 589 Rect outInsets) { 590 591 } 592 593 @Override 594 public boolean isNavBarForcedShownLw(WindowState win) { 595 return false; 596 } 597 598 @Override 599 public void getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight, 600 Rect outInsets) { 601 602 } 603 604 @Override 605 public boolean isDockSideAllowed(int dockSide) { 606 return false; 607 } 608 609 @Override 610 public void onConfigurationChanged() { 611 612 } 613 614 @Override 615 public boolean shouldRotateSeamlessly(int oldRotation, int newRotation) { 616 return false; 617 } 618 619 @Override 620 public void setTvPipVisibilityLw(boolean visible) { 621 622 } 623 624 @Override 625 public void setRecentsVisibilityLw(boolean visible) { 626 627 } 628} 629