1 package com.android.systemui.animation 2 3 import android.util.MathUtils 4 5 object ShadeInterpolation { 6 7 /** 8 * Interpolate alpha for notification background scrim during shade expansion. 9 * 10 * @param fraction Shade expansion fraction 11 */ 12 @JvmStatic 13 fun getNotificationScrimAlpha(fraction: Float): Float { 14 val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0f, 0.5f, fraction) 15 return interpolateEaseInOut(mappedFraction) 16 } 17 18 /** 19 * Interpolate alpha for shade content during shade expansion. 20 * 21 * @param fraction Shade expansion fraction 22 */ 23 @JvmStatic 24 fun getContentAlpha(fraction: Float): Float { 25 val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0.3f, 1f, fraction) 26 return interpolateEaseInOut(mappedFraction) 27 } 28 29 private fun interpolateEaseInOut(fraction: Float): Float { 30 val mappedFraction = fraction * 1.2f - 0.2f 31 return if (mappedFraction <= 0) { 32 0f 33 } else { 34 val oneMinusFrac = 1f - mappedFraction 35 (1f - 0.5f * (1f - Math.cos((3.14159f * oneMinusFrac * oneMinusFrac).toDouble()))) 36 .toFloat() 37 } 38 } 39 } 40