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

Commit 999230c3 authored by Selim Cinek's avatar Selim Cinek
Browse files

Animating the notifications now when they disappear

Previously they were just disappearing immediately,
looking fairly ugly.

Bug: 130327302
Test: drag down on lockscreen with and without bypass
Change-Id: I450569043f5b6fc715dcf817072ccdbb5841807f
parent 820ba2d9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@ import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
public class CrossFadeHelper {
    public static final long ANIMATION_DURATION_LENGTH = 210;

    public static void fadeOut(final View view) {
        fadeOut(view, null);
    }

    public static void fadeOut(final View view, final Runnable endRunnable) {
        fadeOut(view, ANIMATION_DURATION_LENGTH, 0, endRunnable);
    }
+40 −12
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.systemui.R;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.NotificationShelf;
@@ -92,6 +93,7 @@ public class NotificationIconAreaController implements DarkReceiver,
    private boolean mAnimationsEnabled;
    private int mAodIconTint;
    private boolean mFullyHidden;
    private boolean mAodIconsVisible;

    public NotificationIconAreaController(Context context, StatusBar statusBar,
            StatusBarStateController statusBarStateController,
@@ -147,10 +149,10 @@ public class NotificationIconAreaController implements DarkReceiver,
        mAodIcons = mStatusBar.getStatusBarWindow().findViewById(
                R.id.clock_notification_icon_container);
        mAodIcons.setOnLockScreen(true);
        updateAodIconsVisibility();
        updateAodIconsVisibility(false /* animate */);
        updateAnimations();
        if (changed) {
            updateAodIcons();
            updateAodNotificationIcons();
        }
    }

@@ -293,7 +295,7 @@ public class NotificationIconAreaController implements DarkReceiver,
        updateStatusBarIcons();
        updateShelfIcons();
        updateCenterIcon();
        updateAodIcons();
        updateAodNotificationIcons();

        applyNotificationIconsTint();
    }
@@ -331,7 +333,7 @@ public class NotificationIconAreaController implements DarkReceiver,
                false /* hidePulsing */);
    }

    public void updateAodIcons() {
    public void updateAodNotificationIcons() {
        updateIconsForLayout(entry -> entry.aodIcon, mAodIcons,
                false /* showAmbient */,
                mShowLowPriority /* showLowPriority */,
@@ -532,7 +534,7 @@ public class NotificationIconAreaController implements DarkReceiver,

    @Override
    public void onStateChanged(int newState) {
        updateAodIconsVisibility();
        updateAodIconsVisibility(false /* animate */);
        updateAnimations();
    }

@@ -583,21 +585,25 @@ public class NotificationIconAreaController implements DarkReceiver,

    @Override
    public void onFullyHiddenChanged(boolean fullyHidden) {
        if (fullyHidden && !mBypassController.getBypassEnabled()) {
            appearAodIcons();
        boolean animate = true;
        if (!mBypassController.getBypassEnabled()) {
            animate = mDozeParameters.getAlwaysOn() && !mDozeParameters.getDisplayNeedsBlanking();
            // We only want the appear animations to happen when the notifications get fully hidden,
            // since otherwise the unhide animation overlaps
            animate &= fullyHidden;
        }
        updateAodIconsVisibility();
        updateAodIcons();
        updateAodIconsVisibility(animate);
        updateAodNotificationIcons();
    }

    @Override
    public void onPulseExpansionChanged(boolean expandingChanged) {
        if (expandingChanged) {
            updateAodIconsVisibility();
            updateAodIconsVisibility(true /* animate */);
        }
    }

    private void updateAodIconsVisibility() {
    private void updateAodIconsVisibility(boolean animate) {
        boolean visible = mBypassController.getBypassEnabled()
                || mWakeUpCoordinator.getNotificationsFullyHidden();
        if (mStatusBarStateController.getState() != StatusBarState.KEYGUARD) {
@@ -606,6 +612,28 @@ public class NotificationIconAreaController implements DarkReceiver,
        if (visible && mWakeUpCoordinator.isPulseExpanding()) {
            visible = false;
        }
        if (mAodIconsVisible != visible) {
            mAodIconsVisible = visible;
            mAodIcons.animate().cancel();
            if (animate) {
                boolean wasFullyInvisible = mAodIcons.getVisibility() != View.VISIBLE;
                if (mAodIconsVisible) {
                    if (wasFullyInvisible) {
                        // No fading here, let's just appear the icons instead!
                        mAodIcons.setVisibility(View.VISIBLE);
                        mAodIcons.setAlpha(1.0f);
                        appearAodIcons();
                    } else {
                        // We were fading out, let's fade in instead
                        CrossFadeHelper.fadeIn(mAodIcons);
                    }
                } else {
                    CrossFadeHelper.fadeOut(mAodIcons);
                }
            } else {
                mAodIcons.setAlpha(1.0f);
                mAodIcons.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
            }
        }
    }
}