KeyguardViewManager.java revision 56bacd76b2e8caaad6be933ceb7168e046f7253e
11f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project/*
21f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
31f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project *
41f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
51f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * you may not use this file except in compliance with the License.
61f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * You may obtain a copy of the License at
71f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project *
81f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
91f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project *
101f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * See the License for the specific language governing permissions and
141f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * limitations under the License.
151f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */
161f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
171f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectpackage com.android.internal.policy.impl;
181f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
191f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport com.android.internal.R;
201f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
21b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.app.ActivityManager;
221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.content.Context;
231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.content.pm.ActivityInfo;
2406cc78a4e3126703cae88dbc969974267b9f2c94Jim Millerimport android.content.res.Resources;
251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.graphics.PixelFormat;
261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.graphics.Canvas;
2756bacd76b2e8caaad6be933ceb7168e046f7253eJim Millerimport android.os.SystemProperties;
281f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.util.Log;
291f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.View;
301f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewGroup;
311f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewManager;
321f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.WindowManager;
331f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.widget.FrameLayout;
341f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
356edf2637e96139735df83907c221cce16d4d7eaaJim Millerimport android.graphics.Color;
366edf2637e96139735df83907c221cce16d4d7eaaJim Miller
371f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project/**
381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Manages creating, showing, hiding and resetting the keyguard.  Calls back
391f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * via {@link com.android.internal.policy.impl.KeyguardViewCallback} to poke
401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * the wake lock and report that the keyguard is done, which is in turn,
411f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * reported to this class by the current {@link KeyguardViewBase}.
421f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */
431f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectpublic class KeyguardViewManager implements KeyguardWindowController {
441f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final static boolean DEBUG = false;
451f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private static String TAG = "KeyguardViewManager";
461f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
471f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final Context mContext;
481f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final ViewManager mViewManager;
491f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final KeyguardViewCallback mCallback;
501f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final KeyguardViewProperties mKeyguardViewProperties;
511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final KeyguardUpdateMonitor mUpdateMonitor;
531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
541f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private WindowManager.LayoutParams mWindowLayoutParams;
551f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private boolean mNeedsInput = false;
5622dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller
571f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private FrameLayout mKeyguardHost;
581f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private KeyguardViewBase mKeyguardView;
591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private boolean mScreenOn = false;
611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
631f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param context Used to create views.
641f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param viewManager Keyguard will be attached to this.
651f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param callback Used to notify of changes.
661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
671f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public KeyguardViewManager(Context context, ViewManager viewManager,
686b05d58018c2806459c121e507c005639b74aee9Jim Miller            KeyguardViewCallback callback, KeyguardViewProperties keyguardViewProperties,
696b05d58018c2806459c121e507c005639b74aee9Jim Miller            KeyguardUpdateMonitor updateMonitor) {
701f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mContext = context;
711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mViewManager = viewManager;
721f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mCallback = callback;
731f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mKeyguardViewProperties = keyguardViewProperties;
741f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mUpdateMonitor = updateMonitor;
761f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
771f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Helper class to host the keyguard view.
801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private static class KeyguardViewHost extends FrameLayout {
821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        private final KeyguardViewCallback mCallback;
831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        private KeyguardViewHost(Context context, KeyguardViewCallback callback) {
851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            super(context);
861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mCallback = callback;
871f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
881f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        @Override
901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        protected void dispatchDraw(Canvas canvas) {
911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            super.dispatchDraw(canvas);
921f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mCallback.keyguardDoneDrawing();
931f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
941f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
951f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
961f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
971f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Show the keyguard.  Will handle creating and attaching to the view manager
981f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * lazily.
991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
1001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void show() {
10116541e4f88bf645408de098d1368cb49dd09e4c3Daniel Sandler        if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView);
1021f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
10306cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        Resources res = mContext.getResources();
10456bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller        boolean enableScreenRotation =
10556bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller                SystemProperties.getBoolean("lockscreen.rot_override",false)
10656bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller                || res.getBoolean(R.bool.config_enableLockScreenRotation);
1071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardHost == null) {
1081f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
1091f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1101f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardHost = new KeyguardViewHost(mContext, mCallback);
1111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
112cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy            final int stretch = ViewGroup.LayoutParams.MATCH_PARENT;
1131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
114abe0da0a79a2312c347e16095488e192bb615037Dianne Hackborn                    | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER
11501ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn                    | WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING
1161f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    /*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
1171f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ;
1181f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (!mNeedsInput) {
1191f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1201f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
121b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            if (ActivityManager.isHighEndGfx(((WindowManager)mContext.getSystemService(
122b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn                    Context.WINDOW_SERVICE)).getDefaultDisplay())) {
1235d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
124b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            }
1251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
1261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD,
127abe0da0a79a2312c347e16095488e192bb615037Dianne Hackborn                    flags, PixelFormat.TRANSLUCENT);
1286b05d58018c2806459c121e507c005639b74aee9Jim Miller            lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
12901ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn            lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen;
1305d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn            if (ActivityManager.isHighEndGfx(((WindowManager)mContext.getSystemService(
1315d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                    Context.WINDOW_SERVICE)).getDefaultDisplay())) {
1325d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
1335d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                lp.privateFlags |=
1345d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                        WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED;
1355d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn            }
1361f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            lp.setTitle("Keyguard");
1371f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mWindowLayoutParams = lp;
1381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1391f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mViewManager.addView(mKeyguardHost, lp);
1401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1411f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
14206cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        if (enableScreenRotation) {
143f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen On!");
14406cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR;
14506cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        } else {
146f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen Off!");
14706cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
14806cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        }
14906cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller
15006cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
15106cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller
1521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView == null) {
1531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (DEBUG) Log.d(TAG, "keyguard view is null, creating it...");
1541f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this);
1551f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.setId(R.id.lock_screen);
1561f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.setCallback(mCallback);
1571f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1581f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            final ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams(
159cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy                    ViewGroup.LayoutParams.MATCH_PARENT,
160cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy                    ViewGroup.LayoutParams.MATCH_PARENT);
1611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardHost.addView(mKeyguardView, lp);
1631f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1641f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (mScreenOn) {
1651f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                mKeyguardView.onScreenTurnedOn();
1661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
1671f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1686edf2637e96139735df83907c221cce16d4d7eaaJim Miller
1693fa8a454f61c772036f5f38661d1a077fd3d8388Jim Miller        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
1701f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mKeyguardHost.setVisibility(View.VISIBLE);
1711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mKeyguardView.requestFocus();
1721f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
1731f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1741f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public void setNeedsInput(boolean needsInput) {
1751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mNeedsInput = needsInput;
1761f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mWindowLayoutParams != null) {
1771f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (needsInput) {
1781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                mWindowLayoutParams.flags &=
1791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            } else {
1811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                mWindowLayoutParams.flags |=
1821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
1841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
1851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
18722dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller
1881f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
1891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Reset the state of the view.
1901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
1911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void reset() {
1921f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "reset()");
1931f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
1941f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.reset();
1951f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1961f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
1971f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1981f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void onScreenTurnedOff() {
1991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "onScreenTurnedOff()");
2001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mScreenOn = false;
2011f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
2021f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.onScreenTurnedOff();
2036edf2637e96139735df83907c221cce16d4d7eaaJim Miller
20415ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            // When screen is turned off, need to unbind from FaceLock service if using FaceLock
20515ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            mKeyguardView.stopAndUnbindFromFaceLock();
20615ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        }
2071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2081f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2091f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void onScreenTurnedOn() {
2101f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
2111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mScreenOn = true;
2121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
2131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.onScreenTurnedOn();
2146edf2637e96139735df83907c221cce16d4d7eaaJim Miller
21515ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            // When screen is turned on, need to bind to FaceLock service if we are using FaceLock
21615ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            mKeyguardView.bindToFaceLock();
21715ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        }
2181f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2191f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2201f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void verifyUnlock() {
2211f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "verifyUnlock()");
2221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        show();
2231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mKeyguardView.verifyUnlock();
2241f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
2271f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * A key has woken the device.  We use this to potentially adjust the state
2281f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * of the lock screen based on the key.
2291f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     *
2301f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}.
2311f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Be sure not to take any action that takes a long time; any significant
2321f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * action should be posted to a handler.
2331f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     *
23456194ebec6212e229f4ccdaa4b187166d20013efJeff Brown     * @param keyCode The wake key.  May be {@link KeyEvent#KEYCODE_UNKNOWN} if waking
23556194ebec6212e229f4ccdaa4b187166d20013efJeff Brown     * for a reason other than a key press.
2361f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
2373754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood    public boolean wakeWhenReadyTq(int keyCode) {
2381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "wakeWhenReady(" + keyCode + ")");
2391f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
2401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.wakeWhenReadyTq(keyCode);
2413754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood            return true;
2423754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood        } else {
2433754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood            Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq");
2443754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood            return false;
2451f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
2461f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2471f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2481f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
2491f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Hides the keyguard view
2501f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
2511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void hide() {
2521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "hide()");
2536edf2637e96139735df83907c221cce16d4d7eaaJim Miller
25415ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        if (mKeyguardView != null) {
25515ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            // When view is hidden, need to unbind from FaceLock service if we are using FaceLock
25615ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            // e.g., when device becomes unlocked
25715ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna            mKeyguardView.stopAndUnbindFromFaceLock();
25815ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        }
2596edf2637e96139735df83907c221cce16d4d7eaaJim Miller
2601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardHost != null) {
2611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardHost.setVisibility(View.GONE);
262a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen            // Don't do this right away, so we can let the view continue to animate
26301ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn            // as it goes away.
264a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen            if (mKeyguardView != null) {
26522dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                final KeyguardViewBase lastView = mKeyguardView;
26622dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                mKeyguardView = null;
267a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                mKeyguardHost.postDelayed(new Runnable() {
268a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                    public void run() {
269d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn                        synchronized (KeyguardViewManager.this) {
27022dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                            lastView.cleanUp();
2718b886fab5496b0b1f5193f21855220176deddc37Jim Miller                            mKeyguardHost.removeView(lastView);
272d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn                        }
273a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                    }
274a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                }, 500);
2751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
2761f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
2771f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
2801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @return Whether the keyguard is showing
2811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
2821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized boolean isShowing() {
2831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        return (mKeyguardHost != null && mKeyguardHost.getVisibility() == View.VISIBLE);
2841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project}
286