Android Q 滑屏解锁误操作判断规则

滑屏解锁误判断规则。

android P之前:

com.android.systemui.statusbar.phone.PanelView

    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
        if (isFalseTouch(x, y)) {
            return true;
        }

        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
            return getExpandedFraction() > 0.5f;
        } else {
            return vel > 0;
        }
    }

com.android.systemui.classifier.FalsingManager。

当手机锁定时,监听触摸、传感器和手机事件,并将它们发送到数据采集器和HumanInteractionClassifier

 

android Q:

com.android.systemui.statusbar.phone.PanelView

    /**
     * @param vel the current vertical velocity of the motion
     * @param vectorVel the length of the vectorial velocity
     * @return whether a fling should expands the panel; contracts otherwise
     */
    protected boolean flingExpands(float vel, float vectorVel, float x, float y) {
        if (mFalsingManager.isUnlockingDisabled()) {
            return true;
        }

        if (isFalseTouch(x, y)) {
            return true;
        }

        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
            return getExpandedFraction() > 0.5f;
        } else {
            return vel > 0;
        }
    }

在Q上isFalseTouch的主要判断方法有了两种不同的选择,分别为FalsingManagerImpl与BrightLineFalsingManager

FalsingManagerImpl延续了P上旧的规则,BrightLineFalsingManager则是新的框架。

选择规则的方式:

com.android.systemui.classifier.FalsingManagerProxy

    /**
     * Chooses the FalsingManager implementation.
     */
    @VisibleForTesting
    public void setupFalsingManager(Context context) {
        boolean brightlineEnabled = DeviceConfig.getBoolean(
                DeviceConfig.NAMESPACE_SYSTEMUI, BRIGHTLINE_FALSING_MANAGER_ENABLED, true);
        if (mInternalFalsingManager != null) {
            mInternalFalsingManager.cleanup();
        }
        if (!brightlineEnabled) {
            android.util.Log.v("lishuo","mInternalFalsingManager FalsingManagerImpl");
            mInternalFalsingManager = new FalsingManagerImpl(context);
        } else {
            android.util.Log.v("lishuo","mInternalFalsingManager BrightLineFalsingManager");
            mInternalFalsingManager = new BrightLineFalsingManager(
                    new FalsingDataProvider(context.getResources().getDisplayMetrics()),
                    Dependency.get(AsyncSensorManager.class)
            );
        }

    }

默认为新功能(BrightLineFalsingManager),其他为老的(同Android P的FalsingManager)。

BrightLineFalsingManager

新的功能google描述为:旨在说明触摸被拒绝的原因。

google提交说明:为新的falsing管理器和分类器添加基类。这不会添加功能更改。它只是为新的FalsingManager添加了框架。

之后google添加可多个判断规则:

(1)PointerCountClassifier: 如果检测到多个指针,则在锁定屏幕上为False。

(2)TypeClassifier:这与现有的伪分类器相匹配,以确保刷卡的总体方向与预期的动作相匹配(例如,删除通知应该是并排的)。

(3)DiagonalClassifier:将拒绝过于接近45度的划动。

(4)DistanceClassifier:确保刷卡+动量大于最小距离。

(5)ProximityClassifier:如果接近传感器被覆盖超过一定百分比,则错误触摸。(这个分级器本质上是一个快速设置的禁止操作,因为我们假设从顶部滑动时传感器可能被覆盖)。

(5)ZigZagClassifier:拒绝了之字形滑动。解锁应该基本上是直的。

 

 

 

 

 

你可能感兴趣的:(android,源码)