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_obsolete; 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; 2738e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackbornimport android.os.IBinder; 2856bacd76b2e8caaad6be933ceb7168e046f7253eJim Millerimport android.os.SystemProperties; 291f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.util.Log; 301f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.View; 311f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewGroup; 321f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.ViewManager; 331f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.view.WindowManager; 341f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectimport android.widget.FrameLayout; 351f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 366edf2637e96139735df83907c221cce16d4d7eaaJim Millerimport android.graphics.Color; 376edf2637e96139735df83907c221cce16d4d7eaaJim Miller 381f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project/** 391f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Manages creating, showing, hiding and resetting the keyguard. Calls back 401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * via {@link com.android.internal.policy.impl.KeyguardViewCallback} to poke 411f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * the wake lock and report that the keyguard is done, which is in turn, 421f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * reported to this class by the current {@link KeyguardViewBase}. 431f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 441f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Projectpublic class KeyguardViewManager implements KeyguardWindowController { 451f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final static boolean DEBUG = false; 461f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private static String TAG = "KeyguardViewManager"; 471f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 481f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final Context mContext; 491f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final ViewManager mViewManager; 501f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final KeyguardViewCallback mCallback; 511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final KeyguardViewProperties mKeyguardViewProperties; 521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final KeyguardUpdateMonitor mUpdateMonitor; 541f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 551f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private WindowManager.LayoutParams mWindowLayoutParams; 561f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private boolean mNeedsInput = false; 5722dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller 581f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private FrameLayout mKeyguardHost; 591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private KeyguardViewBase mKeyguardView; 601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private boolean mScreenOn = false; 621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 6338e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn public interface ShowListener { 6438e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn void onShown(IBinder windowToken); 6538e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn }; 6638e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn 671f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 681f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * @param context Used to create views. 691f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * @param viewManager Keyguard will be attached to this. 701f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * @param callback Used to notify of changes. 711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 721f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public KeyguardViewManager(Context context, ViewManager viewManager, 736b05d58018c2806459c121e507c005639b74aee9Jim Miller KeyguardViewCallback callback, KeyguardViewProperties keyguardViewProperties, 746b05d58018c2806459c121e507c005639b74aee9Jim Miller KeyguardUpdateMonitor updateMonitor) { 751f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mContext = context; 761f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mViewManager = viewManager; 771f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mCallback = callback; 781f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardViewProperties = keyguardViewProperties; 791f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mUpdateMonitor = updateMonitor; 811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 831f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Helper class to host the keyguard view. 851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private static class KeyguardViewHost extends FrameLayout { 871f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private final KeyguardViewCallback mCallback; 881f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project private KeyguardViewHost(Context context, KeyguardViewCallback callback) { 901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project super(context); 911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mCallback = callback; 921f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 931f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 941f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project @Override 951f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project protected void dispatchDraw(Canvas canvas) { 961f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project super.dispatchDraw(canvas); 971f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mCallback.keyguardDoneDrawing(); 981f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1011f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 1021f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Show the keyguard. Will handle creating and attaching to the view manager 1031f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * lazily. 1041f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 1051f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized void show() { 10616541e4f88bf645408de098d1368cb49dd09e4c3Daniel Sandler if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView); 1071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 10806cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller Resources res = mContext.getResources(); 10956bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller boolean enableScreenRotation = 11056bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller SystemProperties.getBoolean("lockscreen.rot_override",false) 11156bacd76b2e8caaad6be933ceb7168e046f7253eJim Miller || res.getBoolean(R.bool.config_enableLockScreenRotation); 1121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardHost == null) { 1131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "keyguard host is null, creating it..."); 1141f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1151f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardHost = new KeyguardViewHost(mContext, mCallback); 1161f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 117cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy final int stretch = ViewGroup.LayoutParams.MATCH_PARENT; 1181f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN 119abe0da0a79a2312c347e16095488e192bb615037Dianne Hackborn | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER 120229574c7f5fad24a8240270db29fa6532256bb52Steven Ross | WindowManager.LayoutParams.FLAG_SLIPPERY 1211f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 1221f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ; 1231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (!mNeedsInput) { 1241f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 12698365d7663cbd82979a5700faf0050220b01084dJeff Brown if (ActivityManager.isHighEndGfx()) { 1275d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; 128b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn } 1291f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project WindowManager.LayoutParams lp = new WindowManager.LayoutParams( 1301f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD, 131abe0da0a79a2312c347e16095488e192bb615037Dianne Hackborn flags, PixelFormat.TRANSLUCENT); 1326b05d58018c2806459c121e507c005639b74aee9Jim Miller lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; 13301ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen; 13498365d7663cbd82979a5700faf0050220b01084dJeff Brown if (ActivityManager.isHighEndGfx()) { 1355d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; 1365d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn lp.privateFlags |= 1375d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED; 1385d927c2d8e832fcfcb0154c8741f896001141ef4Dianne Hackborn } 13973ab6a49db2b834ce1d56c7a1164938b409ee6fcDianne Hackborn lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY; 1401f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project lp.setTitle("Keyguard"); 1411f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mWindowLayoutParams = lp; 1421f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1431f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mViewManager.addView(mKeyguardHost, lp); 1441f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1451f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 14606cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller if (enableScreenRotation) { 147f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen On!"); 14882f91963188fd87aae0b35dd0f01ab95d5bb5fd3Jim Miller mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER; 14906cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller } else { 150f3447351f7571b5ab3c2a59832d9497bde4f6776Jim Miller if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen Off!"); 15106cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; 15206cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller } 15306cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller 15406cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); 15506cc78a4e3126703cae88dbc969974267b9f2c94Jim Miller 1561f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardView == null) { 1571f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "keyguard view is null, creating it..."); 158fbc46dc3c2be5f89041d9e4d3447bc65d303d43aJim Miller mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mCallback, 159fbc46dc3c2be5f89041d9e4d3447bc65d303d43aJim Miller mUpdateMonitor, this); 1601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.setId(R.id.lock_screen); 1611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project final ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams( 163cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy ViewGroup.LayoutParams.MATCH_PARENT, 164cc6828c676c0bfabbcbefa27f4be9183352f5feeRomain Guy ViewGroup.LayoutParams.MATCH_PARENT); 1651f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardHost.addView(mKeyguardView, lp); 1671f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1681f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mScreenOn) { 1694284e9d19a3f917b85e5eac4d6e304fc9b866139Brian Colonna mKeyguardView.show(); 1701f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1711f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1726edf2637e96139735df83907c221cce16d4d7eaaJim Miller 173dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler // Disable aspects of the system/status/navigation bars that are not appropriate or 174dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler // useful for the lockscreen but can be re-shown by dialogs or SHOW_WHEN_LOCKED activities. 175dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler // Other disabled bits are handled by the KeyguardViewMediator talking directly to the 176dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler // status bar service. 177dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler int visFlags = 178dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler ( View.STATUS_BAR_DISABLE_BACK 179dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler | View.STATUS_BAR_DISABLE_HOME 180dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler ); 181354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller Log.v(TAG, "KGVM: Set visibility on " + mKeyguardHost + " to " + visFlags); 182dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler mKeyguardHost.setSystemUiVisibility(visFlags); 183dba935659024a9ca83cb6bd3f1a9970e277f7658Daniel Sandler 1843fa8a454f61c772036f5f38661d1a077fd3d8388Jim Miller mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); 1851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardHost.setVisibility(View.VISIBLE); 1861f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.requestFocus(); 1871f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1881f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 1891f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public void setNeedsInput(boolean needsInput) { 1901f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mNeedsInput = needsInput; 1911f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mWindowLayoutParams != null) { 1921f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (needsInput) { 1931f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mWindowLayoutParams.flags &= 1941f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1951f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } else { 1961f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mWindowLayoutParams.flags |= 1971f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; 1981f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 1991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); 2001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2011f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 20222dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller 2031f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 2041f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Reset the state of the view. 2051f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 2061f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized void reset() { 2071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "reset()"); 2081f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardView != null) { 2091f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.reset(); 2101f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2111f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2121f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 2131f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized void onScreenTurnedOff() { 2141f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "onScreenTurnedOff()"); 2151f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mScreenOn = false; 2161f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardView != null) { 2171f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.onScreenTurnedOff(); 21815ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna } 2191f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2201f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 22138e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn public synchronized void onScreenTurnedOn( 22238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn final KeyguardViewManager.ShowListener showListener) { 2231f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "onScreenTurnedOn()"); 2241f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mScreenOn = true; 2251f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardView != null) { 2261f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.onScreenTurnedOn(); 2276edf2637e96139735df83907c221cce16d4d7eaaJim Miller 22838e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn // Caller should wait for this window to be shown before turning 22938e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn // on the screen. 23038e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn if (mKeyguardHost.getVisibility() == View.VISIBLE) { 23138e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn // Keyguard may be in the process of being shown, but not yet 23238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn // updated with the window manager... give it a chance to do so. 23338e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn mKeyguardHost.post(new Runnable() { 234dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 23538e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn if (mKeyguardHost.getVisibility() == View.VISIBLE) { 23638e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn showListener.onShown(mKeyguardHost.getWindowToken()); 23738e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } else { 23838e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn showListener.onShown(null); 23938e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } 24038e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } 24138e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn }); 24238e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } else { 24338e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn showListener.onShown(null); 24438e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } 24538e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn } else { 24638e29a61d0c87fe3e391d24e2eb11dd1800d107dDianne Hackborn showListener.onShown(null); 24715ea55a6f1ae44ca63da158e3539903d77433988Brian Colonna } 2481f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2491f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 2501f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized void verifyUnlock() { 2511f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "verifyUnlock()"); 2521f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project show(); 2531f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.verifyUnlock(); 2541f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 2551f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 2561f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 2571f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * A key has woken the device. We use this to potentially adjust the state 2581f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * of the lock screen based on the key. 2591f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * 2601f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}. 2611f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * Be sure not to take any action that takes a long time; any significant 2621f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * action should be posted to a handler. 2631f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * 26456194ebec6212e229f4ccdaa4b187166d20013efJeff Brown * @param keyCode The wake key. May be {@link KeyEvent#KEYCODE_UNKNOWN} if waking 26556194ebec6212e229f4ccdaa4b187166d20013efJeff Brown * for a reason other than a key press. 2661f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 2673754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood public boolean wakeWhenReadyTq(int keyCode) { 2681f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "wakeWhenReady(" + keyCode + ")"); 2691f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardView != null) { 2701f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardView.wakeWhenReadyTq(keyCode); 2713754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood return true; 2723754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood } else { 2733754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq"); 2743754b0d5635c699fac0bc24757d531b54f336c09Mike Lockwood return false; 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 * Hides the keyguard view 2801f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 2811f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized void hide() { 2821f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (DEBUG) Log.d(TAG, "hide()"); 2836edf2637e96139735df83907c221cce16d4d7eaaJim Miller 2841f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project if (mKeyguardHost != null) { 2851f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project mKeyguardHost.setVisibility(View.GONE); 286a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen // Don't do this right away, so we can let the view continue to animate 28701ad2f4a2d86faad2058159ad67840f1797955c0Dianne Hackborn // as it goes away. 288a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen if (mKeyguardView != null) { 28922dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller final KeyguardViewBase lastView = mKeyguardView; 29022dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller mKeyguardView = null; 291a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen mKeyguardHost.postDelayed(new Runnable() { 292a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen public void run() { 293d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn synchronized (KeyguardViewManager.this) { 29422dfe722dfb1094cfc5be0f155f3930bf39e5d61Jim Miller lastView.cleanUp(); 2958b886fab5496b0b1f5193f21855220176deddc37Jim Miller mKeyguardHost.removeView(lastView); 296d7f7deb2862fcfe830df15b6dc1be041f2741d3dDianne Hackborn } 297a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen } 298a35d753adda055582e319bc98f30f11b138b2936Karl Rosaen }, 500); 2991f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 3001f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 3011f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 3021f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project 3031f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project /** 3041f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project * @return Whether the keyguard is showing 3051f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project */ 3061f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project public synchronized boolean isShowing() { 3071f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project return (mKeyguardHost != null && mKeyguardHost.getVisibility() == View.VISIBLE); 3081f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project } 3091f838aaece3cd61d07ab9e41c5c6af761d643324The Android Open Source Project} 310