TestWindowManagerPolicy.java revision a95bfff74604bbf05a66ff37947b1b2fb2fdcaa2
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 sWm = WindowManagerService.main(context, mock(InputManagerService.class), true, false, 94 false, new TestWindowManagerPolicy()); 95 } 96 return sWm; 97 } 98 99 @Override 100 public void registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver) 101 throws RemoteException { 102 103 } 104 105 @Override 106 public void init(Context context, IWindowManager windowManager, 107 WindowManagerFuncs windowManagerFuncs) { 108 109 } 110 111 @Override 112 public boolean isDefaultOrientationForced() { 113 return false; 114 } 115 116 @Override 117 public void setInitialDisplaySize(Display display, int width, int height, int density) { 118 119 } 120 121 @Override 122 public void setDisplayOverscan(Display display, int left, int top, int right, int bottom) { 123 124 } 125 126 @Override 127 public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) { 128 return 0; 129 } 130 131 @Override 132 public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs) { 133 return false; 134 } 135 136 @Override 137 public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) { 138 139 } 140 141 @Override 142 public void adjustConfigurationLw(Configuration config, int keyboardPresence, 143 int navigationPresence) { 144 145 } 146 147 @Override 148 public int getMaxWallpaperLayer() { 149 return 0; 150 } 151 152 @Override 153 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 154 int displayId) { 155 return 0; 156 } 157 158 @Override 159 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 160 int displayId) { 161 return 0; 162 } 163 164 @Override 165 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 166 int displayId) { 167 return 0; 168 } 169 170 @Override 171 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 172 int displayId) { 173 return 0; 174 } 175 176 @Override 177 public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs) { 178 return false; 179 } 180 181 @Override 182 public boolean canBeHiddenByKeyguardLw(WindowState win) { 183 return false; 184 } 185 186 /** 187 * Sets a runnable to run when adding a splash screen which gets executed after the window has 188 * been added but before returning the surface. 189 */ 190 void setRunnableWhenAddingSplashScreen(Runnable r) { 191 mRunnableWhenAddingSplashScreen = r; 192 } 193 194 @Override 195 public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, 196 CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, 197 int logo, int windowFlags, Configuration overrideConfig, int displayId) { 198 final com.android.server.wm.WindowState window; 199 final AppWindowToken atoken; 200 synchronized (sWm.mWindowMap) { 201 atoken = WindowTestsBase.sDisplayContent.getAppWindowToken(appToken); 202 window = WindowTestsBase.createWindow(null, TYPE_APPLICATION_STARTING, atoken, 203 "Starting window"); 204 atoken.startingWindow = window; 205 } 206 if (mRunnableWhenAddingSplashScreen != null) { 207 mRunnableWhenAddingSplashScreen.run(); 208 mRunnableWhenAddingSplashScreen = null; 209 } 210 return () -> { 211 synchronized (sWm.mWindowMap) { 212 atoken.removeChild(window); 213 atoken.startingWindow = null; 214 } 215 }; 216 } 217 218 @Override 219 public int prepareAddWindowLw(WindowState win, 220 WindowManager.LayoutParams attrs) { 221 return 0; 222 } 223 224 @Override 225 public void removeWindowLw(WindowState win) { 226 227 } 228 229 @Override 230 public int selectAnimationLw(WindowState win, int transit) { 231 return 0; 232 } 233 234 @Override 235 public void selectRotationAnimationLw(int[] anim) { 236 237 } 238 239 @Override 240 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId, 241 boolean forceDefault) { 242 return false; 243 } 244 245 @Override 246 public Animation createHiddenByKeyguardExit(boolean onWallpaper, 247 boolean goingToNotificationShade) { 248 return null; 249 } 250 251 @Override 252 public Animation createKeyguardWallpaperExit(boolean goingToNotificationShade) { 253 return null; 254 } 255 256 @Override 257 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) { 258 return 0; 259 } 260 261 @Override 262 public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags) { 263 return 0; 264 } 265 266 @Override 267 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, 268 int policyFlags) { 269 return 0; 270 } 271 272 @Override 273 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, 274 int policyFlags) { 275 return null; 276 } 277 278 @Override 279 public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight, 280 int displayRotation, int uiMode) { 281 282 } 283 284 @Override 285 public int getSystemDecorLayerLw() { 286 return 0; 287 } 288 289 @Override 290 public void getContentRectLw(Rect r) { 291 292 } 293 294 @Override 295 public void layoutWindowLw(WindowState win, 296 WindowState attached) { 297 298 } 299 300 @Override 301 public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds, 302 int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets, 303 Rect outStableInsets, Rect outOutsets) { 304 return false; 305 } 306 307 @Override 308 public void finishLayoutLw() { 309 310 } 311 312 @Override 313 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) { 314 315 } 316 317 @Override 318 public void applyPostLayoutPolicyLw(WindowState win, 319 WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget) { 320 } 321 322 @Override 323 public int finishPostLayoutPolicyLw() { 324 return 0; 325 } 326 327 @Override 328 public boolean allowAppAnimationsLw() { 329 return false; 330 } 331 332 @Override 333 public int focusChangedLw(WindowState lastFocus, 334 WindowState newFocus) { 335 return 0; 336 } 337 338 @Override 339 public void startedWakingUp() { 340 341 } 342 343 @Override 344 public void finishedWakingUp() { 345 346 } 347 348 @Override 349 public void startedGoingToSleep(int why) { 350 351 } 352 353 @Override 354 public void finishedGoingToSleep(int why) { 355 356 } 357 358 @Override 359 public void screenTurningOn(ScreenOnListener screenOnListener) { 360 361 } 362 363 @Override 364 public void screenTurnedOn() { 365 366 } 367 368 @Override 369 public void screenTurnedOff() { 370 371 } 372 373 @Override 374 public boolean isScreenOn() { 375 return true; 376 } 377 378 @Override 379 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) { 380 381 } 382 383 @Override 384 public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered) { 385 386 } 387 388 @Override 389 public void enableKeyguard(boolean enabled) { 390 391 } 392 393 @Override 394 public void exitKeyguardSecurely(OnKeyguardExitResult callback) { 395 396 } 397 398 @Override 399 public boolean isKeyguardLocked() { 400 return false; 401 } 402 403 @Override 404 public boolean isKeyguardSecure(int userId) { 405 return false; 406 } 407 408 @Override 409 public boolean isKeyguardOccluded() { 410 return false; 411 } 412 413 @Override 414 public boolean isKeyguardTrustedLw() { 415 return false; 416 } 417 418 @Override 419 public boolean isKeyguardShowingAndNotOccluded() { 420 return false; 421 } 422 423 @Override 424 public boolean inKeyguardRestrictedKeyInputMode() { 425 return false; 426 } 427 428 @Override 429 public void dismissKeyguardLw(@Nullable IKeyguardDismissCallback callback) { 430 } 431 432 @Override 433 public boolean isKeyguardDrawnLw() { 434 return false; 435 } 436 437 @Override 438 public boolean isShowingDreamLw() { 439 return false; 440 } 441 442 @Override 443 public void onKeyguardOccludedChangedLw(boolean occluded) { 444 } 445 446 @Override 447 public int rotationForOrientationLw(int orientation, 448 int lastRotation) { 449 return rotationToReport; 450 } 451 452 @Override 453 public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation) { 454 return true; 455 } 456 457 @Override 458 public void setRotationLw(int rotation) { 459 460 } 461 462 @Override 463 public void setSafeMode(boolean safeMode) { 464 465 } 466 467 @Override 468 public void systemReady() { 469 470 } 471 472 @Override 473 public void systemBooted() { 474 475 } 476 477 @Override 478 public void showBootMessage(CharSequence msg, boolean always) { 479 480 } 481 482 @Override 483 public void hideBootMessages() { 484 485 } 486 487 @Override 488 public void userActivity() { 489 490 } 491 492 @Override 493 public void enableScreenAfterBoot() { 494 495 } 496 497 @Override 498 public void setCurrentOrientationLw(int newOrientation) { 499 500 } 501 502 @Override 503 public boolean performHapticFeedbackLw(WindowState win, int effectId, 504 boolean always) { 505 return false; 506 } 507 508 @Override 509 public void keepScreenOnStartedLw() { 510 511 } 512 513 @Override 514 public void keepScreenOnStoppedLw() { 515 516 } 517 518 @Override 519 public int getUserRotationMode() { 520 return 0; 521 } 522 523 @Override 524 public void setUserRotationMode(int mode, 525 int rotation) { 526 527 } 528 529 @Override 530 public int adjustSystemUiVisibilityLw(int visibility) { 531 return 0; 532 } 533 534 @Override 535 public boolean hasNavigationBar() { 536 return false; 537 } 538 539 @Override 540 public void lockNow(Bundle options) { 541 542 } 543 544 @Override 545 public void setLastInputMethodWindowLw(WindowState ime, 546 WindowState target) { 547 548 } 549 550 @Override 551 public void showRecentApps(boolean fromHome) { 552 553 } 554 555 @Override 556 public void showGlobalActions() { 557 558 } 559 560 @Override 561 public int getInputMethodWindowVisibleHeightLw() { 562 return 0; 563 } 564 565 @Override 566 public void setCurrentUserLw(int newUserId) { 567 568 } 569 570 @Override 571 public void setSwitchingUser(boolean switching) { 572 573 } 574 575 @Override 576 public void dump(String prefix, PrintWriter writer, String[] args) { 577 578 } 579 580 @Override 581 public boolean canMagnifyWindow(int windowType) { 582 return false; 583 } 584 585 @Override 586 public boolean isTopLevelWindow(int windowType) { 587 return false; 588 } 589 590 @Override 591 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) { 592 593 } 594 595 @Override 596 public void getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight, 597 Rect outInsets) { 598 599 } 600 601 @Override 602 public boolean isNavBarForcedShownLw(WindowState win) { 603 return false; 604 } 605 606 @Override 607 public void getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight, 608 Rect outInsets) { 609 610 } 611 612 @Override 613 public boolean isDockSideAllowed(int dockSide) { 614 return false; 615 } 616 617 @Override 618 public void onConfigurationChanged() { 619 620 } 621 622 @Override 623 public boolean shouldRotateSeamlessly(int oldRotation, int newRotation) { 624 return false; 625 } 626 627 @Override 628 public void setTvPipVisibilityLw(boolean visible) { 629 630 } 631 632 @Override 633 public void setRecentsVisibilityLw(boolean visible) { 634 635 } 636} 637