TestWindowManagerPolicy.java revision ac52f2892d5c72c26387d510093ddfc741a8a632
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.os.PowerSaveState; 27import org.mockito.invocation.InvocationOnMock; 28 29import android.annotation.Nullable; 30import android.app.ActivityManagerInternal; 31import android.content.Context; 32import android.content.res.CompatibilityInfo; 33import android.content.res.Configuration; 34import android.graphics.Rect; 35import android.hardware.display.DisplayManagerInternal; 36import android.os.Bundle; 37import android.os.IBinder; 38import android.os.RemoteException; 39import android.view.Display; 40import android.view.IWindowManager; 41import android.view.KeyEvent; 42import android.view.WindowManager; 43import android.view.WindowManagerPolicy; 44import android.view.animation.Animation; 45import android.os.PowerManagerInternal; 46 47import com.android.internal.policy.IKeyguardDismissCallback; 48import com.android.internal.policy.IShortcutService; 49import com.android.server.input.InputManagerService; 50import com.android.server.LocalServices; 51 52import java.io.PrintWriter; 53 54class TestWindowManagerPolicy implements WindowManagerPolicy { 55 private static final String TAG = "TestWindowManagerPolicy"; 56 57 private static WindowManagerService sWm = null; 58 59 int rotationToReport = 0; 60 61 private Runnable mRunnableWhenAddingSplashScreen; 62 63 static synchronized WindowManagerService getWindowManagerService(Context context) { 64 if (sWm == null) { 65 // We only want to do this once for the test process as we don't want WM to try to 66 // register a bunch of local services again. 67 if (LocalServices.getService(DisplayManagerInternal.class) == null) { 68 LocalServices.addService(DisplayManagerInternal.class, 69 mock(DisplayManagerInternal.class)); 70 } 71 if (LocalServices.getService(PowerManagerInternal.class) == null) { 72 LocalServices.addService(PowerManagerInternal.class, 73 mock(PowerManagerInternal.class)); 74 final PowerManagerInternal pm = 75 LocalServices.getService(PowerManagerInternal.class); 76 PowerSaveState state = new PowerSaveState.Builder().build(); 77 doReturn(state).when(pm).getLowPowerState(anyInt()); 78 } 79 if (LocalServices.getService(ActivityManagerInternal.class) == null) { 80 LocalServices.addService(ActivityManagerInternal.class, 81 mock(ActivityManagerInternal.class)); 82 final ActivityManagerInternal am = 83 LocalServices.getService(ActivityManagerInternal.class); 84 doAnswer((InvocationOnMock invocationOnMock) -> { 85 final Runnable runnable = invocationOnMock.<Runnable>getArgument(0); 86 if (runnable != null) { 87 runnable.run(); 88 } 89 return null; 90 }).when(am).notifyKeyguardFlagsChanged(any()); 91 } 92 sWm = WindowManagerService.main(context, mock(InputManagerService.class), true, false, 93 false, new TestWindowManagerPolicy()); 94 } 95 return sWm; 96 } 97 98 @Override 99 public void registerShortcutKey(long shortcutCode, IShortcutService shortcutKeyReceiver) 100 throws RemoteException { 101 102 } 103 104 @Override 105 public void init(Context context, IWindowManager windowManager, 106 WindowManagerFuncs windowManagerFuncs) { 107 108 } 109 110 @Override 111 public boolean isDefaultOrientationForced() { 112 return false; 113 } 114 115 @Override 116 public void setInitialDisplaySize(Display display, int width, int height, int density) { 117 118 } 119 120 @Override 121 public void setDisplayOverscan(Display display, int left, int top, int right, int bottom) { 122 123 } 124 125 @Override 126 public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) { 127 return 0; 128 } 129 130 @Override 131 public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs) { 132 return false; 133 } 134 135 @Override 136 public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) { 137 138 } 139 140 @Override 141 public void adjustConfigurationLw(Configuration config, int keyboardPresence, 142 int navigationPresence) { 143 144 } 145 146 @Override 147 public int getMaxWallpaperLayer() { 148 return 0; 149 } 150 151 @Override 152 public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 153 int displayId) { 154 return 0; 155 } 156 157 @Override 158 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 159 int displayId) { 160 return 0; 161 } 162 163 @Override 164 public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, 165 int displayId) { 166 return 0; 167 } 168 169 @Override 170 public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, 171 int displayId) { 172 return 0; 173 } 174 175 @Override 176 public boolean isKeyguardHostWindow(WindowManager.LayoutParams attrs) { 177 return false; 178 } 179 180 @Override 181 public boolean canBeHiddenByKeyguardLw(WindowState win) { 182 return false; 183 } 184 185 /** 186 * Sets a runnable to run when adding a splash screen which gets executed after the window has 187 * been added but before returning the surface. 188 */ 189 void setRunnableWhenAddingSplashScreen(Runnable r) { 190 mRunnableWhenAddingSplashScreen = r; 191 } 192 193 @Override 194 public StartingSurface addSplashScreen(IBinder appToken, String packageName, int theme, 195 CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, int icon, 196 int logo, int windowFlags, Configuration overrideConfig, int displayId) { 197 final com.android.server.wm.WindowState window; 198 final AppWindowToken atoken; 199 synchronized (sWm.mWindowMap) { 200 atoken = WindowTestsBase.sDisplayContent.getAppWindowToken(appToken); 201 window = WindowTestsBase.createWindow(null, TYPE_APPLICATION_STARTING, atoken, 202 "Starting window"); 203 atoken.startingWindow = window; 204 } 205 if (mRunnableWhenAddingSplashScreen != null) { 206 mRunnableWhenAddingSplashScreen.run(); 207 mRunnableWhenAddingSplashScreen = null; 208 } 209 return () -> { 210 synchronized (sWm.mWindowMap) { 211 atoken.removeChild(window); 212 atoken.startingWindow = null; 213 } 214 }; 215 } 216 217 @Override 218 public int prepareAddWindowLw(WindowState win, 219 WindowManager.LayoutParams attrs) { 220 return 0; 221 } 222 223 @Override 224 public void removeWindowLw(WindowState win) { 225 226 } 227 228 @Override 229 public int selectAnimationLw(WindowState win, int transit) { 230 return 0; 231 } 232 233 @Override 234 public void selectRotationAnimationLw(int[] anim) { 235 236 } 237 238 @Override 239 public boolean validateRotationAnimationLw(int exitAnimId, int enterAnimId, 240 boolean forceDefault) { 241 return false; 242 } 243 244 @Override 245 public Animation createHiddenByKeyguardExit(boolean onWallpaper, 246 boolean goingToNotificationShade) { 247 return null; 248 } 249 250 @Override 251 public Animation createKeyguardWallpaperExit(boolean goingToNotificationShade) { 252 return null; 253 } 254 255 @Override 256 public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) { 257 return 0; 258 } 259 260 @Override 261 public int interceptMotionBeforeQueueingNonInteractive(long whenNanos, int policyFlags) { 262 return 0; 263 } 264 265 @Override 266 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, 267 int policyFlags) { 268 return 0; 269 } 270 271 @Override 272 public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, 273 int policyFlags) { 274 return null; 275 } 276 277 @Override 278 public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth, int displayHeight, 279 int displayRotation, int uiMode) { 280 281 } 282 283 @Override 284 public int getSystemDecorLayerLw() { 285 return 0; 286 } 287 288 @Override 289 public void getContentRectLw(Rect r) { 290 291 } 292 293 @Override 294 public void layoutWindowLw(WindowState win, 295 WindowState attached) { 296 297 } 298 299 @Override 300 public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds, 301 int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets, 302 Rect outStableInsets, Rect outOutsets) { 303 return false; 304 } 305 306 @Override 307 public void finishLayoutLw() { 308 309 } 310 311 @Override 312 public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) { 313 314 } 315 316 @Override 317 public void applyPostLayoutPolicyLw(WindowState win, 318 WindowManager.LayoutParams attrs, WindowState attached, WindowState imeTarget) { 319 } 320 321 @Override 322 public int finishPostLayoutPolicyLw() { 323 return 0; 324 } 325 326 @Override 327 public boolean allowAppAnimationsLw() { 328 return false; 329 } 330 331 @Override 332 public int focusChangedLw(WindowState lastFocus, 333 WindowState newFocus) { 334 return 0; 335 } 336 337 @Override 338 public void startedWakingUp() { 339 340 } 341 342 @Override 343 public void finishedWakingUp() { 344 345 } 346 347 @Override 348 public void startedGoingToSleep(int why) { 349 350 } 351 352 @Override 353 public void finishedGoingToSleep(int why) { 354 355 } 356 357 @Override 358 public void screenTurningOn(ScreenOnListener screenOnListener) { 359 360 } 361 362 @Override 363 public void screenTurnedOn() { 364 365 } 366 367 @Override 368 public void screenTurnedOff() { 369 370 } 371 372 @Override 373 public boolean isScreenOn() { 374 return true; 375 } 376 377 @Override 378 public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) { 379 380 } 381 382 @Override 383 public void notifyCameraLensCoverSwitchChanged(long whenNanos, boolean lensCovered) { 384 385 } 386 387 @Override 388 public void enableKeyguard(boolean enabled) { 389 390 } 391 392 @Override 393 public void exitKeyguardSecurely(OnKeyguardExitResult callback) { 394 395 } 396 397 @Override 398 public boolean isKeyguardLocked() { 399 return false; 400 } 401 402 @Override 403 public boolean isKeyguardSecure(int userId) { 404 return false; 405 } 406 407 @Override 408 public boolean isKeyguardOccluded() { 409 return false; 410 } 411 412 @Override 413 public boolean isKeyguardTrustedLw() { 414 return false; 415 } 416 417 @Override 418 public boolean isKeyguardShowingAndNotOccluded() { 419 return false; 420 } 421 422 @Override 423 public boolean inKeyguardRestrictedKeyInputMode() { 424 return false; 425 } 426 427 @Override 428 public void dismissKeyguardLw(@Nullable IKeyguardDismissCallback callback) { 429 } 430 431 @Override 432 public boolean isKeyguardDrawnLw() { 433 return false; 434 } 435 436 @Override 437 public boolean isShowingDreamLw() { 438 return false; 439 } 440 441 @Override 442 public void onKeyguardOccludedChangedLw(boolean occluded) { 443 } 444 445 @Override 446 public int rotationForOrientationLw(int orientation, 447 int lastRotation) { 448 return rotationToReport; 449 } 450 451 @Override 452 public boolean rotationHasCompatibleMetricsLw(int orientation, 453 int rotation) { 454 return false; 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 setPipVisibilityLw(boolean visible) { 629 630 } 631 632 @Override 633 public void setRecentsVisibilityLw(boolean visible) { 634 635 } 636} 637