1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.shade.transition 18 19 import com.android.systemui.dagger.SysUISingleton 20 import com.android.systemui.dump.DumpManager 21 import com.android.systemui.shade.PanelState 22 import com.android.systemui.shade.ShadeExpansionChangeEvent 23 import com.android.systemui.shade.ShadeExpansionStateManager 24 import com.android.systemui.statusbar.phone.ScrimController 25 import java.io.PrintWriter 26 import javax.inject.Inject 27 28 /** Controls the scrim properties during the shade expansion transition on non-lockscreen. */ 29 @SysUISingleton 30 class ScrimShadeTransitionController 31 @Inject 32 constructor( 33 private val shadeExpansionStateManager: ShadeExpansionStateManager, 34 private val dumpManager: DumpManager, 35 private val scrimController: ScrimController, 36 ) { 37 private var lastExpansionFraction: Float? = null 38 private var lastExpansionEvent: ShadeExpansionChangeEvent? = null 39 private var currentPanelState: Int? = null 40 initnull41 fun init() { 42 val currentState = 43 shadeExpansionStateManager.addExpansionListener(this::onPanelExpansionChanged) 44 onPanelExpansionChanged(currentState) 45 shadeExpansionStateManager.addStateListener(this::onPanelStateChanged) 46 dumpManager.registerDumpable( 47 ScrimShadeTransitionController::class.java.simpleName, 48 this::dump 49 ) 50 } 51 onPanelStateChangednull52 private fun onPanelStateChanged(@PanelState state: Int) { 53 currentPanelState = state 54 onStateChanged() 55 } 56 onPanelExpansionChangednull57 fun onPanelExpansionChanged(shadeExpansionChangeEvent: ShadeExpansionChangeEvent) { 58 lastExpansionEvent = shadeExpansionChangeEvent 59 onStateChanged() 60 } 61 onStateChangednull62 private fun onStateChanged() { 63 val expansionEvent = lastExpansionEvent ?: return 64 val expansionFraction = calculateScrimExpansionFraction(expansionEvent) 65 scrimController.setRawPanelExpansionFraction(expansionFraction) 66 lastExpansionFraction = expansionFraction 67 } 68 calculateScrimExpansionFractionnull69 private fun calculateScrimExpansionFraction(expansionEvent: ShadeExpansionChangeEvent): Float { 70 return expansionEvent.fraction 71 } 72 dumpnull73 private fun dump(printWriter: PrintWriter, args: Array<String>) { 74 printWriter.println( 75 """ 76 ScrimShadeTransitionController: 77 State: 78 currentPanelState: $currentPanelState 79 lastExpansionFraction: $lastExpansionFraction 80 lastExpansionEvent: $lastExpansionEvent 81 """ 82 .trimIndent() 83 ) 84 } 85 } 86