Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60a0cde6 authored by Johannes Gallmann's avatar Johannes Gallmann
Browse files

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
parent 05557900
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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 =
+13 −6
Original line number Diff line number Diff line
@@ -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);
        }
    }

+1 −0
Original line number Diff line number Diff line
@@ -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);
    }