Android7.0 禁止锁屏状态的下拉状态栏

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;
        }
    }

猜你喜欢

转载自blog.csdn.net/lancelots/article/details/82839909
今日推荐