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

Commit 521f95e2 authored by Sergey Nikolaienkov's avatar Sergey Nikolaienkov
Browse files

Update AudioRecordingDisclosureBar animations

Currently the Mic icon slide from the right following the previous
notification pattern, as we changed it to a small one, we would want the
Microphone to Fade In and Fade Out.

Bug: 166459250
Test: make, flash
Test: atest CtsSystemUiTestCases:MicIndicatorTest
Change-Id: Ib628688110cf08b38929973153fbff5a3ca2d683
parent 7eace292
Loading
Loading
Loading
Loading
+17 −40
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.IntDef;
import android.annotation.UiThread;
@@ -82,13 +81,12 @@ public class AudioRecordingDisclosureBar implements
    private static final int STATE_SHOWN = 2;
    private static final int STATE_DISAPPEARING = 3;

    private static final int ANIMATION_DURATION = 600;
    private static final int ANIMATION_DURATION_MS = 200;

    private final Context mContext;
    private boolean mIsEnabled;

    private View mIndicatorView;
    private boolean mIsLtr;

    @State private int mState = STATE_STOPPED;

@@ -207,17 +205,15 @@ public class AudioRecordingDisclosureBar implements
        if (mState != STATE_NOT_SHOWN) return;
        if (DEBUG) Log.d(TAG, "Showing indicator");

        mIsLtr = mContext.getResources().getConfiguration().getLayoutDirection()
                == View.LAYOUT_DIRECTION_LTR;

        // Inflate the indicator view
        mIndicatorView = LayoutInflater.from(mContext).inflate(
                R.layout.tv_audio_recording_indicator,
                null);

        // Initially change the visibility to INVISIBLE, wait until and receives the size and
        // then animate it moving from "off" the screen correctly
        mIndicatorView.setVisibility(View.INVISIBLE);
        // 1. Set alpha to 0.
        // 2. Wait until the window is shown and the view is laid out.
        // 3. Start a "fade in" (alpha) animation.
        mIndicatorView.setAlpha(0f);
        mIndicatorView
                .getViewTreeObserver()
                .addOnGlobalLayoutListener(
@@ -232,44 +228,29 @@ public class AudioRecordingDisclosureBar implements
                                mIndicatorView.getViewTreeObserver().removeOnGlobalLayoutListener(
                                        this);

                                // Now that the width of the indicator has been assigned, we can
                                // move it in from off the screen.
                                final int initialOffset =
                                        (mIsLtr ? 1 : -1) * mIndicatorView.getWidth();
                                final AnimatorSet set = new AnimatorSet();
                                set.setDuration(ANIMATION_DURATION);
                                set.playTogether(
                                        ObjectAnimator.ofFloat(mIndicatorView,
                                                View.TRANSLATION_X, initialOffset, 0),
                                        ObjectAnimator.ofFloat(mIndicatorView, View.ALPHA, 0f,
                                                1f));
                                set.addListener(
                                final ObjectAnimator anim =
                                        ObjectAnimator.ofFloat(mIndicatorView, View.ALPHA, 1f)
                                                .setDuration(ANIMATION_DURATION_MS);
                                anim.addListener(
                                        new AnimatorListenerAdapter() {
                                            @Override
                                            public void onAnimationStart(Animator animation,
                                                    boolean isReverse) {
                                                if (mState == STATE_STOPPED) return;

                                                // Indicator is INVISIBLE at the moment, change it.
                                                mIndicatorView.setVisibility(View.VISIBLE);
                                            }

                                            @Override
                                            public void onAnimationEnd(Animator animation) {
                                                onAppeared();
                                            }
                                        });
                                set.start();
                                anim.start();
                            }
                        });

        final boolean isLtr = mContext.getResources().getConfiguration().getLayoutDirection()
                == View.LAYOUT_DIRECTION_LTR;
        final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
                WRAP_CONTENT,
                WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);
        layoutParams.gravity = Gravity.TOP | (mIsLtr ? Gravity.RIGHT : Gravity.LEFT);
        layoutParams.gravity = Gravity.TOP | (isLtr ? Gravity.RIGHT : Gravity.LEFT);
        layoutParams.setTitle(LAYOUT_PARAMS_TITLE);
        layoutParams.packageName = mContext.getPackageName();
        final WindowManager windowManager = (WindowManager) mContext.getSystemService(
@@ -283,20 +264,16 @@ public class AudioRecordingDisclosureBar implements
    private void hide() {
        if (DEBUG) Log.d(TAG, "Hide indicator");

        final int targetOffset = (mIsLtr ? 1 : -1) * mIndicatorView.getWidth();
        final AnimatorSet set = new AnimatorSet();
        set.playTogether(
                ObjectAnimator.ofFloat(mIndicatorView, View.TRANSLATION_X, targetOffset),
                ObjectAnimator.ofFloat(mIndicatorView, View.ALPHA, 0f));
        set.setDuration(ANIMATION_DURATION);
        set.addListener(
        final ObjectAnimator anim = ObjectAnimator.ofFloat(mIndicatorView, View.ALPHA, 0f)
                .setDuration(ANIMATION_DURATION_MS);
        anim.addListener(
                new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        onHidden();
                    }
                });
        set.start();
        anim.start();

        mState = STATE_DISAPPEARING;
    }