summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/drawable/brightness_progress_drawable_thick.xml22
-rw-r--r--packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml13
-rw-r--r--packages/SystemUI/res/values/attrs.xml4
-rw-r--r--packages/SystemUI/res/values/dimens.xml8
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessControllerSettings.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/RoundedCornerProgressDrawable.kt118
7 files changed, 155 insertions, 27 deletions
diff --git a/packages/SystemUI/res/drawable/brightness_progress_drawable_thick.xml b/packages/SystemUI/res/drawable/brightness_progress_drawable_thick.xml
index 108591beb05a..d097472471b0 100644
--- a/packages/SystemUI/res/drawable/brightness_progress_drawable_thick.xml
+++ b/packages/SystemUI/res/drawable/brightness_progress_drawable_thick.xml
@@ -15,22 +15,24 @@
~ limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:paddingMode="stack">
+ android:paddingMode="stack" >
<item android:id="@android:id/background"
android:gravity="center_vertical|fill_horizontal">
- <layer-list >
+ <layer-list>
<item>
<shape
android:tint="?android:attr/colorControlActivated"
android:alpha="?android:attr/disabledAlpha">
- <size android:height="48dp" />
+ <size android:height="@dimen/rounded_slider_height" />
<solid android:color="@color/white_disabled" />
- <corners android:radius="24dp" />
+ <corners android:radius="@dimen/rounded_slider_corner_radius" />
</shape>
</item>
<item
- android:gravity="center_vertical|start"
- android:start="32dp">
+ android:gravity="center_vertical|left"
+ android:height="@dimen/rounded_slider_icon_size"
+ android:width="@dimen/rounded_slider_icon_size"
+ android:left="@dimen/rounded_slider_icon_inset">
<com.android.systemui.util.AlphaTintDrawableWrapper
android:drawable="@drawable/ic_brightness"
android:tint="?android:attr/colorControlActivated" />
@@ -39,10 +41,8 @@
</item>
<item android:id="@android:id/progress"
android:gravity="center_vertical|fill_horizontal">
- <clip
- android:drawable="@drawable/brightness_progress_full_drawable"
- android:clipOrientation="horizontal"
- android:gravity="left"
- />
+ <com.android.systemui.util.RoundedCornerProgressDrawable
+ android:drawable="@drawable/brightness_progress_full_drawable"
+ />
</item>
</layer-list> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml b/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
index b5def5ebf539..41140a7a8c85 100644
--- a/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
+++ b/packages/SystemUI/res/drawable/brightness_progress_full_drawable.xml
@@ -15,18 +15,21 @@
~ limitations under the License.
-->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+ android:autoMirrored="true">
<item android:id="@+id/slider_foreground">
<shape>
- <size android:height="48dp" />
+ <size android:height="@dimen/rounded_slider_height" />
<solid android:color="?android:attr/colorControlActivated" />
- <corners android:radius="24dp"/>
+ <corners android:radius="@dimen/rounded_slider_corner_radius"/>
</shape>
</item>
<item
android:id="@+id/slider_icon"
- android:gravity="center_vertical|start"
- android:start="32dp">
+ android:gravity="center_vertical|right"
+ android:height="@dimen/rounded_slider_icon_size"
+ android:width="@dimen/rounded_slider_icon_size"
+ android:right="@dimen/rounded_slider_icon_inset">
<com.android.systemui.util.AlphaTintDrawableWrapper
android:drawable="@drawable/ic_brightness"
android:tint="?android:attr/colorBackground"
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index e2fe223f591b..6c55fb62e638 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -177,5 +177,9 @@
<attr name="handleColor" format="color" />
<attr name="scrimColor" format="color" />
</declare-styleable>
+
+ <declare-styleable name="RoundedCornerProgressDrawable">
+ <attr name="android:drawable" />
+ </declare-styleable>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 1fac96bb181d..d92f4ea65390 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1333,4 +1333,12 @@
<dimen name="people_space_widget_radius">24dp</dimen>
<dimen name="people_space_widget_round_radius">100dp</dimen>
<dimen name="people_space_widget_background_padding">6dp</dimen>
+
+ <dimen name="rounded_slider_height">48dp</dimen>
+ <!-- rounded_slider_height / 2 -->
+ <dimen name="rounded_slider_corner_radius">24dp</dimen>
+ <!-- rounded_slider_height / 2 -->
+ <dimen name="rounded_slider_icon_size">24dp</dimen>
+ <!-- rounded_slider_icon_size / 2 -->
+ <dimen name="rounded_slider_icon_inset">12dp</dimen>
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessControllerSettings.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessControllerSettings.java
index 8dcc8b46f024..3c7d78c928fa 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessControllerSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessControllerSettings.java
@@ -18,7 +18,6 @@ package com.android.systemui.settings.brightness;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.FeatureFlags;
-import com.android.systemui.util.settings.SecureSettings;
import javax.inject.Inject;
@@ -30,25 +29,21 @@ public class BrightnessControllerSettings {
private static final String THICK_BRIGHTNESS_SLIDER = "sysui_thick_brightness";
private final FeatureFlags mFeatureFlags;
- private final boolean mUseThickSlider;
- private final boolean mUseMirrorOnThickSlider;
@Inject
- public BrightnessControllerSettings(SecureSettings settings, FeatureFlags featureFlags) {
+ public BrightnessControllerSettings(FeatureFlags featureFlags) {
mFeatureFlags = featureFlags;
- mUseThickSlider = settings.getInt(THICK_BRIGHTNESS_SLIDER, 0) != 0;
- mUseMirrorOnThickSlider = settings.getInt(THICK_BRIGHTNESS_SLIDER, 0) != 2;
}
// Changing this setting between zero and non-zero may crash systemui down the line. Better to
// restart systemui after changing it.
/** */
boolean useThickSlider() {
- return mUseThickSlider && mFeatureFlags.useNewBrightnessSlider();
+ return mFeatureFlags.useNewBrightnessSlider();
}
/** */
boolean useMirrorOnThickSlider() {
- return !useThickSlider() || (useThickSlider() && mUseMirrorOnThickSlider);
+ return !useThickSlider();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java
index 53ff1dfd277b..a6aec3b7b1b7 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java
@@ -17,7 +17,6 @@
package com.android.systemui.settings.brightness;
import android.content.Context;
-import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.view.LayoutInflater;
@@ -33,6 +32,7 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
+import com.android.systemui.util.RoundedCornerProgressDrawable;
import com.android.systemui.util.ViewController;
import javax.inject.Inject;
@@ -292,8 +292,8 @@ public class BrightnessSlider
if (b.getProgressDrawable() instanceof LayerDrawable) {
Drawable progress = ((LayerDrawable) b.getProgressDrawable())
.findDrawableByLayerId(com.android.internal.R.id.progress);
- if (progress instanceof ClipDrawable) {
- Drawable inner = ((ClipDrawable) progress).getDrawable();
+ if (progress instanceof RoundedCornerProgressDrawable) {
+ Drawable inner = ((RoundedCornerProgressDrawable) progress).getDrawable();
if (inner instanceof LayerDrawable) {
return (LayerDrawable) inner;
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/RoundedCornerProgressDrawable.kt b/packages/SystemUI/src/com/android/systemui/util/RoundedCornerProgressDrawable.kt
new file mode 100644
index 000000000000..1af2c9f46373
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/util/RoundedCornerProgressDrawable.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.util
+
+import android.content.res.Resources
+import android.content.res.TypedArray
+import android.graphics.Canvas
+import android.graphics.Path
+import android.graphics.Rect
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.DrawableWrapper
+import android.util.AttributeSet
+import com.android.systemui.R
+import org.xmlpull.v1.XmlPullParser
+
+/**
+ * [DrawableWrapper] to use in the progress of a slider.
+ *
+ * This drawable is used to change the bounds of the enclosed drawable depending on the level to
+ * simulate a sliding progress, instead of using clipping or scaling. That way, the shape of the
+ * edges is maintained.
+ *
+ * Meant to be used with a rounded ends background, it will also prevent deformation when the slider
+ * is meant to be smaller than the rounded corner. The background should have rounded corners that
+ * are half of the height.
+ */
+class RoundedCornerProgressDrawable(drawable: Drawable?) : DrawableWrapper(drawable) {
+
+ constructor() : this(null)
+
+ companion object {
+ private const val MAX_LEVEL = 10000 // Taken from Drawable
+ }
+
+ private var clipPath: Path = Path()
+
+ init {
+ setClipPath(Rect())
+ }
+
+ override fun inflate(
+ r: Resources,
+ parser: XmlPullParser,
+ attrs: AttributeSet,
+ theme: Resources.Theme?
+ ) {
+ val a = obtainAttributes(r, theme, attrs, R.styleable.RoundedCornerProgressDrawable)
+
+ // Inflation will advance the XmlPullParser and AttributeSet.
+ super.inflate(r, parser, attrs, theme)
+
+ updateStateFromTypedArray(a)
+ if (drawable == null) {
+ throw IllegalStateException("${this::class.java.simpleName} needs a drawable")
+ }
+ a.recycle()
+ }
+
+ override fun onLayoutDirectionChanged(layoutDirection: Int): Boolean {
+ onLevelChange(level)
+ return super.onLayoutDirectionChanged(layoutDirection)
+ }
+
+ private fun updateStateFromTypedArray(a: TypedArray) {
+ if (a.hasValue(R.styleable.RoundedCornerProgressDrawable_android_drawable)) {
+ setDrawable(a.getDrawable(R.styleable.RoundedCornerProgressDrawable_android_drawable))
+ }
+ }
+
+ override fun onBoundsChange(bounds: Rect) {
+ setClipPath(bounds)
+ super.onBoundsChange(bounds)
+ onLevelChange(level)
+ }
+
+ private fun setClipPath(bounds: Rect) {
+ clipPath.reset()
+ clipPath.addRoundRect(
+ bounds.left.toFloat(),
+ bounds.top.toFloat(),
+ bounds.right.toFloat(),
+ bounds.bottom.toFloat(),
+ bounds.height().toFloat() / 2,
+ bounds.height().toFloat() / 2,
+ Path.Direction.CW
+ )
+ }
+
+ override fun onLevelChange(level: Int): Boolean {
+ val db = drawable?.bounds!!
+ val width = bounds.width() * level / MAX_LEVEL
+ // Extra space on the left to keep the rounded shape on the right end
+ val leftBound = bounds.left - bounds.height()
+ drawable?.setBounds(leftBound, db.top, bounds.left + width, db.bottom)
+ return super.onLevelChange(level)
+ }
+
+ override fun draw(canvas: Canvas) {
+ canvas.save()
+ canvas.clipPath(clipPath)
+ super.draw(canvas)
+ canvas.restore()
+ }
+} \ No newline at end of file