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