Android14 和android12 在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时

参考如下修改:Android9.0在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时_android 锁屏密码输错5次-CSDN博客

android 14 修改如下:

diff 复制代码
androidap/SYSTEM/frameworks/base$ git status
Refresh index: 100% (47218/47218), done.
HEAD detached from e83cd3f473f9

        modified:   core/java/android/provider/Settings.java
        modified:   packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
        modified:   packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java

androidap/SYSTEM/frameworks/base$ git diff
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 6d1594e011dc..7ccaa8cea477 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -4641,7 +4641,12 @@ public final class Settings {
         @Deprecated
         @Readable
         public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
-
+        /**
+         * @deprecated Use {@link android.provider.Settings.Secure#COUNT_DOWNTIME_UNLOCK}
+         * @hide
+         */
+        @Readable
+        public static final String COUNT_DOWNTIME_UNLOCK = "count_downtime_unlock";
         /**
          * Scaling factor for fonts, float.
          */
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
index 12fccc59dc90..22b04826bc07 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
@@ -26,6 +26,12 @@ import android.os.CountDownTimer;
 import android.os.SystemClock;
 import android.util.PluralsMessageFormatter;
 import android.view.KeyEvent;
+import android.util.Log;
+import android.content.Context;
+import android.content.ContentResolver;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.provider.Settings.System;

 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternChecker;
@@ -54,7 +60,8 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
     protected AsyncTask<?, ?, ?> mPendingLockCheck;
     protected boolean mResumed;
     protected boolean mLockedOut;
-
+    static final String LOG_TAG = "KeyguardAbsKeyInputViewController";
+    Context mContext;
     private final KeyDownListener mKeyDownListener = (keyCode, keyEvent) -> {
         // Fingerprint sensor sends a KeyEvent.KEYCODE_UNKNOWN.
         // We don't want to consider it valid user input because the UI
@@ -88,6 +95,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
         mLatencyTracker = latencyTracker;
         mFalsingCollector = falsingCollector;
         mEmergencyButtonController = emergencyButtonController;
+        mContext=getContext();
     }

     abstract void resetState();
@@ -111,6 +119,26 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
         mDismissing = false;
         mView.resetPasswordText(false /* animate */, false /* announce */);
         resetState();
+        long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
+
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== reset  deadline - deadline_new =" + timeuses);
+        if(timeuses > 30000){
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+
+            }
+        }else{
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
+        }
     }

     @Override
@@ -156,6 +184,11 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
                             arguments,
                             R.string.kg_too_many_failed_attempts_countdown),
                         /* animate= */ false);
+                Log.d(LOG_TAG, "== handleAttemptLockout  secondsRemaining = "+secondsRemaining);
+                if(secondsRemaining == 30){
+                    Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,1);
+
+                }
             }

             @Override
@@ -163,6 +196,9 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
                 mMessageAreaController.setMessage("");
                 mLockedOut = false;
                 resetState();
+
+                Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
+
             }
         }.start();
     }
@@ -281,8 +317,33 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
         // if the user is currently locked out, enforce it.
         long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
                 KeyguardUpdateMonitor.getCurrentUser());
+
+
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== onResume  deadline - deadline_new =" + timeuses);
+
+
+        if(timeuses > 30000) {
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+
+            }
+        }
+        deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
+
         if (shouldLockout(deadline)) {
+
             handleAttemptLockout(deadline);
+        }else{
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
         }
     }

diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 2239556e4fd3..b3ba37cb70d3 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -27,6 +27,13 @@ import android.util.PluralsMessageFormatter;
 import android.view.MotionEvent;
 import android.view.View;

+import android.util.Log;
+import android.content.Context;
+import android.content.ContentResolver;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.provider.Settings.System;
+
 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternChecker;
 import com.android.internal.widget.LockPatternUtils;
@@ -66,6 +73,9 @@ public class KeyguardPatternViewController
     private CountDownTimer mCountdownTimer;
     private AsyncTask<?, ?, ?> mPendingLockCheck;

