Android7.0 禁止锁屏状态的下拉状态栏
16lz
2021-01-25
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; } }
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android(安卓)Telechips89xx背光控制流程
- Parcelable接口的使用(跨进程,Intent传输)
- Android(安卓)View 绘制流程之四:绘制流程触发机制
- Android(安卓)aidl学习笔记-服务端