Merge "Add a Shade log buffer and lots of logging to QS expand touches" into tm-qpr-dev
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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 {
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
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"
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -238,6 +238,8 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private DozeLog mDozeLog;
|
||||
@Mock
|
||||
private ShadeLogger mShadeLog;
|
||||
@Mock
|
||||
private CommandQueue mCommandQueue;
|
||||
@Mock
|
||||
private VibratorHelper mVibratorHelper;
|
||||
@@ -524,7 +526,9 @@ public class NotificationPanelViewControllerTest extends SysuiTestCase {
|
||||
mNotificationShadeWindowController,
|
||||
mDozeLog, mDozeParameters, mCommandQueue, mVibratorHelper,
|
||||
mLatencyTracker, mPowerManager, mAccessibilityManager, 0, mUpdateMonitor,
|
||||
mMetricsLogger, mConfigurationController,
|
||||
mMetricsLogger,
|
||||
mShadeLog,
|
||||
mConfigurationController,
|
||||
() -> flingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||
mConversationNotificationManager, mMediaHiearchyManager,
|
||||
mStatusBarKeyguardViewManager,
|
||||
|
||||
Reference in New Issue
Block a user