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
This commit is contained in:
Fabian Kozynski
2021-05-19 16:39:38 -04:00
parent 1e372e6744
commit fdb5490745
3 changed files with 58 additions and 3 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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}.
*/