/** Show the keyguard. Will handle creating and attaching to the view manager lazily. */ public synchronized void show(Bundle options) { if (DEBUG) Log.d(TAG, "show(); mKeyguardView=" + mKeyguardView); boolean enableScreenRotation = KeyguardUtils.shouldEnableScreenRotation(mContext); if (DEBUG) Log.d(TAG, "show() query screen rotation after"); /// M: Incoming Indicator for Keyguard Rotation @{ KeyguardUpdateMonitor.getInstance(mContext).setQueryBaseTime(); /// @} maybeCreateKeyguardLocked(enableScreenRotation, false, options); if (DEBUG) Log.d(TAG, "show() maybeCreateKeyguardLocked finish"); maybeEnableScreenRotation(enableScreenRotation); // Disable common aspects of the system/status/navigation bars that are not appropriate or // useful on any keyguard screen but can be re-shown by dialogs or SHOW_WHEN_LOCKED // activities. Other disabled bits are handled by the KeyguardViewMediator talking // directly to the status bar service. int visFlags = View.STATUS_BAR_DISABLE_HOME; if (shouldEnableTranslucentDecor()) { mWindowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; } if (DEBUG) Log.d(TAG, "show:setSystemUiVisibility(" + Integer.toHexString(visFlags) + ")"); mKeyguardHost.setSystemUiVisibility(visFlags); mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); mKeyguardHost.setVisibility(View.VISIBLE); mKeyguardView.show(); mKeyguardView.requestFocus(); if (DEBUG) Log.d(TAG, "show() exit; mKeyguardView=" + mKeyguardView); }
public synchronized void onScreenTurnedOff() { if (DEBUG) Log.d(TAG, "onScreenTurnedOff()"); mScreenOn = false; if (mKeyguardView != null) { mKeyguardView.onScreenTurnedOff(); } }
private void inflateKeyguardView(Bundle options) { /// M: add for power-off alarm @{ int resId = R.id.keyguard_host_view; int layoutId = R.layout.keyguard_host_view; if (PowerOffAlarmManager.isAlarmBoot()) { resId = R.id.power_off_alarm_host_view; layoutId = R.layout.mtk_power_off_alarm_host_view; } /// @} View v = mKeyguardHost.findViewById(resId); if (v != null) { mKeyguardHost.removeView(v); } /// M: Save new orientation mCreateOrientation = mContext.getResources().getConfiguration().orientation; mCreateScreenWidthDp = mContext.getResources().getConfiguration().screenWidthDp; mCreateScreenHeightDp = mContext.getResources().getConfiguration().screenHeightDp; final LayoutInflater inflater = LayoutInflater.from(mContext); View view = inflater.inflate(layoutId, mKeyguardHost, true); mKeyguardView = (KeyguardHostView) view.findViewById(resId); mKeyguardView.setLockPatternUtils(mLockPatternUtils); mKeyguardView.setViewMediatorCallback(mViewMediatorCallback); mKeyguardView.initializeSwitchingUserState( options != null && options.getBoolean(IS_SWITCHING_USER)); // HACK // The keyguard view will have set up window flags in onFinishInflate before we set // the view mediator callback. Make sure it knows the correct IME state. if (mViewMediatorCallback != null) { KeyguardPasswordView kpv = (KeyguardPasswordView) mKeyguardView.findViewById(R.id.keyguard_password_view); if (kpv != null) { mViewMediatorCallback.setNeedsInput(kpv.needsInput()); } } if (options != null) { int widgetToShow = options.getInt( LockPatternUtils.KEYGUARD_SHOW_APPWIDGET, AppWidgetManager.INVALID_APPWIDGET_ID); if (widgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) { mKeyguardView.goToWidget(widgetToShow); } } }
/** Reset the state of the view. */ public synchronized void reset(Bundle options) { if (DEBUG) Log.d(TAG, "reset()"); // User might have switched, check if we need to go back to keyguard // TODO: It's preferable to stay and show the correct lockscreen or unlock if none boolean forceReCreate = true; if (mKeyguardView != null && mKeyguardView.isCurrentSimPinPukView() && options.getBoolean(KeyguardViewMediator.RESET_FOR_SIM_STATE)) { forceReCreate = false; } /// M: set to show next security view after simpinpuk if (mKeyguardView != null && !mKeyguardView.isCurrentSimPinPukView()) { mShowNextViewAfterSimLock = true; } maybeCreateKeyguardLocked( KeyguardUtils.shouldEnableScreenRotation(mContext), forceReCreate, options); mKeyguardView.setShowNextViewFlag(mShowNextViewAfterSimLock); }
private void updateUserActivityTimeoutInWindowLayoutParams() { // Use the user activity timeout requested by the keyguard view, if any. if (mKeyguardView != null) { long timeout = mKeyguardView.getUserActivityTimeout(); if (timeout >= 0) { mWindowLayoutParams.userActivityTimeout = timeout; return; } } // Otherwise, use the default timeout. mWindowLayoutParams.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS; }
/// M: add for ipo shut down update process public void ipoShutDownUpdate() { if (null != mKeyguardView) { mKeyguardView.ipoShutDownUpdate(); } }
public void launchCamera() { if (mKeyguardView != null) { mKeyguardView.launchCamera(); } }
public void dispatch(MotionEvent event) { if (mKeyguardView != null) { mKeyguardView.dispatch(event); } }
public void showAssistant() { if (mKeyguardView != null) { mKeyguardView.showAssistant(); } }
/** Dismisses the keyguard by going to the next screen or making it gone. */ public synchronized void dismiss() { Log.d(TAG, "dismiss mScreenOn=" + mScreenOn); if (mScreenOn) { mKeyguardView.dismiss(); } }
public synchronized void verifyUnlock() { if (DEBUG) Log.d(TAG, "verifyUnlock()"); show(null); mKeyguardView.verifyUnlock(); }
public synchronized void onScreenTurnedOn(final IKeyguardShowCallback callback) { if (DEBUG) Log.d(TAG, "onScreenTurnedOn()"); mScreenOn = true; // If keyguard is not showing, we need to inform PhoneWindowManager with a null // token so it doesn't wait for us to draw... final IBinder token = isShowing() ? mKeyguardHost.getWindowToken() : null; if (DEBUG && token == null) Slog.v( TAG, "send wm null token: " + (mKeyguardHost == null ? "host was null" : "not showing")); if (mKeyguardView != null) { mKeyguardView.onScreenTurnedOn(); if (mCreateOrientation != mContext.getResources().getConfiguration().orientation) { if (DEBUG) Log.d( TAG, "onScreenTurnedOn orientation is different, recreate it. mCreateOrientation=" + mCreateOrientation + ", newConfig=" + mContext.getResources().getConfiguration().orientation); maybeCreateKeyguardLocked(KeyguardUtils.shouldEnableScreenRotation(mContext), true, null); } // Caller should wait for this window to be shown before turning // on the screen. if (callback != null) { if (mKeyguardHost.getVisibility() == View.VISIBLE) { // Keyguard may be in the process of being shown, but not yet // updated with the window manager... give it a chance to do so. if (DEBUG) Log.d(TAG, "onScreenTurnedOn mKeyguardView visible, post runnable"); mKeyguardHost.post( new Runnable() { @Override public void run() { try { if (DEBUG) Log.d( TAG, "onScreenTurnedOn before callback.onShown() mKeyguardHost is Visible"); callback.onShown(token); } catch (RemoteException e) { Slog.w(TAG, "Exception calling onShown():", e); } } }); } else { try { if (DEBUG) Log.d(TAG, "onScreenTurnedOn before callback.onShown() mKeyguardHost is NOT Visible"); callback.onShown(token); } catch (RemoteException e) { Slog.w(TAG, "Exception calling onShown():", e); } } } } else if (callback != null) { try { if (DEBUG) Log.d(TAG, "onScreenTurnedOn before callback.onShown() mKeyguardView is null"); callback.onShown(token); } catch (RemoteException e) { Slog.w(TAG, "Exception calling onShown():", e); } } }
private void maybeCreateKeyguardLocked( boolean enableScreenRotation, boolean force, Bundle options) { if (mKeyguardHost != null) { mKeyguardHost.saveHierarchyState(mStateContainer); } if (mKeyguardHost == null) { if (DEBUG) Log.d(TAG, "keyguard host is null, creating it..."); mKeyguardHost = new ViewManagerHost(mContext); int flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; if (!mNeedsInput) { flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; } final int stretch = ViewGroup.LayoutParams.MATCH_PARENT; final int type = WindowManager.LayoutParams.TYPE_KEYGUARD; WindowManager.LayoutParams lp = new WindowManager.LayoutParams(stretch, stretch, type, flags, PixelFormat.TRANSLUCENT); lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; lp.windowAnimations = R.style.Animation_LockScreen; lp.screenOrientation = enableScreenRotation ? ActivityInfo.SCREEN_ORIENTATION_USER : ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; if (ActivityManager.isHighEndGfx()) { lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED; } lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY; /// M: Poke user activity when operating Keyguard // lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY; lp.setTitle("Keyguard"); mWindowLayoutParams = lp; /// M: skip add KeyguardHost into viewManager in AT case if (!KeyguardViewMediator.isKeyguardInActivity) { mViewManager.addView(mKeyguardHost, lp); } else { if (DEBUG) Log.d(TAG, "skip add mKeyguardHost into mViewManager for testing"); } KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mBackgroundChanger); } /// M: If force and keyguardView is not null, we should relase memory hold by old keyguardview if (force && mKeyguardView != null) { mKeyguardView.cleanUp(); } if (force || mKeyguardView == null) { mKeyguardHost.setCustomBackground(null); mKeyguardHost.removeAllViews(); inflateKeyguardView(options); mKeyguardView.requestFocus(); } updateUserActivityTimeoutInWindowLayoutParams(); mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams); mKeyguardHost.restoreHierarchyState(mStateContainer); }