滑屏解锁误判断规则。
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:拒绝了之字形滑动。解锁应该基本上是直的。