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.dump.DumpManager 7 import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager 8 import com.android.systemui.res.R 9 import com.android.systemui.shade.ShadeDisplayAware 10 import com.android.systemui.shade.domain.interactor.ShadeLockscreenInteractor 11 import com.android.systemui.statusbar.policy.ConfigurationController 12 import com.android.systemui.statusbar.policy.SplitShadeStateController 13 import dagger.assisted.Assisted 14 import dagger.assisted.AssistedFactory 15 import dagger.assisted.AssistedInject 16 17 /** Controls the lockscreen to shade transition for the keyguard elements. */ 18 class LockscreenShadeKeyguardTransitionController 19 @AssistedInject 20 constructor( 21 private val mediaHierarchyManager: MediaHierarchyManager, 22 @Assisted private val shadeLockscreenInteractor: ShadeLockscreenInteractor, 23 @ShadeDisplayAware context: Context, 24 configurationController: ConfigurationController, 25 dumpManager: DumpManager, 26 splitShadeStateController: SplitShadeStateController, 27 ) : 28 AbstractLockscreenShadeTransitionController( 29 context, 30 configurationController, 31 dumpManager, 32 splitShadeStateController, 33 ) { 34 35 /** 36 * Distance that the full shade transition takes in order for the keyguard content on 37 * NotificationPanelViewController to fully fade (e.g. Clock & Smartspace). 38 */ 39 private var alphaTransitionDistance = 0 40 41 /** The amount of alpha that was last set on the keyguard elements. */ 42 private var alpha = 0f 43 44 /** The latest progress [0,1] of the alpha transition. */ 45 private var alphaProgress = 0f 46 47 /** The amount of alpha that was last set on the keyguard status bar. */ 48 private var statusBarAlpha = 0f 49 updateResourcesnull50 override fun updateResources() { 51 alphaTransitionDistance = 52 context.resources.getDimensionPixelSize( 53 R.dimen.lockscreen_shade_npvc_keyguard_content_alpha_transition_distance 54 ) 55 } 56 onDragDownAmountChangednull57 override fun onDragDownAmountChanged(dragDownAmount: Float) { 58 alphaProgress = MathUtils.saturate(dragDownAmount / alphaTransitionDistance) 59 alpha = 1f - alphaProgress 60 61 statusBarAlpha = if (useSplitShade) alpha else -1f 62 shadeLockscreenInteractor.setKeyguardStatusBarAlpha(statusBarAlpha) 63 } 64 dumpnull65 override fun dump(indentingPrintWriter: IndentingPrintWriter) { 66 indentingPrintWriter.let { 67 it.println("LockscreenShadeKeyguardTransitionController:") 68 it.increaseIndent() 69 it.println("Resources:") 70 it.increaseIndent() 71 it.println("alphaTransitionDistance: $alphaTransitionDistance") 72 it.decreaseIndent() 73 it.println("State:") 74 it.increaseIndent() 75 it.println("dragDownAmount: $dragDownAmount") 76 it.println("alpha: $alpha") 77 it.println("alphaProgress: $alphaProgress") 78 it.println("statusBarAlpha: $statusBarAlpha") 79 } 80 } 81 82 @AssistedFactory interfacenull83 fun interface Factory { 84 fun create( 85 shadeLockscreenInteractor: ShadeLockscreenInteractor 86 ): LockscreenShadeKeyguardTransitionController 87 } 88 } 89