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