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

Commit bd45429b authored by Rasheed Lewis's avatar Rasheed Lewis
Browse files

Fixed inaccurate brightness slider UI

The brightness slider's sun icon now corresponds directly with where the
user taps. The user can tap both edges of the slider to easily get the
maximum and minimum brightness levels.

Fixes: 205967506
Test: Manually tested, tapped both edges of the slider and was able to easily get the max and min widths
Change-Id: I7611946edd39adb75bfbc7b990c7d9dafa105e9f
parent 2cd24931
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -33,6 +33,11 @@ import android.graphics.drawable.InsetDrawable
 * 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.
 *
 * This class also assumes that a "thumb" icon exists within the end's edge of the progress
 * drawable, and the slider's width, when interacted on, if offset by half the size of the thumb
 * icon which puts the icon directly underneath the user's finger.
 *
 */
class RoundedCornerProgressDrawable @JvmOverloads constructor(
    drawable: Drawable? = null
@@ -54,9 +59,16 @@ class RoundedCornerProgressDrawable @JvmOverloads constructor(

    override fun onLevelChange(level: Int): Boolean {
        val db = drawable?.bounds!!

        // The thumb offset shifts the sun icon directly under the user's thumb
        val thumbOffset = bounds.height() / 2
        val width = bounds.width() * level / MAX_LEVEL + thumbOffset

        // On 0, the width is bounds.height (a circle), and on MAX_LEVEL, the width is bounds.width
        val width = bounds.height() + (bounds.width() - bounds.height()) * level / MAX_LEVEL
        drawable?.setBounds(bounds.left, db.top, bounds.left + width, db.bottom)
        drawable?.setBounds(
            bounds.left, db.top,
            width.coerceAtMost(bounds.width()).coerceAtLeast(bounds.height()), db.bottom
        )
        return super.onLevelChange(level)
    }