Sensitive Notification Reveal Animation Preparations

This CL includes some setup for the Sensitive Notification Reveal Animation.

Test: Manual, i.e. checking sensitive reveal animation when face unlocking. With this change, the animation has still issues related to the notification size change when revealing the private content. Therefore the Flag is deactivated by default.
Bug: 243634602
Change-Id: Iddcc9b0555bfe77266847d687604c2611db099a6
This commit is contained in:
Johannes Gallmann
2023-03-07 13:27:29 +01:00
parent 05557900e4
commit 60a0cde6de
3 changed files with 17 additions and 6 deletions

View File

@@ -117,6 +117,9 @@ object Flags {
val ANIMATED_NOTIFICATION_SHADE_INSETS =
unreleasedFlag(270682168, "animated_notification_shade_insets", teamfood = true)
// TODO(b/268005230): Tracking Bug
@JvmField val SENSITIVE_REVEAL_ANIM = unreleasedFlag(268005230, "sensitive_reveal_anim")
// 200 - keyguard/lockscreen
// ** Flag retired **
// public static final BooleanFlag KEYGUARD_LAYOUT =

View File

@@ -2805,9 +2805,10 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
int intrinsicBefore = getIntrinsicHeight();
mSensitive = sensitive;
mSensitiveHiddenInGeneral = hideSensitive;
if (intrinsicBefore != getIntrinsicHeight()) {
// The animation has a few flaws and is highly visible, so jump cut instead.
notifyHeightChanged(false /* needsAnimation */);
int intrinsicAfter = getIntrinsicHeight();
if (intrinsicBefore != intrinsicAfter) {
boolean needsAnimation = mFeatureFlags.isEnabled(Flags.SENSITIVE_REVEAL_ANIM);
notifyHeightChanged(needsAnimation);
}
}
@@ -2864,13 +2865,19 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
View[] publicViews = new View[]{mPublicLayout};
View[] hiddenChildren = showingPublic ? privateViews : publicViews;
View[] shownChildren = showingPublic ? publicViews : privateViews;
// disappear/appear overlap: 10 percent of duration
long overlap = duration / 10;
// disappear duration: 1/3 of duration + half of overlap
long disappearDuration = duration / 3 + overlap / 2;
// appear duration: 2/3 of duration + half of overlap
long appearDuration = (duration - disappearDuration) + overlap / 2;
for (final View hiddenView : hiddenChildren) {
hiddenView.setVisibility(View.VISIBLE);
hiddenView.animate().cancel();
hiddenView.animate()
.alpha(0f)
.setStartDelay(delay)
.setDuration(duration)
.setDuration(disappearDuration)
.withEndAction(() -> {
hiddenView.setVisibility(View.INVISIBLE);
resetAllContentAlphas();
@@ -2882,8 +2889,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
showView.animate().cancel();
showView.animate()
.alpha(1f)
.setStartDelay(delay)
.setDuration(duration);
.setStartDelay(delay + duration - appearDuration)
.setDuration(appearDuration);
}
}

View File

@@ -103,6 +103,7 @@ public class ExpandableNotificationRowTest extends SysuiTestCase {
FakeFeatureFlags fakeFeatureFlags = new FakeFeatureFlags();
fakeFeatureFlags.set(Flags.NOTIFICATION_ANIMATE_BIG_PICTURE, true);
fakeFeatureFlags.set(Flags.SENSITIVE_REVEAL_ANIM, false);
mNotificationTestHelper.setFeatureFlags(fakeFeatureFlags);
}