Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 480ff99a authored by Justin Weir's avatar Justin Weir
Browse files

Add a Shade log buffer and lots of logging to QS expand touches

Also removes mOnlyAffordanceInThisMotion because it was unused.

Bug: 227115380
Test: atest SystemUITests SystemUIGoogleTests
Change-Id: Ica962ea14c953f0e7bc36d3a8b4e0ae45e86e4ce
parent 7811c2b7
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -84,6 +84,14 @@ public class LogModule {
        return factory.create("LSShadeTransitionLog", 50);
    }

    /** Provides a logging buffer for Shade messages. */
    @Provides
    @SysUISingleton
    @ShadeLog
    public static LogBuffer provideShadeLogBuffer(LogBufferFactory factory) {
        return factory.create("ShadeLog", 500, false);
    }

    /** Provides a logging buffer for all logs related to managing notification sections. */
    @Provides
    @SysUISingleton
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.log.dagger;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

import com.android.systemui.log.LogBuffer;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;

import javax.inject.Qualifier;

/** A {@link LogBuffer} for Shade touch handling messages. */
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface ShadeLog {
}
+24 −10
Original line number Diff line number Diff line
@@ -448,7 +448,6 @@ public final class NotificationPanelViewController extends PanelViewController {
     */
    private boolean mQsAnimatorExpand;
    private boolean mIsLaunchTransitionFinished;
    private boolean mOnlyAffordanceInThisMotion;
    private ValueAnimator mQsSizeChangeAnimator;

    private boolean mQsScrimEnabled = true;
@@ -726,6 +725,7 @@ public final class NotificationPanelViewController extends PanelViewController {
            AccessibilityManager accessibilityManager, @DisplayId int displayId,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            MetricsLogger metricsLogger,
            ShadeLogger shadeLogger,
            ConfigurationController configurationController,
            Provider<FlingAnimationUtils.Builder> flingAnimationUtilsBuilder,
            StatusBarTouchableRegionManager statusBarTouchableRegionManager,
@@ -792,6 +792,7 @@ public final class NotificationPanelViewController extends PanelViewController {
                panelExpansionStateManager,
                ambientState,
                interactionJankMonitor,
                shadeLogger,
                systemClock);
        mView = view;
        mVibratorHelper = vibratorHelper;
@@ -1887,6 +1888,8 @@ public final class NotificationPanelViewController extends PanelViewController {
                }
                if (mQsExpansionAnimator != null) {
                    mInitialHeightOnTouch = mQsExpansionHeight;
                    mShadeLog.logMotionEvent(event,
                            "onQsIntercept: down action, QS tracking enabled");
                    mQsTracking = true;
                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
                    mNotificationStackScrollLayoutController.cancelLongPress();
@@ -1914,12 +1917,16 @@ public final class NotificationPanelViewController extends PanelViewController {
                    setQsExpansion(h + mInitialHeightOnTouch);
                    trackMovement(event);
                    return true;
                } else {
                    mShadeLog.logMotionEvent(event,
                            "onQsIntercept: move ignored because qs tracking disabled");
                }
                if ((h > getTouchSlop(event) || (h < -getTouchSlop(event) && mQsExpanded))
                        && Math.abs(h) > Math.abs(x - mInitialTouchX)
                        && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) {
                    if (DEBUG_LOGCAT) Log.d(TAG, "onQsIntercept - start tracking expansion");
                    mView.getParent().requestDisallowInterceptTouchEvent(true);
                    mShadeLog.onQsInterceptMoveQsTrackingEnabled(h);
                    mQsTracking = true;
                    traceQsJank(true /* startTracing */, false /* wasCancelled */);
                    onQsExpansionStarted();
@@ -1935,6 +1942,7 @@ public final class NotificationPanelViewController extends PanelViewController {
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
                trackMovement(event);
                mShadeLog.logMotionEvent(event, "onQsIntercept: up action, QS tracking disabled");
                mQsTracking = false;
                break;
        }
@@ -1972,7 +1980,6 @@ public final class NotificationPanelViewController extends PanelViewController {

    private void initDownStates(MotionEvent event) {
        if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
            mOnlyAffordanceInThisMotion = false;
            mQsTouchAboveFalsingThreshold = mQsFullyExpanded;
            mDozingOnDown = isDozing();
            mDownX = event.getX();
@@ -2111,6 +2118,7 @@ public final class NotificationPanelViewController extends PanelViewController {
                && collapsedQs && isQsExpansionEnabled();
        if (action == MotionEvent.ACTION_DOWN && expandedShadeCollapsedQs) {
            // Down in the empty area while fully expanded - go to QS.
            mShadeLog.logMotionEvent(event, "handleQsTouch: down action, QS tracking enabled");
            mQsTracking = true;
            traceQsJank(true /* startTracing */, false /* wasCancelled */);
            mConflictingQsExpansionGesture = true;
@@ -2125,6 +2133,8 @@ public final class NotificationPanelViewController extends PanelViewController {
        if (!mQsExpandImmediate && mQsTracking) {
            onQsTouch(event);
            if (!mConflictingQsExpansionGesture && !mSplitShadeEnabled) {
                mShadeLog.logMotionEvent(event,
                        "handleQsTouch: not immediate expand or conflicting gesture");
                return true;
            }
        }
@@ -2192,6 +2202,7 @@ public final class NotificationPanelViewController extends PanelViewController {
                event.getX(), event.getY(), -1)) {
            if (DEBUG_LOGCAT) Log.d(TAG, "handleQsDown");
            mFalsingCollector.onQsDown();
            mShadeLog.logMotionEvent(event, "handleQsDown: down action, QS tracking enabled");
            mQsTracking = true;
            onQsExpansionStarted();
            mInitialHeightOnTouch = mQsExpansionHeight;
@@ -2274,6 +2285,7 @@ public final class NotificationPanelViewController extends PanelViewController {

        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                mShadeLog.logMotionEvent(event, "onQsTouch: down action, QS tracking enabled");
                mQsTracking = true;
                traceQsJank(true /* startTracing */, false /* wasCancelled */);
                mInitialTouchY = y;
@@ -2300,6 +2312,7 @@ public final class NotificationPanelViewController extends PanelViewController {

            case MotionEvent.ACTION_MOVE:
                if (DEBUG_LOGCAT) Log.d(TAG, "onQSTouch move");
                mShadeLog.logMotionEvent(event, "onQsTouch: move action, setting QS expansion");
                setQsExpansion(h + mInitialHeightOnTouch);
                if (h >= getFalsingThreshold()) {
                    mQsTouchAboveFalsingThreshold = true;
@@ -2309,6 +2322,8 @@ public final class NotificationPanelViewController extends PanelViewController {

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                mShadeLog.logMotionEvent(event,
                        "onQsTouch: up/cancel action, QS tracking disabled");
                mQsTracking = false;
                mTrackingPointer = -1;
                trackMovement(event);
@@ -3131,8 +3146,8 @@ public final class NotificationPanelViewController extends PanelViewController {
                positionClockAndNotifications();
            }
        }
        if (mQsExpandImmediate || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null
                && !mQsExpansionFromOverscroll) {
        if (mQsExpandImmediate || (mQsExpanded && !mQsTracking && mQsExpansionAnimator == null
                && !mQsExpansionFromOverscroll)) {
            float t;
            if (mKeyguardShowing) {

@@ -4224,6 +4239,7 @@ public final class NotificationPanelViewController extends PanelViewController {
                        || mPulseExpansionHandler.isExpanding();
                if (pulseShouldGetTouch && mPulseExpansionHandler.onTouchEvent(event)) {
                    // We're expanding all the other ones shouldn't get this anymore
                    mShadeLog.logMotionEvent(event, "onTouch: PulseExpansionHandler handled event");
                    return true;
                }
                if (mListenForHeadsUp && !mHeadsUpTouchHelper.isTrackingHeadsUp()
@@ -4231,14 +4247,10 @@ public final class NotificationPanelViewController extends PanelViewController {
                        && mHeadsUpTouchHelper.onInterceptTouchEvent(event)) {
                    mMetricsLogger.count(COUNTER_PANEL_OPEN_PEEK, 1);
                }
                boolean handled = false;
                if (mOnlyAffordanceInThisMotion) {
                    return true;
                }
                handled |= mHeadsUpTouchHelper.onTouchEvent(event);
                boolean handled = mHeadsUpTouchHelper.onTouchEvent(event);

                if (!mHeadsUpTouchHelper.isTrackingHeadsUp() && handleQsTouch(event)) {
                    if (DEBUG_LOGCAT) Log.d(TAG, "handleQsTouch true");
                    mShadeLog.logMotionEvent(event, "onTouch: handleQsTouch handled event");
                    return true;
                }
                if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyCollapsed()) {
@@ -4810,6 +4822,8 @@ public final class NotificationPanelViewController extends PanelViewController {
                }
            } else if (!mQsExpanded && mQsExpansionAnimator == null) {
                setQsExpansion(mQsMinExpansionHeight + mLastOverscroll);
            } else {
                mShadeLog.v("onLayoutChange: qs expansion not set");
            }
            updateExpandedHeight(getExpandedHeight());
            updateHeader();
+15 −3
Original line number Diff line number Diff line
@@ -202,6 +202,8 @@ public abstract class PanelViewController {
    private final InteractionJankMonitor mInteractionJankMonitor;
    protected final SystemClock mSystemClock;

    protected final ShadeLogger mShadeLog;

    protected abstract void onExpandingFinished();

    protected void onExpandingStarted() {
@@ -242,6 +244,7 @@ public abstract class PanelViewController {
            PanelExpansionStateManager panelExpansionStateManager,
            AmbientState ambientState,
            InteractionJankMonitor interactionJankMonitor,
            ShadeLogger shadeLogger,
            SystemClock systemClock) {
        keyguardStateController.addCallback(new KeyguardStateController.Callback() {
            @Override
@@ -254,6 +257,7 @@ public abstract class PanelViewController {
        mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
        mLockscreenGestureLogger = lockscreenGestureLogger;
        mPanelExpansionStateManager = panelExpansionStateManager;
        mShadeLog = shadeLogger;
        TouchHandler touchHandler = createTouchHandler();
        mView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
            @Override
@@ -1275,9 +1279,16 @@ public abstract class PanelViewController {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (mInstantExpanding || (mTouchDisabled
                    && event.getActionMasked() != MotionEvent.ACTION_CANCEL) || (mMotionAborted
                    && event.getActionMasked() != MotionEvent.ACTION_DOWN)) {
            if (mInstantExpanding) {
                mShadeLog.logMotionEvent(event, "onTouch: touch ignored due to instant expanding");
                return false;
            }
            if (mTouchDisabled  && event.getActionMasked() != MotionEvent.ACTION_CANCEL) {
                mShadeLog.logMotionEvent(event, "onTouch: non-cancel action, touch disabled");
                return false;
            }
            if (mMotionAborted && event.getActionMasked() != MotionEvent.ACTION_DOWN) {
                mShadeLog.logMotionEvent(event, "onTouch: non-down action, motion was aborted");
                return false;
            }

@@ -1287,6 +1298,7 @@ public abstract class PanelViewController {
                    // Turn off tracking if it's on or the shade can get stuck in the down position.
                    onTrackingStopped(true /* expand */);
                }
                mShadeLog.logMotionEvent(event, "onTouch: drag not enabled");
                return false;
            }

+48 −0
Original line number Diff line number Diff line
package com.android.systemui.shade

import android.view.MotionEvent
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogLevel
import com.android.systemui.log.LogMessage
import com.android.systemui.log.dagger.ShadeLog
import com.google.errorprone.annotations.CompileTimeConstant
import javax.inject.Inject

private const val TAG = "systemui.shade"

/** Lightweight logging utility for the Shade. */
class ShadeLogger @Inject constructor(
    @ShadeLog
    private val buffer: LogBuffer
) {
    fun v(@CompileTimeConstant msg: String) {
        buffer.log(TAG, LogLevel.VERBOSE, msg)
    }

    private inline fun log(
        logLevel: LogLevel,
        initializer: LogMessage.() -> Unit,
        noinline printer: LogMessage.() -> String
    ) {
        buffer.log(TAG, logLevel, initializer, printer)
    }

    fun onQsInterceptMoveQsTrackingEnabled(h: Float) {
        log(LogLevel.VERBOSE,
            { double1 = h.toDouble() },
            { "onQsIn[tercept: move action, QS tracking enabled. h = $double1" })
    }

    fun logMotionEvent(event: MotionEvent, message: String) {
        log(LogLevel.VERBOSE, {
            str1 = message
            long1 = event.eventTime
            long2 = event.downTime
            int1 = event.action
            int2 = event.classification
            double1 = event.y.toDouble()
        }, {
            "$str1\neventTime=$long1,downTime=$long2,y=$double1,action=$int1,classification=$int2"
        })
    }
}
Loading