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