KeyguardService.java revision 740452e8756cb7f51ed185c3906a5ca61b8fcdd4
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;
26380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.util.Log;
27cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi
28740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggiimport com.android.internal.policy.IKeyguardDrawnCallback;
29cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.internal.policy.IKeyguardExitCallback;
30cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.internal.policy.IKeyguardService;
31ab954546dc49e1070ed8513efbddc8954b529c23Jim Millerimport com.android.internal.policy.IKeyguardStateCallback;
32cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggiimport com.android.systemui.SystemUIApplication;
33380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
34380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport static android.content.pm.PackageManager.PERMISSION_GRANTED;
35380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
36380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggipublic class KeyguardService extends Service {
37380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    static final String TAG = "KeyguardService";
38380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
39380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
405cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi    private KeyguardViewMediator mKeyguardViewMediator;
41380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
42380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    @Override
43380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    public void onCreate() {
443beffdf4a0081a97356f46d50e10541b1a213153Jorim Jaggi        ((SystemUIApplication) getApplication()).startServicesIfNeeded();
45cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        mKeyguardViewMediator =
46cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi                ((SystemUIApplication) getApplication()).getComponent(KeyguardViewMediator.class);
47380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
48380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
49380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    @Override
50380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    public IBinder onBind(Intent intent) {
51cff0acb6b1eea23c3f44a078a0a5e81c11faea35Jorim Jaggi        return mBinder;
52380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
53380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
54380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    void checkPermission() {
5596afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        // Avoid deadlock by avoiding calling back into the system process.
5696afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        if (Binder.getCallingUid() == Process.SYSTEM_UID) return;
5796afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller
5896afb6f03b87359c3bcb96c2bdb8aadc7b1c3c37Jim Miller        // Otherwise,explicitly check for caller permission ...
59380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
60380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller());
61380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            throw new SecurityException("Access denied to process: " + Binder.getCallingPid()
62380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi                    + ", must have permission " + PERMISSION);
63380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
64380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    }
65380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
66380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
67380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
68ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
69ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        public void addStateMonitorCallback(IKeyguardStateCallback callback) {
70ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            checkPermission();
71ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            mKeyguardViewMediator.addStateMonitorCallback(callback);
72380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
73380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
74ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
755cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void verifyUnlock(IKeyguardExitCallback callback) {
765cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            checkPermission();
775cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.verifyUnlock(callback);
78380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
79380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
80ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
815cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void keyguardDone(boolean authenticated, boolean wakeup) {
82380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
835cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.keyguardDone(authenticated, wakeup);
84380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
85380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
86ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
87ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        public void setOccluded(boolean isOccluded) {
88ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            checkPermission();
89ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller            mKeyguardViewMediator.setOccluded(isOccluded);
90380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
91380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
92ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
935cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void dismiss() {
94380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
955cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.dismiss();
96380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
97380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
98ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
995cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onDreamingStarted() {
100380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1015cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onDreamingStarted();
102380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
103380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
104ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1055cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onDreamingStopped() {
106380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1075cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onDreamingStopped();
108380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
109380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
110ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
111d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        public void onStartedGoingToSleep(int reason) {
112380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
113d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi            mKeyguardViewMediator.onStartedGoingToSleep(reason);
114380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
115380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
116ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
117d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        public void onFinishedGoingToSleep(int reason) {
118380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
119d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi            mKeyguardViewMediator.onFinishedGoingToSleep(reason);
120d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        }
121d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi
122d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi        @Override // Binder interface
123740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        public void onStartedWakingUp() {
124d175b6cfe0b35dfe251cc9315aacb048bf6e54c5Jorim Jaggi            checkPermission();
125740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            mKeyguardViewMediator.onStartedWakingUp();
126740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        }
127740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi
128740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        @Override // Binder interface
129740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi        public void onScreenTurningOn(IKeyguardDrawnCallback callback) {
130740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            checkPermission();
131740452e8756cb7f51ed185c3906a5ca61b8fcdd4Jorim Jaggi            mKeyguardViewMediator.onScreenTurningOn(callback);
132380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
133380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
134ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1355cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void setKeyguardEnabled(boolean enabled) {
136380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1375cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.setKeyguardEnabled(enabled);
138380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
139380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
140ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1415cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onSystemReady() {
142380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1435cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onSystemReady();
144380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
145380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
146ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1475cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void doKeyguardTimeout(Bundle options) {
148380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1495cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.doKeyguardTimeout(options);
150380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
151380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
152ab954546dc49e1070ed8513efbddc8954b529c23Jim Miller        @Override // Binder interface
1535cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void setCurrentUser(int userId) {
154380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1555cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.setCurrentUser(userId);
156380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
157380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
158380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        @Override
1595cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi        public void onBootCompleted() {
160380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi            checkPermission();
1615cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi            mKeyguardViewMediator.onBootCompleted();
162380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi        }
1630d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi
1640d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi        @Override
165e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi        public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) {
1660d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi            checkPermission();
167e29b2dbc762bfa66093d76f5a65f55328d8753c9Jorim Jaggi            mKeyguardViewMediator.startKeyguardExitAnimation(startTime, fadeoutDuration);
1680d674623facfbd3e9c520d2be4ed98977b92a1a2Jorim Jaggi        }
1698de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi
1708de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi        @Override
1718de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi        public void onActivityDrawn() {
1728de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi            checkPermission();
1738de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi            mKeyguardViewMediator.onActivityDrawn();
1748de4311c51229efbe2f2d0afbf298982c5cadd96Jorim Jaggi        }
175380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi    };
176380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi}
177380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi
178