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