@@ -24,7 +24,7 @@ class ParamsAppChooserRender(
2424) : DialogAppChooser.Callback {
2525
2626 private val uiMode = context.resources.configuration.uiMode
27- private var darkMode: Boolean =
27+ private val darkMode: Boolean =
2828 (uiMode and Configuration .UI_MODE_NIGHT_MASK ) == Configuration .UI_MODE_NIGHT_YES
2929
3030 private lateinit var valueView: TextView
@@ -54,7 +54,7 @@ class ParamsAppChooserRender(
5454 // OPEN DIALOG + LOAD ASYNC
5555 // =======================
5656 private fun openAppChooser () {
57- packages = ArrayList () // rỗng ban đầu
57+ packages = ArrayList ()
5858
5959 val dialog = DialogAppChooser (
6060 darkMode,
@@ -64,7 +64,6 @@ class ParamsAppChooserRender(
6464 )
6565
6666 dialog.show(context.supportFragmentManager, " app-chooser" )
67-
6867 loadPackagesAsync(dialog, actionParamInfo.type == " packages" )
6968 }
7069
@@ -74,24 +73,23 @@ class ParamsAppChooserRender(
7473 ) {
7574 val pm = context.packageManager
7675 val filterSet = actionParamInfo.optionsFromShell
77- ?.map { it.value }
76+ ?.mapNotNull { it.value }
7877 ?.toHashSet()
7978
8079 context.lifecycleScope.launch(Dispatchers .IO ) {
8180 val apps = pm.getInstalledApplications(PackageManager .MATCH_ALL )
8281
82+ val result = HashMap <String , AdapterAppChooser .AppInfo >(apps.size)
8383 val batch = ArrayList <AdapterAppChooser .AppInfo >(10 )
84- val result = HashMap <String , AdapterAppChooser .AppInfo >(128 )
8584
8685 for ((index, app) in apps.withIndex()) {
8786 val pkg = app.packageName
8887
8988 if (filterSet == null || filterSet.contains(pkg)) {
9089 val info = AdapterAppChooser .AppInfo ().apply {
91- packageName = pkg // GIỮ NULL
90+ packageName = pkg // GIỮ NULL
9291 appName = app.loadLabel(pm)?.toString() // GIỮ NULL
9392 }
94-
9593 result[pkg] = info
9694 batch.add(info)
9795 }
@@ -102,7 +100,7 @@ class ParamsAppChooserRender(
102100
103101 withContext(Dispatchers .Main ) {
104102 packages.addAll(copy)
105- setSelectStatus() // GIỮ LOGIC CŨ
103+ setSelectStatus()
106104 dialog.notifyDataChanged()
107105 }
108106 }
@@ -111,7 +109,6 @@ class ParamsAppChooserRender(
111109 // thêm app bị thiếu (giữ nguyên hành vi cũ)
112110 if (includeMissing && actionParamInfo.optionsFromShell != null ) {
113111 val missing = ArrayList <AdapterAppChooser .AppInfo >()
114-
115112 for (item in actionParamInfo.optionsFromShell!! ) {
116113 val pkg = item.value
117114 if (pkg != null && ! result.containsKey(pkg)) {
@@ -123,13 +120,12 @@ class ParamsAppChooserRender(
123120 )
124121 }
125122 }
126-
127123 withContext(Dispatchers .Main ) {
128124 packages.addAll(missing)
129125 }
130126 }
131127
132- // SORT SAU KHI LOAD XONG (GIỮ HÀNH VI CŨ )
128+ // sort cuối (giữ hành vi cũ )
133129 withContext(Dispatchers .Main ) {
134130 val collator = Collator .getInstance(Locale .getDefault())
135131 packages.sortWith { a, b ->
@@ -147,21 +143,18 @@ class ParamsAppChooserRender(
147143 private fun setSelectStatus () {
148144 packages.forEach { it.selected = false }
149145
150- val currentValue = valueView.text
146+ val currentValue = valueView.text.toString()
151147 if (actionParamInfo.multiple) {
152148 currentValue.split(actionParamInfo.separator).forEach { value ->
153149 packages.find { it.packageName == value }?.selected = true
154150 }
155151 } else {
156- val current = packages.find { it.packageName == currentValue }
157- if (current != null ) {
158- current.selected = true
159- }
152+ packages.find { it.packageName == currentValue }?.selected = true
160153 }
161154 }
162155
163156 // =======================
164- // INIT UI VALUE (GIỮ NGUYÊN 100% )
157+ // INIT UI VALUE (GIỮ NGUYÊN HÀNH VI )
165158 // =======================
166159 private fun setTextView () {
167160 packages = loadPackages(actionParamInfo.type == " packages" )
@@ -175,7 +168,6 @@ class ParamsAppChooserRender(
175168 ?.forEach { value ->
176169 packageMap[value]?.selected = true
177170 }
178-
179171 onConfirm(packages.filter { it.selected })
180172 } else {
181173 val validOptions = ArrayList <SelectItem >(packages.size)
@@ -196,21 +188,43 @@ class ParamsAppChooserRender(
196188
197189 if (currentIndex >= 0 ) {
198190 val item = packages[currentIndex]
199- valueView.text = item.packageName.orEmpty()
200- nameView.text = item.appName.orEmpty()
191+ valueView.text = item.packageName ? : " "
192+ nameView.text = item.appName ? : " "
201193 } else {
202194 valueView.text = " "
203195 nameView.text = " "
204196 }
205197 }
206198 }
207199
200+ // =======================
201+ // GIỮ HÀM CŨ (FIX Unresolved reference)
202+ // =======================
203+ private fun loadPackages (includeMissing : Boolean ): ArrayList <AdapterAppChooser .AppInfo > {
204+ val pm = context.packageManager
205+ val list = ArrayList <AdapterAppChooser .AppInfo >()
206+
207+ val apps = pm.getInstalledApplications(PackageManager .MATCH_ALL )
208+ for (app in apps) {
209+ list.add(
210+ AdapterAppChooser .AppInfo ().apply {
211+ packageName = app.packageName
212+ appName = app.loadLabel(pm)?.toString()
213+ }
214+ )
215+ }
216+ return list
217+ }
218+
219+ // =======================
220+ // CALLBACK
221+ // =======================
208222 override fun onConfirm (apps : List <AdapterAppChooser .AppInfo >) {
209223 if (actionParamInfo.multiple) {
210224 valueView.text =
211- apps.joinToString(actionParamInfo.separator) { it.packageName }
225+ apps.joinToString(actionParamInfo.separator) { it.packageName ? : " " }
212226 nameView.text =
213- apps.joinToString(" ," ) { it.appName }
227+ apps.joinToString(" ," ) { it.appName ? : " " }
214228 } else {
215229 val item = apps.firstOrNull()
216230 valueView.text = item?.packageName ? : " "
0 commit comments