Skip to content

Commit afabac9

Browse files
committed
-
1 parent 615efba commit afabac9

File tree

9 files changed

+104
-44
lines changed

9 files changed

+104
-44
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
# v3.0.0_Alpha-06
2+
3+
- 支持纯root模式运行(将运行方式全部选择为AidlService,并在全局设置启动AIDL服务)
4+
- 增加多语言支持(但是只完成一大半)
5+
- 完成主页(ai写的,还要改)
6+
- wifi运行列表已保存的会有提示(甚至还有本地的密码)
7+
- 实验室-获取已保存wifi可查看明文密码(其实是上个版本的)
8+
- 修复了并增加了点BUG,还有啥记不清了
9+
110
# v3.0.0_Alpha-05
211

312
- 美化UI

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ android {
2828
minSdk = 24
2929
//noinspection ExpiredTargetSdkVersion 注:WifiManager需要
3030
targetSdk = 28
31-
versionCode = 4
32-
versionName = "v3.0.0_Alpha-05"
31+
versionCode = 5
32+
versionName = "v3.0.0_Alpha-06"
3333

3434
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
3535
}
Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,32 @@
1+
@file:Suppress("DEPRECATION")
2+
13
package com.wifi.toolbox.structs
24

5+
import android.net.wifi.WifiConfiguration
6+
37
data class WifiInfo(
48
val ssid: String,
59
val level: Int,
610
val bssid: String,
7-
val capabilities: String
8-
)
11+
val capabilities: String,
12+
val savedInfo: WifiConfiguration? = null
13+
) {
14+
companion object {
15+
fun parseCapabilities(input: WifiInfo): List<List<String>> {
16+
val regex = Regex("\\[(.*?)\\]")
17+
return regex.findAll(input.capabilities).map { match ->
18+
match.groupValues[1].split("-")
19+
}.toList()
20+
}
21+
22+
fun checkIsFreeOpenNetwork(input: WifiInfo): Boolean {
23+
val protocols = parseCapabilities(input)
24+
val securityExcluders = listOf("WPA", "WPA2", "WPA3", "RSN", "PSK", "EAP")
25+
26+
val hasESS = protocols.any { it.firstOrNull() == "ESS" }
27+
val noSecurity = protocols.none { it.firstOrNull() in securityExcluders }
28+
29+
return hasESS && noSecurity
30+
}
31+
}
32+
}

