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 * @param fraction Shade expansion fraction 10 */ 11 @JvmStatic 12 fun getNotificationScrimAlpha(fraction: Float): Float { 13 val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0f, 0.5f, fraction) 14 return interpolateEaseInOut(mappedFraction) 15 } 16 17 /** 18 * Interpolate alpha for shade content during shade expansion. 19 * @param fraction Shade expansion fraction 20 */ 21 @JvmStatic 22 fun getContentAlpha(fraction: Float): Float { 23 val mappedFraction = MathUtils.constrainedMap(0f, 1f, 0.3f, 1f, fraction) 24 return interpolateEaseInOut(mappedFraction) 25 } 26 27 private fun interpolateEaseInOut(fraction: Float): Float { 28 val mappedFraction = fraction * 1.2f - 0.2f 29 return if (mappedFraction <= 0) { 30 0f 31 } else { 32 val oneMinusFrac = 1f - mappedFraction 33 (1f - 0.5f * (1f - Math.cos((3.14159f * oneMinusFrac * oneMinusFrac).toDouble()))) 34 .toFloat() 35 } 36 } 37 }