安卓12锁屏界面上滑解锁困难优化

1. 参考链接

SystemUI 上滑解锁困难容易失败的分析与解决方案
Android Q 滑屏解锁误操作判断规则
Android S 滑动解锁概率失败

2. 前情摘要
目前MTK安卓12平台,部分项目的机器存在上滑解锁困难。

3. 背景介绍
从安卓10开始,谷歌开始默认启用BrightLineFalsingManager,支持切换成旧版FalsingManagerImpl,但是安卓12不支持切换了。
BrightLineFalsingManager功能google描述为:旨在说明触摸被拒绝的原因。
google提交说明:为新的falsing管理器和分类器添加基类。这不会添加功能更改。它只是为新的FalsingManager添加了框架。
之后google添加可多个判断规则:
(1)PointerCountClassifier:如果检测到多个指针,则在锁定屏幕上为False。
(2)TypeClassifier:这与现有的伪分类器相匹配,以确保刷卡的总体方向与预期的动作相匹配(例如,删除通知应该是并排的)。
(3)DiagonalClassifier:将拒绝过于接近45度的划动。
(4)DistanceClassifier:确保刷卡+动量大于最小距离。
(5)ProximityClassifier:如果接近传感器被覆盖超过一定百分比,则错误触摸。(这个分级器本质上是一个快速设置的禁止操作,因为我们假设从顶部滑动时传感器可能被覆盖)。
(6)ZigZagClassifier:拒绝了之字形滑动。解锁应该基本上是直的。

4. 解决方法
第一种 缩小滑动距离(部分机器效果不明显)
diff --git a/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/dimens.xml b/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/dimens.xml
index d0fb847b13b..f1d7d3b1197 100644
--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/dimens.xml
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/dimens.xml
@@ -730,7 +730,7 @@
     <dimen name="speed_bump_height">16dp</dimen>
 
     <!-- Lockscreen unlocking falsing threshold. -->
-    <dimen name="unlock_falsing_threshold">80dp</dimen>
+    <dimen name="unlock_falsing_threshold">20dp</dimen>
 
     <!-- Lockscreen falsing threshold for quick settings. -->
     <dimen name="qs_falsing_threshold">60dp</dimen>
diff --git a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
index d0fe1c37d4f..05bdedca9ab 100644
--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
@@ -47,7 +47,7 @@ class DistanceClassifier extends FalsingClassifier {
     private static final float HORIZONTAL_SWIPE_THRESHOLD_DISTANCE_IN = 3;
     private static final float VERTICAL_SWIPE_THRESHOLD_DISTANCE_IN = 3;
     private static final float VELOCITY_TO_DISTANCE = 30f;
-    private static final float SCREEN_FRACTION_MAX_DISTANCE = 0.8f;
+    private static final float SCREEN_FRACTION_MAX_DISTANCE = 0.2f;
 
     private final float mVerticalFlingThresholdPx;
     private final float mHorizontalFlingThresholdPx;


第二种 关闭DistanceClassifier和ZigZagClassifier(效果明显)
怀疑是部分项目机器的屏幕报点存在问题导致。

diff --git a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
index d0fe1c37d4f..6ff72ba47f1 100644
--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java
@@ -159,7 +159,7 @@ class DistanceClassifier extends FalsingClassifier {
                 || interactionType == Classifier.QS_SWIPE) {
             return Result.passed(0);
         }
-
+        if (true) return Result.passed(0.5);
         return !getPassedFlingThreshold() ? falsed(0.5, getReason()) : Result.passed(0.5);
     }
 
diff --git a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java
index e1349f2aba6..048212fa818 100644
--- a/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java
+++ b/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/classifier/ZigZagClassifier.java
@@ -163,6 +163,7 @@ class ZigZagClassifier extends FalsingClassifier {
 
         logDebug("Straightness Deviance: (" + devianceX + "," + devianceY + ") vs "
                 + "(" + maxXDeviance + "," + maxYDeviance + ")");
+        if (true) return Result.passed(0.5);
         return devianceX > maxXDeviance || devianceY > maxYDeviance
             ? falsed(0.5, getReason()) : Result.passed(0.5);
     }

上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AAAAAA9087/article/details/127888421

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值