app/src/main/java/com/wifi/toolbox/ui/items/TagItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ enum class TagType { Primary, Secondary, Tertiary }
1515
@Composable
1616
fun TagItem(
1717
text: String,
18-
modifier: Modifier = Modifier,
19-
type: TagType = TagType.Secondary
18+
type: TagType = TagType.Secondary,
19+
modifier: Modifier = Modifier
2020
) {
2121
val (containerColor, contentColor) = when (type) {
2222
TagType.Primary -> MaterialTheme.colorScheme.primaryContainer to MaterialTheme.colorScheme.onPrimaryContainer

app/src/main/java/com/wifi/toolbox/ui/items/pojie/WifiPojieItem.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
@file:Suppress("DEPRECATION")
2+
13
package com.wifi.toolbox.ui.items.pojie
24

35
import android.net.wifi.WifiManager
@@ -19,6 +21,8 @@ import androidx.compose.ui.unit.dp
1921
import com.wifi.toolbox.R
2022
import com.wifi.toolbox.ToolboxApp
2123
import com.wifi.toolbox.structs.*
24+
import com.wifi.toolbox.ui.items.TagItem
25+
import com.wifi.toolbox.ui.items.TagType
2226
import com.wifi.toolbox.ui.items.WifiIcon
2327

2428
@Composable
@@ -81,7 +85,20 @@ private fun WifiItemMainHeader(
8185
) {
8286
Row(modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
8387
Column(modifier = Modifier.weight(1f)) {
84-
Text(text = wifi.ssid, style = MaterialTheme.typography.bodyLarge, maxLines = 1)
88+
FlowRow {
89+
Text(
90+
text = wifi.ssid,
91+
style = MaterialTheme.typography.bodyLarge,
92+
maxLines = 1,
93+
modifier = Modifier.align(Alignment.CenterVertically)
94+
)
95+
if (WifiInfo.checkIsFreeOpenNetwork(wifi)) TagItem("开放式", TagType.Tertiary)
96+
wifi.savedInfo?.let {
97+
if (it.preSharedKey.length >= 8) {
98+
TagItem("已保存(密码:${it.preSharedKey})")
99+
} else TagItem("已保存")
100+
}
101+
}
85102
Text(
86103
text = if (wifi.level == 0) stringResource(R.string.unknown) else stringResource(
87104
R.string.dbm_string,
@@ -208,7 +225,7 @@ private fun WifiItemRunningProgress(runningInfo: PojieRunInfo?, info: PojieRunIn
208225
Row(
209226
modifier = Modifier.fillMaxWidth(),
210227
horizontalArrangement = Arrangement.SpaceBetween
211-
){
228+
) {
212229
Text(
213230
text = it.textTip,
214231
style = MaterialTheme.typography.bodySmall,
@@ -217,7 +234,10 @@ private fun WifiItemRunningProgress(runningInfo: PojieRunInfo?, info: PojieRunIn
217234
)
218235
Text(
219236
text = avgMs?.let { ms ->
220-
stringResource(R.string.remaining_time_format, formatDuration(ms * (it.tryList.size - it.tryIndex)))
237+
stringResource(
238+
R.string.remaining_time_format,
239+
formatDuration(ms * (it.tryList.size - it.tryIndex))
240+
)
221241
} ?: stringResource(R.string.calculating_time),
222242
style = MaterialTheme.typography.labelMedium,
223243
color = MaterialTheme.colorScheme.onTertiaryContainer.copy(alpha = 0.8f)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ fun SettingsPage(
140140

141141
item {
142142
AnimatedVisibility(
143-
visible = pojieSettings.scanMode == 1,
143+
visible = pojieSettings.scanMode == 1 || pojieSettings.scanMode == 2,
144144
enter = expandVertically(),
145145
exit = shrinkVertically()
146146
) {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,11 @@ private fun checkAndPerformAndGetWifiList(
254254
logState.addLog(context.getString(R.string.saved_wifi_list_head))
255255
result.forEach {
256256
@Suppress("DEPRECATION") logState.addLog(
257-
String.format(
258-
context.getString(R.string.saved_wifi_item),
259-
it.first,
260-
it.second.removeSurrounding("\""),
257+
context.getString(
258+
R.string.saved_wifi_item_with_psk,
259+
it.networkId.toString(),
260+
it.SSID.removeSurrounding("\""),
261+
it.preSharedKey?.removeSurrounding("\"") ?: ""
261262
)
262263
)
263264
}

app/src/main/java/com/wifi/toolbox/utils/ApiUtil.kt

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,22 @@ object ApiUtil {
120120
context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
121121
return wifiManager.removeNetwork(netId)
122122
}
123+
123124
fun enableLocation(context: Context, onEnabled: (() -> Unit)? = null): Boolean {
124125
val activity = context as? MainActivity ?: return false
125126
if (!isLocationEnabled(context)) {
126127
activity.pendingLocationCallback = onEnabled
127-
val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000).build()
128-
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest).setAlwaysShow(true)
128+
val locationRequest =
129+
LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000).build()
130+
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
131+
.setAlwaysShow(true)
129132
val client = LocationServices.getSettingsClient(activity)
130133

131134
client.checkLocationSettings(builder.build()).addOnFailureListener { exception ->
132135
if (exception is ResolvableApiException) {
133136
try {
134-
val intentSenderRequest = IntentSenderRequest.Builder(exception.resolution.intentSender).build()
137+
val intentSenderRequest =
138+
IntentSenderRequest.Builder(exception.resolution.intentSender).build()
135139
activity.locationLauncher.launch(intentSenderRequest)
136140
} catch (_: Exception) {
137141
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
@@ -146,22 +150,16 @@ object ApiUtil {
146150

147151

148152
@RequiresPermission(Manifest.permission.ACCESS_FINE_LOCATION)
149-
fun getSavedWifiList(context: Context): List<Pair<Int, String>> {
153+
fun getSavedWifiList(context: Context): List<WifiConfiguration> {
150154
val wifiManager =
151155
context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
152156
val configs = wifiManager.configuredNetworks ?: return emptyList()
153-
154-
return configs.distinctBy { it.networkId }.mapNotNull { config ->
155-
var ssid = config.SSID ?: return@mapNotNull null
156-
if (ssid.startsWith("\"") && ssid.endsWith("\"") && ssid.length >= 2) {
157-
ssid = ssid.substring(1, ssid.length - 1)
158-
}
159-
Pair(config.networkId, ssid)
160-
}
157+
return configs.distinctBy { it.networkId }
161158
}
162159

163160
fun getNetIdBySsid(context: Context, ssid: String): Int {
164-
return getSavedWifiList(context).find { it.second == ssid }?.first ?: -1
161+
val savedNetworks: List<WifiConfiguration> = getSavedWifiList(context)
162+
return savedNetworks.find { it.SSID.removeSurrounding("\"") == ssid }?.networkId ?: -1
165163
}
166164

167165
fun startScan(context: Context): Boolean {
@@ -179,7 +177,7 @@ object ApiUtil {
179177
com.wifi.toolbox.structs.WifiInfo(
180178
ssid = it.SSID,
181179
level = it.level,
182-
bssid="",
180+
bssid = "",
183181
capabilities = it.capabilities
184182
)
185183
}.sortedByDescending { it.level }

app/src/main/java/com/wifi/toolbox/utils/PojieWifiController.kt

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -242,24 +242,32 @@ fun rememberPojieWifiController(
242242
errorMessage = context.getString(R.string.error_scan_impl_empty)
243243
)
244244

245-
1 -> ScanResult(
246-
ScanResult.CODE_SUCCESS,
247-
null,
248-
ShizukuUtil.getWifiScanResults().filter { it.ssid.isNotEmpty() }
249-
.distinctBy { it.ssid })
250-
251-
2 -> ScanResult(
252-
ScanResult.CODE_SUCCESS,
253-
null,
254-
AidlServiceHelper.getWifiScanResults(app)
245+
1 -> {
246+
val saved = ShizukuUtil.getSavedWifiList()
247+
val results = ShizukuUtil.getWifiScanResults()
255248
.filter { it.ssid.isNotEmpty() }
256-
.distinctBy { it.ssid })
249+
.distinctBy { it.ssid }
250+
.map { it.copy(savedInfo = saved.find { s -> s.SSID == "\"${it.ssid}\"" || s.SSID == it.ssid }) }
251+
ScanResult(ScanResult.CODE_SUCCESS, null, results)
252+
}
257253

258-
3 -> ScanResult(
259-
ScanResult.CODE_SUCCESS,
260-
null,
261-
ApiUtil.getScanResults(context).filter { it.ssid.isNotEmpty() }
262-
.distinctBy { it.ssid })
254+
2 -> {
255+
val saved = AidlServiceHelper.getSavedWifiList(app)
256+
val results = AidlServiceHelper.getWifiScanResults(app)
257+
.filter { it.ssid.isNotEmpty() }
258+
.distinctBy { it.ssid }
259+
.map { it.copy(savedInfo = saved.find { s -> s.SSID == "\"${it.ssid}\"" || s.SSID == it.ssid }) }
260+
ScanResult(ScanResult.CODE_SUCCESS, null, results)
261+
}
262+
263+
3 -> {
264+
val saved = ApiUtil.getSavedWifiList(app)
265+
val results = ApiUtil.getScanResults(context)
266+
.filter { it.ssid.isNotEmpty() }
267+
.distinctBy { it.ssid }
268+
.map { it.copy(savedInfo = saved.find { s -> s.SSID == "\"${it.ssid}\"" || s.SSID == it.ssid }) }
269+
ScanResult(ScanResult.CODE_SUCCESS, null, results)
270+
}
263271

264272
else -> ScanResult(
265273
code = StartScanResult.CODE_UNKNOWN,

0 commit comments

Comments
 (0)