1 package com.android.systemui.statusbar 2 3 import android.content.Context 4 import android.util.IndentingPrintWriter 5 import android.util.MathUtils 6 import com.android.systemui.res.R 7 import com.android.systemui.dump.DumpManager 8 import com.android.systemui.shade.ShadeDisplayAware 9 import com.android.systemui.statusbar.phone.ScrimController 10 import com.android.systemui.statusbar.policy.ConfigurationController 11 import com.android.systemui.statusbar.policy.SplitShadeStateController 12 import javax.inject.Inject 13 14 /** Controls the lockscreen to shade transition for scrims. */ 15 class LockscreenShadeScrimTransitionController 16 @Inject 17 constructor( 18 private val scrimController: ScrimController, 19 @ShadeDisplayAware context: Context, 20 configurationController: ConfigurationController, 21 dumpManager: DumpManager, 22 splitShadeStateController: SplitShadeStateController 23 ) : AbstractLockscreenShadeTransitionController(context, configurationController, dumpManager, 24 splitShadeStateController) { 25 26 /** 27 * Distance that the full shade transition takes in order for scrim to fully transition to the 28 * shade (in alpha) 29 */ 30 private var scrimTransitionDistance = 0 31 32 /** Distance it takes in order for the notifications scrim fade in to start. */ 33 private var notificationsScrimTransitionDelay = 0 34 35 /** Distance it takes for the notifications scrim to fully fade if after it started. */ 36 private var notificationsScrimTransitionDistance = 0 37 38 /** The latest progress [0,1] the scrims transition. */ 39 var scrimProgress = 0f 40 41 /** The latest progress [0,1] specifically of the notifications scrim transition. */ 42 var notificationsScrimProgress = 0f 43 44 /** 45 * The last drag amount specifically for the notifications scrim. It is different to the normal 46 * [dragDownAmount] as the notifications scrim transition starts relative to the other scrims' 47 * progress. 48 */ 49 var notificationsScrimDragAmount = 0f 50 updateResourcesnull51 override fun updateResources() { 52 scrimTransitionDistance = 53 context.resources.getDimensionPixelSize( 54 R.dimen.lockscreen_shade_scrim_transition_distance) 55 notificationsScrimTransitionDelay = 56 context.resources.getDimensionPixelSize( 57 R.dimen.lockscreen_shade_notifications_scrim_transition_delay) 58 notificationsScrimTransitionDistance = 59 context.resources.getDimensionPixelSize( 60 R.dimen.lockscreen_shade_notifications_scrim_transition_distance) 61 } 62 onDragDownAmountChangednull63 override fun onDragDownAmountChanged(dragDownAmount: Float) { 64 scrimProgress = MathUtils.saturate(dragDownAmount / scrimTransitionDistance) 65 notificationsScrimDragAmount = dragDownAmount - notificationsScrimTransitionDelay 66 notificationsScrimProgress = 67 MathUtils.saturate(notificationsScrimDragAmount / notificationsScrimTransitionDistance) 68 scrimController.setTransitionToFullShadeProgress(scrimProgress, notificationsScrimProgress) 69 } 70 dumpnull71 override fun dump(indentingPrintWriter: IndentingPrintWriter) { 72 indentingPrintWriter.let { 73 it.println("LockscreenShadeScrimTransitionController:") 74 it.increaseIndent() 75 it.println("Resources:") 76 it.increaseIndent() 77 it.println("scrimTransitionDistance: $scrimTransitionDistance") 78 it.println("notificationsScrimTransitionDelay: $notificationsScrimTransitionDelay") 79 it.println( 80 "notificationsScrimTransitionDistance: $notificationsScrimTransitionDistance") 81 it.decreaseIndent() 82 it.println("State") 83 it.increaseIndent() 84 it.println("dragDownAmount: $dragDownAmount") 85 it.println("scrimProgress: $scrimProgress") 86 it.println("notificationsScrimProgress: $notificationsScrimProgress") 87 it.println("notificationsScrimDragAmount: $notificationsScrimDragAmount") 88 } 89 } 90 } 91