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

Commit 56f39770 authored by android-build-team Robot's avatar android-build-team Robot Committed by Android (Google) Code Review
Browse files

Merge "Quickscrub will hide the most right buttons on nav bar" into pi-dev

parents bca85a0d 6607c3dc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res-auto"
    android:id="@+id/menu_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
+57 −16
Original line number Diff line number Diff line
@@ -14,8 +14,12 @@

package com.android.systemui.statusbar.phone;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.view.View;

import com.android.systemui.Interpolators;
import com.android.systemui.plugins.statusbar.phone.NavBarButtonProvider.ButtonInterface;
import com.android.systemui.statusbar.policy.KeyButtonDrawable;

@@ -26,6 +30,8 @@ import java.util.ArrayList;
 * multiples of the same nav bar icon appearing.
 */
public class ButtonDispatcher {
    private final static int FADE_DURATION_IN = 150;
    private final static int FADE_DURATION_OUT = 100;

    private final ArrayList<View> mViews = new ArrayList<>();

@@ -36,13 +42,24 @@ public class ButtonDispatcher {
    private View.OnLongClickListener mLongClickListener;
    private View.OnHoverListener mOnHoverListener;
    private Boolean mLongClickable;
    private Integer mAlpha;
    private Float mAlpha;
    private Float mDarkIntensity;
    private Integer mVisibility = -1;
    private Boolean mDelayTouchFeedback;
    private KeyButtonDrawable mImageDrawable;
    private View mCurrentView;
    private boolean mVertical;
    private ValueAnimator mFadeAnimator;

    private final ValueAnimator.AnimatorUpdateListener mAlphaListener = animation ->
            setAlpha((float) animation.getAnimatedValue());

    private final AnimatorListenerAdapter mFadeListener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            setVisibility(getAlpha() == 1 ? View.VISIBLE : View.INVISIBLE);
        }
    };

    public ButtonDispatcher(int id) {
        mId = id;
@@ -64,19 +81,22 @@ public class ButtonDispatcher {
        if (mAlpha != null) {
            view.setAlpha(mAlpha);
        }
        if (mDarkIntensity != null) {
            ((ButtonInterface) view).setDarkIntensity(mDarkIntensity);
        }
        if (mVisibility != null) {
        if (mVisibility != null && mVisibility != -1) {
            view.setVisibility(mVisibility);
        }
        if (view instanceof ButtonInterface) {
            final ButtonInterface button = (ButtonInterface) view;
            if (mDarkIntensity != null) {
                button.setDarkIntensity(mDarkIntensity);
            }
            if (mImageDrawable != null) {
            ((ButtonInterface) view).setImageDrawable(mImageDrawable);
                button.setImageDrawable(mImageDrawable);
            }
            if (mDelayTouchFeedback != null) {
            ((ButtonInterface) view).setDelayTouchFeedback(mDelayTouchFeedback);
                button.setDelayTouchFeedback(mDelayTouchFeedback);
            }
            button.setVertical(mVertical);
        }
        ((ButtonInterface) view).setVertical(mVertical);
    }

    public int getId() {
@@ -99,9 +119,11 @@ public class ButtonDispatcher {
        mImageDrawable = drawable;
        final int N = mViews.size();
        for (int i = 0; i < N; i++) {
            if (mViews.get(i) instanceof ButtonInterface) {
                ((ButtonInterface) mViews.get(i)).setImageDrawable(mImageDrawable);
            }
        }
    }

    public void setVisibility(int visibility) {
        if (mVisibility == visibility) return;
@@ -116,11 +138,13 @@ public class ButtonDispatcher {
        // This seems to be an instantaneous thing, so not going to persist it.
        final int N = mViews.size();
        for (int i = 0; i < N; i++) {
            if (mViews.get(i) instanceof ButtonInterface) {
                ((ButtonInterface) mViews.get(i)).abortCurrentGesture();
            }
        }
    }

    public void setAlpha(int alpha) {
    public void setAlpha(float alpha) {
        mAlpha = alpha;
        final int N = mViews.size();
        for (int i = 0; i < N; i++) {
@@ -132,17 +156,21 @@ public class ButtonDispatcher {
        mDarkIntensity = darkIntensity;
        final int N = mViews.size();
        for (int i = 0; i < N; i++) {
            if (mViews.get(i) instanceof ButtonInterface) {
                ((ButtonInterface) mViews.get(i)).setDarkIntensity(darkIntensity);
            }
        }
    }

    public void setDelayTouchFeedback(boolean delay) {
        mDelayTouchFeedback = delay;
        final int N = mViews.size();
        for (int i = 0; i < N; i++) {
            if (mViews.get(i) instanceof ButtonInterface) {
                ((ButtonInterface) mViews.get(i)).setDelayTouchFeedback(delay);
            }
        }
    }

    public void setOnClickListener(View.OnClickListener clickListener) {
        mClickListener = clickListener;
@@ -192,6 +220,19 @@ public class ButtonDispatcher {
        }
    }

    public void animateFade(boolean in) {
        if (mFadeAnimator != null) {
            mFadeAnimator.cancel();
        }
        mFadeAnimator = ValueAnimator.ofFloat(getAlpha(), in ? 1 : 0);
        mFadeAnimator.setDuration(in? FADE_DURATION_IN : FADE_DURATION_OUT);
        mFadeAnimator.setInterpolator(in ? Interpolators.ALPHA_IN : Interpolators.ALPHA_OUT);
        mFadeAnimator.addListener(mFadeListener);
        mFadeAnimator.addUpdateListener(mAlphaListener);
        mFadeAnimator.start();
        setVisibility(View.VISIBLE);
    }

    public ArrayList<View> getViews() {
        return mViews;
    }
+8 −6
Original line number Diff line number Diff line
@@ -168,10 +168,10 @@ public class NavigationBarInflaterView extends FrameLayout
        }
    }

    public void setButtonDispatchers(SparseArray<ButtonDispatcher> buttonDisatchers) {
        mButtonDispatchers = buttonDisatchers;
        for (int i = 0; i < buttonDisatchers.size(); i++) {
            initiallyFill(buttonDisatchers.valueAt(i));
    public void setButtonDispatchers(SparseArray<ButtonDispatcher> buttonDispatchers) {
        mButtonDispatchers = buttonDispatchers;
        for (int i = 0; i < buttonDispatchers.size(); i++) {
            initiallyFill(buttonDispatchers.valueAt(i));
        }
    }

@@ -220,7 +220,8 @@ public class NavigationBarInflaterView extends FrameLayout
            // and will only happen once.
            if (parent.getChildAt(i).getId() == buttonDispatcher.getId()) {
                buttonDispatcher.addView(parent.getChildAt(i));
            } else if (parent.getChildAt(i) instanceof ViewGroup) {
            }
            if (parent.getChildAt(i) instanceof ViewGroup) {
                addAll(buttonDispatcher, (ViewGroup) parent.getChildAt(i));
            }
        }
@@ -411,7 +412,8 @@ public class NavigationBarInflaterView extends FrameLayout
            final int indexOfKey = mButtonDispatchers.indexOfKey(v.getId());
            if (indexOfKey >= 0) {
                mButtonDispatchers.valueAt(indexOfKey).addView(v);
            } else if (v instanceof ViewGroup) {
            }
            if (v instanceof ViewGroup) {
                final ViewGroup viewGroup = (ViewGroup)v;
                final int N = viewGroup.getChildCount();
                for (int i = 0; i < N; i++) {
+10 −0
Original line number Diff line number Diff line
@@ -260,6 +260,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
                new ButtonDispatcher(R.id.accessibility_button));
        mButtonDispatchers.put(R.id.rotate_suggestion,
                new ButtonDispatcher(R.id.rotate_suggestion));
        mButtonDispatchers.put(R.id.menu_container,
                new ButtonDispatcher(R.id.menu_container));
        mDeadZone = new DeadZone(this);
    }

@@ -368,6 +370,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
        return mButtonDispatchers.get(R.id.rotate_suggestion);
    }

    public ButtonDispatcher getMenuContainer() {
        return mButtonDispatchers.get(R.id.menu_container);
    }

    public SparseArray<ButtonDispatcher> getButtonDispatchers() {
        return mButtonDispatchers;
    }
@@ -796,6 +802,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav

    public boolean isRotateButtonVisible() { return mShowRotateButton; }

    public void setMenuContainerVisibility(boolean visible) {
        getMenuContainer().animateFade(visible);
    }

    @Override
    public void onFinishInflate() {
        mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
+8 −0
Original line number Diff line number Diff line
@@ -401,6 +401,10 @@ public class QuickStepController implements GestureHelper {
            mDarkTrackColor = mContext.getColor(R.color.quick_step_track_background_dark);
            mTrackAnimator.setFloatValues(0, 1);
            mTrackAnimator.start();

            // Hide menu buttons on nav bar until quick scrub has ended
            mNavigationBarView.setMenuContainerVisibility(false /* visible */);

            try {
                mOverviewEventSender.getProxy().onQuickScrubStart();
                if (DEBUG_OVERVIEW_PROXY) {
@@ -416,6 +420,10 @@ public class QuickStepController implements GestureHelper {
    private void endQuickScrub(boolean animate) {
        if (mQuickScrubActive || mDragScrubActive) {
            animateEnd();

            // Restore the nav bar menu buttons visibility
            mNavigationBarView.setMenuContainerVisibility(true /* visible */);

            if (mQuickScrubActive) {
                try {
                    mOverviewEventSender.getProxy().onQuickScrubEnd();