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);
  }