KeyguardBouncer.java revision 03c701ec58ff6de3cc3c53b05342a475a63a11cf
103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi/*
203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * Copyright (C) 2014 The Android Open Source Project
303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi *
403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * you may not use this file except in compliance with the License.
603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * You may obtain a copy of the License at
703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi *
803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi *
1003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * Unless required by applicable law or agreed to in writing, software
1103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
1203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * See the License for the specific language governing permissions and
1403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * limitations under the License
1503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi */
1603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
1703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggipackage com.android.systemui.statusbar.phone;
1803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
1903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.content.Context;
2003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.os.RemoteException;
2103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.util.Slog;
2203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.view.LayoutInflater;
2303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.view.View;
2403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport android.view.ViewGroup;
2503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
2603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.internal.policy.IKeyguardShowCallback;
2703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.internal.widget.LockPatternUtils;
2803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.keyguard.KeyguardHostView;
2903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.keyguard.KeyguardViewBase;
3003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.keyguard.R;
3103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.keyguard.ViewMediatorCallback;
3203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggiimport com.android.systemui.keyguard.KeyguardViewMediator;
3303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
3403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi/**
3503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi * A class which manages the bouncer on the lockscreen.
3603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi */
3703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggipublic class KeyguardBouncer {
3803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
3903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private Context mContext;
4003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private ViewMediatorCallback mCallback;
4103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private LockPatternUtils mLockPatternUtils;
4203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private ViewGroup mContainer;
4303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private StatusBarWindowManager mWindowManager;
4403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private KeyguardViewBase mKeyguardView;
4503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private ViewGroup mRoot;
4603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
4703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public KeyguardBouncer(Context context, ViewMediatorCallback callback,
4803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            LockPatternUtils lockPatternUtils, StatusBarWindowManager windowManager,
4903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            ViewGroup container) {
5003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mContext = context;
5103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mCallback = callback;
5203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mLockPatternUtils = lockPatternUtils;
5303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mContainer = container;
5403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mWindowManager = windowManager;
5503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
5603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
5703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void prepare() {
5803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        ensureView();
5903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
6003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
6103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void show() {
6203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        ensureView();
6303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mRoot.setVisibility(View.VISIBLE);
6403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mKeyguardView.requestFocus();
6503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
6603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
6703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void hide() {
6803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mKeyguardView != null) {
6903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mKeyguardView.cleanUp();
7003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
7103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        removeView();
7203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
7303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
7403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    /**
7503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi     * Reset the state of the view.
7603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi     */
7703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void reset() {
7803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        inflateView();
7903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
8003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
8103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void onScreenTurnedOff() {
8203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mKeyguardView != null) {
8303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mKeyguardView.onScreenTurnedOff();
8403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
8503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
8603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
8703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public void onScreenTurnedOn() {
8803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mKeyguardView != null) {
8903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mKeyguardView.onScreenTurnedOn();
9003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
9103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
9203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
9303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    public long getUserActivityTimeout() {
9403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mKeyguardView != null) {
9503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            long timeout = mKeyguardView.getUserActivityTimeout();
9603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            if (timeout >= 0) {
9703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi                return timeout;
9803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            }
9903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
10003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        return KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
10103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
10203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
10303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void ensureView() {
10403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mRoot == null) {
10503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            inflateView();
10603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
10703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
10803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
10903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void inflateView() {
11003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        removeView();
11103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mRoot = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.keyguard_bouncer, null);
11203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mKeyguardView = (KeyguardViewBase) mRoot.findViewById(R.id.keyguard_host_view);
11303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mKeyguardView.setLockPatternUtils(mLockPatternUtils);
11403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mKeyguardView.setViewMediatorCallback(mCallback);
11503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mContainer.addView(mRoot, mContainer.getChildCount());
11603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mRoot.setVisibility(View.INVISIBLE);
11703c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        mRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_HOME);
11803c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
11903c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi
12003c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    private void removeView() {
12103c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        if (mRoot != null && mRoot.getParent() == mContainer) {
12203c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mContainer.removeView(mRoot);
12303c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi            mRoot = null;
12403c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi        }
12503c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi    }
12603c701ec58ff6de3cc3c53b05342a475a63a11cfJorim Jaggi}
127