Skip to content

Commit 3335ef4

Browse files
2dustAnGgIt886
authored andcommitted
Improvement Intent.serializable
1 parent 7fb8fac commit 3335ef4

File tree

5 files changed

+41
-20
lines changed

5 files changed

+41
-20
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.neko.v2ray.dto
2+
3+
data class ConfigResult (
4+
var status: Boolean,
5+
var guid: String? = null,
6+
var content: String = "",
7+
var domainPort: String? = null,
8+
)
9+

app/src/main/kotlin/com/neko/v2ray/extension/_Ext.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import android.content.Context
55
import android.content.Intent
66
import android.content.IntentFilter
77
import android.os.Build
8+
import android.os.Bundle
89
import android.widget.Toast
910
import com.neko.v2ray.AngApplication
1011
import me.drakeet.support.toast.ToastCompat
1112
import org.json.JSONObject
13+
import java.io.Serializable
1214
import java.net.URI
1315
import java.net.URLConnection
1416

@@ -81,4 +83,14 @@ fun Context.listenForPackageChanges(onetime: Boolean = true, callback: () -> Uni
8183
addDataScheme("package")
8284
})
8385
}
84-
}
86+
}
87+
88+
inline fun <reified T : Serializable> Bundle.serializable(key: String): T? = when {
89+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializable(key, T::class.java)
90+
else -> @Suppress("DEPRECATION") getSerializable(key) as? T
91+
}
92+
93+
inline fun <reified T : Serializable> Intent.serializable(key: String): T? = when {
94+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> getSerializableExtra(key, T::class.java)
95+
else -> @Suppress("DEPRECATION") getSerializableExtra(key) as? T
96+
}

app/src/main/kotlin/com/neko/v2ray/service/V2RayTestService.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package com.neko.v2ray.service
33
import android.app.Service
44
import android.content.Intent
55
import android.os.IBinder
6+
import com.google.gson.Gson
67
import com.neko.v2ray.AppConfig.MSG_MEASURE_CONFIG
78
import com.neko.v2ray.AppConfig.MSG_MEASURE_CONFIG_CANCEL
89
import com.neko.v2ray.AppConfig.MSG_MEASURE_CONFIG_SUCCESS
10+
import com.neko.v2ray.dto.ConfigResult
11+
import com.neko.v2ray.extension.serializable
912
import com.neko.v2ray.util.MessageUtil
1013
import com.neko.v2ray.util.SpeedtestUtil
1114
import com.neko.v2ray.util.Utils
@@ -30,10 +33,11 @@ class V2RayTestService : Service() {
3033
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
3134
when (intent?.getIntExtra("key", 0)) {
3235
MSG_MEASURE_CONFIG -> {
33-
val contentPair = intent.getSerializableExtra("content") as Pair<String, String>
36+
val content = intent.serializable<String>("content")
37+
val config = Gson().fromJson(content, ConfigResult::class.java)
3438
realTestScope.launch {
35-
val result = SpeedtestUtil.realPing(contentPair.second)
36-
MessageUtil.sendMsg2UI(this@V2RayTestService, MSG_MEASURE_CONFIG_SUCCESS, Pair(contentPair.first, result))
39+
val result = SpeedtestUtil.realPing(config.content)
40+
MessageUtil.sendMsg2UI(this@V2RayTestService, MSG_MEASURE_CONFIG_SUCCESS, Pair(config.guid, result))
3741
}
3842
}
3943

app/src/main/kotlin/com/neko/v2ray/util/V2rayConfigUtil.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.neko.v2ray.AppConfig.TAG_FRAGMENT
1414
import com.neko.v2ray.AppConfig.TAG_PROXY
1515
import com.neko.v2ray.AppConfig.WIREGUARD_LOCAL_ADDRESS_V4
1616
import com.neko.v2ray.AppConfig.WIREGUARD_LOCAL_ADDRESS_V6
17+
import com.neko.v2ray.dto.ConfigResult
1718
import com.neko.v2ray.dto.EConfigType
1819
import com.neko.v2ray.dto.RulesetItem
1920
import com.neko.v2ray.dto.ServerConfig
@@ -25,34 +26,32 @@ import com.neko.v2ray.util.MmkvManager.settingsStorage
2526

2627
object V2rayConfigUtil {
2728

28-
data class Result(var status: Boolean, var content: String = "", var domainPort: String? = null)
29-
30-
fun getV2rayConfig(context: Context, guid: String): Result {
29+
fun getV2rayConfig(context: Context, guid: String): ConfigResult {
3130
try {
32-
val config = MmkvManager.decodeServerConfig(guid) ?: return Result(false)
31+
val config = MmkvManager.decodeServerConfig(guid) ?: return ConfigResult(false)
3332
if (config.configType == EConfigType.CUSTOM) {
3433
val raw = MmkvManager.decodeServerRaw(guid)
3534
val customConfig = if (raw.isNullOrBlank()) {
36-
config.fullConfig?.toPrettyPrinting() ?: return Result(false)
35+
config.fullConfig?.toPrettyPrinting() ?: return ConfigResult(false)
3736
} else {
3837
raw
3938
}
4039
val domainPort = config.getProxyOutbound()?.getServerAddressAndPort()
41-
return Result(true, customConfig, domainPort)
40+
return ConfigResult(true, guid, customConfig, domainPort)
4241
}
4342

4443
val result = getV2rayNonCustomConfig(context, config)
4544
//Log.d(ANG_PACKAGE, result.content)
46-
Log.d(ANG_PACKAGE, result.domainPort ?: "")
45+
result.guid = guid
4746
return result
4847
} catch (e: Exception) {
4948
e.printStackTrace()
50-
return Result(false)
49+
return ConfigResult(false)
5150
}
5251
}
5352

54-
private fun getV2rayNonCustomConfig(context: Context, config: ServerConfig): Result {
55-
val result = Result(false)
53+
private fun getV2rayNonCustomConfig(context: Context, config: ServerConfig): ConfigResult {
54+
val result = ConfigResult(false)
5655

5756
val outbound = config.getProxyOutbound() ?: return result
5857
val address = outbound.getServerAddress() ?: return result

app/src/main/kotlin/com/neko/v2ray/viewmodel/MainViewModel.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.neko.v2ray.dto.ProfileItem
2121
import com.neko.v2ray.dto.ServerConfig
2222
import com.neko.v2ray.dto.ServersCache
2323
import com.neko.v2ray.dto.V2rayConfig
24+
import com.neko.v2ray.extension.serializable
2425
import com.neko.v2ray.extension.toast
2526
import com.neko.v2ray.util.AngConfigManager
2627
import com.neko.v2ray.util.AngConfigManager.updateConfigViaSub
@@ -217,7 +218,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
217218
MessageUtil.sendMsg2TestService(
218219
getApplication(),
219220
AppConfig.MSG_MEASURE_CONFIG,
220-
Pair(item.guid, config.content)
221+
Gson().toJson(config)
221222
)
222223
}
223224
}
@@ -395,11 +396,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
395396
}
396397

397398
AppConfig.MSG_MEASURE_CONFIG_SUCCESS -> {
398-
val resultPair: Pair<String, Long> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
399-
intent.getSerializableExtra("content", Pair::class.java) as Pair<String, Long>
400-
} else {
401-
intent.getSerializableExtra("content") as Pair<String, Long>
402-
}
399+
val resultPair = intent.serializable<Pair<String, Long>>("content") ?: return
403400
MmkvManager.encodeServerTestDelayMillis(resultPair.first, resultPair.second)
404401
updateListAction.value = getPosition(resultPair.first)
405402
}

0 commit comments

Comments
 (0)