From 8081f0940f727faf35394b71cdf602caf55b0f21 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Fri, 1 May 2020 21:11:13 -0700 Subject: [PATCH] Fixed an issue where GONE Views would show during transitions Because we're clipping children and MotionLayout doesn't hide them when collapsed, views could flicker onto the screen Test: add media notification, swipe down to shade and back, observe no flickering Bug: 154137987 Change-Id: Ida591706e779215e13c6d3047be7e3b5318b4d19 --- packages/SystemUI/res/xml/media_scene.xml | 2 + .../systemui/media/GoneChildrenHideHelper.kt | 52 +++++++++++++++++++ .../systemui/media/MediaControlPanel.java | 32 +++++++----- 3 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 packages/SystemUI/src/com/android/systemui/media/GoneChildrenHideHelper.kt diff --git a/packages/SystemUI/res/xml/media_scene.xml b/packages/SystemUI/res/xml/media_scene.xml index 6f99d9a675f12..f61b2b096d3c8 100644 --- a/packages/SystemUI/res/xml/media_scene.xml +++ b/packages/SystemUI/res/xml/media_scene.xml @@ -356,6 +356,7 @@ android:id="@+id/media_progress_bar" android:layout_width="0dp" android:layout_height="wrap_content" + android:alpha="0.0" app:layout_constraintTop_toBottomOf="@id/album_art" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="@id/view_width" @@ -364,6 +365,7 @@ { final Intent intent = new Intent() @@ -344,9 +349,6 @@ public class MediaControlPanel { Log.d(TAG, "PlaybackInfo was null. Defaulting to local playback."); mIsRemotePlayback = false; } - - ConstraintSet expandedSet = mMediaNotifView.getConstraintSet(R.id.expanded); - ConstraintSet collapsedSet = mMediaNotifView.getConstraintSet(R.id.collapsed); List actionsWhenCollapsed = data.getActionsToShowInCompact(); // Media controls int i = 0; @@ -376,15 +378,14 @@ public class MediaControlPanel { }); boolean visibleInCompat = actionsWhenCollapsed.contains(i); updateKeyFrameVisibility(actionId, visibleInCompat); - collapsedSet.setVisibility(actionId, - visibleInCompat ? ConstraintSet.VISIBLE : ConstraintSet.GONE); - expandedSet.setVisibility(actionId, ConstraintSet.VISIBLE); + setVisibleAndAlpha(collapsedSet, actionId, visibleInCompat); + setVisibleAndAlpha(expandedSet, actionId, true /*visible */); } // Hide any unused buttons for (; i < ACTION_IDS.length; i++) { - expandedSet.setVisibility(ACTION_IDS[i], ConstraintSet.GONE); - collapsedSet.setVisibility(ACTION_IDS[i], ConstraintSet.GONE); + setVisibleAndAlpha(expandedSet, ACTION_IDS[i], false /*visible */); + setVisibleAndAlpha(collapsedSet, ACTION_IDS[i], false /*visible */); } // Seek Bar @@ -604,8 +605,8 @@ public class MediaControlPanel { ConstraintSet expandedSet = mMediaNotifView.getConstraintSet(R.id.expanded); ConstraintSet collapsedSet = mMediaNotifView.getConstraintSet(R.id.collapsed); for (int i = 1; i < ACTION_IDS.length; i++) { - expandedSet.setVisibility(ACTION_IDS[i], ConstraintSet.GONE); - collapsedSet.setVisibility(ACTION_IDS[i], ConstraintSet.GONE); + setVisibleAndAlpha(expandedSet, ACTION_IDS[i], false /*visible */); + setVisibleAndAlpha(collapsedSet, ACTION_IDS[i], false /*visible */); } // Add a restart button @@ -631,8 +632,8 @@ public class MediaControlPanel { }); btn.setImageDrawable(mContext.getResources().getDrawable(R.drawable.lb_ic_play)); btn.setImageTintList(ColorStateList.valueOf(mForegroundColor)); - expandedSet.setVisibility(ACTION_IDS[0], ConstraintSet.VISIBLE); - collapsedSet.setVisibility(ACTION_IDS[0], ConstraintSet.VISIBLE); + setVisibleAndAlpha(expandedSet, ACTION_IDS[0], true /*visible */); + setVisibleAndAlpha(collapsedSet, ACTION_IDS[0], true /*visible */); mSeekBarViewModel.clearController(); // TODO: fix guts @@ -647,6 +648,11 @@ public class MediaControlPanel { }); } + private void setVisibleAndAlpha(ConstraintSet set, int actionId, boolean visible) { + set.setVisibility(actionId, visible? ConstraintSet.VISIBLE : ConstraintSet.GONE); + set.setAlpha(actionId, visible ? 1.0f : 0.0f); + } + private void makeActive() { Assert.isMainThread(); if (!mIsRegistered) {