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

Commit 6779595b authored by Winson's avatar Winson Committed by Winson Chung
Browse files

Updating the scrollbar to make the fastscroller more visible.

Bug: 20035978
Change-Id: I56a865262cd07e6af11b4374a7e6354710116dcd
parent a67cce2c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -5,8 +5,8 @@
-keep class com.android.launcher3.BaseRecyclerViewFastScrollBar {
  public void setThumbWidth(int);
  public int getThumbWidth();
  public void setTrackAlpha(int);
  public int getTrackAlpha();
  public void setTrackWidth(int);
  public int getTrackWidth();
}

-keep class com.android.launcher3.BaseRecyclerViewFastScrollPopup {
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@
    <color name="outline_color">#FFFFFFFF</color>

    <!-- Containers -->
    <color name="container_fastscroll_thumb_inactive_color">#42000000</color>
    <color name="container_fastscroll_thumb_inactive_color">#009688</color>
    <color name="container_fastscroll_thumb_active_color">#009688</color>

    <!-- All Apps -->
+3 −3
Original line number Diff line number Diff line
@@ -55,9 +55,9 @@
    <!-- Notes: container_bounds_inset - quantum_panel_outer_padding -->
    <dimen name="container_bounds_minus_quantum_panel_padding_inset">4dp</dimen>

    <dimen name="container_fastscroll_thumb_min_width">4dp</dimen>
    <dimen name="container_fastscroll_thumb_max_width">8dp</dimen>
    <dimen name="container_fastscroll_thumb_height">64dp</dimen>
    <dimen name="container_fastscroll_thumb_min_width">5dp</dimen>
    <dimen name="container_fastscroll_thumb_max_width">9dp</dimen>
    <dimen name="container_fastscroll_thumb_height">72dp</dimen>
    <dimen name="container_fastscroll_thumb_touch_inset">-24dp</dimen>
    <dimen name="container_fastscroll_popup_size">72dp</dimen>
    <dimen name="container_fastscroll_popup_text_size">48dp</dimen>
+64 −31
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.Rect;
import android.view.MotionEvent;
@@ -51,11 +52,14 @@ public class BaseRecyclerViewFastScrollBar {
    private int mThumbActiveColor;
    @Thunk Point mThumbOffset = new Point(-1, -1);
    @Thunk Paint mThumbPaint;
    private Paint mTrackPaint;
    private int mThumbMinWidth;
    private int mThumbMaxWidth;
    @Thunk int mThumbWidth;
    @Thunk int mThumbHeight;
    private int mThumbCurvature;
    private Path mThumbPath = new Path();
    private Paint mTrackPaint;
    private int mTrackWidth;
    private float mLastTouchY;
    // The inset is the buffer around which a point will still register as a click on the scrollbar
    private int mTouchInset;
@@ -75,15 +79,18 @@ public class BaseRecyclerViewFastScrollBar {
        mPopup = new BaseRecyclerViewFastScrollPopup(rv, res);
        mTrackPaint = new Paint();
        mTrackPaint.setColor(rv.getFastScrollerTrackColor(Color.BLACK));
        mTrackPaint.setAlpha(0);
        mTrackPaint.setAlpha(MAX_TRACK_ALPHA);
        mThumbInactiveColor = rv.getFastScrollerThumbInactiveColor(
                res.getColor(R.color.container_fastscroll_thumb_inactive_color));
        mThumbActiveColor = res.getColor(R.color.container_fastscroll_thumb_active_color);
        mThumbPaint = new Paint();
        mThumbPaint.setAntiAlias(true);
        mThumbPaint.setColor(mThumbInactiveColor);
        mThumbPaint.setStyle(Paint.Style.FILL);
        mThumbWidth = mThumbMinWidth = res.getDimensionPixelSize(R.dimen.container_fastscroll_thumb_min_width);
        mThumbMaxWidth = res.getDimensionPixelSize(R.dimen.container_fastscroll_thumb_max_width);
        mThumbHeight = res.getDimensionPixelSize(R.dimen.container_fastscroll_thumb_height);
        mThumbCurvature = mThumbMaxWidth - mThumbMinWidth;
        mTouchInset = res.getDimensionPixelSize(R.dimen.container_fastscroll_thumb_touch_inset);
    }

@@ -99,10 +106,12 @@ public class BaseRecyclerViewFastScrollBar {
        if (mThumbOffset.x == x && mThumbOffset.y == y) {
            return;
        }
        mInvalidateRect.set(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth, mRv.getHeight());
        mInvalidateRect.set(mThumbOffset.x - mThumbCurvature, mThumbOffset.y,
                mThumbOffset.x + mThumbWidth, mThumbOffset.y + mThumbHeight);
        mThumbOffset.set(x, y);
        mInvalidateRect.union(new Rect(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth,
                mRv.getHeight()));
        updateThumbPath();
        mInvalidateRect.union(mThumbOffset.x - mThumbCurvature, mThumbOffset.y,
                mThumbOffset.x + mThumbWidth, mThumbOffset.y + mThumbHeight);
        mRv.invalidate(mInvalidateRect);
    }

@@ -110,12 +119,14 @@ public class BaseRecyclerViewFastScrollBar {
        return mThumbOffset;
    }

    // Setter/getter for the search bar width for animations
    // Setter/getter for the thumb bar width for animations
    public void setThumbWidth(int width) {
        mInvalidateRect.set(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth, mRv.getHeight());
        mInvalidateRect.set(mThumbOffset.x - mThumbCurvature, mThumbOffset.y,
                mThumbOffset.x + mThumbWidth, mThumbOffset.y + mThumbHeight);
        mThumbWidth = width;
        mInvalidateRect.union(new Rect(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth,
                mRv.getHeight()));
        updateThumbPath();
        mInvalidateRect.union(mThumbOffset.x - mThumbCurvature, mThumbOffset.y,
                mThumbOffset.x + mThumbWidth, mThumbOffset.y + mThumbHeight);
        mRv.invalidate(mInvalidateRect);
    }

@@ -123,15 +134,19 @@ public class BaseRecyclerViewFastScrollBar {
        return mThumbWidth;
    }

    // Setter/getter for the track background alpha for animations
    public void setTrackAlpha(int alpha) {
        mTrackPaint.setAlpha(alpha);
        mInvalidateRect.set(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth, mRv.getHeight());
    // Setter/getter for the track bar width for animations
    public void setTrackWidth(int width) {
        mInvalidateRect.set(mThumbOffset.x - mThumbCurvature, 0, mThumbOffset.x + mThumbWidth,
                mRv.getHeight());
        mTrackWidth = width;
        updateThumbPath();
        mInvalidateRect.union(mThumbOffset.x - mThumbCurvature, 0, mThumbOffset.x + mThumbWidth,
                mRv.getHeight());
        mRv.invalidate(mInvalidateRect);
    }

    public int getTrackAlpha() {
        return mTrackPaint.getAlpha();
    public int getTrackWidth() {
        return mTrackWidth;
    }

    public int getThumbHeight() {
@@ -217,8 +232,7 @@ public class BaseRecyclerViewFastScrollBar {
        if (mTrackPaint.getAlpha() > 0) {
            canvas.drawRect(mThumbOffset.x, 0, mThumbOffset.x + mThumbWidth, mRv.getHeight(), mTrackPaint);
        }
        canvas.drawRect(mThumbOffset.x, mThumbOffset.y, mThumbOffset.x + mThumbWidth,
                mThumbOffset.y + mThumbHeight, mThumbPaint);
        canvas.drawPath(mThumbPath, mThumbPaint);

        // Draw the popup
        mPopup.draw(canvas);
@@ -231,10 +245,14 @@ public class BaseRecyclerViewFastScrollBar {
        if (mScrollbarAnimator != null) {
            mScrollbarAnimator.cancel();
        }
        ObjectAnimator trackAlphaAnim = ObjectAnimator.ofInt(this, "trackAlpha",
                isScrolling ? MAX_TRACK_ALPHA : 0);

        mScrollbarAnimator = new AnimatorSet();
        ObjectAnimator trackWidthAnim = ObjectAnimator.ofInt(this, "trackWidth",
                isScrolling ? mThumbMaxWidth : mThumbMinWidth);
        ObjectAnimator thumbWidthAnim = ObjectAnimator.ofInt(this, "thumbWidth",
                isScrolling ? mThumbMaxWidth : mThumbMinWidth);
        mScrollbarAnimator.playTogether(trackWidthAnim, thumbWidthAnim);
        if (mThumbActiveColor != mThumbInactiveColor) {
            ValueAnimator colorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(),
                    mThumbPaint.getColor(), isScrolling ? mThumbActiveColor : mThumbInactiveColor);
            colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@@ -245,12 +263,27 @@ public class BaseRecyclerViewFastScrollBar {
                            mThumbOffset.y + mThumbHeight);
                }
            });
        mScrollbarAnimator = new AnimatorSet();
        mScrollbarAnimator.playTogether(trackAlphaAnim, thumbWidthAnim, colorAnimation);
            mScrollbarAnimator.play(colorAnimation);
        }
        mScrollbarAnimator.setDuration(SCROLL_BAR_VIS_DURATION);
        mScrollbarAnimator.start();
    }

    /**
     * Updates the path for the thumb drawable.
     */
    private void updateThumbPath() {
        mThumbCurvature = mThumbMaxWidth - mThumbWidth;
        mThumbPath.reset();
        mThumbPath.moveTo(mThumbOffset.x + mThumbWidth, mThumbOffset.y);                    // tr
        mThumbPath.lineTo(mThumbOffset.x + mThumbWidth, mThumbOffset.y + mThumbHeight);     // br
        mThumbPath.lineTo(mThumbOffset.x, mThumbOffset.y + mThumbHeight);                   // bl
        mThumbPath.cubicTo(mThumbOffset.x, mThumbOffset.y + mThumbHeight,
                mThumbOffset.x - mThumbCurvature, mThumbOffset.y + mThumbHeight / 2,
                mThumbOffset.x, mThumbOffset.y);                                            // bl2tl
        mThumbPath.close();
    }

    /**
     * Returns whether the specified points are near the scroll bar bounds.
     */