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