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

Commit 061d9072 authored by Selim Cinek's avatar Selim Cinek
Browse files

Improved the interpolators of the icon appearing

The interpolator has now a slight overshoot to it again.

Change-Id: I4253bf4b2cf9d471e3aa8c9483c9bcb88c2b3032
Test: add notifications, observe icon movement
Bug: 32437839
parent a1d97907
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.PathInterpolator;

import com.android.systemui.statusbar.stack.HeadsUpAppearInterpolator;

/**
 * Utility class to receive interpolators from
 */
@@ -37,6 +39,8 @@ public class Interpolators {
    public static final Interpolator ACCELERATE_DECELERATE = new AccelerateDecelerateInterpolator();
    public static final Interpolator DECELERATE_QUINT = new DecelerateInterpolator(2.5f);
    public static final Interpolator CUSTOM_40_40 = new PathInterpolator(0.4f, 0f, 0.6f, 1f);
    public static final Interpolator HEADS_UP_APPEAR = new HeadsUpAppearInterpolator();
    public static final Interpolator ICON_OVERSHOT = new PathInterpolator(0.4f, 0f, 0.2f, 1.4f);

    /**
     * Interpolator to be used when animating a move based on a click. Pair with enough duration.
+11 −1
Original line number Diff line number Diff line
@@ -22,13 +22,17 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Property;
import android.view.View;
import android.view.animation.Interpolator;

import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.statusbar.AlphaOptimizedFrameLayout;
import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.stack.AnimationFilter;
import com.android.systemui.statusbar.stack.AnimationProperties;
import com.android.systemui.statusbar.stack.HeadsUpAppearInterpolator;
import com.android.systemui.statusbar.stack.ViewState;

import java.util.HashMap;
@@ -65,7 +69,9 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
        public AnimationFilter getAnimationFilter() {
            return mAnimationFilter;
        }
    }.setDuration(CANNED_ANIMATION_DURATION);

    }.setDuration(CANNED_ANIMATION_DURATION)
            .setCustomInterpolator(View.TRANSLATION_Y, Interpolators.ICON_OVERSHOT);

    private static final AnimationProperties mTempProperties = new AnimationProperties() {
        private AnimationFilter mAnimationFilter = new AnimationFilter();
@@ -440,8 +446,11 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
                    AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
                    animationFilter.reset();
                    animationFilter.combineFilter(ICON_ANIMATION_PROPERTIES.getAnimationFilter());
                    mTempProperties.resetCustomInterpolators();
                    mTempProperties.combineCustomInterpolators(ICON_ANIMATION_PROPERTIES);
                    if (animationProperties != null) {
                        animationFilter.combineFilter(animationProperties.getAnimationFilter());
                        mTempProperties.combineCustomInterpolators(animationProperties);
                    }
                    animationProperties = mTempProperties;
                    animationProperties.setDuration(CANNED_ANIMATION_DURATION);
@@ -455,6 +464,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout {
                    AnimationFilter animationFilter = mTempProperties.getAnimationFilter();
                    animationFilter.reset();
                    animationFilter.animateX();
                    mTempProperties.resetCustomInterpolators();
                    animationProperties = mTempProperties;
                    animationProperties.setDuration(CANNED_ANIMATION_DURATION);
                    animate = true;
+32 −1
Original line number Diff line number Diff line
@@ -17,16 +17,20 @@
package com.android.systemui.statusbar.stack;

import android.animation.AnimatorListenerAdapter;
import android.util.ArrayMap;
import android.util.Property;
import android.view.View;
import android.view.animation.Interpolator;

import java.util.HashMap;

/**
 * Properties for a View animation
 */
public class AnimationProperties {
    public long duration;
    public long delay;
    private ArrayMap<Property, Interpolator> mInterpolatorMap;

    /**
     * @return an animation filter for this animation.
@@ -50,7 +54,29 @@ public class AnimationProperties {
     * Get a custom interpolator for a property instead of the normal one.
     */
    public Interpolator getCustomInterpolator(View child, Property property) {
        return null;
        return mInterpolatorMap != null ? mInterpolatorMap.get(property) : null;
    }


    public void combineCustomInterpolators(AnimationProperties iconAnimationProperties) {
        ArrayMap<Property, Interpolator> map = iconAnimationProperties.mInterpolatorMap;
        if (map != null) {
            if (mInterpolatorMap == null) {
                mInterpolatorMap = new ArrayMap<>();
            }
            mInterpolatorMap.putAll(map);
        }
    }

    /**
     * Set a custom interpolator to use for all views for a property.
     */
    public AnimationProperties setCustomInterpolator(Property property, Interpolator interpolator) {
        if (mInterpolatorMap == null) {
            mInterpolatorMap = new ArrayMap<>();
        }
        mInterpolatorMap.put(property, interpolator);
        return this;
    }

    public AnimationProperties setDuration(long duration) {
@@ -62,4 +88,9 @@ public class AnimationProperties {
        this.delay = delay;
        return this;
    }

    public AnimationProperties resetCustomInterpolators() {
        mInterpolatorMap = null;
        return this;
    }
}
+1 −3
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ public class StackStateAnimator {
    public static final int DELAY_EFFECT_MAX_INDEX_DIFFERENCE = 2;
    public static final int ANIMATION_DELAY_HEADS_UP = 120;

    private final Interpolator mHeadsUpAppearInterpolator;
    private final int mGoToFullShadeAppearingTranslation;
    private final ExpandableViewState mTmpState = new ExpandableViewState();
    private final AnimationProperties mAnimationProperties;
@@ -83,7 +82,6 @@ public class StackStateAnimator {
        mGoToFullShadeAppearingTranslation =
                hostLayout.getContext().getResources().getDimensionPixelSize(
                        R.dimen.go_to_full_shade_appearing_translation);
        mHeadsUpAppearInterpolator = new HeadsUpAppearInterpolator();
        mAnimationProperties = new AnimationProperties() {
            @Override
            public AnimationFilter getAnimationFilter() {
@@ -103,7 +101,7 @@ public class StackStateAnimator {
            @Override
            public Interpolator getCustomInterpolator(View child, Property property) {
                if (mHeadsUpAppearChildren.contains(child) && View.TRANSLATION_Y.equals(property)) {
                    return mHeadsUpAppearInterpolator;
                    return Interpolators.HEADS_UP_APPEAR;
                }
                return null;
            }