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