Skip to content

Commit 82087e1

Browse files
Refactor UserAssetActivity for readability and efficiency (#3781)
- Refactored the onOptionsItemSelected function to use `when` and `let` for cleaner conditional logic. - Simplified the `chooseFile` function with `runCatching` for better error handling. - Extracted repeated code into reusable functions to improve maintainability. - Improved coroutine handling by ensuring file I/O happens on the IO thread.
1 parent fdfd043 commit 82087e1

File tree

1 file changed

+22
-36
lines changed

1 file changed

+22
-36
lines changed

V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,11 @@ class UserAssetActivity : BaseActivity() {
7171
return super.onCreateOptionsMenu(menu)
7272
}
7373

74-
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
75-
R.id.add_file -> {
76-
showFileChooser()
77-
true
78-
}
79-
80-
R.id.add_url -> {
81-
val intent = Intent(this, UserAssetUrlActivity::class.java)
82-
startActivity(intent)
83-
true
84-
}
85-
86-
R.id.download_file -> {
87-
downloadGeoFiles()
88-
true
89-
}
90-
74+
// Use when to streamline the option selection
75+
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
76+
R.id.add_file -> showFileChooser().let { true }
77+
R.id.add_url -> startActivity(Intent(this, UserAssetUrlActivity::class.java)).let { true }
78+
R.id.download_file -> downloadGeoFiles().let { true }
9179
else -> super.onOptionsItemSelected(item)
9280
}
9381

@@ -120,31 +108,29 @@ class UserAssetActivity : BaseActivity() {
120108
}
121109
}
122110

123-
private val chooseFile =
124-
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { it ->
125-
val uri = it.data?.data
126-
if (it.resultCode == RESULT_OK && uri != null) {
127-
val assetId = Utils.getUuid()
128-
try {
129-
val assetItem = AssetUrlItem(
130-
getCursorName(uri) ?: uri.toString(),
131-
"file"
132-
)
111+
val chooseFile = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
112+
val uri = result.data?.data
113+
if (result.resultCode == RESULT_OK && uri != null) {
114+
val assetId = Utils.getUuid()
115+
runCatching {
116+
val assetItem = AssetUrlItem(
117+
getCursorName(uri) ?: uri.toString(),
118+
"file"
119+
)
133120

134-
// check remarks unique
135-
val assetList = MmkvManager.decodeAssetUrls()
136-
if (assetList.any { it.second.remarks == assetItem.remarks && it.first != assetId }) {
137-
toast(R.string.msg_remark_is_duplicate)
138-
return@registerForActivityResult
139-
}
121+
val assetList = MmkvManager.decodeAssetUrls()
122+
if (assetList.any { it.second.remarks == assetItem.remarks && it.first != assetId }) {
123+
toast(R.string.msg_remark_is_duplicate)
124+
} else {
140125
MmkvManager.encodeAsset(assetId, assetItem)
141126
copyFile(uri)
142-
} catch (e: Exception) {
143-
toast(R.string.toast_asset_copy_failed)
144-
MmkvManager.removeAssetUrl(assetId)
145127
}
128+
}.onFailure {
129+
toast(R.string.toast_asset_copy_failed)
130+
MmkvManager.removeAssetUrl(assetId)
146131
}
147132
}
133+
}
148134

149135
private fun copyFile(uri: Uri): String {
150136
val targetFile = File(extDir, getCursorName(uri) ?: uri.toString())

0 commit comments

Comments
 (0)