Skip to content

Commit 604c282

Browse files
committed
ui
1 parent 52074be commit 604c282

File tree

6 files changed

+307
-11
lines changed

6 files changed

+307
-11
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# v3.0.0_Alpha-05
2+
3+
- 美化UI
4+
- 完成关于页面
5+
- 密码字典破解增加历史记录功能
6+
- 修复编辑脚本资源后立即查看闪退的问题(好像是重构的时候自己好的?)
7+
18
# v3.0.0_Alpha-04
29

310
- 增加密码本管理、新增脚本类型的字典(非常不完善)

app/src/main/java/com/wifi/toolbox/ToolboxApp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.wifi.toolbox
33
import android.app.*
44
import com.wifi.toolbox.app.*
55
import com.wifi.toolbox.utils.ActivityStack
6+
import com.wifi.toolbox.utils.PojieHistoryManager
67
import com.wifi.toolbox.utils.SettingsManager
78
import kotlinx.coroutines.*
89

@@ -23,6 +24,7 @@ class ToolboxApp : Application() {
2324
lateinit var ui: AppUI
2425
lateinit var pojieTask: AppPojieTask
2526
lateinit var settings: SettingsManager
27+
lateinit var pojieHistory: PojieHistoryManager
2628

2729
val pojieConfig get() = pojieTask.pojieConfig
2830
val logState get() = pojieTask.logState
@@ -39,6 +41,7 @@ class ToolboxApp : Application() {
3941
ui = AppUI(appScope)
4042
pojieTask = AppPojieTask(this)
4143
settings = SettingsManager(this)
44+
pojieHistory = PojieHistoryManager(this)
4245

4346
appCrash.StartCatch()
4447
shizuku.init()

app/src/main/java/com/wifi/toolbox/services/pojie/PojieTaskManager.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,12 +237,23 @@ class PojieTaskManager(
237237
app.finishedPojieTasksTip[task.ssid] = "执行出错,请查看输出"
238238
}
239239

240+
updateHistory(app, task.ssid)
240241
worker.cleanConnection(settings)
241242

242243
when (result) {
243244
SinglePojieTask.RESULT_SUCCESS -> {
244245
service.log("连接成功: (${task.ssid}, $pass)")
245246
app.finishedPojieTasksTip[task.ssid] = "连接成功:$pass"
247+
248+
app.pojieHistory.addOrUpdateHistory(
249+
com.wifi.toolbox.utils.PojieHistoryItem(
250+
ssid = task.ssid,
251+
passwords = task.tryList,
252+
progress = task.tryIndex,
253+
successfulPassword = pass
254+
)
255+
)
256+
246257
handledSsids.add(task.ssid)
247258
app.pojieTask.stop(task.ssid)
248259
}
@@ -296,4 +307,19 @@ class PojieTaskManager(
296307
private fun getTask(app: ToolboxApp, ssid: String): PojieRunInfo? {
297308
return app.runningPojieTasks.find { it.ssid == ssid }
298309
}
310+
311+
/**
312+
* 更新历史记录
313+
*/
314+
private fun updateHistory(app: ToolboxApp, ssid: String) {
315+
getTask(app, ssid)?.let { task ->
316+
app.pojieHistory.addOrUpdateHistory(
317+
com.wifi.toolbox.utils.PojieHistoryItem(
318+
ssid = task.ssid,
319+
passwords = task.tryList,
320+
progress = task.tryIndex
321+
)
322+
)
323+
}
324+
}
299325
}

app/src/main/java/com/wifi/toolbox/ui/screen/PojieScreen.kt

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import androidx.compose.material3.*
88
import androidx.compose.runtime.*
99
import androidx.compose.runtime.saveable.rememberSaveable
1010
import androidx.compose.runtime.snapshots.SnapshotStateMap
11+
import androidx.compose.ui.Alignment
1112
import androidx.compose.ui.Modifier
1213
import androidx.compose.ui.platform.LocalContext
14+
import androidx.compose.ui.unit.dp
1315
import com.wifi.toolbox.ui.screen.pojie.*
1416
import com.wifi.toolbox.ToolboxApp
1517
import com.wifi.toolbox.structs.*
@@ -71,6 +73,12 @@ fun PojieScreenContent(
7173

7274
var showResourcesFabDialog by rememberSaveable { mutableStateOf(false) }
7375

76+
var showHistoryConfirmDialog by remember { mutableStateOf(false) }
77+
78+
val historyItem = remember(currentTargetSsid, app?.pojieHistory?.historyFlow?.collectAsState()?.value) {
79+
app?.pojieHistory?.historyFlow?.value?.find { it.ssid == currentTargetSsid }
80+
}
81+
7482
val pages = remember(pojieSettings, pojieWifiController, showResourcesFabDialog) {
7583
listOf(
7684
object : NavPage {
@@ -100,7 +108,13 @@ fun PojieScreenContent(
100108
controller = pojieWifiController,
101109
onStartClick = { ssid ->
102110
currentTargetSsid = ssid
103-
showResourceSheet = true
111+
// 如果历史记录中有这个 SSID 且还没跑完
112+
val hasHistory = app?.pojieHistory?.historyFlow?.value?.any { it.ssid == ssid } == true
113+
if (hasHistory) {
114+
showHistoryConfirmDialog = true
115+
} else {
116+
showResourceSheet = true
117+
}
104118
},
105119
onStopClick = { ssid -> app?.pojieTask?.stop(ssid) }
106120
)
@@ -147,4 +161,88 @@ fun PojieScreenContent(
147161
}
148162
)
149163
}
164+
165+
if (showHistoryConfirmDialog && historyItem != null) {
166+
HistoryRecoveryDialog(
167+
item = historyItem,
168+
onDismiss = { showHistoryConfirmDialog = false },
169+
onContinue = {
170+
app?.pojieTask?.start(
171+
PojieRunInfo(
172+
ssid = historyItem.ssid,
173+
tryList = historyItem.passwords,
174+
tryIndex = historyItem.progress,
175+
lastTryTime = System.currentTimeMillis()
176+
)
177+
)
178+
showHistoryConfirmDialog = false
179+
},
180+
onReSelect = {
181+
showHistoryConfirmDialog = false
182+
showResourceSheet = true
183+
}
184+
)
185+
}
186+
}
187+
188+
@Composable
189+
fun HistoryRecoveryDialog(
190+
item: com.wifi.toolbox.utils.PojieHistoryItem,
191+
onDismiss: () -> Unit,
192+
onContinue: () -> Unit,
193+
onReSelect: () -> Unit
194+
) {
195+
AlertDialog(
196+
onDismissRequest = onDismiss,
197+
icon = { Icon(Icons.Outlined.History, contentDescription = null, tint = MaterialTheme.colorScheme.primary) },
198+
title = { Text("发现历史记录") },
199+
text = {
200+
Column(modifier = Modifier.fillMaxWidth()) {
201+
Text("检测到该网络曾有破解进度,是否继续?", style = MaterialTheme.typography.bodyMedium)
202+
Surface(
203+
modifier = Modifier.padding(top = 16.dp),
204+
color = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.5f),
205+
shape = MaterialTheme.shapes.medium
206+
) {
207+
Column(modifier = Modifier.padding(12.dp).fillMaxWidth()) {
208+
Text("SSID: ${item.ssid}", style = MaterialTheme.typography.labelLarge)
209+
Text(
210+
"上次进度: 第 ${item.progress} / ${item.passwords.size} 个密码",
211+
style = MaterialTheme.typography.bodySmall,
212+
color = MaterialTheme.colorScheme.onSurfaceVariant
213+
)
214+
}
215+
}
216+
}
217+
},
218+
confirmButton = {
219+
Row(
220+
modifier = Modifier.fillMaxWidth(),
221+
verticalAlignment = Alignment.CenterVertically,
222+
horizontalArrangement = Arrangement.End
223+
) {
224+
TextButton(onClick = onDismiss) {
225+
Text("取消")
226+
}
227+
228+
Spacer(modifier = Modifier.weight(1f))
229+
TextButton(
230+
onClick = onReSelect,
231+
colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colorScheme.error)
232+
) {
233+
Text("重选字典")
234+
}
235+
236+
Spacer(modifier = Modifier.width(8.dp))
237+
238+
Button(
239+
onClick = onContinue,
240+
elevation = ButtonDefaults.buttonElevation(defaultElevation = 0.dp)
241+
) {
242+
Text("沿用进度")
243+
}
244+
}
245+
},
246+
dismissButton = null
247+
)
150248
}
Lines changed: 88 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,96 @@
11
package com.wifi.toolbox.ui.screen.pojie
22

3-
import androidx.compose.foundation.layout.Box
4-
import androidx.compose.foundation.layout.fillMaxSize
5-
import androidx.compose.material3.Text
6-
import androidx.compose.runtime.Composable
3+
import androidx.compose.foundation.clickable
4+
import androidx.compose.foundation.layout.*
5+
import androidx.compose.foundation.lazy.LazyColumn
6+
import androidx.compose.foundation.lazy.itemsIndexed
7+
import androidx.compose.material.icons.Icons
8+
import androidx.compose.material.icons.outlined.Delete
9+
import androidx.compose.material.icons.outlined.Wifi
10+
import androidx.compose.material3.*
11+
import androidx.compose.runtime.*
712
import androidx.compose.ui.Alignment
813
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.graphics.Color
15+
import androidx.compose.ui.platform.LocalContext
16+
import androidx.compose.ui.text.style.TextAlign
17+
import androidx.compose.ui.unit.dp
18+
import com.wifi.toolbox.ToolboxApp
19+
import com.wifi.toolbox.utils.PojieHistoryItem
920

1021
@Composable
1122
fun HistoryPage() {
12-
Box(
13-
modifier = Modifier.fillMaxSize(),
14-
contentAlignment = Alignment.Center
15-
) {
16-
Text("啥都木有")
23+
val context = LocalContext.current.applicationContext as ToolboxApp
24+
val historyList by context.pojieHistory.historyFlow.collectAsState()
25+
var pendingDeleteItem by remember { mutableStateOf<PojieHistoryItem?>(null) }
26+
27+
if (historyList.isEmpty()) {
28+
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
29+
Text(
30+
text = "¯\\_(ツ)_/¯\n暂无历史记录",
31+
textAlign = TextAlign.Center,
32+
)
33+
}
34+
} else {
35+
LazyColumn(modifier = Modifier.fillMaxSize()) {
36+
itemsIndexed(historyList) { index, item ->
37+
ListItem(
38+
modifier = Modifier.clickable { /* 这里可以扩展点击恢复任务 */ },
39+
headlineContent = {
40+
Text(item.ssid, style = MaterialTheme.typography.titleMedium)
41+
},
42+
supportingContent = {
43+
Column {
44+
Text("进度: ${item.progress} / ${item.passwords.size}")
45+
item.successfulPassword?.let { pwd ->
46+
Text(
47+
"成功密码: $pwd",
48+
color = MaterialTheme.colorScheme.primary,
49+
style = MaterialTheme.typography.bodySmall
50+
)
51+
}
52+
}
53+
},
54+
trailingContent = {
55+
IconButton(onClick = { pendingDeleteItem = item }) {
56+
Icon(
57+
Icons.Outlined.Delete,
58+
contentDescription = "删除",
59+
)
60+
}
61+
}
62+
)
63+
if (index < historyList.lastIndex) {
64+
HorizontalDivider(
65+
modifier = Modifier.padding(horizontal = 16.dp),
66+
thickness = 0.5.dp,
67+
color = MaterialTheme.colorScheme.outlineVariant
68+
)
69+
}
70+
}
71+
}
72+
}
73+
74+
pendingDeleteItem?.let { item ->
75+
AlertDialog(
76+
onDismissRequest = { pendingDeleteItem = null },
77+
title = { Text("确认删除") },
78+
text = { Text("是否删除 ${item.ssid} 的记录?") },
79+
confirmButton = {
80+
TextButton(
81+
onClick = {
82+
context.pojieHistory.deleteHistory(item.ssid)
83+
pendingDeleteItem = null
84+
}
85+
) {
86+
Text("删除", color = MaterialTheme.colorScheme.error)
87+
}
88+
},
89+
dismissButton = {
90+
TextButton(onClick = { pendingDeleteItem = null }) {
91+
Text("取消")
92+
}
93+
}
94+
)
1795
}
18-
}
96+
}

0 commit comments

Comments
 (0)