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:
@@ -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 =
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user