15ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller/* 225190577cc69eaa5930c6fbdc2fcca03afc84982Jim Miller * Copyright (C) 2013 The Android Open Source Project 35ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * 45ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 55ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * you may not use this file except in compliance with the License. 65ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * You may obtain a copy of the License at 75ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * 85ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 95ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * 105ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * Unless required by applicable law or agreed to in writing, software 115ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 125ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * See the License for the specific language governing permissions and 145ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller * limitations under the License. 155ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller */ 165ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 175ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard; 185ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 195ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport java.io.FileDescriptor; 205ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport java.io.PrintWriter; 215ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 225ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.app.Service; 235ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.content.Intent; 24c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Millerimport static android.content.pm.PackageManager.PERMISSION_GRANTED; 25c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller 26c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Millerimport android.os.Binder; 275ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.os.Bundle; 28c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Millerimport android.os.Debug; 295ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.os.IBinder; 305ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.util.Log; 31caf24fc2c4bb9747eb80138bf3ce0be067851749Jim Millerimport android.view.MotionEvent; 325ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 335ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport com.android.internal.policy.IKeyguardService; 3425190577cc69eaa5930c6fbdc2fcca03afc84982Jim Millerimport com.android.internal.policy.IKeyguardExitCallback; 3525190577cc69eaa5930c6fbdc2fcca03afc84982Jim Millerimport com.android.internal.policy.IKeyguardShowCallback; 365ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport com.android.internal.widget.LockPatternUtils; 375ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 385ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpublic class KeyguardService extends Service { 395ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller static final String TAG = "KeyguardService"; 40c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD; 415ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller private KeyguardViewMediator mKeyguardViewMediator; 425ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 435ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller @Override 445ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void onCreate() { 455ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller if (mKeyguardViewMediator == null) { 465ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator = new KeyguardViewMediator( 475ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller KeyguardService.this, new LockPatternUtils(KeyguardService.this)); 485ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 495ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller Log.v(TAG, "onCreate()"); 505ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 515ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 525ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller @Override 535ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public IBinder onBind(Intent intent) { 545ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mBinder; 555ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 565ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 575ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller @Override 585ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 595ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller // TODO 605ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 615ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 62c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller void checkPermission() { 63c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) { 64c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller()); 65c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller throw new SecurityException("Access denied to process: " + Binder.getCallingPid() 66c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller + ", must have permission " + PERMISSION); 67c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller } 68c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller } 69c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller 705ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() { 715ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public boolean isShowing() { 725ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mKeyguardViewMediator.isShowing(); 735ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 745ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public boolean isSecure() { 755ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mKeyguardViewMediator.isSecure(); 765ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 775ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public boolean isShowingAndNotHidden() { 785ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mKeyguardViewMediator.isShowingAndNotHidden(); 795ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 805ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public boolean isInputRestricted() { 815ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mKeyguardViewMediator.isInputRestricted(); 825ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 8325190577cc69eaa5930c6fbdc2fcca03afc84982Jim Miller public void verifyUnlock(IKeyguardExitCallback callback) { 8425190577cc69eaa5930c6fbdc2fcca03afc84982Jim Miller mKeyguardViewMediator.verifyUnlock(callback); 855ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 865ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void keyguardDone(boolean authenticated, boolean wakeup) { 87c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 885ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.keyguardDone(authenticated, wakeup); 895ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 905ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void setHidden(boolean isHidden) { 91c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 925ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.setHidden(isHidden); 935ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 945ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void dismiss() { 955ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.dismiss(); 965ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 975ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void onDreamingStarted() { 98c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 995ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.onDreamingStarted(); 1005ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1015ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void onDreamingStopped() { 102c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1035ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.onDreamingStopped(); 1045ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1055ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void onScreenTurnedOff(int reason) { 106c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1075ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.onScreenTurnedOff(reason); 1085ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 10925190577cc69eaa5930c6fbdc2fcca03afc84982Jim Miller public void onScreenTurnedOn(IKeyguardShowCallback callback) { 110c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 11125190577cc69eaa5930c6fbdc2fcca03afc84982Jim Miller mKeyguardViewMediator.onScreenTurnedOn(callback); 1125ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1135ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void setKeyguardEnabled(boolean enabled) { 114c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1155ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.setKeyguardEnabled(enabled); 1165ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1175ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public boolean isDismissable() { 1185ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller return mKeyguardViewMediator.isDismissable(); 1195ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1205ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void onSystemReady() { 121c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1225ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.onSystemReady(); 1235ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1245ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void doKeyguardTimeout(Bundle options) { 125c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1265ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.doKeyguardTimeout(options); 1275ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1285ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void setCurrentUser(int userId) { 129c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1305ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.setCurrentUser(userId); 1315ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 1325ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller public void showAssistant() { 133c0b676dcc23baedb12946c3470d9fa9b02cb39e0Jim Miller checkPermission(); 1345ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller mKeyguardViewMediator.showAssistant(); 1355ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller } 136caf24fc2c4bb9747eb80138bf3ce0be067851749Jim Miller public void dispatch(MotionEvent event) { 137caf24fc2c4bb9747eb80138bf3ce0be067851749Jim Miller checkPermission(); 138caf24fc2c4bb9747eb80138bf3ce0be067851749Jim Miller mKeyguardViewMediator.dispatch(event); 139caf24fc2c4bb9747eb80138bf3ce0be067851749Jim Miller } 140138f25d75665bd07d34294364c5b6f530b33503fJim Miller public void launchCamera() { 141138f25d75665bd07d34294364c5b6f530b33503fJim Miller checkPermission(); 142138f25d75665bd07d34294364c5b6f530b33503fJim Miller mKeyguardViewMediator.launchCamera(); 143138f25d75665bd07d34294364c5b6f530b33503fJim Miller } 144e5f910a667088ab63e017d5851f0956c77b823daJim Miller public void onBootCompleted() { 145e5f910a667088ab63e017d5851f0956c77b823daJim Miller checkPermission(); 146e5f910a667088ab63e017d5851f0956c77b823daJim Miller mKeyguardViewMediator.onBootCompleted(); 147e5f910a667088ab63e017d5851f0956c77b823daJim Miller } 1485ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller }; 1495ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 1505ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller} 1515ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 152