1380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi/*
2380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Copyright (C) 2014 The Android Open Source Project
3380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi *
4380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
5380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * you may not use this file except in compliance with the License.
6380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * You may obtain a copy of the License at
7380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi *
8380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
9380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi *
10380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Unless required by applicable law or agreed to in writing, software
11380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
12380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * See the License for the specific language governing permissions and
14380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * limitations under the License
15380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi */
16380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
17380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggipackage com.android.systemui.keyguard;
18380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
19380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.app.Service;
20380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.content.Intent;
21380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Binder;
22380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Bundle;
23380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Debug;
24380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.IBinder;
2596afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Millerimport android.os.Process;
261d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniersimport android.os.Trace;
27380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.util.Log;
28cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi
29241ae10b2189f449e57d8d660235ac56d8fb1b80Jorim Jaggiimport com.android.internal.policy.IKeyguardDismissCallback;
30740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggiimport com.android.internal.policy.IKeyguardDrawnCallback;
31cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.internal.policy.IKeyguardExitCallback;
32cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.internal.policy.IKeyguardService;
33ab954546dc49e1070ed8513efbddc8954b529c23Jim Millerimport com.android.internal.policy.IKeyguardStateCallback;
34369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roosimport com.android.systemui.Dependency;
35cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.systemui.SystemUIApplication;
36380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
37380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport static android.content.pm.PackageManager.PERMISSION_GRANTED;
38380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
39380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggipublic class KeyguardService extends Service {
40380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    static final String TAG = "KeyguardService";
41380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
42380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private KeyguardViewMediator mKeyguardViewMediator;
44369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos    private KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher;
45380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
46380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    @Override
47380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    public void onCreate() {
483beffdf4a0081a97356f46d50e10541b1a213153Jorim Jaggi        ((SystemUIApplication) getApplication()).startServicesIfNeeded();
49cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mKeyguardViewMediator =
50cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi                ((SystemUIApplication) getApplication()).getComponent(KeyguardViewMediator.class);
51369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        mKeyguardLifecyclesDispatcher = new KeyguardLifecyclesDispatcher(
52369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos                Dependency.get(ScreenLifecycle.class),
53369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos                Dependency.get(WakefulnessLifecycle.class));
54369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos
55380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
56380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
57380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    @Override
58380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    public IBinder onBind(Intent intent) {
59cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        return mBinder;
60380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
61380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
62380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    void checkPermission() {
6396afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        // Avoid deadlock by avoiding calling back into the system process.
6496afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        if (Binder.getCallingUid() == Process.SYSTEM_UID) return;
6596afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller
6696afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        // Otherwise,explicitly check for caller permission ...
67380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
68380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller());
69380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            throw new SecurityException("Access denied to process: " + Binder.getCallingPid()
70380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi                    + ", must have permission " + PERMISSION);
71380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
72380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
73380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
74380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
75380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
76ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
77ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        public void addStateMonitorCallback(IKeyguardStateCallback callback) {
78ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            checkPermission();
79ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            mKeyguardViewMediator.addStateMonitorCallback(callback);
80380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
81380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
82ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void verifyUnlock(IKeyguardExitCallback callback) {
841d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#verifyUnlock");
855cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            checkPermission();
865cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.verifyUnlock(callback);
871d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
88380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
89380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
90ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
916626f54e658e3da44fab8a5cd6d9d3d4852e2cd1Jorim Jaggi        public void setOccluded(boolean isOccluded, boolean animate) {
921d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#setOccluded");
93ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            checkPermission();
946626f54e658e3da44fab8a5cd6d9d3d4852e2cd1Jorim Jaggi            mKeyguardViewMediator.setOccluded(isOccluded, animate);
951d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
96380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
97380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
98ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
99241ae10b2189f449e57d8d660235ac56d8fb1b80Jorim Jaggi        public void dismiss(IKeyguardDismissCallback callback) {
100380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
101241ae10b2189f449e57d8d660235ac56d8fb1b80Jorim Jaggi            mKeyguardViewMediator.dismiss(callback);
102380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
103380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
104ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onDreamingStarted() {
106380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onDreamingStarted();
108380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
109380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
110ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1115cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onDreamingStopped() {
112380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onDreamingStopped();
114380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
115380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
116ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
117d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        public void onStartedGoingToSleep(int reason) {
118380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
119d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi            mKeyguardViewMediator.onStartedGoingToSleep(reason);
120369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(
121369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos                    KeyguardLifecyclesDispatcher.STARTED_GOING_TO_SLEEP);
122380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
123380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
124ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
125f1cdf9558d2b7f8fe5b8cf3d309b48809f04403bJorim Jaggi        public void onFinishedGoingToSleep(int reason, boolean cameraGestureTriggered) {
126380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
127f1cdf9558d2b7f8fe5b8cf3d309b48809f04403bJorim Jaggi            mKeyguardViewMediator.onFinishedGoingToSleep(reason, cameraGestureTriggered);
128369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(
129369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos                    KeyguardLifecyclesDispatcher.FINISHED_GOING_TO_SLEEP);
130d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        }
131d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi
132d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        @Override // Binder interface
133740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        public void onStartedWakingUp() {
1341d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#onStartedWakingUp");
135d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi            checkPermission();
136740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            mKeyguardViewMediator.onStartedWakingUp();
137369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.STARTED_WAKING_UP);
138369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            Trace.endSection();
139369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        }
140369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos
141369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        @Override // Binder interface
142369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        public void onFinishedWakingUp() {
143369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            Trace.beginSection("KeyguardService.mBinder#onFinishedWakingUp");
144369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            checkPermission();
145369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.FINISHED_WAKING_UP);
1461d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
147740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        }
148740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi
149740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        @Override // Binder interface
150740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        public void onScreenTurningOn(IKeyguardDrawnCallback callback) {
1511d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#onScreenTurningOn");
152740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            checkPermission();
153740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            mKeyguardViewMediator.onScreenTurningOn(callback);
154369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.SCREEN_TURNING_ON);
1551d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
156380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
157380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
158ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1590d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        public void onScreenTurnedOn() {
160e9d8272e9af29232471dc2c690675362494f5b0aAdrian Roos            Trace.beginSection("KeyguardService.mBinder#onScreenTurnedOn");
1610d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi            checkPermission();
1620d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi            mKeyguardViewMediator.onScreenTurnedOn();
163369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.SCREEN_TURNED_ON);
1641d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
1650d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        }
1660d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi
1670d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        @Override // Binder interface
168369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        public void onScreenTurningOff() {
169369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            checkPermission();
170369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.SCREEN_TURNING_OFF);
171369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        }
172369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos
173369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos        @Override // Binder interface
1740d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        public void onScreenTurnedOff() {
1750d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi            checkPermission();
1760d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi            mKeyguardViewMediator.onScreenTurnedOff();
177369907f02efd7f25d8063f38ecef6cf65c703572Adrian Roos            mKeyguardLifecyclesDispatcher.dispatch(KeyguardLifecyclesDispatcher.SCREEN_TURNED_OFF);
1780d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        }
1790d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi
1800d210f6395072db4a4c53d4cb8fac4a59a3965b4Jorim Jaggi        @Override // Binder interface
1815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void setKeyguardEnabled(boolean enabled) {
182380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.setKeyguardEnabled(enabled);
184380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
185380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
186ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1875cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onSystemReady() {
1881d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#onSystemReady");
189380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1905cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onSystemReady();
1911d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
192380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
193380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
194ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void doKeyguardTimeout(Bundle options) {
196380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1975cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.doKeyguardTimeout(options);
198380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
199380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
200ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
2011839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky        public void setSwitchingUser(boolean switching) {
2021839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky            checkPermission();
2031839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky            mKeyguardViewMediator.setSwitchingUser(switching);
2041839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky        }
2051839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky
2061839645126c8e7e0909e8ed8f0686c2122ba6078Evan Rosky        @Override // Binder interface
2075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void setCurrentUser(int userId) {
208380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
2095cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.setCurrentUser(userId);
210380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
211380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
212380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        @Override
2135cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onBootCompleted() {
214380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
2155cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onBootCompleted();
216380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
2170d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi
2180d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi        @Override
219e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) {
2201d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.beginSection("KeyguardService.mBinder#startKeyguardExitAnimation");
2210d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi            checkPermission();
222e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi            mKeyguardViewMediator.startKeyguardExitAnimation(startTime, fadeoutDuration);
2231d3967506e1cb3843d3bf758187ebc42d1c83485Nick Desaulniers            Trace.endSection();
2240d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi        }
225b4045d3791566a1965024591def87dff7d120295Andrew Zeng
226b4045d3791566a1965024591def87dff7d120295Andrew Zeng        @Override
227b4045d3791566a1965024591def87dff7d120295Andrew Zeng        public void onShortPowerPressedGoHome() {
228b4045d3791566a1965024591def87dff7d120295Andrew Zeng            checkPermission();
229b4045d3791566a1965024591def87dff7d120295Andrew Zeng            mKeyguardViewMediator.onShortPowerPressedGoHome();
230b4045d3791566a1965024591def87dff7d120295Andrew Zeng        }
231380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    };
232380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi}
233380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
234