KeyguardViewManager.java revision 7ff30113de68539ec840c524b8f1561f938f96c5
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
17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpackage com.android.internal.policy.impl.keyguard;
181f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
19dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Activity;
20b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.app.ActivityManager;
2176017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurkaimport android.appwidget.AppWidgetManager;
221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.content.Context;
231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.content.pm.ActivityInfo;
24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.res.Configuration;
2506cc78a4e3126703cae88dbc969974267b9f2c94Jim Millerimport android.content.res.Resources;
261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.graphics.PixelFormat;
27f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohenimport android.os.Bundle;
2838e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackbornimport android.os.IBinder;
296bcd73203ada36b446b05fa33f9834ac989c0621Jim Millerimport android.os.Parcelable;
3056bacd76b2e8caaad6be933ceb7168e046f7253eJim Millerimport android.os.SystemProperties;
311f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.util.Log;
320cbfcffe7b99eea85dc17e92ef204035fa6fd4f9Craig Mautnerimport android.util.Slog;
336bcd73203ada36b446b05fa33f9834ac989c0621Jim Millerimport android.util.SparseArray;
34f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohenimport android.view.KeyEvent;
35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.LayoutInflater;
361f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.View;
371f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewGroup;
381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewManager;
391f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.WindowManager;
401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.widget.FrameLayout;
411f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
42dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.R;
43f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohenimport com.android.internal.widget.LockPatternUtils;
446edf2637e96139735df83907c221cce16d4d7eaaJim Miller
451f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project/**
461f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Manages creating, showing, hiding and resetting the keyguard.  Calls back
47904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner * via {@link KeyguardViewMediator.ViewMediatorCallback} to poke
481f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * the wake lock and report that the keyguard is done, which is in turn,
491f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * reported to this class by the current {@link KeyguardViewBase}.
501f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */
51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpublic class KeyguardViewManager {
52a71984f3da47c6e6e3164c170735362a3222d3adJim Miller    private final static boolean DEBUG = KeyguardViewMediator.DEBUG;
531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private static String TAG = "KeyguardViewManager";
543af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller    public static boolean USE_UPPER_CASE = true;
551f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
569cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    // Timeout used for keypresses
579cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
589cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller
591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final Context mContext;
601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private final ViewManager mViewManager;
61dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private final KeyguardViewMediator.ViewMediatorCallback mViewMediatorCallback;
621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
631f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private WindowManager.LayoutParams mWindowLayoutParams;
641f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private boolean mNeedsInput = false;
6522dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller
661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    private FrameLayout mKeyguardHost;
67dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private KeyguardHostView mKeyguardView;
681f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
69ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner    private boolean mScreenOn = false;
70dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private LockPatternUtils mLockPatternUtils;
711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
7238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn    public interface ShowListener {
7338e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn        void onShown(IBinder windowToken);
7438e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn    };
7538e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn
761f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
771f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param context Used to create views.
781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param viewManager Keyguard will be attached to this.
791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @param callback Used to notify of changes.
80dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     * @param lockPatternUtils
811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public KeyguardViewManager(Context context, ViewManager viewManager,
83dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            KeyguardViewMediator.ViewMediatorCallback callback,
84dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            LockPatternUtils lockPatternUtils) {
851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mContext = context;
861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mViewManager = viewManager;
87dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mViewMediatorCallback = callback;
88dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = lockPatternUtils;
891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
92dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     * Show the keyguard.  Will handle creating and attaching to the view manager
93dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     * lazily.
941f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
95f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohen    public synchronized void show(Bundle options) {
96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView);
97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
98dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean enableScreenRotation = shouldEnableScreenRotation();
99dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
100a71984f3da47c6e6e3164c170735362a3222d3adJim Miller        maybeCreateKeyguardLocked(enableScreenRotation, false, options);
101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        maybeEnableScreenRotation(enableScreenRotation);
102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
103e23ab8b1acea211762f1d0c4202f73a9f7700bb5Jim Miller        // Disable common aspects of the system/status/navigation bars that are not appropriate or
104e23ab8b1acea211762f1d0c4202f73a9f7700bb5Jim Miller        // useful on any keyguard screen but can be re-shown by dialogs or SHOW_WHEN_LOCKED
105e23ab8b1acea211762f1d0c4202f73a9f7700bb5Jim Miller        // activities. Other disabled bits are handled by the KeyguardViewMediator talking
106e23ab8b1acea211762f1d0c4202f73a9f7700bb5Jim Miller        // directly to the status bar service.
107e23ab8b1acea211762f1d0c4202f73a9f7700bb5Jim Miller        final int visFlags = View.STATUS_BAR_DISABLE_HOME;
108a71984f3da47c6e6e3164c170735362a3222d3adJim Miller        if (DEBUG) Log.v(TAG, "show:setSystemUiVisibility(" + Integer.toHexString(visFlags)+")");
109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardHost.setSystemUiVisibility(visFlags);
110dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
111dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
112dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardHost.setVisibility(View.VISIBLE);
113dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardView.show();
114dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardView.requestFocus();
115dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
116dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private boolean shouldEnableScreenRotation() {
118dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        Resources res = mContext.getResources();
119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return SystemProperties.getBoolean("lockscreen.rot_override",false)
120dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                || res.getBoolean(com.android.internal.R.bool.config_enableLockScreenRotation);
121dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
1221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
123dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    class ViewManagerHost extends FrameLayout {
124dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public ViewManagerHost(Context context) {
1251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            super(context);
1265da6430fff7812e58ee7e9a05c62d72c36f366c8Adam Powell            setFitsSystemWindows(true);
1271f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1281f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1291f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        @Override
130dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        protected void onConfigurationChanged(Configuration newConfig) {
131dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            super.onConfigurationChanged(newConfig);
132a71984f3da47c6e6e3164c170735362a3222d3adJim Miller            if (mKeyguardHost.getVisibility() == View.VISIBLE) {
133a71984f3da47c6e6e3164c170735362a3222d3adJim Miller                // only propagate configuration messages if we're currently showing
134a71984f3da47c6e6e3164c170735362a3222d3adJim Miller                maybeCreateKeyguardLocked(shouldEnableScreenRotation(), true, null);
135a71984f3da47c6e6e3164c170735362a3222d3adJim Miller            } else {
136a71984f3da47c6e6e3164c170735362a3222d3adJim Miller                if (DEBUG) Log.v(TAG, "onConfigurationChanged: view not visible");
137a71984f3da47c6e6e3164c170735362a3222d3adJim Miller            }
1381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
1390a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller
1400a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller        @Override
1410a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller        public boolean dispatchKeyEvent(KeyEvent event) {
14275931e05470992d51d135d09031902fd1b3fdbc7Jim Miller            if (event.getAction() == KeyEvent.ACTION_DOWN && mKeyguardView != null) {
14375931e05470992d51d135d09031902fd1b3fdbc7Jim Miller                int keyCode = event.getKeyCode();
14475931e05470992d51d135d09031902fd1b3fdbc7Jim Miller                if (keyCode == KeyEvent.KEYCODE_BACK && mKeyguardView.handleBackKey()) {
14575931e05470992d51d135d09031902fd1b3fdbc7Jim Miller                    return true;
14675931e05470992d51d135d09031902fd1b3fdbc7Jim Miller                } else if (keyCode == KeyEvent.KEYCODE_MENU && mKeyguardView.handleMenuKey()) {
1470a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller                    return true;
1480a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller                }
1490a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller            }
1500a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller            return super.dispatchKeyEvent(event);
1510a34d9edf02954d83c2861a8c6836865f8fa00fbJim Miller        }
1521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
1531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1546bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller    SparseArray<Parcelable> mStateContainer = new SparseArray<Parcelable>();
1556bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller
156a71984f3da47c6e6e3164c170735362a3222d3adJim Miller    private void maybeCreateKeyguardLocked(boolean enableScreenRotation, boolean force,
157a71984f3da47c6e6e3164c170735362a3222d3adJim Miller            Bundle options) {
158dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        final boolean isActivity = (mContext instanceof Activity); // for test activity
1591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1606bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller        if (mKeyguardHost != null) {
1616bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller            mKeyguardHost.saveHierarchyState(mStateContainer);
1626bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller        }
1636bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller
1641f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardHost == null) {
1651f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
1661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
167dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mKeyguardHost = new ViewManagerHost(mContext);
1681f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
1695da6430fff7812e58ee7e9a05c62d72c36f366c8Adam Powell            int flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
1705da6430fff7812e58ee7e9a05c62d72c36f366c8Adam Powell                    | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
171d2b82f70fede8c2ec4de34d8e6462ed4ece13c56Jim Miller                    | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
172dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1731f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (!mNeedsInput) {
1741f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
1751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
17698365d7663cbd82979a5700faf0050220b01084dJeff Brown            if (ActivityManager.isHighEndGfx()) {
1775d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
178b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn            }
179dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
180dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            final int stretch = ViewGroup.LayoutParams.MATCH_PARENT;
181dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            final int type = isActivity ? WindowManager.LayoutParams.TYPE_APPLICATION
182dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    : WindowManager.LayoutParams.TYPE_KEYGUARD;
1831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    stretch, stretch, type, flags, PixelFormat.TRANSLUCENT);
1856b05d58018c2806459c121e507c005639b74aee9Jim Miller            lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
18601ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn            lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen;
18798365d7663cbd82979a5700faf0050220b01084dJeff Brown            if (ActivityManager.isHighEndGfx()) {
1885d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
1895d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                lp.privateFlags |=
1905d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn                        WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED;
1915d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn            }
19273ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn            lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY;
19388400d3a31139c40c4014faf86c243647087ef6cCraig Mautner            if (isActivity) {
19488400d3a31139c40c4014faf86c243647087ef6cCraig Mautner                lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
19588400d3a31139c40c4014faf86c243647087ef6cCraig Mautner            }
1963dc524bc31a1578693ca958ef442dfa092b7aa7fJeff Brown            lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
197dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            lp.setTitle(isActivity ? "KeyguardMock" : "Keyguard");
1981f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mWindowLayoutParams = lp;
1991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mViewManager.addView(mKeyguardHost, lp);
2001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
201c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown
202a71984f3da47c6e6e3164c170735362a3222d3adJim Miller        if (force || mKeyguardView == null) {
203a71984f3da47c6e6e3164c170735362a3222d3adJim Miller            inflateKeyguardView(options);
204a71984f3da47c6e6e3164c170735362a3222d3adJim Miller        }
205c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        updateUserActivityTimeoutInWindowLayoutParams();
206dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
2076bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller
2086bcd73203ada36b446b05fa33f9834ac989c0621Jim Miller        mKeyguardHost.restoreHierarchyState(mStateContainer);
209dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
210dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
211f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohen    private void inflateKeyguardView(Bundle options) {
21200baebe124701903db8eb35abb087767c5d769a5Craig Mautner        View v = mKeyguardHost.findViewById(R.id.keyguard_host_view);
21300baebe124701903db8eb35abb087767c5d769a5Craig Mautner        if (v != null) {
21400baebe124701903db8eb35abb087767c5d769a5Craig Mautner            mKeyguardHost.removeView(v);
215dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
21664ecc0e1015f1c6c1f949bb74ba3f0875178c737Craig Mautner        // TODO: Remove once b/7094175 is fixed
2177ff30113de68539ec840c524b8f1561f938f96c5Dianne Hackborn        if (false) Slog.d(TAG, "inflateKeyguardView: b/7094175 mContext.config="
21864ecc0e1015f1c6c1f949bb74ba3f0875178c737Craig Mautner                + mContext.getResources().getConfiguration());
219dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        final LayoutInflater inflater = LayoutInflater.from(mContext);
220dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        View view = inflater.inflate(R.layout.keyguard_host_view, mKeyguardHost, true);
221dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardView = (KeyguardHostView) view.findViewById(R.id.keyguard_host_view);
222dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardView.setLockPatternUtils(mLockPatternUtils);
223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyguardView.setViewMediatorCallback(mViewMediatorCallback);
224dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
22570bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell        // HACK
22670bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell        // The keyguard view will have set up window flags in onFinishInflate before we set
22770bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell        // the view mediator callback. Make sure it knows the correct IME state.
22870bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell        if (mViewMediatorCallback != null) {
22970bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell            KeyguardPasswordView kpv = (KeyguardPasswordView) mKeyguardView.findViewById(
23070bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell                    R.id.keyguard_password_view);
23170bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell
23270bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell            if (kpv != null) {
23370bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell                mViewMediatorCallback.setNeedsInput(kpv.needsInput());
23470bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell            }
23570bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell        }
23670bc9f24ce6098a8c82245ac1ce7721d354ecd3dAdam Powell
2370ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        if (options != null) {
2380ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller            if (options.getBoolean(LockPatternUtils.KEYGUARD_SHOW_USER_SWITCHER)) {
2390ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller                mKeyguardView.goToUserSwitcher();
2400ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller            }
2410ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller            if (options.getBoolean(LockPatternUtils.KEYGUARD_SHOW_SECURITY_CHALLENGE)) {
2420ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller                mKeyguardView.showNextSecurityScreenIfPresent();
2430ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller            }
24476017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurka            int widgetToShow = options.getInt(LockPatternUtils.KEYGUARD_SHOW_APPWIDGET,
24576017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurka                    AppWidgetManager.INVALID_APPWIDGET_ID);
24676017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurka            if (widgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) {
24776017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurka                mKeyguardView.goToWidget(widgetToShow);
24876017cad4f7af95380ee5eaf6dc610bb46088a9cMichael Jurka            }
249f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohen        }
250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
2511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
252c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown    public void updateUserActivityTimeout() {
253c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        updateUserActivityTimeoutInWindowLayoutParams();
254c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
255c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown    }
256c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown
257c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown    private void updateUserActivityTimeoutInWindowLayoutParams() {
258c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        // Use the user activity timeout requested by the keyguard view, if any.
259c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        if (mKeyguardView != null) {
260c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown            long timeout = mKeyguardView.getUserActivityTimeout();
261c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown            if (timeout >= 0) {
262c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown                mWindowLayoutParams.userActivityTimeout = timeout;
263c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown                return;
264c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown            }
265c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        }
266c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown
267c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        // Otherwise, use the default timeout.
268c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown        mWindowLayoutParams.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
269c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown    }
270c7505bc9dddcb0655302c1598e966bf121586ebeJeff Brown
271dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private void maybeEnableScreenRotation(boolean enableScreenRotation) {
272dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // TODO: move this outside
27306cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        if (enableScreenRotation) {
274f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen On!");
27582f91963188fd87aae0b35dd0f01ab95d5bb5fd3Jim Miller            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
27606cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        } else {
277f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen Off!");
27806cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
27906cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        }
28006cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
2811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
2821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
2831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public void setNeedsInput(boolean needsInput) {
2841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mNeedsInput = needsInput;
2851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mWindowLayoutParams != null) {
2861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            if (needsInput) {
2871f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                mWindowLayoutParams.flags &=
2881f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
2891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            } else {
2901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                mWindowLayoutParams.flags |=
2911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
2921f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
293dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
294dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            try {
295dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
296dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            } catch (java.lang.IllegalArgumentException e) {
297dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // TODO: Ensure this method isn't called on views that are changing...
298dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                Log.w(TAG,"Can't update input method on " + mKeyguardHost + " window not attached");
299dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
3001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
3011f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
30222dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller
3031f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
3041f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Reset the state of the view.
3051f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
306f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohen    public synchronized void reset(Bundle options) {
3071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "reset()");
308d979dd7fbcf053cdb4fa5691dc625d2dfa4071f5Amith Yamasani        // User might have switched, check if we need to go back to keyguard
309d979dd7fbcf053cdb4fa5691dc625d2dfa4071f5Amith Yamasani        // TODO: It's preferable to stay and show the correct lockscreen or unlock if none
310a71984f3da47c6e6e3164c170735362a3222d3adJim Miller        maybeCreateKeyguardLocked(shouldEnableScreenRotation(), true, options);
3111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
3121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
3131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void onScreenTurnedOff() {
3141f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "onScreenTurnedOff()");
315ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner        mScreenOn = false;
3161f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
3171f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.onScreenTurnedOff();
31815ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        }
3191f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
3201f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
32138e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn    public synchronized void onScreenTurnedOn(
32238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn            final KeyguardViewManager.ShowListener showListener) {
3231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
324ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner        mScreenOn = true;
3251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
3261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.onScreenTurnedOn();
3276edf2637e96139735df83907c221cce16d4d7eaaJim Miller
32838e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn            // Caller should wait for this window to be shown before turning
32938e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn            // on the screen.
330904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner            if (showListener != null) {
331904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                if (mKeyguardHost.getVisibility() == View.VISIBLE) {
332904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    // Keyguard may be in the process of being shown, but not yet
333904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    // updated with the window manager...  give it a chance to do so.
334904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    mKeyguardHost.post(new Runnable() {
335904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                        @Override
336904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                        public void run() {
337904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                            if (mKeyguardHost.getVisibility() == View.VISIBLE) {
338904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                                showListener.onShown(mKeyguardHost.getWindowToken());
339904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                            } else {
340904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                                showListener.onShown(null);
341904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                            }
34238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn                        }
343904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    });
344904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                } else {
345904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    showListener.onShown(null);
346904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                }
34738e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn            }
348904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner        } else if (showListener != null) {
34938e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn            showListener.onShown(null);
35015ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna        }
3511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
3521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
3531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void verifyUnlock() {
3541f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "verifyUnlock()");
355f752202bee88e31ce765483ba2efa6999ae9c9adAdam Cohen        show(null);
3561f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        mKeyguardView.verifyUnlock();
3571f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
3581f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
3591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
3601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * A key has woken the device.  We use this to potentially adjust the state
3611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * of the lock screen based on the key.
3621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     *
3631f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}.
3641f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Be sure not to take any action that takes a long time; any significant
3651f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * action should be posted to a handler.
3661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     *
36756194ebec6212e229f4ccdaa4b187166d20013efJeff Brown     * @param keyCode The wake key.  May be {@link KeyEvent#KEYCODE_UNKNOWN} if waking
36856194ebec6212e229f4ccdaa4b187166d20013efJeff Brown     * for a reason other than a key press.
3691f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
3703754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood    public boolean wakeWhenReadyTq(int keyCode) {
3711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "wakeWhenReady(" + keyCode + ")");
3721f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardView != null) {
3731f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardView.wakeWhenReadyTq(keyCode);
3743754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood            return true;
3751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
376904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner        Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq");
377904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner        return false;
3781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
3791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
3801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
3811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * Hides the keyguard view
3821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
3831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized void hide() {
3841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (DEBUG) Log.d(TAG, "hide()");
3856edf2637e96139735df83907c221cce16d4d7eaaJim Miller
3861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        if (mKeyguardHost != null) {
3871f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            mKeyguardHost.setVisibility(View.GONE);
388223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller
389223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller            // We really only want to preserve keyguard state for configuration changes. Hence
390223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller            // we should clear state of widgets (e.g. Music) when we hide keyguard so it can
391223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller            // start with a fresh state when we return.
392223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller            mStateContainer.clear();
393223ce5c7326f6d13a17ccf2624605bb62864a27aJim Miller
394a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen            // Don't do this right away, so we can let the view continue to animate
39501ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn            // as it goes away.
396a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen            if (mKeyguardView != null) {
39722dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                final KeyguardViewBase lastView = mKeyguardView;
39822dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                mKeyguardView = null;
399a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                mKeyguardHost.postDelayed(new Runnable() {
400904732c4573de8aa3fa79c3d741380db2457340fCraig Mautner                    @Override
401a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                    public void run() {
402d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn                        synchronized (KeyguardViewManager.this) {
40322dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller                            lastView.cleanUp();
4048b886fab5496b0b1f5193f21855220176deddc37Jim Miller                            mKeyguardHost.removeView(lastView);
405d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn                        }
406a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                    }
407a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen                }, 500);
4081f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project            }
4091f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        }
4101f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
4111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project
4121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    /**
413ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner     * Dismisses the keyguard by going to the next screen or making it gone.
414ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner     */
415ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner    public synchronized void dismiss() {
416ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner        if (mScreenOn) {
417ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner            mKeyguardView.dismiss();
418ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner        }
419ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner    }
420ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner
421ad09bccfe4cc0a3075e97c0911a02b329023a34aCraig Mautner    /**
4221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     * @return Whether the keyguard is showing
4231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project     */
4241f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    public synchronized boolean isShowing() {
4251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project        return (mKeyguardHost != null && mKeyguardHost.getVisibility() == View.VISIBLE);
4261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project    }
4271f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project}
428