Android Settings增加多击事件,增加开发者模式打开难度

软件平台:Android11

硬件平台:QCS6125

    需求来源:用户通过系统异常崩溃,进入原生Settings页面,通过默认的多击版本号方式打开开发者模式,继而打开adb调试开关,安装三方apk。

   对付这种需求本来有多种方案,比如通过PKMS里边加一些签名或者包名校验,防止三方apk后装,之前的博客里有记录过该方法,本篇只针对settings打开开发者模式的方式做复杂化处理,因为这个入口如果完全屏蔽对开发者可能不太友好。

    改动如下:

diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java
index c90fe48bc9..0e92930fcc 100644
--- a/src/com/android/settings/core/BasePreferenceController.java
+++ b/src/com/android/settings/core/BasePreferenceController.java
@@ -126,6 +126,8 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
     private UserHandle mWorkProfileUser;
     private int mMetricsCategory;
 
+     public static boolean isCombinationKey = false;
+
     /**
      * Instantiate a controller as specified controller type and user-defined key.
      * <p/>
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index 185c8eaca7..db091b2b83 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -184,7 +184,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
                                 R.plurals.show_dev_countdown, mDevHitCountdown,
                                 mDevHitCountdown),
                         Toast.LENGTH_SHORT);
-                mDevHitToast.show();
+                //mDevHitToast.show();
             }
 
             mMetricsFeatureProvider.action(
@@ -199,7 +199,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
             }
             mDevHitToast = Toast.makeText(mContext, R.string.show_dev_already,
                     Toast.LENGTH_LONG);
-            mDevHitToast.show();
+            //mDevHitToast.show();
             mMetricsFeatureProvider.action(
                     mMetricsFeatureProvider.getAttribution(mActivity),
                     MetricsEvent.FIELD_SETTINGS_BUILD_NUMBER_DEVELOPER_MODE_ENABLED,
@@ -230,14 +230,16 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
      * Enables development settings. Only call this after confirming password.
      */
     private void enableDevelopmentSettings() {
-        mDevHitCountdown = 0;
-        mProcessingLastDevHit = false;
-        DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mContext, true);
-        if (mDevHitToast != null) {
-            mDevHitToast.cancel();
-        }
-        mDevHitToast = Toast.makeText(mContext, R.string.show_dev_on,
+        if(isCombinationKey) {
+            mDevHitCountdown = 0;
+            mProcessingLastDevHit = false;
+            DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(mContext, true);
+            if (mDevHitToast != null) {
+                mDevHitToast.cancel();
+            }
+            mDevHitToast = Toast.makeText(mContext, R.string.show_dev_on,
                 Toast.LENGTH_LONG);
-        mDevHitToast.show();
+            //mDevHitToast.show();
+        }
     }
 }
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index caee987bd6..33478c3327 100755
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -19,6 +19,7 @@ package com.android.settings.deviceinfo.imei;
 import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
 
 import android.content.Context;
+import android.os.Handler;
 import android.os.UserManager;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -46,6 +47,7 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
     private final TelephonyManager mTelephonyManager;
     private final List<Preference> mPreferenceList = new ArrayList<>();
     private Fragment mFragment;
+    private int mDevCount = 0;
 
     public ImeiInfoPreferenceController(Context context, String key) {
         super(context, key);
@@ -165,6 +167,15 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
             return true;
         }
 
+        mDevCount++;
+        if (mDevCount == 10) {
+            isCombinationKey = true;
+            mDevCount = 0;
+            new Handler().postDelayed((Runnable) () -> {
+                isCombinationKey = false;
+            }, 30000);
+        }
+
         ImeiInfoDialogFragment.show(mFragment, simSlot, preference.getTitle().toString());
         return true;
     }

    这个改动设置一个标志位,在30s内点击相关栏10次才会设置,30s后次数自动清零重新累计,在该标志位设定后,原有的开发者模式多击才会生效,这里只是讲一个方法,具体哪个栏目可以灵活控制。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值