12131a40fe
The unfold progresses are mapped to 0.85 - 1 range and set as a scale for launcher. In case of multiple scale animations for workspace and hotseat, they are combined using MultiScaleProperty (e.g. opening an app while unfolding/going to all apps while unfolding). Note that this is a pretty difficult scenario to be in. If that happens, we multiply all values and bound the result between the max and min values. Bug: 217368525 Test: atest MultiScalePropertyTest and manually Change-Id: I6131c39f36deade0b7280c72edda2d72045344e9
93 lines
2.1 KiB
Kotlin
93 lines
2.1 KiB
Kotlin
package com.android.launcher3.util
|
|
|
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
|
import androidx.test.filters.SmallTest
|
|
import com.google.common.truth.Truth.assertThat
|
|
import org.junit.Test
|
|
import org.junit.runner.RunWith
|
|
|
|
/** Unit tests for [MultiScalePropertyFactory] */
|
|
@SmallTest
|
|
@RunWith(AndroidJUnit4::class)
|
|
class MultiScalePropertyTest {
|
|
|
|
private val received = mutableListOf<Float>()
|
|
|
|
private val factory =
|
|
object : MultiScalePropertyFactory<Int?>("Test") {
|
|
override fun apply(obj: Int?, value: Float) {
|
|
received.add(value)
|
|
}
|
|
}
|
|
|
|
private val p1 = factory.get(1)
|
|
private val p2 = factory.get(2)
|
|
private val p3 = factory.get(3)
|
|
|
|
@Test
|
|
fun set_multipleSame_bothAppliedd() {
|
|
p1.set(null, 0.5f)
|
|
p1.set(null, 0.5f)
|
|
|
|
assertThat(received).containsExactly(0.5f, 0.5f)
|
|
}
|
|
|
|
@Test
|
|
fun set_differentIndexes_oneValuesNotCounted() {
|
|
val v1 = 0.5f
|
|
val v2 = 1.0f
|
|
p1.set(null, v1)
|
|
p2.set(null, v2)
|
|
|
|
assertThat(received).containsExactly(v1, v1)
|
|
}
|
|
|
|
@Test
|
|
fun set_onlyOneSetToOne_oneApplied() {
|
|
p1.set(null, 1.0f)
|
|
|
|
assertThat(received).containsExactly(1.0f)
|
|
}
|
|
|
|
@Test
|
|
fun set_onlyOneLessThanOne_applied() {
|
|
p1.set(null, 0.5f)
|
|
|
|
assertThat(received).containsExactly(0.5f)
|
|
}
|
|
|
|
@Test
|
|
fun set_differentIndexes_boundToMin() {
|
|
val v1 = 0.5f
|
|
val v2 = 0.6f
|
|
p1.set(null, v1)
|
|
p2.set(null, v2)
|
|
|
|
assertThat(received).containsExactly(v1, v1)
|
|
}
|
|
|
|
@Test
|
|
fun set_allHigherThanOne_boundToMax() {
|
|
val v1 = 3.0f
|
|
val v2 = 2.0f
|
|
val v3 = 1.0f
|
|
p1.set(null, v1)
|
|
p2.set(null, v2)
|
|
p3.set(null, v3)
|
|
|
|
assertThat(received).containsExactly(v1, v1, v1)
|
|
}
|
|
|
|
@Test
|
|
fun set_differentIndexes_firstModified_aggregationApplied() {
|
|
val v1 = 0.5f
|
|
val v2 = 0.6f
|
|
val v3 = 4f
|
|
p1.set(null, v1)
|
|
p2.set(null, v2)
|
|
p3.set(null, v3)
|
|
|
|
assertThat(received).containsExactly(v1, v1, v1 * v2 * v3)
|
|
}
|
|
}
|