Android锁屏界面默认是上滑解锁进入Launcher页面的,原生的上滑解锁不太好用解锁有点困难,所以产品需求要求查找源码解决这个问题,所以这就需要从滑动解锁流程分析来解决问题。滑动锁屏是一个id为notification_panel的自定义ViewGroup,对应类NotificationPanelView,继承PanelView,我们需要找到滑动锁屏的TouchEvent事件分发,当用户在滑动锁屏上滑的速度和距离满足一定条件之后,滑动锁屏就会解锁,这时候如果有密码锁屏就会显示,没有就直接解锁,我们来看onTouchEvent方法,主要看Move事件就行了
/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PanelViewController.java
onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
...
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
...
break;
case MotionEvent.ACTION_MOVE:
//滑动Y轴的距离
float h = y - mInitialTouchY;
if (Math.abs(h) > mTouchSlop
&& (Math.abs(h) > Math.abs(x - mInitialTouchX)
|| mIgnoreXTouchSlop)) {
mTouchSlopExceeded = true;
...
//设置mTracking为true,代表滑动锁屏开始...
onTrackingStarted();
}
...
//阙值判断,getFalsingThreshold获取
//R.dimen.unlock_falsing_threshold(80dp)的值,然后
//乘上一个系数,1或者1.5
if (-h >= getFalsingTh