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