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 }