• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<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