+    static final String LOG_TAG = "KeyguardPatternViewController";
+    Context mContext;
+
     private EmergencyButtonCallback mEmergencyButtonCallback = new EmergencyButtonCallback() {
         @Override
         public void onEmergencyButtonClickedWhenInCall() {
@@ -208,8 +218,10 @@ public class KeyguardPatternViewController
         mEmergencyButtonController = emergencyButtonController;
         mLockPatternView = mView.findViewById(R.id.lockPatternView);
         mPostureController = postureController;
+        mContext=getContext();
     }

+
     @Override
     public void onInit() {
         super.onInit();
@@ -263,6 +275,26 @@ public class KeyguardPatternViewController
         mLockPatternView.clearPattern();

         displayDefaultSecurityMessage();
+        long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
+
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== reset  deadline - deadline_new =" + timeuses);
+        if(timeuses > 30000){
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+
+            }
+        }else{
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
+        }
     }

     @Override
@@ -271,8 +303,34 @@ public class KeyguardPatternViewController
         // if the user is currently locked out, enforce it.
         long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
                 KeyguardUpdateMonitor.getCurrentUser());
+
+
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== onResume  deadline - deadline_new =" + timeuses);
+
+
+        if(timeuses > 30000) {
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+
+            }
+        }
+
+        deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
+
         if (deadline != 0) {
+
             handleAttemptLockout(deadline);
+        }else{
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
         }
     }

@@ -384,12 +442,19 @@ public class KeyguardPatternViewController
                             R.string.kg_too_many_failed_attempts_countdown),
                         /* animate= */ false
                 );
+                Log.d(LOG_TAG, "== handleAttemptLockout  secondsRemaining = "+secondsRemaining);
+                if(secondsRemaining == 30){
+                    Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,1);
+
+                }
             }

             @Override
             public void onFinish() {
                 mLockPatternView.setEnabled(true);
                 displayDefaultSecurityMessage();
+                Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
+
             }

         }.start();

android12 修改如下:

diff 复制代码
androidap/QSSI12/frameworks/base$ git status
Refresh index: 100% (40261/40261), done.
HEAD detached at d7cf647c5f4d

        modified:   core/java/android/provider/Settings.java

        modified:   packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
        modified:   packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java

androidap/QSSI12/frameworks/base$ git diff
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e7a8e8a1a80c..44d56b41f745 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -4250,7 +4250,12 @@ public final class Settings {
         @Deprecated
         @Readable
         public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
-
+        /**
+         * @deprecated Use {@link android.provider.Settings.Secure#COUNT_DOWNTIME_UNLOCK}
+         * @hide
+         */
+        @Readable
+        public static final String COUNT_DOWNTIME_UNLOCK = "count_downtime_unlock";
         /**
          * Scaling factor for fonts, float.
          */

diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
index eb5e39e769fc..6614290b4418 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardAbsKeyInputViewController.java
@@ -26,6 +26,13 @@ import android.os.AsyncTask;
 import android.os.CountDownTimer;
 import android.os.SystemClock;
 import android.view.KeyEvent;
+import android.util.Log;
+
+import android.content.Context;
+import android.content.ContentResolver;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.provider.Settings.System;

 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternChecker;
@@ -50,7 +57,8 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
     private boolean mDismissing;
     protected AsyncTask<?, ?, ?> mPendingLockCheck;
     protected boolean mResumed;
-
+    static final String LOG_TAG = "KeyguardAbsKeyInputViewController";
+    Context mContext;
     private final KeyDownListener mKeyDownListener = (keyCode, keyEvent) -> {
         // Fingerprint sensor sends a KeyEvent.KEYCODE_UNKNOWN.
         // We don't want to consider it valid user input because the UI
@@ -84,6 +92,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
         mEmergencyButtonController = emergencyButtonController;
         KeyguardMessageArea kma = KeyguardMessageArea.findSecurityMessageDisplay(mView);
         mMessageAreaController = messageAreaControllerFactory.create(kma);
+        mContext=getContext();
     }

     abstract void resetState();
@@ -91,6 +100,8 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
     @Override
     public void onInit() {
         super.onInit();

         mMessageAreaController.init();
     }

@@ -107,13 +118,43 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
         // start fresh
         mDismissing = false;
         mView.resetPasswordText(false /* animate */, false /* announce */);

         // if the user is currently locked out, enforce it.
         long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
                 KeyguardUpdateMonitor.getCurrentUser());
