Android进入屏幕解锁方式选择引导界面点击no的时候依旧需要
2020-04-01 本文已影响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中清除密码部分是必需的。