1 /* 2 * Copyright (C) 2025 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.keyguard.ui.transitions 18 19 import android.util.MathUtils 20 import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow 21 import javax.inject.Inject 22 import kotlinx.coroutines.flow.Flow 23 24 /** 25 * {@link GlanceableHubBlurProvider} helps provide a consistent blur experience across glanceable 26 * hub transitions by defining a single point where both the exit and entry flows are defined. Note 27 * that since these flows are driven by the specific transition animations, a singleton provider 28 * cannot be used. 29 */ 30 class GlanceableHubBlurProvider 31 @Inject 32 constructor( 33 transitionAnimation: KeyguardTransitionAnimationFlow.FlowBuilder, 34 blurConfig: BlurConfig, 35 ) { 36 val exitBlurRadius: Flow<Float> = 37 transitionAnimation.sharedFlow( <lambda>null38 onStep = { MathUtils.lerp(blurConfig.maxBlurRadiusPx, blurConfig.minBlurRadiusPx, it) }, <lambda>null39 onStart = { blurConfig.maxBlurRadiusPx }, <lambda>null40 onFinish = { blurConfig.minBlurRadiusPx }, <lambda>null41 onCancel = { blurConfig.maxBlurRadiusPx }, 42 ) 43 44 val enterBlurRadius: Flow<Float> = 45 transitionAnimation.sharedFlow( <lambda>null46 onStep = { MathUtils.lerp(blurConfig.minBlurRadiusPx, blurConfig.maxBlurRadiusPx, it) }, <lambda>null47 onStart = { blurConfig.minBlurRadiusPx }, <lambda>null48 onFinish = { blurConfig.maxBlurRadiusPx }, <lambda>null49 onCancel = { blurConfig.minBlurRadiusPx }, 50 ) 51 } 52