<lambda>null1 package com.android.systemui.statusbar.notification.fsi
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.WindowManager
6 import com.android.systemui.CoreStartable
7 import com.android.systemui.R
8 import com.android.systemui.dagger.SysUISingleton
9 import com.android.systemui.dagger.qualifiers.Application
10 import com.android.systemui.dagger.qualifiers.Main
11 import com.android.systemui.statusbar.notification.fsi.FsiDebug.Companion.log
12 import com.android.systemui.statusbar.phone.CentralSurfaces
13 import kotlinx.coroutines.CoroutineScope
14 import kotlinx.coroutines.launch
15 import java.util.concurrent.Executor
16 import javax.inject.Inject
17
18 @SysUISingleton
19 class FsiChromeViewBinder
20 @Inject
21 constructor(
22 val context: Context,
23 val windowManager: WindowManager,
24 val viewModelFactory: FsiChromeViewModelFactory,
25 val layoutInflater: LayoutInflater,
26 val centralSurfaces: CentralSurfaces,
27 @Main val mainExecutor: Executor,
28 @Application val scope: CoroutineScope,
29 ) : CoreStartable {
30
31 companion object {
32 private const val classTag = "FsiChromeViewBinder"
33 }
34
35 private val fsiChromeView =
36 layoutInflater.inflate(R.layout.fsi_chrome_view, null /* root */, false /* attachToRoot */)
37 as FsiChromeView
38
39 var addedToWindowManager = false
40 var cornerRadius: Int = context.resources.getDimensionPixelSize(
41 R.dimen.notification_corner_radius)
42
43 override fun start() {
44 val methodTag = "start"
45 log("$classTag $methodTag ")
46
47 scope.launch {
48 log("$classTag $methodTag launch ")
49 viewModelFactory.viewModelFlow.collect { vm -> updateForViewModel(vm) }
50 }
51 }
52
53 private fun updateForViewModel(vm: FsiChromeViewModel?) {
54 val methodTag = "updateForViewModel"
55
56 if (vm == null) {
57 log("$classTag $methodTag viewModel is null, removing from window manager")
58
59 if (addedToWindowManager) {
60 windowManager.removeView(fsiChromeView)
61 addedToWindowManager = false
62 }
63 return
64 }
65
66 bindViewModel(vm, windowManager)
67
68 if (addedToWindowManager) {
69 log("$classTag $methodTag already addedToWindowManager")
70 } else {
71 windowManager.addView(fsiChromeView, FsiTaskViewConfig.getWmLayoutParams("PackageName"))
72 addedToWindowManager = true
73 }
74 }
75
76 private fun bindViewModel(
77 vm: FsiChromeViewModel,
78 windowManager: WindowManager,
79 ) {
80 log("$classTag bindViewModel")
81
82 fsiChromeView.appIconImageView.setImageDrawable(vm.appIcon)
83 fsiChromeView.appNameTextView.text = vm.appName
84
85 fsiChromeView.dismissButton.setOnClickListener { vm.onDismiss() }
86 fsiChromeView.fullscreenButton.setOnClickListener { vm.onFullscreen() }
87
88 vm.taskView.cornerRadius = cornerRadius.toFloat()
89 vm.taskView.startActivity(
90 vm.fsi,
91 FsiTaskViewConfig.getFillInIntent(),
92 FsiTaskViewConfig.getActivityOptions(context, windowManager),
93 FsiTaskViewConfig.getLaunchBounds(windowManager)
94 )
95
96 log("$classTag bindViewModel started taskview activity")
97 fsiChromeView.addView(vm.taskView)
98 }
99 }
100