Loading core/java/com/android/internal/jank/InteractionJankMonitor.java +7 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_FROM_STATUS_BAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD; Loading Loading @@ -267,8 +268,9 @@ public class InteractionJankMonitor { * eg: Exit the app using back gesture. */ public static final int CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK = 78; public static final int CUJ_SHADE_EXPAND_FROM_STATUS_BAR = 79; private static final int LAST_CUJ = CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK; private static final int LAST_CUJ = CUJ_SHADE_EXPAND_FROM_STATUS_BAR; private static final int NO_STATSD_LOGGING = -1; // Used to convert CujType to InteractionType enum value for statsd logging. Loading Loading @@ -357,6 +359,7 @@ public class InteractionJankMonitor { CUJ_TO_STATSD_INTERACTION_TYPE[76] = NO_STATSD_LOGGING; CUJ_TO_STATSD_INTERACTION_TYPE[77] = NO_STATSD_LOGGING; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_EXPAND_FROM_STATUS_BAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_FROM_STATUS_BAR; } private static class InstanceHolder { Loading Loading @@ -457,6 +460,7 @@ public class InteractionJankMonitor { CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION, CUJ_LAUNCHER_OPEN_SEARCH_RESULT, CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK, CUJ_SHADE_EXPAND_FROM_STATUS_BAR, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -1070,6 +1074,8 @@ public class InteractionJankMonitor { return "LAUNCHER_OPEN_SEARCH_RESULT"; case CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK: return "LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK"; case CUJ_SHADE_EXPAND_FROM_STATUS_BAR: return "SHADE_EXPAND_FROM_STATUS_BAR"; } return "UNKNOWN"; } Loading packages/SystemUI/shared/src/com/android/systemui/shared/system/InteractionJankMonitorWrapper.java +3 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.CUJ_LAUNCHER_APP_SWIPE_TO_RECENTS; public static final int CUJ_OPEN_SEARCH_RESULT = InteractionJankMonitor.CUJ_LAUNCHER_OPEN_SEARCH_RESULT; public static final int CUJ_SHADE_EXPAND_FROM_STATUS_BAR = InteractionJankMonitor.CUJ_SHADE_EXPAND_FROM_STATUS_BAR; @IntDef({ CUJ_APP_LAUNCH_FROM_RECENTS, Loading @@ -76,6 +78,7 @@ public final class InteractionJankMonitorWrapper { CUJ_CLOSE_ALL_APPS_SWIPE, CUJ_CLOSE_ALL_APPS_TO_HOME, CUJ_OPEN_SEARCH_RESULT, CUJ_SHADE_EXPAND_FROM_STATUS_BAR, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +40 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,6 @@ import android.widget.FrameLayout; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.SystemBarUtils; Loading Loading @@ -158,6 +157,7 @@ import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.shared.system.InteractionJankMonitorWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.GestureRecorder; Loading Loading @@ -349,7 +349,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private final NotificationGutsManager mGutsManager; private final AlternateBouncerInteractor mAlternateBouncerInteractor; private final QuickSettingsController mQsController; private final InteractionJankMonitor mInteractionJankMonitor; private final TouchHandler mTouchHandler = new TouchHandler(); private long mDownTime; Loading @@ -362,6 +361,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump /** The current squish amount for the predictive back animation */ private float mCurrentBackProgress = 0.0f; private boolean mTracking; private boolean mIsTrackingExpansionFromStatusBar; private boolean mHintAnimationRunning; private KeyguardBottomAreaView mKeyguardBottomArea; private boolean mExpanding; Loading Loading @@ -727,7 +727,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump NotificationStackSizeCalculator notificationStackSizeCalculator, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, ShadeTransitionController shadeTransitionController, InteractionJankMonitor interactionJankMonitor, SystemClock systemClock, KeyguardBottomAreaViewModel keyguardBottomAreaViewModel, KeyguardBottomAreaInteractor keyguardBottomAreaInteractor, Loading @@ -746,7 +745,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump ActivityStarter activityStarter, KeyguardViewConfigurator keyguardViewConfigurator, KeyguardFaceAuthInteractor keyguardFaceAuthInteractor) { mInteractionJankMonitor = interactionJankMonitor; keyguardStateController.addCallback(new KeyguardStateController.Callback() { @Override public void onKeyguardFadingAwayChanged() { Loading Loading @@ -2666,6 +2664,8 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private void onTrackingStopped(boolean expand) { mFalsingCollector.onTrackingStopped(); mTracking = false; maybeStopTrackingExpansionFromStatusBar(expand); updateExpansionAndVisibility(); if (expand) { mNotificationStackScrollLayoutController.setOverScrollAmount(0.0f, true /* onTop */, Loading Loading @@ -4036,6 +4036,42 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump return mTouchHandler.onTouchEvent(event); } @Override public void startTrackingExpansionFromStatusBar() { mIsTrackingExpansionFromStatusBar = true; InteractionJankMonitorWrapper.begin( mView, InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } /** * Stops tracking an expansion that originated from the status bar (if we had started tracking * it). * * @param expand the expand boolean passed to {@link #onTrackingStopped(boolean)}. */ private void maybeStopTrackingExpansionFromStatusBar(boolean expand) { if (!mIsTrackingExpansionFromStatusBar) { return; } mIsTrackingExpansionFromStatusBar = false; // Determine whether the shade actually expanded due to the status bar touch: // - If the user just taps on the status bar, then #isExpanded is false but // #onTrackingStopped is called with `true`. // - If the user drags down on the status bar but doesn't drag down far enough, then // #onTrackingStopped is called with `false` but #isExpanded is true. // So, we need *both* #onTrackingStopped called with `true` *and* #isExpanded to be true in // order to confirm that the shade successfully opened. boolean shadeExpansionFromStatusBarSucceeded = expand && isExpanded(); if (shadeExpansionFromStatusBarSucceeded) { InteractionJankMonitorWrapper.end( InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } else { InteractionJankMonitorWrapper.cancel( InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } } @Override public void updateTouchableRegion() { //A layout will ensure that onComputeInternalInsets will be called and after that we can Loading packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt +3 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,9 @@ interface ShadeViewController { /** Sends an external (e.g. Status Bar) touch event to the Shade touch handler. */ fun handleExternalTouch(event: MotionEvent): Boolean /** Starts tracking a shade expansion gesture that originated from the status bar. */ fun startTrackingExpansionFromStatusBar() // ******* End Keyguard Section ********* /** Returns the ShadeHeadsUpTracker. */ Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ class PhoneStatusBarViewController private constructor( shadeLogger.logMotionEvent(event, "top edge touch ignored") return true } centralSurfaces.shadeViewController.startTrackingExpansionFromStatusBar() } return centralSurfaces.shadeViewController.handleExternalTouch(event) } Loading Loading
core/java/com/android/internal/jank/InteractionJankMonitor.java +7 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_IN import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH_FROM_SETTINGS_BUTTON; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_CLEAR_ALL; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_DIALOG_OPEN; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_FROM_STATUS_BAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_HEADS_UP_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD; Loading Loading @@ -267,8 +268,9 @@ public class InteractionJankMonitor { * eg: Exit the app using back gesture. */ public static final int CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK = 78; public static final int CUJ_SHADE_EXPAND_FROM_STATUS_BAR = 79; private static final int LAST_CUJ = CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK; private static final int LAST_CUJ = CUJ_SHADE_EXPAND_FROM_STATUS_BAR; private static final int NO_STATSD_LOGGING = -1; // Used to convert CujType to InteractionType enum value for statsd logging. Loading Loading @@ -357,6 +359,7 @@ public class InteractionJankMonitor { CUJ_TO_STATSD_INTERACTION_TYPE[76] = NO_STATSD_LOGGING; CUJ_TO_STATSD_INTERACTION_TYPE[77] = NO_STATSD_LOGGING; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK; CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_SHADE_EXPAND_FROM_STATUS_BAR] = UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_FROM_STATUS_BAR; } private static class InstanceHolder { Loading Loading @@ -457,6 +460,7 @@ public class InteractionJankMonitor { CUJ_LOCKSCREEN_CLOCK_MOVE_ANIMATION, CUJ_LAUNCHER_OPEN_SEARCH_RESULT, CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK, CUJ_SHADE_EXPAND_FROM_STATUS_BAR, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -1070,6 +1074,8 @@ public class InteractionJankMonitor { return "LAUNCHER_OPEN_SEARCH_RESULT"; case CUJ_LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK: return "LAUNCHER_APP_CLOSE_TO_HOME_FALLBACK"; case CUJ_SHADE_EXPAND_FROM_STATUS_BAR: return "SHADE_EXPAND_FROM_STATUS_BAR"; } return "UNKNOWN"; } Loading
packages/SystemUI/shared/src/com/android/systemui/shared/system/InteractionJankMonitorWrapper.java +3 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ public final class InteractionJankMonitorWrapper { InteractionJankMonitor.CUJ_LAUNCHER_APP_SWIPE_TO_RECENTS; public static final int CUJ_OPEN_SEARCH_RESULT = InteractionJankMonitor.CUJ_LAUNCHER_OPEN_SEARCH_RESULT; public static final int CUJ_SHADE_EXPAND_FROM_STATUS_BAR = InteractionJankMonitor.CUJ_SHADE_EXPAND_FROM_STATUS_BAR; @IntDef({ CUJ_APP_LAUNCH_FROM_RECENTS, Loading @@ -76,6 +78,7 @@ public final class InteractionJankMonitorWrapper { CUJ_CLOSE_ALL_APPS_SWIPE, CUJ_CLOSE_ALL_APPS_TO_HOME, CUJ_OPEN_SEARCH_RESULT, CUJ_SHADE_EXPAND_FROM_STATUS_BAR, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading
packages/SystemUI/src/com/android/systemui/shade/NotificationPanelViewController.java +40 −4 Original line number Diff line number Diff line Loading @@ -90,7 +90,6 @@ import android.widget.FrameLayout; import com.android.app.animation.Interpolators; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.SystemBarUtils; Loading Loading @@ -158,6 +157,7 @@ import com.android.systemui.plugins.qs.QS; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.shared.system.InteractionJankMonitorWrapper; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.GestureRecorder; Loading Loading @@ -349,7 +349,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private final NotificationGutsManager mGutsManager; private final AlternateBouncerInteractor mAlternateBouncerInteractor; private final QuickSettingsController mQsController; private final InteractionJankMonitor mInteractionJankMonitor; private final TouchHandler mTouchHandler = new TouchHandler(); private long mDownTime; Loading @@ -362,6 +361,7 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump /** The current squish amount for the predictive back animation */ private float mCurrentBackProgress = 0.0f; private boolean mTracking; private boolean mIsTrackingExpansionFromStatusBar; private boolean mHintAnimationRunning; private KeyguardBottomAreaView mKeyguardBottomArea; private boolean mExpanding; Loading Loading @@ -727,7 +727,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump NotificationStackSizeCalculator notificationStackSizeCalculator, UnlockedScreenOffAnimationController unlockedScreenOffAnimationController, ShadeTransitionController shadeTransitionController, InteractionJankMonitor interactionJankMonitor, SystemClock systemClock, KeyguardBottomAreaViewModel keyguardBottomAreaViewModel, KeyguardBottomAreaInteractor keyguardBottomAreaInteractor, Loading @@ -746,7 +745,6 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump ActivityStarter activityStarter, KeyguardViewConfigurator keyguardViewConfigurator, KeyguardFaceAuthInteractor keyguardFaceAuthInteractor) { mInteractionJankMonitor = interactionJankMonitor; keyguardStateController.addCallback(new KeyguardStateController.Callback() { @Override public void onKeyguardFadingAwayChanged() { Loading Loading @@ -2666,6 +2664,8 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump private void onTrackingStopped(boolean expand) { mFalsingCollector.onTrackingStopped(); mTracking = false; maybeStopTrackingExpansionFromStatusBar(expand); updateExpansionAndVisibility(); if (expand) { mNotificationStackScrollLayoutController.setOverScrollAmount(0.0f, true /* onTop */, Loading Loading @@ -4036,6 +4036,42 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump return mTouchHandler.onTouchEvent(event); } @Override public void startTrackingExpansionFromStatusBar() { mIsTrackingExpansionFromStatusBar = true; InteractionJankMonitorWrapper.begin( mView, InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } /** * Stops tracking an expansion that originated from the status bar (if we had started tracking * it). * * @param expand the expand boolean passed to {@link #onTrackingStopped(boolean)}. */ private void maybeStopTrackingExpansionFromStatusBar(boolean expand) { if (!mIsTrackingExpansionFromStatusBar) { return; } mIsTrackingExpansionFromStatusBar = false; // Determine whether the shade actually expanded due to the status bar touch: // - If the user just taps on the status bar, then #isExpanded is false but // #onTrackingStopped is called with `true`. // - If the user drags down on the status bar but doesn't drag down far enough, then // #onTrackingStopped is called with `false` but #isExpanded is true. // So, we need *both* #onTrackingStopped called with `true` *and* #isExpanded to be true in // order to confirm that the shade successfully opened. boolean shadeExpansionFromStatusBarSucceeded = expand && isExpanded(); if (shadeExpansionFromStatusBarSucceeded) { InteractionJankMonitorWrapper.end( InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } else { InteractionJankMonitorWrapper.cancel( InteractionJankMonitorWrapper.CUJ_SHADE_EXPAND_FROM_STATUS_BAR); } } @Override public void updateTouchableRegion() { //A layout will ensure that onComputeInternalInsets will be called and after that we can Loading
packages/SystemUI/src/com/android/systemui/shade/ShadeViewController.kt +3 −0 Original line number Diff line number Diff line Loading @@ -231,6 +231,9 @@ interface ShadeViewController { /** Sends an external (e.g. Status Bar) touch event to the Shade touch handler. */ fun handleExternalTouch(event: MotionEvent): Boolean /** Starts tracking a shade expansion gesture that originated from the status bar. */ fun startTrackingExpansionFromStatusBar() // ******* End Keyguard Section ********* /** Returns the ShadeHeadsUpTracker. */ Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarViewController.kt +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ class PhoneStatusBarViewController private constructor( shadeLogger.logMotionEvent(event, "top edge touch ignored") return true } centralSurfaces.shadeViewController.startTrackingExpansionFromStatusBar() } return centralSurfaces.shadeViewController.handleExternalTouch(event) } Loading