6.0滑动锁屏的代码与5.1略有区别,禁止状态栏下拉的方法如下:
1、修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java文件
(1)添加:
import com.android.systemui.statusbar.phone.PhoneStatusBar;
定义如下变量:
private PhoneStatusBar mPhoneStatusBar;
增加如下方法:
public void setPhoneStatusBar(PhoneStatusBar mPhoneStatusBar){
this.mPhoneStatusBar = mPhoneStatusBar;
}
(2)定位至onTouchEvent()方法,添加如下代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
+ if (mPhoneStatusBar.getBarState() == StatusBarState.KEYGUARD){
+ return true;
+ }
if (!mDraggingDown) {
2、修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java文件
在setService()中增加如下代码行:
public void setService(PhoneStatusBar service) {
mService = service;
mDragDownHelper = new DragDownHelper(getContext(), this, mStackScrollLayout, mService);
+ mDragDownHelper.setPhoneStatusBar(mService);
}
3、修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java文件
在handleQsTouch()方法中作如下修改:
- if (!isFullyCollapsed()) {
+ if (!isFullyCollapsed() && mStatusBar.getBarState() != StatusBarState.KEYGUARD) {
handleQsDown(event);
}
- if (!mQsExpandImmediate && mQsTracking) {
+ if (!mQsExpandImmediate && mQsTracking
+ && mStatusBar.getBarState() != StatusBarState.KEYGUARD) {
onQsTouch(event);
if (!mConflictingQsExpansionGesture) {
return true;
在onTrackingStarted()方法中作如下修改:
- if (mStatusBar.getBarState() == StatusBarState.KEYGUARD
+ if ((mIsDownToUp && mStatusBar.getBarState() == StatusBarState.KEYGUARD)
|| mStatusBar.getBarState() == StatusBarState.SHADE_LOCKED) {
mAfforanceHelper.animateHideLeftRightIcon();
}
// SPRD: Feature 478270 Add EmergencyButton on the Lockscreen
- mEmergencyButton.setVisibility(View.INVISIBLE);
+ if (mIsDownToUp) {
+ mEmergencyButton.setVisibility(View.INVISIBLE);
+ } else {
+ mIsDownToUp = true;
+ }
mNotificationStackScroller.onPanelTrackingStarted();
}
4、修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java文件
定义如下变量:
private float mInitY1 = 0;
private float mInitY2 = 0;
protected boolean mIsDownToUp = true;
在onTouchEvent()中增加如下代码行:
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
+ mInitY1 = event.getY();
startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
mJustPeeked = false;
mPanelClosedOnDown = isFullyCollapsed();
case MotionEvent.ACTION_MOVE:
+ mInitY2 = event.getY();
float h = y - mInitialTouchY;
// If the panel was collapsed when touching, we only need to check for the
// y-component of the gesture, as we have no conflicting horizontal gesture.
if (Math.abs(h) > mTouchSlop
&& (Math.abs(h) > Math.abs(x - mInitialTouchX)
|| mIgnoreXTouchSlop)) {
mTouchSlopExceeded = true;
if (mGestureWaitForTouchSlop && !mTracking && !mCollapsedAndHeadsUpOnDown) {
if (!mJustPeeked && mInitialOffsetOnTouch != 0f) {
startExpandMotion(x, y, false /* startTracking */, mExpandedHeight);
h = 0;
}
cancelHeightAnimator();
removeCallbacks(mPeekRunnable);
mPeekPending = false;
+ if (mInitY2 > mInitY1) {
+ mIsDownToUp = false;
+ }
onTrackingStarted();
}
}
经过以上修改,就可以实现在滑动锁屏界面禁止下拉状态栏。