@@ -58,7 +58,7 @@ class ParamsAppChooserRender(
5858 // OPEN DIALOG
5959 // =======================
6060 private fun openAppChooser () {
61- // 🔥 preload app đã có value
61+ // 🔥 preload app đã chọn → có appName
6262 packages = preloadSelectedApps()
6363
6464 val dialog = DialogAppChooser (
@@ -71,8 +71,10 @@ class ParamsAppChooserRender(
7171 dialog.show(context.supportFragmentManager, " app-chooser" )
7272 dialog.showLoading(true )
7373
74+ // load phần còn lại async
7475 loadPackagesAsync(dialog, actionParamInfo.type == " packages" )
7576 }
77+
7678 // =======================
7779 // SORTED INSERT
7880 // =======================
@@ -147,7 +149,7 @@ class ParamsAppChooserRender(
147149 if (packages.any { it.packageName == info.packageName }) continue
148150 insertSorted(packages, info)
149151 }
150- setSelectStatus()
152+ // setSelectStatus()
151153 dialog.notifyDataChanged()
152154 }
153155 }
@@ -189,18 +191,17 @@ class ParamsAppChooserRender(
189191 // SELECTION LOGIC
190192 // =======================
191193 private fun setSelectStatus () {
192- packages.forEach { it.selected = false }
193-
194- val currentValue = valueView.text.toString()
195-
196- if (actionParamInfo.multiple) {
197- currentValue
194+ val currentValues = if (actionParamInfo.multiple) {
195+ valueView.text.toString()
198196 .split(actionParamInfo.separator)
199- .forEach { value ->
200- packages.find { it.packageName == value }?.selected = true
201- }
197+ .filter { it.isNotEmpty() }
198+ .toSet()
202199 } else {
203- packages.find { it.packageName == currentValue }?.selected = true
200+ setOf (valueView.text.toString())
201+ }
202+
203+ packages.forEach {
204+ it.selected = it.packageName != null && currentValues.contains(it.packageName)
204205 }
205206 }
206207
@@ -228,28 +229,39 @@ class ParamsAppChooserRender(
228229 }
229230
230231 private fun preloadSelectedApps (): ArrayList <AdapterAppChooser .AppInfo > {
231- val result = ArrayList <AdapterAppChooser .AppInfo >()
232232 val pm = context.packageManager
233+ val result = ArrayList <AdapterAppChooser .AppInfo >()
233234
234- val values = ActionParamsLayoutRender
235- .getParamValues(actionParamInfo)
236- ? : return result
235+ val values = if (actionParamInfo.multiple) {
236+ valueView.text.toString()
237+ .split(actionParamInfo.separator)
238+ .filter { it.isNotEmpty() }
239+ } else {
240+ listOf (valueView.text.toString()).filter { it.isNotEmpty() }
241+ }
237242
238243 for (pkg in values) {
239- if (pkg.isBlank()) continue
240244 try {
241- val appInfo = pm.getApplicationInfo(pkg, 0 )
245+ val app = pm.getApplicationInfo(pkg, 0 )
242246 result.add(
243247 AdapterAppChooser .AppInfo ().apply {
244248 packageName = pkg
245- appName = pm.getApplicationLabel(appInfo )?.toString()
249+ appName = app.loadLabel(pm )?.toString() ? : pkg
246250 selected = true
247251 }
248252 )
249253 } catch (_: Exception ) {
250- // app không tồn tại → bỏ qua (giữ hành vi cũ)
254+ // app không tồn tại → vẫn thêm
255+ result.add(
256+ AdapterAppChooser .AppInfo ().apply {
257+ packageName = pkg
258+ appName = pkg
259+ selected = true
260+ }
261+ )
251262 }
252263 }
264+
253265 return result
254266 }
255267 // =======================
0 commit comments