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