blob: 33456491bcae8e59c4066a34bfc7b94e6e1d885f [file] [log] [blame]
Jorim Jaggib10e33f2015-02-04 21:57:40 +01001package com.android.server.policy.keyguard;
Jim Miller5ecd8112013-01-09 18:50:26 -08002
David Stevens67c036b2017-08-23 18:41:49 -07003import static android.view.Display.INVALID_DISPLAY;
4
Sudheer Shankadc589ac2016-11-10 15:30:17 -08005import android.app.ActivityManager;
Jim Miller5ecd8112013-01-09 18:50:26 -08006import android.content.ComponentName;
7import android.content.Context;
8import android.content.Intent;
9import android.content.ServiceConnection;
Bryce Lee2a18cbc2015-03-09 15:49:23 +000010import android.content.res.Resources;
Jim Miller5ecd8112013-01-09 18:50:26 -080011import android.os.Bundle;
Jorim Jaggi4a0e7912015-07-29 15:46:29 -070012import android.os.Handler;
Jim Miller5ecd8112013-01-09 18:50:26 -080013import android.os.IBinder;
14import android.os.RemoteException;
15import android.os.UserHandle;
16import android.util.Log;
17import android.util.Slog;
18import android.view.WindowManagerPolicy.OnKeyguardExitResult;
19
Jorim Jaggi241ae102016-11-02 21:57:33 -070020import com.android.internal.policy.IKeyguardDismissCallback;
Jorim Jaggi740452e2015-07-09 12:13:59 -070021import com.android.internal.policy.IKeyguardDrawnCallback;
Jim Miller25190572013-02-28 17:36:24 -080022import com.android.internal.policy.IKeyguardExitCallback;
Jim Miller5ecd8112013-01-09 18:50:26 -080023import com.android.internal.policy.IKeyguardService;
Adrian Roos691546e2016-02-09 10:13:41 -080024import com.android.server.UiThread;
Jim Miller5ecd8112013-01-09 18:50:26 -080025
Jorim Jaggi84dc08a2015-09-11 17:45:22 -070026import java.io.PrintWriter;
27
Jim Miller5ecd8112013-01-09 18:50:26 -080028/**
29 * A local class that keeps a cache of keyguard state that can be restored in the event
30 * keyguard crashes. It currently also allows runtime-selectable
31 * local or remote instances of keyguard.
32 */
33public class KeyguardServiceDelegate {
Jim Miller5ecd8112013-01-09 18:50:26 -080034 private static final String TAG = "KeyguardServiceDelegate";
Joe Onorato82ba91d2017-04-27 16:18:05 -070035 private static final boolean DEBUG = false;
Jim Millerab954542014-10-10 18:21:49 -070036
Jorim Jaggic0496072015-08-19 15:14:52 -070037 private static final int SCREEN_STATE_OFF = 0;
38 private static final int SCREEN_STATE_TURNING_ON = 1;
39 private static final int SCREEN_STATE_ON = 2;
Adrian Roos369907f2017-07-14 14:53:39 +020040 private static final int SCREEN_STATE_TURNING_OFF = 3;
Jorim Jaggic0496072015-08-19 15:14:52 -070041
42 private static final int INTERACTIVE_STATE_SLEEP = 0;
Adrian Roos369907f2017-07-14 14:53:39 +020043 private static final int INTERACTIVE_STATE_WAKING = 1;
44 private static final int INTERACTIVE_STATE_AWAKE = 2;
45 private static final int INTERACTIVE_STATE_GOING_TO_SLEEP = 3;
Jorim Jaggic0496072015-08-19 15:14:52 -070046
Jim Miller5ecd8112013-01-09 18:50:26 -080047 protected KeyguardServiceWrapper mKeyguardService;
Jim Millerab954542014-10-10 18:21:49 -070048 private final Context mContext;
Jorim Jaggi73294b62016-10-26 18:02:36 -070049 private final Handler mHandler;
Jim Millerab954542014-10-10 18:21:49 -070050 private final KeyguardState mKeyguardState = new KeyguardState();
Jorim Jaggie69c9312016-10-31 18:24:38 -070051 private final KeyguardStateMonitor.StateCallback mCallback;
52
Jorim Jaggi740452e2015-07-09 12:13:59 -070053 private DrawnListener mDrawnListenerWhenConnect;
Jim Miller5ecd8112013-01-09 18:50:26 -080054
Adrian Roos3542f7d2015-07-13 15:57:53 -070055 private static final class KeyguardState {
Jim Millere5f17ab2013-11-13 15:40:48 -080056 KeyguardState() {
Jorim Jaggi73294b62016-10-26 18:02:36 -070057 reset();
Jim Millere5f17ab2013-11-13 15:40:48 -080058 }
Jim Miller5ecd8112013-01-09 18:50:26 -080059 boolean showing;
Jorim Jaggi5cf17872014-03-26 18:31:48 +010060 boolean showingAndNotOccluded;
Jim Miller5ecd8112013-01-09 18:50:26 -080061 boolean inputRestricted;
Jorim Jaggi5cf17872014-03-26 18:31:48 +010062 boolean occluded;
Jim Miller5ecd8112013-01-09 18:50:26 -080063 boolean secure;
64 boolean dreaming;
65 boolean systemIsReady;
Jim Millera8800f72014-12-12 13:34:43 -080066 boolean deviceHasKeyguard;
Jim Miller5ecd8112013-01-09 18:50:26 -080067 public boolean enabled;
Jim Miller5ecd8112013-01-09 18:50:26 -080068 public int offReason;
69 public int currentUser;
Jim Millere5f910a2013-10-16 18:15:46 -070070 public boolean bootCompleted;
Jorim Jaggic0496072015-08-19 15:14:52 -070071 public int screenState;
72 public int interactiveState;
Jorim Jaggi73294b62016-10-26 18:02:36 -070073
74 private void reset() {
75 // Assume keyguard is showing and secure until we know for sure. This is here in
76 // the event something checks before the service is actually started.
77 // KeyguardService itself should default to this state until the real state is known.
78 showing = true;
79 showingAndNotOccluded = true;
80 secure = true;
81 deviceHasKeyguard = true;
82 enabled = true;
83 currentUser = UserHandle.USER_NULL;
84 }
Jim Miller5ecd8112013-01-09 18:50:26 -080085 };
86
Jorim Jaggi740452e2015-07-09 12:13:59 -070087 public interface DrawnListener {
88 void onDrawn();
Jim Miller5ecd8112013-01-09 18:50:26 -080089 }
90
Jim Miller25190572013-02-28 17:36:24 -080091 // A delegate class to map a particular invocation with a ShowListener object.
Jorim Jaggi740452e2015-07-09 12:13:59 -070092 private final class KeyguardShowDelegate extends IKeyguardDrawnCallback.Stub {
93 private DrawnListener mDrawnListener;
Jim Miller5ecd8112013-01-09 18:50:26 -080094
Jorim Jaggi740452e2015-07-09 12:13:59 -070095 KeyguardShowDelegate(DrawnListener drawnListener) {
96 mDrawnListener = drawnListener;
Jim Miller5ecd8112013-01-09 18:50:26 -080097 }
98
99 @Override
Jorim Jaggi740452e2015-07-09 12:13:59 -0700100 public void onDrawn() throws RemoteException {
Jim Miller5ecd8112013-01-09 18:50:26 -0800101 if (DEBUG) Log.v(TAG, "**** SHOWN CALLED ****");
Jorim Jaggi740452e2015-07-09 12:13:59 -0700102 if (mDrawnListener != null) {
103 mDrawnListener.onDrawn();
Jim Miller5ecd8112013-01-09 18:50:26 -0800104 }
105 }
Jim Miller25190572013-02-28 17:36:24 -0800106 };
107
108 // A delegate class to map a particular invocation with an OnKeyguardExitResult object.
109 private final class KeyguardExitDelegate extends IKeyguardExitCallback.Stub {
110 private OnKeyguardExitResult mOnKeyguardExitResult;
111
112 KeyguardExitDelegate(OnKeyguardExitResult onKeyguardExitResult) {
113 mOnKeyguardExitResult = onKeyguardExitResult;
114 }
Jim Miller5ecd8112013-01-09 18:50:26 -0800115
116 @Override
117 public void onKeyguardExitResult(boolean success) throws RemoteException {
118 if (DEBUG) Log.v(TAG, "**** onKeyguardExitResult(" + success +") CALLED ****");
119 if (mOnKeyguardExitResult != null) {
120 mOnKeyguardExitResult.onKeyguardExitResult(success);
121 }
122 }
123 };
124
Jorim Jaggie69c9312016-10-31 18:24:38 -0700125 public KeyguardServiceDelegate(Context context, KeyguardStateMonitor.StateCallback callback) {
Jim Millerab954542014-10-10 18:21:49 -0700126 mContext = context;
Jorim Jaggi73294b62016-10-26 18:02:36 -0700127 mHandler = UiThread.getHandler();
Jorim Jaggie69c9312016-10-31 18:24:38 -0700128 mCallback = callback;
Jason Monk5eeebf52014-09-26 12:36:51 -0400129 }
130
131 public void bindService(Context context) {
Jim Miller5ecd8112013-01-09 18:50:26 -0800132 Intent intent = new Intent();
Bryce Lee2a18cbc2015-03-09 15:49:23 +0000133 final Resources resources = context.getApplicationContext().getResources();
134
135 final ComponentName keyguardComponent = ComponentName.unflattenFromString(
136 resources.getString(com.android.internal.R.string.config_keyguardComponent));
Jeff Sharkey2f3e3532015-12-21 14:16:43 -0700137 intent.addFlags(Intent.FLAG_DEBUG_TRIAGED_MISSING);
Bryce Lee2a18cbc2015-03-09 15:49:23 +0000138 intent.setComponent(keyguardComponent);
139
Jim Miller5ecd8112013-01-09 18:50:26 -0800140 if (!context.bindServiceAsUser(intent, mKeyguardConnection,
Jorim Jaggi73294b62016-10-26 18:02:36 -0700141 Context.BIND_AUTO_CREATE, mHandler, UserHandle.SYSTEM)) {
Bryce Lee2a18cbc2015-03-09 15:49:23 +0000142 Log.v(TAG, "*** Keyguard: can't bind to " + keyguardComponent);
Jim Millerfb5fcea2014-01-08 14:57:54 -0800143 mKeyguardState.showing = false;
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100144 mKeyguardState.showingAndNotOccluded = false;
Jim Millerfb5fcea2014-01-08 14:57:54 -0800145 mKeyguardState.secure = false;
Adrian Roos3542f7d2015-07-13 15:57:53 -0700146 synchronized (mKeyguardState) {
147 // TODO: Fix synchronisation model in this class. The other state in this class
148 // is at least self-healing but a race condition here can lead to the scrim being
149 // stuck on keyguard-less devices.
150 mKeyguardState.deviceHasKeyguard = false;
Adrian Roos3542f7d2015-07-13 15:57:53 -0700151 }
Jim Miller5ecd8112013-01-09 18:50:26 -0800152 } else {
153 if (DEBUG) Log.v(TAG, "*** Keyguard started");
154 }
155 }
156
Jim Miller25190572013-02-28 17:36:24 -0800157 private final ServiceConnection mKeyguardConnection = new ServiceConnection() {
158 @Override
159 public void onServiceConnected(ComponentName name, IBinder service) {
160 if (DEBUG) Log.v(TAG, "*** Keyguard connected (yay!)");
Jim Millerab954542014-10-10 18:21:49 -0700161 mKeyguardService = new KeyguardServiceWrapper(mContext,
Jorim Jaggie69c9312016-10-31 18:24:38 -0700162 IKeyguardService.Stub.asInterface(service), mCallback);
Jim Miller25190572013-02-28 17:36:24 -0800163 if (mKeyguardState.systemIsReady) {
Jim Millerc0b676d2013-03-22 16:11:08 -0700164 // If the system is ready, it means keyguard crashed and restarted.
Jim Miller25190572013-02-28 17:36:24 -0800165 mKeyguardService.onSystemReady();
Suprabh Shukla323d2bb2016-07-27 17:00:12 -0700166 if (mKeyguardState.currentUser != UserHandle.USER_NULL) {
167 // There has been a user switch earlier
168 mKeyguardService.setCurrentUser(mKeyguardState.currentUser);
169 }
Jim Millerc0b676d2013-03-22 16:11:08 -0700170 // This is used to hide the scrim once keyguard displays.
Adrian Roos369907f2017-07-14 14:53:39 +0200171 if (mKeyguardState.interactiveState == INTERACTIVE_STATE_AWAKE
172 || mKeyguardState.interactiveState == INTERACTIVE_STATE_WAKING) {
Jorim Jaggic0496072015-08-19 15:14:52 -0700173 mKeyguardService.onStartedWakingUp();
174 }
Adrian Roos369907f2017-07-14 14:53:39 +0200175 if (mKeyguardState.interactiveState == INTERACTIVE_STATE_AWAKE) {
176 mKeyguardService.onFinishedWakingUp();
177 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700178 if (mKeyguardState.screenState == SCREEN_STATE_ON
179 || mKeyguardState.screenState == SCREEN_STATE_TURNING_ON) {
180 mKeyguardService.onScreenTurningOn(
181 new KeyguardShowDelegate(mDrawnListenerWhenConnect));
182 }
183 if (mKeyguardState.screenState == SCREEN_STATE_ON) {
184 mKeyguardService.onScreenTurnedOn();
185 }
Jorim Jaggi740452e2015-07-09 12:13:59 -0700186 mDrawnListenerWhenConnect = null;
Jim Miller5ecd8112013-01-09 18:50:26 -0800187 }
Jim Millere5f910a2013-10-16 18:15:46 -0700188 if (mKeyguardState.bootCompleted) {
189 mKeyguardService.onBootCompleted();
190 }
Adrian Roosf253eeb2015-04-15 18:03:08 -0700191 if (mKeyguardState.occluded) {
Jorim Jaggi6626f542016-08-22 13:08:44 -0700192 mKeyguardService.setOccluded(mKeyguardState.occluded, false /* animate */);
Adrian Roosf253eeb2015-04-15 18:03:08 -0700193 }
Tony Mak2c0d6dc2016-04-29 16:16:54 +0100194 if (!mKeyguardState.enabled) {
195 mKeyguardService.setKeyguardEnabled(mKeyguardState.enabled);
196 }
Jim Miller25190572013-02-28 17:36:24 -0800197 }
Jim Miller5ecd8112013-01-09 18:50:26 -0800198
Jim Miller25190572013-02-28 17:36:24 -0800199 @Override
200 public void onServiceDisconnected(ComponentName name) {
201 if (DEBUG) Log.v(TAG, "*** Keyguard disconnected (boo!)");
202 mKeyguardService = null;
Jorim Jaggi73294b62016-10-26 18:02:36 -0700203 mKeyguardState.reset();
204 mHandler.post(() -> {
205 try {
David Stevens67c036b2017-08-23 18:41:49 -0700206 // There are no longer any keyguard windows on secondary displays, so pass
207 // INVALID_DISPLAY. All that means is that showWhenLocked activities on
208 // secondary displays now get to show.
209 ActivityManager.getService().setLockScreenShown(true, INVALID_DISPLAY);
Jorim Jaggi73294b62016-10-26 18:02:36 -0700210 } catch (RemoteException e) {
211 // Local call.
212 }
213 });
Jim Miller25190572013-02-28 17:36:24 -0800214 }
Jim Miller25190572013-02-28 17:36:24 -0800215 };
Jim Miller5ecd8112013-01-09 18:50:26 -0800216
217 public boolean isShowing() {
218 if (mKeyguardService != null) {
219 mKeyguardState.showing = mKeyguardService.isShowing();
220 }
221 return mKeyguardState.showing;
222 }
223
Adrian Roosd88eb262016-08-04 14:50:48 -0700224 public boolean isTrusted() {
225 if (mKeyguardService != null) {
226 return mKeyguardService.isTrusted();
227 }
228 return false;
229 }
230
Jorim Jaggid11d1a92016-08-16 16:02:32 -0700231 public boolean hasLockscreenWallpaper() {
232 if (mKeyguardService != null) {
233 return mKeyguardService.hasLockscreenWallpaper();
234 }
235 return false;
236 }
237
eddy-sh.chen0df686d2018-02-22 18:10:21 +0800238 public boolean hasKeyguard() {
239 return mKeyguardState.deviceHasKeyguard;
240 }
241
Jim Miller5ecd8112013-01-09 18:50:26 -0800242 public boolean isInputRestricted() {
243 if (mKeyguardService != null) {
244 mKeyguardState.inputRestricted = mKeyguardService.isInputRestricted();
245 }
246 return mKeyguardState.inputRestricted;
247 }
248
249 public void verifyUnlock(final OnKeyguardExitResult onKeyguardExitResult) {
250 if (mKeyguardService != null) {
Jim Miller25190572013-02-28 17:36:24 -0800251 mKeyguardService.verifyUnlock(new KeyguardExitDelegate(onKeyguardExitResult));
Jim Miller5ecd8112013-01-09 18:50:26 -0800252 }
253 }
254
Jorim Jaggi6626f542016-08-22 13:08:44 -0700255 public void setOccluded(boolean isOccluded, boolean animate) {
Jim Miller5ecd8112013-01-09 18:50:26 -0800256 if (mKeyguardService != null) {
Jorim Jaggi6626f542016-08-22 13:08:44 -0700257 if (DEBUG) Log.v(TAG, "setOccluded(" + isOccluded + ") animate=" + animate);
258 mKeyguardService.setOccluded(isOccluded, animate);
Jim Miller5ecd8112013-01-09 18:50:26 -0800259 }
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100260 mKeyguardState.occluded = isOccluded;
Jim Miller5ecd8112013-01-09 18:50:26 -0800261 }
262
Jorim Jaggi241ae102016-11-02 21:57:33 -0700263 public void dismiss(IKeyguardDismissCallback callback) {
Jim Miller5ecd8112013-01-09 18:50:26 -0800264 if (mKeyguardService != null) {
Jorim Jaggi241ae102016-11-02 21:57:33 -0700265 mKeyguardService.dismiss(callback);
Jim Miller5ecd8112013-01-09 18:50:26 -0800266 }
267 }
268
Jim Millere4044bb2016-05-10 18:38:25 -0700269 public boolean isSecure(int userId) {
Jim Miller5ecd8112013-01-09 18:50:26 -0800270 if (mKeyguardService != null) {
Jim Millere4044bb2016-05-10 18:38:25 -0700271 mKeyguardState.secure = mKeyguardService.isSecure(userId);
Jim Miller5ecd8112013-01-09 18:50:26 -0800272 }
273 return mKeyguardState.secure;
274 }
275
Jim Miller5ecd8112013-01-09 18:50:26 -0800276 public void onDreamingStarted() {
277 if (mKeyguardService != null) {
278 mKeyguardService.onDreamingStarted();
279 }
280 mKeyguardState.dreaming = true;
281 }
282
283 public void onDreamingStopped() {
284 if (mKeyguardService != null) {
285 mKeyguardService.onDreamingStopped();
286 }
287 mKeyguardState.dreaming = false;
288 }
289
Jorim Jaggi740452e2015-07-09 12:13:59 -0700290 public void onStartedWakingUp() {
Jim Miller5ecd8112013-01-09 18:50:26 -0800291 if (mKeyguardService != null) {
Jorim Jaggi740452e2015-07-09 12:13:59 -0700292 if (DEBUG) Log.v(TAG, "onStartedWakingUp()");
293 mKeyguardService.onStartedWakingUp();
294 }
Adrian Roos369907f2017-07-14 14:53:39 +0200295 mKeyguardState.interactiveState = INTERACTIVE_STATE_WAKING;
296 }
297
298 public void onFinishedWakingUp() {
299 if (mKeyguardService != null) {
300 if (DEBUG) Log.v(TAG, "onFinishedWakingUp()");
301 mKeyguardService.onFinishedWakingUp();
302 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700303 mKeyguardState.interactiveState = INTERACTIVE_STATE_AWAKE;
Jorim Jaggi740452e2015-07-09 12:13:59 -0700304 }
305
Adrian Roos369907f2017-07-14 14:53:39 +0200306 public void onScreenTurningOff() {
307 if (mKeyguardService != null) {
308 if (DEBUG) Log.v(TAG, "onScreenTurningOff()");
309 mKeyguardService.onScreenTurningOff();
310 }
311 mKeyguardState.screenState = SCREEN_STATE_TURNING_OFF;
312 }
313
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700314 public void onScreenTurnedOff() {
315 if (mKeyguardService != null) {
316 if (DEBUG) Log.v(TAG, "onScreenTurnedOff()");
317 mKeyguardService.onScreenTurnedOff();
318 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700319 mKeyguardState.screenState = SCREEN_STATE_OFF;
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700320 }
321
Jorim Jaggi740452e2015-07-09 12:13:59 -0700322 public void onScreenTurningOn(final DrawnListener drawnListener) {
323 if (mKeyguardService != null) {
324 if (DEBUG) Log.v(TAG, "onScreenTurnedOn(showListener = " + drawnListener + ")");
325 mKeyguardService.onScreenTurningOn(new KeyguardShowDelegate(drawnListener));
Jim Miller5ecd8112013-01-09 18:50:26 -0800326 } else {
327 // try again when we establish a connection
Jorim Jaggi740452e2015-07-09 12:13:59 -0700328 Slog.w(TAG, "onScreenTurningOn(): no keyguard service!");
Jim Millera8800f72014-12-12 13:34:43 -0800329 // This shouldn't happen, but if it does, show the scrim immediately and
330 // invoke the listener's callback after the service actually connects.
Jorim Jaggi740452e2015-07-09 12:13:59 -0700331 mDrawnListenerWhenConnect = drawnListener;
Jim Miller5ecd8112013-01-09 18:50:26 -0800332 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700333 mKeyguardState.screenState = SCREEN_STATE_TURNING_ON;
Jim Miller5ecd8112013-01-09 18:50:26 -0800334 }
335
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700336 public void onScreenTurnedOn() {
337 if (mKeyguardService != null) {
338 if (DEBUG) Log.v(TAG, "onScreenTurnedOn()");
339 mKeyguardService.onScreenTurnedOn();
340 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700341 mKeyguardState.screenState = SCREEN_STATE_ON;
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700342 }
343
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700344 public void onStartedGoingToSleep(int why) {
Jim Miller5ecd8112013-01-09 18:50:26 -0800345 if (mKeyguardService != null) {
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700346 mKeyguardService.onStartedGoingToSleep(why);
Jim Miller5ecd8112013-01-09 18:50:26 -0800347 }
348 mKeyguardState.offReason = why;
Jorim Jaggic0496072015-08-19 15:14:52 -0700349 mKeyguardState.interactiveState = INTERACTIVE_STATE_GOING_TO_SLEEP;
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700350 }
351
Jorim Jaggif1cdf952016-04-05 21:41:06 -0700352 public void onFinishedGoingToSleep(int why, boolean cameraGestureTriggered) {
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700353 if (mKeyguardService != null) {
Jorim Jaggif1cdf952016-04-05 21:41:06 -0700354 mKeyguardService.onFinishedGoingToSleep(why, cameraGestureTriggered);
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700355 }
Jorim Jaggic0496072015-08-19 15:14:52 -0700356 mKeyguardState.interactiveState = INTERACTIVE_STATE_SLEEP;
Jim Miller5ecd8112013-01-09 18:50:26 -0800357 }
358
359 public void setKeyguardEnabled(boolean enabled) {
360 if (mKeyguardService != null) {
361 mKeyguardService.setKeyguardEnabled(enabled);
362 }
363 mKeyguardState.enabled = enabled;
364 }
365
Jim Miller5ecd8112013-01-09 18:50:26 -0800366 public void onSystemReady() {
367 if (mKeyguardService != null) {
368 mKeyguardService.onSystemReady();
369 } else {
Jim Miller5ecd8112013-01-09 18:50:26 -0800370 mKeyguardState.systemIsReady = true;
371 }
372 }
373
374 public void doKeyguardTimeout(Bundle options) {
375 if (mKeyguardService != null) {
376 mKeyguardService.doKeyguardTimeout(options);
377 }
378 }
379
Jim Miller5ecd8112013-01-09 18:50:26 -0800380 public void setCurrentUser(int newUserId) {
381 if (mKeyguardService != null) {
382 mKeyguardService.setCurrentUser(newUserId);
383 }
384 mKeyguardState.currentUser = newUserId;
385 }
386
Evan Rosky18396452016-07-27 15:19:37 -0700387 public void setSwitchingUser(boolean switching) {
388 if (mKeyguardService != null) {
389 mKeyguardService.setSwitchingUser(switching);
390 }
391 }
392
Jorim Jaggie29b2db2014-05-30 23:17:03 +0200393 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) {
Jorim Jaggi0d674622014-05-21 01:34:15 +0200394 if (mKeyguardService != null) {
Jorim Jaggie29b2db2014-05-30 23:17:03 +0200395 mKeyguardService.startKeyguardExitAnimation(startTime, fadeoutDuration);
Jorim Jaggi0d674622014-05-21 01:34:15 +0200396 }
397 }
398
Jim Millere5f910a2013-10-16 18:15:46 -0700399 public void onBootCompleted() {
400 if (mKeyguardService != null) {
401 mKeyguardService.onBootCompleted();
402 }
403 mKeyguardState.bootCompleted = true;
404 }
405
Andrew Zengb4045d32017-03-16 17:25:07 -0700406 public void onShortPowerPressedGoHome() {
407 if (mKeyguardService != null) {
408 mKeyguardService.onShortPowerPressedGoHome();
409 }
410 }
411
Jorim Jaggi84dc08a2015-09-11 17:45:22 -0700412 public void dump(String prefix, PrintWriter pw) {
413 pw.println(prefix + TAG);
414 prefix += " ";
415 pw.println(prefix + "showing=" + mKeyguardState.showing);
416 pw.println(prefix + "showingAndNotOccluded=" + mKeyguardState.showingAndNotOccluded);
417 pw.println(prefix + "inputRestricted=" + mKeyguardState.inputRestricted);
418 pw.println(prefix + "occluded=" + mKeyguardState.occluded);
419 pw.println(prefix + "secure=" + mKeyguardState.secure);
420 pw.println(prefix + "dreaming=" + mKeyguardState.dreaming);
421 pw.println(prefix + "systemIsReady=" + mKeyguardState.systemIsReady);
422 pw.println(prefix + "deviceHasKeyguard=" + mKeyguardState.deviceHasKeyguard);
423 pw.println(prefix + "enabled=" + mKeyguardState.enabled);
424 pw.println(prefix + "offReason=" + mKeyguardState.offReason);
425 pw.println(prefix + "currentUser=" + mKeyguardState.currentUser);
426 pw.println(prefix + "bootCompleted=" + mKeyguardState.bootCompleted);
427 pw.println(prefix + "screenState=" + mKeyguardState.screenState);
428 pw.println(prefix + "interactiveState=" + mKeyguardState.interactiveState);
429 if (mKeyguardService != null) {
430 mKeyguardService.dump(prefix, pw);
431 }
432 }
Jim Miller5ecd8112013-01-09 18:50:26 -0800433}