1 /*
2  * Copyright (C) 2023 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 
18 package com.android.systemui.keyguard.ui.binder
19 
20 import androidx.lifecycle.Lifecycle
21 import androidx.lifecycle.repeatOnLifecycle
22 import com.airbnb.lottie.LottieAnimationView
23 import com.android.systemui.keyguard.ui.viewmodel.UdfpsAodViewModel
24 import com.android.systemui.lifecycle.repeatWhenAttached
25 import kotlinx.coroutines.ExperimentalCoroutinesApi
26 import kotlinx.coroutines.launch
27 
28 @ExperimentalCoroutinesApi
29 object UdfpsAodFingerprintViewBinder {
30 
31     /**
32      * Drives UI for the UDFPS aod fingerprint view. See [UdfpsFingerprintViewBinder] and
33      * [UdfpsBackgroundViewBinder].
34      */
35     @JvmStatic
36     fun bind(
37         view: LottieAnimationView,
38         viewModel: UdfpsAodViewModel,
39     ) {
40         view.alpha = 0f
41         view.repeatWhenAttached {
42             repeatOnLifecycle(Lifecycle.State.STARTED) {
43                 launch {
44                     viewModel.burnInOffsets.collect { burnInOffsets ->
45                         view.progress = burnInOffsets.burnInProgress
46                         view.translationX = burnInOffsets.burnInXOffset.toFloat()
47                         view.translationY = burnInOffsets.burnInYOffset.toFloat()
48                     }
49                 }
50 
51                 launch { viewModel.alpha.collect { alpha -> view.alpha = alpha } }
52 
53                 launch {
54                     viewModel.padding.collect { padding ->
55                         view.setPadding(padding, padding, padding, padding)
56                     }
57                 }
58             }
59         }
60     }
61 }
62