Skip to content

Commit 939f117

Browse files
committed
Update
1 parent f694c06 commit 939f117

2 files changed

Lines changed: 16 additions & 12 deletions

File tree

app/src/main/assets/home/etc/tool-tree.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ cat "$dirvad/addon.prop" 2>/dev/null | awk -F= -v k="$1" '$1==k{print $2; exit}'
6767
echo '<group>
6868
<page id="patch_rom" icon="'`urladd icon`'" config-sh="'$dirvad'/index.bash home">
6969
<title>'$(gprop name)'</title>
70-
<option type="default" id="v1" auto-off="true" reload="true" interruptible="false">'$google_translate_text'</option>
70+
<option box="glog auto_trans_text_patch_rom" id="v1" type="checkbox" auto-off="true" reload="true" interruptible="false">'$google_translate_text'</option>
7171
<option type="refresh">'$refresh_text'</option>
7272
<option type="default" auto-finish="true" id="123">'$update_text' add-on</option>
7373
<handler>

app/src/main/java/com/tool/tree/ActionPage.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,12 @@ class ActionPage : AppCompatActivity() {
157157
menuOptions = PageMenuLoader(applicationContext, config).load()
158158
}
159159

160-
// Xóa sạch menu cũ nếu có để tránh trùng lặp khi invalidateOptionsMenu() được gọi
161160
menu?.clear()
162161

163162
menuOptions?.forEachIndexed { index, option ->
164163
if (option.isFab) {
165164
addFab(option)
166165
} else {
167-
// SỬA: Gán chính xác Menu.NONE cho groupId, index cho itemId và order
168166
val menuItem = menu?.add(Menu.NONE, index, index, option.title)
169167
if (option.type == "checkbox") {
170168
menuItem?.isCheckable = true
@@ -175,7 +173,6 @@ class ActionPage : AppCompatActivity() {
175173
}
176174

177175
override fun onPrepareOptionsMenu(menu: Menu): Boolean {
178-
// Cập nhật giao diện tích (isChecked) trước khi Menu hiển thị ra cho người dùng
179176
menuOptions?.forEachIndexed { index, option ->
180177
if (!option.isFab && option.type == "checkbox") {
181178
val menuItem = menu.findItem(index)
@@ -186,25 +183,34 @@ class ActionPage : AppCompatActivity() {
186183
return super.onPrepareOptionsMenu(menu)
187184
}
188185

186+
// SỬA LỖI LOẠN VỊ TRÍ: Ánh xạ chính xác bằng originalIndex gốc của mảng menuOptions
189187
private fun refreshCheckboxMenuStates() {
190188
val config = currentPageConfig ?: return
191-
val checkboxOptions = menuOptions?.filter { it.type == "checkbox" && it.checkedSh.isNotEmpty() }
192-
if (checkboxOptions.isNullOrEmpty() || menuCheckboxRefreshing) return
189+
190+
// Tạo một danh sách Pair chứa cặp (Vị trí gốc trong menuOptions, Đối tượng Option)
191+
val checkboxOptionsWithIndex = menuOptions?.mapIndexed { index, option -> index to option }
192+
?.filter { (_, option) -> option.type == "checkbox" && option.checkedSh.isNotEmpty() }
193+
194+
if (checkboxOptionsWithIndex.isNullOrEmpty() || menuCheckboxRefreshing) return
193195
menuCheckboxRefreshing = true
194196

195197
lifecycleScope.launch(Dispatchers.IO) {
196-
val results = checkboxOptions.map { option ->
197-
option to ScriptEnvironmen.executeResultRoot(this@ActionPage, option.checkedSh, config)?.trim()
198+
// Thực thi script và giữ nguyên vị trí index gốc ban đầu
199+
val results = checkboxOptionsWithIndex.map { (originalIndex, option) ->
200+
val result = ScriptEnvironmen.executeResultRoot(this@ActionPage, option.checkedSh, config)?.trim()
201+
Triple(originalIndex, option, result)
198202
}
199203

200204
withContext(Dispatchers.Main) {
201205
menuCheckboxRefreshing = false
202206
var changed = false
203-
results.forEach { (option, result) ->
207+
208+
results.forEach { (originalIndex, option, result) ->
204209
val newChecked = result == "1" || result?.lowercase() == "true"
205210
if (option.checked != newChecked) changed = true
206211
option.checked = newChecked
207212
}
213+
208214
if (changed && !isFinishing) {
209215
invalidateOptionsMenu()
210216
}
@@ -226,13 +232,11 @@ class ActionPage : AppCompatActivity() {
226232

227233
override fun onOptionsItemSelected(item: MenuItem): Boolean {
228234
val options = menuOptions ?: return false
229-
val index = item.itemId // itemId bây giờ lưu chính xác vị trí index của mảng
235+
val index = item.itemId
230236

231-
// SỬA: Đảm bảo kiểm tra index hợp lệ trong phạm vi của mảng options
232237
if (index in options.indices) {
233238
val option = options[index]
234239

235-
// Nếu là Checkbox, đảo trạng thái ngay lập tức trên UI để người dùng thấy mượt mà
236240
if (option.type == "checkbox") {
237241
option.checked = !option.checked
238242
item.isChecked = option.checked

0 commit comments

Comments
 (0)