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

Commit fdb54907 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Scale just progress of brightness slider

Manually scale the progress bar without scaling the whole View.

Cannot use ScaleDrawable, as it's driven by the same value as the
progress (Drawable#setLevel).

Test: manual
Bug: 188659910
Change-Id: If7e9eebc2b4aa10c9251d6350d29e0550993fa46
parent 1e372e67
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -10,6 +10,11 @@
  public void setGlowScale(float);
}

-keep class com.android.systemui.settings.brightness.BrightnessSliderView {
  public float getSliderScaleY();
  public void setSliderScaleY(float);
}

-keep class com.android.systemui.recents.OverviewProxyRecentsImpl
-keep class com.android.systemui.statusbar.car.CarStatusBar
-keep class com.android.systemui.statusbar.phone.StatusBar
+3 −3
Original line number Diff line number Diff line
@@ -379,10 +379,10 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
                        brightness.getMeasuredHeight() * 0.5f, 0);
                mBrightnessAnimator = new TouchAnimator.Builder()
                        .addFloat(brightness, "alpha", 0, 1)
                        .addFloat(brightness, "scaleY", 0.3f, 1)
                        .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
                        .addFloat(brightness, "sliderScaleY", 0.3f, 1)
                        .setInterpolator(Interpolators.ALPHA_IN)
                        .setStartDelay(0.3f)
                        .build();
                brightness.setPivotY(0);
                mAllViews.add(brightness);
            } else {
                mBrightnessAnimator = null;
+50 −0
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@
package com.android.systemui.settings.brightness;

import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.DrawableWrapper;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -24,6 +28,7 @@ import android.widget.FrameLayout;
import android.widget.SeekBar.OnSeekBarChangeListener;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.settingslib.RestrictedLockUtils;
import com.android.systemui.Gefingerpoken;
@@ -39,6 +44,9 @@ public class BrightnessSliderView extends FrameLayout {
    private ToggleSeekBar mSlider;
    private DispatchTouchEventListener mListener;
    private Gefingerpoken mOnInterceptListener;
    @Nullable
    private Drawable mProgressDrawable;
    private float mScale = 1f;

    public BrightnessSliderView(Context context) {
        this(context, null);
@@ -55,6 +63,17 @@ public class BrightnessSliderView extends FrameLayout {

        mSlider = requireViewById(R.id.slider);
        mSlider.setAccessibilityLabel(getContentDescription().toString());

        // Finds the progress drawable. Assumes brightness_progress_drawable.xml
        try {
            LayerDrawable progress = (LayerDrawable) mSlider.getProgressDrawable();
            DrawableWrapper progressSlider = (DrawableWrapper) progress
                    .findDrawableByLayerId(android.R.id.progress);
            LayerDrawable actualProgressSlider = (LayerDrawable) progressSlider.getDrawable();
            mProgressDrawable = actualProgressSlider.findDrawableByLayerId(R.id.slider_foreground);
        } catch (Exception e) {
            // Nothing to do, mProgressDrawable will be null.
        }
    }

    /**
@@ -151,6 +170,37 @@ public class BrightnessSliderView extends FrameLayout {
        return super.onInterceptTouchEvent(ev);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        applySliderScale();
    }

    /**
     * Sets the scale for the progress bar (for brightness_progress_drawable.xml)
     *
     * This will only scale the thick progress bar and not the icon inside
     */
    public void setSliderScaleY(float scale) {
        if (scale != mScale) {
            mScale = scale;
            applySliderScale();
        }
    }

    private void applySliderScale() {
        if (mProgressDrawable != null) {
            final Rect r = mProgressDrawable.getBounds();
            int height = (int) (mProgressDrawable.getIntrinsicHeight() * mScale);
            int inset = (mProgressDrawable.getIntrinsicHeight() - height) / 2;
            mProgressDrawable.setBounds(r.left, inset, r.right, inset + height);
        }
    }

    public float getSliderScaleY() {
        return mScale;
    }

    /**
     * Interface to attach a listener for {@link View#dispatchTouchEvent}.
     */