+
+        Log.d(LOG_TAG, "== reset deadline =" + deadline);
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+        Log.d(LOG_TAG, "== reset deadline_new =" + deadline_new);
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== reset  deadline - deadline_new =" + timeuses);
+
+        Log.d(LOG_TAG, "== reset() COUNT_DOWNTIME_UNLOCK ="+Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0));
+        if(timeuses > 30000) {
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+                Log.d(LOG_TAG, "== reset(inside)  handleAttemptLockout(mDeadline)" + mDeadline);
+            }
+        }
+        deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
+
         if (shouldLockout(deadline)) {
+
+            Log.d(LOG_TAG, "== reset deadline shouldLockout(deadline)=" + deadline );
+
             handleAttemptLockout(deadline);
         } else {
             resetState();
+            Log.d(LOG_TAG, "== reset() else resetState() COUNT_DOWNTIME_UNLOCK ="+Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0));
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
         }
     }

@@ -146,8 +187,16 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
     protected void handleAttemptLockout(long elapsedRealtimeDeadline) {
         mView.setPasswordEntryEnabled(false);
         long elapsedRealtime = SystemClock.elapsedRealtime();
-        long secondsInFuture = (long) Math.ceil(
-                (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0);
+        long secondsInFuture =0;
+        long timeuses =0;
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtimeDeadline =" + elapsedRealtimeDeadline);
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtime =" + elapsedRealtime);
+        timeuses=(long) Math.abs(elapsedRealtimeDeadline - elapsedRealtime);
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtimeDeadline - elapsedRealtime =" + timeuses);
+        secondsInFuture = (long) Math.ceil(
+                    (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0);
+
+
         mCountdownTimer = new CountDownTimer(secondsInFuture * 1000, 1000) {

             @Override
@@ -156,12 +205,19 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
                 mMessageAreaController.setMessage(mView.getResources().getQuantityString(
                         R.plurals.kg_too_many_failed_attempts_countdown,
                         secondsRemaining, secondsRemaining));
-            }

+                Log.d(LOG_TAG, "== handleAttemptLockout  secondsRemaining = "+secondsRemaining);
+                if(secondsRemaining == 30){
+                    Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,1);
+
+                  }
+            }
             @Override
             public void onFinish() {
                 mMessageAreaController.setMessage("");
                 resetState();
+                Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
+
             }
         }.start();
     }
@@ -182,6 +238,7 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
                 if (timeoutMs > 0) {
                     long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
                             userId, timeoutMs);
+
                     handleAttemptLockout(deadline);
                 }
             }
@@ -286,6 +343,8 @@ public abstract class KeyguardAbsKeyInputViewController<T extends KeyguardAbsKey
             mPendingLockCheck.cancel(false);
             mPendingLockCheck = null;
         }
-        reset();
+        if (Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0) == 0 && mCountdownTimer == null ) {
+            reset();
+        }
     }
 }
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
index 60d56503f73b..99ba0e56fe58 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardPatternViewController.java
@@ -25,6 +25,13 @@ import android.os.CountDownTimer;
 import android.os.SystemClock;
 import android.view.MotionEvent;
 import android.view.View;
+import android.util.Log;
+
+import android.content.Context;
+import android.content.ContentResolver;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.provider.Settings.System;

 import com.android.internal.util.LatencyTracker;
 import com.android.internal.widget.LockPatternChecker;
@@ -65,7 +72,8 @@ public class KeyguardPatternViewController
     private LockPatternView mLockPatternView;
     private CountDownTimer mCountdownTimer;
     private AsyncTask<?, ?, ?> mPendingLockCheck;
-
+    static final String LOG_TAG = "KeyguardPatternViewController";
+    Context mContext;
     private EmergencyButtonCallback mEmergencyButtonCallback = new EmergencyButtonCallback() {
         @Override
         public void onEmergencyButtonClickedWhenInCall() {
@@ -178,6 +186,7 @@ public class KeyguardPatternViewController
                     if (timeoutMs > 0) {
                         long deadline = mLockPatternUtils.setLockoutAttemptDeadline(
                                 userId, timeoutMs);
+
                         handleAttemptLockout(deadline);
                     }
                 }
@@ -210,6 +219,7 @@ public class KeyguardPatternViewController
         mMessageAreaController = mMessageAreaControllerFactory.create(kma);
         mLockPatternView = mView.findViewById(R.id.lockPatternView);
         mPostureController = postureController;
+        mContext=getContext();
     }

     @Override
@@ -270,10 +280,36 @@ public class KeyguardPatternViewController
         // if the user is currently locked out, enforce it.
         long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
                 KeyguardUpdateMonitor.getCurrentUser());
