Loading packages/SystemUI/src/com/android/systemui/flags/Flags.java +6 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,12 @@ public class Flags { public static final ResourceBooleanFlag NOTIFICATION_SHADE_DRAG = new ResourceBooleanFlag(104, R.bool.config_enableNotificationShadeDrag); public static final BooleanFlag NSSL_DEBUG_LINES = new BooleanFlag(105, false); public static final BooleanFlag NSSL_DEBUG_REMOVE_ANIMATION = new BooleanFlag(106, false); /***************************************/ // 200 - keyguard/lockscreen public static final BooleanFlag KEYGUARD_LAYOUT = Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +25 −25 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import android.graphics.Path; import android.graphics.PointF; import android.graphics.Rect; import android.os.Bundle; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.util.AttributeSet; Loading Loading @@ -80,6 +79,8 @@ import com.android.systemui.Dumpable; import com.android.systemui.ExpandHelper; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.EmptyShadeView; Loading Loading @@ -132,14 +133,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable public static final float BACKGROUND_ALPHA_DIMMED = 0.7f; private static final String TAG = "StackScroller"; // Usage: // adb shell setprop persist.debug.nssl true && adb reboot private static final boolean DEBUG = SystemProperties.getBoolean("persist.debug.nssl", false /* default */); // TODO(b/187291379) disable again before release private static final boolean DEBUG_REMOVE_ANIMATION = SystemProperties.getBoolean( "persist.debug.nssl.dismiss", false /* default */); // Delay in milli-seconds before shade closes for clear all. private final int DELAY_BEFORE_SHADE_CLOSE = 200; private boolean mShadeNeedsToClose = false; Loading Loading @@ -192,7 +185,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private float mInitialTouchX; private float mInitialTouchY; private final boolean mDebugLines; private Paint mDebugPaint; /** Used to track the Y positions that were already used to draw debug text labels. */ private Set<Integer> mDebugTextUsedYPositions; private final boolean mDebugRemoveAnimation; private int mContentHeight; private int mIntrinsicContentHeight; private int mCollapsedSize; Loading Loading @@ -569,6 +567,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable public NotificationStackScrollLayout(Context context, AttributeSet attrs) { super(context, attrs, 0, 0); Resources res = getResources(); FeatureFlags featureFlags = Dependency.get(FeatureFlags.class); mDebugLines = featureFlags.isEnabled(Flags.NSSL_DEBUG_LINES); mDebugRemoveAnimation = featureFlags.isEnabled(Flags.NSSL_DEBUG_REMOVE_ANIMATION); mSectionsManager = Dependency.get(NotificationSectionsManager.class); mScreenOffAnimationController = Dependency.get(ScreenOffAnimationController.class); Loading @@ -591,10 +592,10 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable res.getBoolean(R.bool.config_drawNotificationBackground); setOutlineProvider(mOutlineProvider); boolean willDraw = mShouldDrawNotificationBackground || DEBUG; boolean willDraw = mShouldDrawNotificationBackground || mDebugLines; setWillNotDraw(!willDraw); mBackgroundPaint.setAntiAlias(true); if (DEBUG) { if (mDebugLines) { mDebugPaint = new Paint(); mDebugPaint.setColor(0xffff0000); mDebugPaint.setStrokeWidth(2); Loading Loading @@ -729,18 +730,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable drawHeadsUpBackground(canvas); } if (DEBUG) { if (mDebugLines) { onDrawDebug(canvas); } } /** Used to track the Y positions that were already used to draw debug text labels. */ private static final Set<Integer> DEBUG_TEXT_USED_Y_POSITIONS = DEBUG ? new HashSet<>() : Collections.emptySet(); private void onDrawDebug(Canvas canvas) { DEBUG_TEXT_USED_Y_POSITIONS.clear(); if (mDebugTextUsedYPositions == null) { mDebugTextUsedYPositions = new HashSet<>(); } else { mDebugTextUsedYPositions.clear(); } int y = mTopPadding; drawDebugInfo(canvas, y, Color.RED, /* label= */ "mTopPadding"); Loading Loading @@ -776,10 +776,10 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private int computeDebugYTextPosition(int lineY) { int textY = lineY; while (DEBUG_TEXT_USED_Y_POSITIONS.contains(textY)) { while (mDebugTextUsedYPositions.contains(textY)) { textY = (int) (textY + mDebugPaint.getTextSize()); } DEBUG_TEXT_USED_Y_POSITIONS.add(textY); mDebugTextUsedYPositions.add(textY); return textY; } Loading Loading @@ -2702,14 +2702,14 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER) boolean generateRemoveAnimation(ExpandableView child) { String key = ""; if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { if (child instanceof ExpandableNotificationRow) { key = ((ExpandableNotificationRow) child).getEntry().getKey(); } Log.d(TAG, "generateRemoveAnimation " + key); } if (removeRemovedChildFromHeadsUpChangeAnimations(child)) { if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "removedBecauseOfHeadsUp " + key); } mAddedHeadsUpChildren.remove(child); Loading @@ -2720,7 +2720,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mClearTransientViewsWhenFinished.add(child); return true; } if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "generateRemove " + key + "\nmIsExpanded " + mIsExpanded + "\nmAnimationsEnabled " + mAnimationsEnabled Loading @@ -2728,7 +2728,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } if (mIsExpanded && mAnimationsEnabled && !isChildInInvisibleGroup(child)) { if (!mChildrenToAddAnimated.contains(child)) { if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "needsAnimation = true " + key); } // Generate Animations Loading Loading @@ -3227,7 +3227,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable ignoreChildren); mAnimationEvents.add(event); mSwipedOutViews.remove(child); if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { String key = ""; if (child instanceof ExpandableNotificationRow) { key = ((ExpandableNotificationRow) child).getEntry().getKey(); Loading Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.java +6 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,12 @@ public class Flags { public static final ResourceBooleanFlag NOTIFICATION_SHADE_DRAG = new ResourceBooleanFlag(104, R.bool.config_enableNotificationShadeDrag); public static final BooleanFlag NSSL_DEBUG_LINES = new BooleanFlag(105, false); public static final BooleanFlag NSSL_DEBUG_REMOVE_ANIMATION = new BooleanFlag(106, false); /***************************************/ // 200 - keyguard/lockscreen public static final BooleanFlag KEYGUARD_LAYOUT = Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +25 −25 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import android.graphics.Path; import android.graphics.PointF; import android.graphics.Rect; import android.os.Bundle; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.util.AttributeSet; Loading Loading @@ -80,6 +79,8 @@ import com.android.systemui.Dumpable; import com.android.systemui.ExpandHelper; import com.android.systemui.R; import com.android.systemui.animation.Interpolators; import com.android.systemui.flags.FeatureFlags; import com.android.systemui.flags.Flags; import com.android.systemui.plugins.statusbar.NotificationSwipeActionHelper; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.EmptyShadeView; Loading Loading @@ -132,14 +133,6 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable public static final float BACKGROUND_ALPHA_DIMMED = 0.7f; private static final String TAG = "StackScroller"; // Usage: // adb shell setprop persist.debug.nssl true && adb reboot private static final boolean DEBUG = SystemProperties.getBoolean("persist.debug.nssl", false /* default */); // TODO(b/187291379) disable again before release private static final boolean DEBUG_REMOVE_ANIMATION = SystemProperties.getBoolean( "persist.debug.nssl.dismiss", false /* default */); // Delay in milli-seconds before shade closes for clear all. private final int DELAY_BEFORE_SHADE_CLOSE = 200; private boolean mShadeNeedsToClose = false; Loading Loading @@ -192,7 +185,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private float mInitialTouchX; private float mInitialTouchY; private final boolean mDebugLines; private Paint mDebugPaint; /** Used to track the Y positions that were already used to draw debug text labels. */ private Set<Integer> mDebugTextUsedYPositions; private final boolean mDebugRemoveAnimation; private int mContentHeight; private int mIntrinsicContentHeight; private int mCollapsedSize; Loading Loading @@ -569,6 +567,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable public NotificationStackScrollLayout(Context context, AttributeSet attrs) { super(context, attrs, 0, 0); Resources res = getResources(); FeatureFlags featureFlags = Dependency.get(FeatureFlags.class); mDebugLines = featureFlags.isEnabled(Flags.NSSL_DEBUG_LINES); mDebugRemoveAnimation = featureFlags.isEnabled(Flags.NSSL_DEBUG_REMOVE_ANIMATION); mSectionsManager = Dependency.get(NotificationSectionsManager.class); mScreenOffAnimationController = Dependency.get(ScreenOffAnimationController.class); Loading @@ -591,10 +592,10 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable res.getBoolean(R.bool.config_drawNotificationBackground); setOutlineProvider(mOutlineProvider); boolean willDraw = mShouldDrawNotificationBackground || DEBUG; boolean willDraw = mShouldDrawNotificationBackground || mDebugLines; setWillNotDraw(!willDraw); mBackgroundPaint.setAntiAlias(true); if (DEBUG) { if (mDebugLines) { mDebugPaint = new Paint(); mDebugPaint.setColor(0xffff0000); mDebugPaint.setStrokeWidth(2); Loading Loading @@ -729,18 +730,17 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable drawHeadsUpBackground(canvas); } if (DEBUG) { if (mDebugLines) { onDrawDebug(canvas); } } /** Used to track the Y positions that were already used to draw debug text labels. */ private static final Set<Integer> DEBUG_TEXT_USED_Y_POSITIONS = DEBUG ? new HashSet<>() : Collections.emptySet(); private void onDrawDebug(Canvas canvas) { DEBUG_TEXT_USED_Y_POSITIONS.clear(); if (mDebugTextUsedYPositions == null) { mDebugTextUsedYPositions = new HashSet<>(); } else { mDebugTextUsedYPositions.clear(); } int y = mTopPadding; drawDebugInfo(canvas, y, Color.RED, /* label= */ "mTopPadding"); Loading Loading @@ -776,10 +776,10 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable private int computeDebugYTextPosition(int lineY) { int textY = lineY; while (DEBUG_TEXT_USED_Y_POSITIONS.contains(textY)) { while (mDebugTextUsedYPositions.contains(textY)) { textY = (int) (textY + mDebugPaint.getTextSize()); } DEBUG_TEXT_USED_Y_POSITIONS.add(textY); mDebugTextUsedYPositions.add(textY); return textY; } Loading Loading @@ -2702,14 +2702,14 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable @ShadeViewRefactor(RefactorComponent.STATE_RESOLVER) boolean generateRemoveAnimation(ExpandableView child) { String key = ""; if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { if (child instanceof ExpandableNotificationRow) { key = ((ExpandableNotificationRow) child).getEntry().getKey(); } Log.d(TAG, "generateRemoveAnimation " + key); } if (removeRemovedChildFromHeadsUpChangeAnimations(child)) { if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "removedBecauseOfHeadsUp " + key); } mAddedHeadsUpChildren.remove(child); Loading @@ -2720,7 +2720,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mClearTransientViewsWhenFinished.add(child); return true; } if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "generateRemove " + key + "\nmIsExpanded " + mIsExpanded + "\nmAnimationsEnabled " + mAnimationsEnabled Loading @@ -2728,7 +2728,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable } if (mIsExpanded && mAnimationsEnabled && !isChildInInvisibleGroup(child)) { if (!mChildrenToAddAnimated.contains(child)) { if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { Log.d(TAG, "needsAnimation = true " + key); } // Generate Animations Loading Loading @@ -3227,7 +3227,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable ignoreChildren); mAnimationEvents.add(event); mSwipedOutViews.remove(child); if (DEBUG_REMOVE_ANIMATION) { if (mDebugRemoveAnimation) { String key = ""; if (child instanceof ExpandableNotificationRow) { key = ((ExpandableNotificationRow) child).getEntry().getKey(); Loading