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

Commit 778ff3c7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix status icon animations"

parents 6b1c5e92 620ea2c7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ public class StatusBarMobileView extends FrameLayout implements DarkReceiver,
    }

    @Override
    public void setVisibleState(int state) {
    public void setVisibleState(int state, boolean animate) {
        if (state == mVisibleState) {
            return;
        }
+1 −1
Original line number Diff line number Diff line
@@ -124,7 +124,7 @@ public class StatusBarWifiView extends FrameLayout implements DarkReceiver,
    }

    @Override
    public void setVisibleState(int state) {
    public void setVisibleState(int state, boolean animate) {
        if (state == mVisibleState) {
            return;
        }
+4 −1
Original line number Diff line number Diff line
@@ -22,7 +22,10 @@ public interface StatusIconDisplayable extends DarkReceiver {
    String getSlot();
    void setStaticDrawableColor(int color);
    void setDecorColor(int color);
    void setVisibleState(int state);
    default void setVisibleState(int state) {
        setVisibleState(state, false);
    }
    void setVisibleState(int state, boolean animate);
    int getVisibleState();
    boolean isIconVisible();
    default boolean isIconBlocked() {
+31 −14
Original line number Diff line number Diff line
@@ -301,13 +301,9 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {

            vs.initFrom(child);
            vs.alpha = 1.0f;
            if (child instanceof StatusIconDisplayable) {
                vs.hidden = !((StatusIconDisplayable)child).isIconVisible();
            } else {
            vs.hidden = false;
        }
    }
    }

    private static @Nullable StatusIconState getViewStateFromChild(View child) {
        return (StatusIconState) child.getTag(R.id.status_bar_view_state_tag);
@@ -333,22 +329,33 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
            }
            StatusIconDisplayable icon = (StatusIconDisplayable) view;
            AnimationProperties animationProperties = null;
            boolean animate = false;
            boolean animateVisibility = true;

            if (justAdded) {
            // Figure out which properties of the state transition (if any) we need to animate
            if (justAdded
                    || icon.getVisibleState() == STATE_HIDDEN && visibleState == STATE_ICON) {
                // Icon is appearing, fade it in by putting it where it will be and animating alpha
                super.applyToView(view);
                view.setAlpha(0.f);
                icon.setVisibleState(STATE_HIDDEN);
                animationProperties = ADD_ICON_PROPERTIES;
                animate = true;
            } else if (icon.getVisibleState() != visibleState) {
                animationProperties = DOT_ANIMATION_PROPERTIES;
                animate = true;
                if (icon.getVisibleState() == STATE_ICON && visibleState == STATE_HIDDEN) {
                    // Disappearing, don't do anything fancy
                    animateVisibility = false;
                } else {
                    // all other transitions (to/from dot, etc)
                    animationProperties = ANIMATE_ALL_PROPERTIES;
                }
            } else if (visibleState != STATE_HIDDEN && xTranslation != view.getTranslationX()) {
                // Visibility isn't changing, just animate position
                animationProperties = X_ANIMATION_PROPERTIES;
            }

            if (animate) {
            icon.setVisibleState(visibleState, animateVisibility);
            if (animationProperties != null) {
                animateTo(view, animationProperties);
                icon.setVisibleState(visibleState);
            } else {
                icon.setVisibleState(visibleState);
                super.applyToView(view);
            }

@@ -365,7 +372,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
        }
    }.setDuration(200).setDelay(50);

    private static final AnimationProperties DOT_ANIMATION_PROPERTIES = new AnimationProperties() {
    private static final AnimationProperties X_ANIMATION_PROPERTIES = new AnimationProperties() {
        private AnimationFilter mAnimationFilter = new AnimationFilter().animateX();

        @Override
@@ -373,4 +380,14 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
            return mAnimationFilter;
        }
    }.setDuration(200);

    private static final AnimationProperties ANIMATE_ALL_PROPERTIES = new AnimationProperties() {
        private AnimationFilter mAnimationFilter = new AnimationFilter().animateX().animateY()
                .animateAlpha().animateScale();

        @Override
        public AnimationFilter getAnimationFilter() {
            return mAnimationFilter;
        }
    }.setDuration(200);
}