Skip to content

Commit af01e2a

Browse files
committed
Improvement Intent.serializable
1 parent de22e16 commit af01e2a

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.v2ray.ang.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+

V2rayNG/app/src/main/kotlin/com/v2ray/ang/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.v2ray.ang.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+
}

V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayTestService.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package com.v2ray.ang.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.v2ray.ang.AppConfig.MSG_MEASURE_CONFIG
78
import com.v2ray.ang.AppConfig.MSG_MEASURE_CONFIG_CANCEL
89
import com.v2ray.ang.AppConfig.MSG_MEASURE_CONFIG_SUCCESS
10+
import com.v2ray.ang.dto.ConfigResult
11+
import com.v2ray.ang.extension.serializable
912
import com.v2ray.ang.util.MessageUtil
1013
import com.v2ray.ang.util.SpeedtestUtil
1114
import com.v2ray.ang.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

V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.v2ray.ang.AppConfig.TAG_FRAGMENT
1414
import com.v2ray.ang.AppConfig.TAG_PROXY
1515
import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_ADDRESS_V4
1616
import com.v2ray.ang.AppConfig.WIREGUARD_LOCAL_ADDRESS_V6
17+
import com.v2ray.ang.dto.ConfigResult
1718
import com.v2ray.ang.dto.EConfigType
1819
import com.v2ray.ang.dto.RulesetItem
1920
import com.v2ray.ang.dto.ServerConfig
@@ -25,34 +26,32 @@ import com.v2ray.ang.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

V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt

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

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

0 commit comments

Comments
 (0)