美文网首页
Android进入屏幕解锁方式选择引导界面点击no的时候依旧需要

Android进入屏幕解锁方式选择引导界面点击no的时候依旧需要

作者: 梧叶已秋声 | 来源:发表于2020-04-01 15:18 被阅读0次

    由于选择的是PIN码解锁,这里对应的文件是EncryptionInterstitial。

    首先,在EncryptionInterstitial中将startLockIntent屏蔽掉,转而调用finish,并且新增一个REQUEST,使用setResult传递出去。修改后如下所示。

    //vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\EncryptionInterstitial.java
    public class EncryptionInterstitial extends SettingsActivity {
    .....
        private static final int DISABLE_ENCRYPTION_REQUEST = 105;
    .....
          @Override
            public void onClick(View view) {
                if (view == mRequirePasswordToDecrypt) {
                    final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
                    if (accEn && !mPasswordRequired) {
                        setRequirePasswordState(false); // clear the UI state
                        AccessibilityWarningDialogFragment.newInstance(mRequestedPasswordQuality)
                                .show(
                                        getChildFragmentManager(),
                                        AccessibilityWarningDialogFragment.TAG);
                    } else {
                        setRequirePasswordState(true);
                        startLockIntent();
                    }
                } else {
                    setRequirePasswordState(false);
                    getActivity().setResult(DISABLE_ENCRYPTION_REQUEST);
                    finish();
                    //startLockIntent();
                }
            }
    }
    

    然后,在ChooseLockGeneric的onActivityResult中处理EncryptionInterstitial 传递的REQUEST。具体修改如下所示。

    //vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\password\ChooseLockGeneric.java
    public class ChooseLockGeneric extends SettingsActivity {
        .....
        private static final int DISABLE_ENCRYPTION_REQUEST = 105;
        .....
       @Override
            public void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                mWaitingForConfirmation = false;
                if (resultCode == DISABLE_ENCRYPTION_REQUEST){
                    mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);
                    mChooseLockSettingsHelper.utils().clearLock(mUserPassword, mUserId);
                    mChooseLockSettingsHelper.utils().setLockScreenDisabled(true, mUserId);
                }else if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) {
                 .....
            }
          .....
    }
    
          .....
      void updateUnlockMethodAndFinish(int quality, boolean disabled, boolean chooseLockSkipped) {
         .....
          if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
                    mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);
                    mChooseLockSettingsHelper.utils().clearLock(mUserPassword, mUserId);
                    mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);
                    getActivity().setResult(Activity.RESULT_OK);
                    removeAllFingerprintForUserAndFinish(mUserId);
                }
     .....
    }
    .....
    

    清除密码是参考quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED的代码去写的。因为这个对应SecurityMode.None。
    我尝试过EncryptionInterstitial中跳过调用startLockIntent,选择no的时候调用finish,结果导致重启后,无法进去桌面,因此ChooseLockGeneric中清除密码部分是必需的。

    参考链接:
    基于android7.1.1锁屏模块分析
    Android Keyguard(三) 锁屏设置

    相关文章

      网友评论

          本文标题:Android进入屏幕解锁方式选择引导界面点击no的时候依旧需要

          本文链接:https://www.haomeiwen.com/subject/kwfauhtx.html