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