Android 7.0的禁止锁屏状态下的状态栏下拉,需要修改两个文件
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java需要如下代码,
在handleQsTouch方法中修改如下:
private boolean handleQsTouch(MotionEvent event) {
final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN && getExpandedFraction() == 1f
&& mStatusBar.getBarState() != StatusBarState.KEYGUARD && !mQsExpanded
&& mQsExpansionEnabled) {
// Down in the empty area while fully expanded - go to QS.
mQsTracking = true;
mConflictingQsExpansionGesture = true;
onQsExpansionStarted();
mInitialHeightOnTouch = mQsExpansionHeight;
mInitialTouchY = event.getX();
mInitialTouchX = event.getY();
}
if (!isFullyCollapsed()) {
handleQsDown(event);
}
if (!mKeyguardShowing && !mQsExpandImmediate && mQsTracking) { //在这里加上!mKeyguardShowing,如果是正显示锁屏,就不处理状态栏的下拉
onQsTouch(event);
if (!mConflictingQsExpansionGesture) {
return true;
}
}
......
在setQsExpanded方法中修改如下:
private void setQsExpanded(boolean expanded) {
if(mKeyguardShowing) return; //如果现在正显示锁屏,禁止QS下拉
boolean changed = mQsExpanded != expanded;
if (changed) {
mQsExpanded = expanded;
// [HQ01596799]-yuminfeng 20151109 modify begin
if(mQsExpanded){
Intent bgtDlgOnIntent = new Intent(Intent.ACTION_SHOW_BRIGHTNESS_DIALOG);
mContext.sendBroadcast(bgtDlgOnIntent);
}
else{
Intent bgtDlgOffIntent = new Intent("android.intent.action.CLOSE_BRIGHTNESS_DIALOG");
mContext.sendBroadcast(bgtDlgOffIntent);
}
// [HQ01596799]-qiukangwen 20151109 modify end
updateQsState();
requestPanelHeightUpdate();
mNotificationStackScroller.setInterceptDelegateEnabled(expanded);
mStatusBar.setQsExpanded(expanded);
mQsPanel.setExpanded(expanded);
mNotificationContainerParent.setQsExpanded(expanded);
}
}
在shouldQuickSettingsIntercept方法中修改如下:
/**
* @return Whether we should intercept a gesture to open Quick Settings.
*/
private boolean shouldQuickSettingsIntercept(float x, float y, float yDiff) {
if (!mQsExpansionEnabled || mCollapsedOnDown) {
return false;
}
View header = /*mKeyguardShowing ? mKeyguardStatusBar :*/ mHeader; //不判断是否正显示锁屏,将默认header设置为mHeader
boolean onHeader = x >= header.getX() && x <= header.getX() + header.getWidth()
&& y >= header.getTop() && y <= header.getBottom();
if (mQsExpanded) {
return onHeader || (mScrollView.isScrolledToBottom() && yDiff < 0) && isInQsArea(x, y);
} else {
return onHeader;
}
}
这个文件到此就修改完成了,还需要再修改一个文件PhoneStatusBar.java,和NotificationPanelView.java处于同一目录
文件路径为frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java,代码修改如下:
@Override
public boolean onDraggedDown(View startingChild, int dragLengthY) {
if (hasActiveNotifications() && false) { //屏蔽通知栏的下拉
EventLogTags.writeSysuiLockscreenGesture(
EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_DOWN_FULL_SHADE,
(int) (dragLengthY / mDisplayMetrics.density),
0 /* velocityDp - N/A */);
// We have notifications, go to locked shade.
goToLockedShade(startingChild);
return true;
} else {
// No notifications - abort gesture.
return false;
}
}