diff options
Diffstat (limited to 'android/src/main')
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt | 24 | ||||
| -rw-r--r-- | android/src/main/res/values/dimensions.xml | 8 |
2 files changed, 19 insertions, 13 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt index dee5c59e49..e3dfc81314 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt @@ -12,6 +12,7 @@ import android.view.Gravity import android.view.MotionEvent import android.widget.ImageView import android.widget.LinearLayout +import kotlin.properties.Delegates.observable import net.mullvad.mullvadvpn.R class CellSwitch : LinearLayout { @@ -20,14 +21,13 @@ class CellSwitch : LinearLayout { OFF } - var state = State.OFF - set(value) { - if (field != value) { - field = value - animateToState() - listener?.invoke(value) - } + var state by observable(State.OFF) { _, oldState, newState -> + animateToState() + + if (oldState != newState) { + listener?.invoke(newState) } + } var listener: ((State) -> Unit)? = null @@ -56,6 +56,8 @@ class CellSwitch : LinearLayout { private val knobPosition: Float get() = knobView.translationX / knobMaxTranslation + private var animationIsReversed = false + private val positionAnimation = ValueAnimator.ofFloat(0f, knobMaxTranslation).apply { addUpdateListener { animation -> knobView.translationX = animation.animatedValue as Float @@ -213,12 +215,16 @@ class CellSwitch : LinearLayout { when (state) { State.ON -> { + animationIsReversed = false colorAnimation.start() positionAnimation.start() } State.OFF -> { - colorAnimation.reverse() - positionAnimation.reverse() + if (!animationIsReversed || !colorAnimation.isRunning()) { + animationIsReversed = true + colorAnimation.reverse() + positionAnimation.reverse() + } playTime = knobAnimationDuration - playTime } diff --git a/android/src/main/res/values/dimensions.xml b/android/src/main/res/values/dimensions.xml index edf6716d50..57957c94e6 100644 --- a/android/src/main/res/values/dimensions.xml +++ b/android/src/main/res/values/dimensions.xml @@ -9,11 +9,11 @@ <dimen name="normal_button_height">44dp</dimen> <dimen name="tall_button_height">64dp</dimen> <dimen name="cell_switch_border_radius">16dp</dimen> - <dimen name="cell_switch_width">52dp</dimen> - <dimen name="cell_switch_height">32dp</dimen> + <dimen name="cell_switch_width">48dp</dimen> + <dimen name="cell_switch_height">30dp</dimen> <dimen name="cell_switch_knob_margin">4dp</dimen> - <dimen name="cell_switch_knob_max_translation">20dp</dimen> - <dimen name="cell_switch_knob_size">24dp</dimen> + <dimen name="cell_switch_knob_max_translation">18dp</dimen> + <dimen name="cell_switch_knob_size">22dp</dimen> <dimen name="settings_back_button_padding">12dp</dimen> <dimen name="cell_horizontal_padding">@dimen/side_margin</dimen> <dimen name="cell_inner_spacing">8dp</dimen> |
