blob: fe9f55f9a1eea13474414e51c62a2c79d4c66704 [file] [log] [blame]
Jorim Jaggi380ecb82014-03-14 17:25:20 +01001/*
2 * Copyright (C) 2014 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.systemui.keyguard;
18
Jorim Jaggi380ecb82014-03-14 17:25:20 +010019import android.app.Service;
Jorim Jaggi380ecb82014-03-14 17:25:20 +010020import android.content.Intent;
21import android.os.Binder;
22import android.os.Bundle;
23import android.os.Debug;
24import android.os.IBinder;
Jim Miller96afb6f2014-11-14 17:56:27 -080025import android.os.Process;
Nick Desaulniers1d396752016-07-25 15:05:33 -070026import android.os.Trace;
Jorim Jaggi380ecb82014-03-14 17:25:20 +010027import android.util.Log;
Jorim Jaggicff0acb2014-03-31 16:35:15 +020028
Jorim Jaggi740452e2015-07-09 12:13:59 -070029import com.android.internal.policy.IKeyguardDrawnCallback;
Jorim Jaggicff0acb2014-03-31 16:35:15 +020030import com.android.internal.policy.IKeyguardExitCallback;
31import com.android.internal.policy.IKeyguardService;
Jim Millerab954542014-10-10 18:21:49 -070032import com.android.internal.policy.IKeyguardStateCallback;
Jorim Jaggicff0acb2014-03-31 16:35:15 +020033import com.android.systemui.SystemUIApplication;
Jorim Jaggi380ecb82014-03-14 17:25:20 +010034
35import static android.content.pm.PackageManager.PERMISSION_GRANTED;
36
37public class KeyguardService extends Service {
38 static final String TAG = "KeyguardService";
39 static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
40
Jorim Jaggi5cf17872014-03-26 18:31:48 +010041 private KeyguardViewMediator mKeyguardViewMediator;
Jorim Jaggi380ecb82014-03-14 17:25:20 +010042
43 @Override
44 public void onCreate() {
Jorim Jaggi3beffdf2014-04-03 17:37:37 +020045 ((SystemUIApplication) getApplication()).startServicesIfNeeded();
Jorim Jaggicff0acb2014-03-31 16:35:15 +020046 mKeyguardViewMediator =
47 ((SystemUIApplication) getApplication()).getComponent(KeyguardViewMediator.class);
Jorim Jaggi380ecb82014-03-14 17:25:20 +010048 }
49
50 @Override
51 public IBinder onBind(Intent intent) {
Jorim Jaggicff0acb2014-03-31 16:35:15 +020052 return mBinder;
Jorim Jaggi380ecb82014-03-14 17:25:20 +010053 }
54
55 void checkPermission() {
Jim Miller96afb6f2014-11-14 17:56:27 -080056 // Avoid deadlock by avoiding calling back into the system process.
57 if (Binder.getCallingUid() == Process.SYSTEM_UID) return;
58
59 // Otherwise,explicitly check for caller permission ...
Jorim Jaggi380ecb82014-03-14 17:25:20 +010060 if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
61 Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller());
62 throw new SecurityException("Access denied to process: " + Binder.getCallingPid()
63 + ", must have permission " + PERMISSION);
64 }
65 }
66
Jorim Jaggi380ecb82014-03-14 17:25:20 +010067 private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
68
Jim Millerab954542014-10-10 18:21:49 -070069 @Override // Binder interface
70 public void addStateMonitorCallback(IKeyguardStateCallback callback) {
71 checkPermission();
72 mKeyguardViewMediator.addStateMonitorCallback(callback);
Jorim Jaggi380ecb82014-03-14 17:25:20 +010073 }
74
Jim Millerab954542014-10-10 18:21:49 -070075 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +010076 public void verifyUnlock(IKeyguardExitCallback callback) {
Nick Desaulniers1d396752016-07-25 15:05:33 -070077 Trace.beginSection("KeyguardService.mBinder#verifyUnlock");
Jorim Jaggi380ecb82014-03-14 17:25:20 +010078 checkPermission();
Jorim Jaggi5cf17872014-03-26 18:31:48 +010079 mKeyguardViewMediator.verifyUnlock(callback);
Nick Desaulniers1d396752016-07-25 15:05:33 -070080 Trace.endSection();
Jorim Jaggi380ecb82014-03-14 17:25:20 +010081 }
82
Jim Millerab954542014-10-10 18:21:49 -070083 @Override // Binder interface
Jorim Jaggi6626f542016-08-22 13:08:44 -070084 public void setOccluded(boolean isOccluded, boolean animate) {
Nick Desaulniers1d396752016-07-25 15:05:33 -070085 Trace.beginSection("KeyguardService.mBinder#setOccluded");
Jorim Jaggi380ecb82014-03-14 17:25:20 +010086 checkPermission();
Jorim Jaggi6626f542016-08-22 13:08:44 -070087 mKeyguardViewMediator.setOccluded(isOccluded, animate);
Nick Desaulniers1d396752016-07-25 15:05:33 -070088 Trace.endSection();
Jorim Jaggi380ecb82014-03-14 17:25:20 +010089 }
Jorim Jaggi5cf17872014-03-26 18:31:48 +010090
Jim Millerab954542014-10-10 18:21:49 -070091 @Override // Binder interface
Adrian Roosd88eb262016-08-04 14:50:48 -070092 public void dismiss(boolean allowWhileOccluded) {
Jorim Jaggi5cf17872014-03-26 18:31:48 +010093 checkPermission();
Adrian Roosd88eb262016-08-04 14:50:48 -070094 mKeyguardViewMediator.dismiss(allowWhileOccluded);
Jorim Jaggi5cf17872014-03-26 18:31:48 +010095 }
96
Jim Millerab954542014-10-10 18:21:49 -070097 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +010098 public void onDreamingStarted() {
99 checkPermission();
100 mKeyguardViewMediator.onDreamingStarted();
101 }
102
Jim Millerab954542014-10-10 18:21:49 -0700103 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100104 public void onDreamingStopped() {
105 checkPermission();
106 mKeyguardViewMediator.onDreamingStopped();
107 }
108
Jim Millerab954542014-10-10 18:21:49 -0700109 @Override // Binder interface
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700110 public void onStartedGoingToSleep(int reason) {
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100111 checkPermission();
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700112 mKeyguardViewMediator.onStartedGoingToSleep(reason);
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100113 }
114
Jim Millerab954542014-10-10 18:21:49 -0700115 @Override // Binder interface
Jorim Jaggif1cdf952016-04-05 21:41:06 -0700116 public void onFinishedGoingToSleep(int reason, boolean cameraGestureTriggered) {
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100117 checkPermission();
Jorim Jaggif1cdf952016-04-05 21:41:06 -0700118 mKeyguardViewMediator.onFinishedGoingToSleep(reason, cameraGestureTriggered);
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700119 }
120
121 @Override // Binder interface
Jorim Jaggi740452e2015-07-09 12:13:59 -0700122 public void onStartedWakingUp() {
Nick Desaulniers1d396752016-07-25 15:05:33 -0700123 Trace.beginSection("KeyguardService.mBinder#onStartedWakingUp");
Jorim Jaggid175b6c2015-05-27 15:39:09 -0700124 checkPermission();
Jorim Jaggi740452e2015-07-09 12:13:59 -0700125 mKeyguardViewMediator.onStartedWakingUp();
Nick Desaulniers1d396752016-07-25 15:05:33 -0700126 Trace.endSection();
Jorim Jaggi740452e2015-07-09 12:13:59 -0700127 }
128
129 @Override // Binder interface
130 public void onScreenTurningOn(IKeyguardDrawnCallback callback) {
Nick Desaulniers1d396752016-07-25 15:05:33 -0700131 Trace.beginSection("KeyguardService.mBinder#onScreenTurningOn");
Jorim Jaggi740452e2015-07-09 12:13:59 -0700132 checkPermission();
133 mKeyguardViewMediator.onScreenTurningOn(callback);
Nick Desaulniers1d396752016-07-25 15:05:33 -0700134 Trace.endSection();
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100135 }
136
Jim Millerab954542014-10-10 18:21:49 -0700137 @Override // Binder interface
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700138 public void onScreenTurnedOn() {
Adrian Roose9d82722016-11-08 14:05:03 -0800139 Trace.beginSection("KeyguardService.mBinder#onScreenTurnedOn");
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700140 checkPermission();
141 mKeyguardViewMediator.onScreenTurnedOn();
Nick Desaulniers1d396752016-07-25 15:05:33 -0700142 Trace.endSection();
Jorim Jaggi0d210f62015-07-10 14:24:44 -0700143 }
144
145 @Override // Binder interface
146 public void onScreenTurnedOff() {
147 checkPermission();
148 mKeyguardViewMediator.onScreenTurnedOff();
149 }
150
151 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100152 public void setKeyguardEnabled(boolean enabled) {
153 checkPermission();
154 mKeyguardViewMediator.setKeyguardEnabled(enabled);
155 }
156
Jim Millerab954542014-10-10 18:21:49 -0700157 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100158 public void onSystemReady() {
Nick Desaulniers1d396752016-07-25 15:05:33 -0700159 Trace.beginSection("KeyguardService.mBinder#onSystemReady");
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100160 checkPermission();
161 mKeyguardViewMediator.onSystemReady();
Nick Desaulniers1d396752016-07-25 15:05:33 -0700162 Trace.endSection();
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100163 }
164
Jim Millerab954542014-10-10 18:21:49 -0700165 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100166 public void doKeyguardTimeout(Bundle options) {
167 checkPermission();
168 mKeyguardViewMediator.doKeyguardTimeout(options);
169 }
170
Jim Millerab954542014-10-10 18:21:49 -0700171 @Override // Binder interface
Evan Rosky18396452016-07-27 15:19:37 -0700172 public void setSwitchingUser(boolean switching) {
173 checkPermission();
174 mKeyguardViewMediator.setSwitchingUser(switching);
175 }
176
177 @Override // Binder interface
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100178 public void setCurrentUser(int userId) {
179 checkPermission();
180 mKeyguardViewMediator.setCurrentUser(userId);
181 }
182
183 @Override
Jorim Jaggi5cf17872014-03-26 18:31:48 +0100184 public void onBootCompleted() {
185 checkPermission();
186 mKeyguardViewMediator.onBootCompleted();
187 }
Jorim Jaggi0d674622014-05-21 01:34:15 +0200188
189 @Override
Jorim Jaggie29b2db2014-05-30 23:17:03 +0200190 public void startKeyguardExitAnimation(long startTime, long fadeoutDuration) {
Nick Desaulniers1d396752016-07-25 15:05:33 -0700191 Trace.beginSection("KeyguardService.mBinder#startKeyguardExitAnimation");
Jorim Jaggi0d674622014-05-21 01:34:15 +0200192 checkPermission();
Jorim Jaggie29b2db2014-05-30 23:17:03 +0200193 mKeyguardViewMediator.startKeyguardExitAnimation(startTime, fadeoutDuration);
Nick Desaulniers1d396752016-07-25 15:05:33 -0700194 Trace.endSection();
Jorim Jaggi0d674622014-05-21 01:34:15 +0200195 }
Jorim Jaggi380ecb82014-03-14 17:25:20 +0100196 };
197}
198