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