+
+        Log.d(LOG_TAG, "== reset deadline =" + deadline);
+        long deadline_new = SystemClock.elapsedRealtime();
+        long timeuses =0;
+
+        Log.d(LOG_TAG, "== reset deadline_new =" + deadline_new);
+        timeuses=(long) Math.abs(deadline - deadline_new);
+        Log.d(LOG_TAG, "== reset  deadline - deadline_new =" + timeuses);
+
+        Log.d(LOG_TAG, "== reset() COUNT_DOWNTIME_UNLOCK ="+Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0));
+        if(timeuses > 30000) {
+            if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.COUNT_DOWNTIME_UNLOCK, 0) == 1 && mCountdownTimer == null) {
+                long mDeadline = mLockPatternUtils.setLockoutAttemptDeadline(
+                        KeyguardUpdateMonitor.getCurrentUser(), 30000);
+                Log.d(LOG_TAG, "== reset(inside)  handleAttemptLockout(mDeadline)" + mDeadline);
+            }
+        }
+        deadline = mLockPatternUtils.getLockoutAttemptDeadline(
+                KeyguardUpdateMonitor.getCurrentUser());
+
         if (deadline != 0) {
+
+            Log.d(LOG_TAG, "== reset deadline =" + deadline);
+
             handleAttemptLockout(deadline);
         } else {
             displayDefaultSecurityMessage();
+            Log.d(LOG_TAG, "== reset() else resetState() COUNT_DOWNTIME_UNLOCK ="+Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0));
+
+            Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
         }
     }

@@ -301,6 +337,9 @@ public class KeyguardPatternViewController
             mPendingLockCheck = null;
         }
         displayDefaultSecurityMessage();
+        if (Settings.System.getInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0) == 0 && mCountdownTimer == null ) {
+            reset();
+        }
     }

     @Override
@@ -362,8 +401,24 @@ public class KeyguardPatternViewController
         mLockPatternView.clearPattern();
         mLockPatternView.setEnabled(false);
         final long elapsedRealtime = SystemClock.elapsedRealtime();
-        final long secondsInFuture = (long) Math.ceil(
-                (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0);
+   /*     final long secondsInFuture = (long) Math.ceil(
+                (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0);*/
+        long secondsInFuture =0;
+        long timeuses =0;
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtimeDeadline =" + elapsedRealtimeDeadline);
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtime =" + elapsedRealtime);
+        timeuses=(long) Math.abs(elapsedRealtimeDeadline - elapsedRealtime);
+        Log.d(LOG_TAG, "== handleAttemptLockout elapsedRealtimeDeadline - elapsedRealtime =" + timeuses);
+
+        if (timeuses > 30000){
+            secondsInFuture =(long) Math.ceil((30000.0) / 1000.0);
+
+        }else {
+            secondsInFuture = (long) Math.ceil(
+                    (elapsedRealtimeDeadline - elapsedRealtime) / 1000.0);
+
+        }
+
         mCountdownTimer = new CountDownTimer(secondsInFuture * 1000, 1000) {

             @Override
@@ -372,12 +427,18 @@ public class KeyguardPatternViewController
                 mMessageAreaController.setMessage(mView.getResources().getQuantityString(
                         R.plurals.kg_too_many_failed_attempts_countdown,
                         secondsRemaining, secondsRemaining));
+                Log.d(LOG_TAG, "== handleAttemptLockout  secondsRemaining = "+secondsRemaining);
+                if(secondsRemaining == 30){
+                    Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,1);
+
+                }
             }

             @Override
             public void onFinish() {
                 mLockPatternView.setEnabled(true);
                 displayDefaultSecurityMessage();
+                Settings.System.putInt(mContext.getContentResolver(),Settings.System.COUNT_DOWNTIME_UNLOCK,0);
             }

         }.start();
相关推荐
太空漫步112 小时前
android社畜模拟器
android
海绵宝宝_5 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
沙漠蓝色披头5 小时前
通过wifi无线方式,通过adb命令连接手机,用来传输文件和安装app
adb·智能手机
OJAC近屿智能5 小时前
苹果新品今日发布,AI手机市场竞争加剧,近屿智能专注AI人才培养
大数据·人工智能·ai·智能手机·aigc·近屿智能
凯文的内存6 小时前
android 定制mtp连接外设的设备名称
android·media·mtp·mtpserver
天若子6 小时前
Android今日头条的屏幕适配方案
android
林的快手8 小时前
伪类选择器
android·前端·css·chrome·ajax·html·json
望佑8 小时前
Tmp detached view should be removed from RecyclerView before it can be recycled
android
xvch10 小时前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
人民的石头14 小时前
Android系统开发 给system/app传包报错
android