diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt
index 039be42d..dfdbfcf1 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetActivity.kt
@@ -15,6 +15,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import com.google.gson.Gson
import com.tbruyelle.rxpermissions.RxPermissions
import com.tencent.mmkv.MMKV
import com.v2ray.ang.AppConfig
@@ -117,13 +118,27 @@ class UserAssetActivity : BaseActivity() {
}
private val chooseFile =
- registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { it ->
val uri = it.data?.data
if (it.resultCode == RESULT_OK && uri != null) {
+ val assetId = Utils.getUuid()
try {
+ val assetItem = AssetUrlItem(
+ getCursorName(uri) ?: uri.toString(),
+ "file"
+ )
+
+ // check remarks unique
+ val assetList = MmkvManager.decodeAssetUrls()
+ if (assetList.any { it.second.remarks == assetItem.remarks && it.first != assetId }) {
+ toast(R.string.msg_remark_is_duplicate)
+ return@registerForActivityResult
+ }
+ assetStorage?.encode(assetId, Gson().toJson(assetItem))
copyFile(uri)
} catch (e: Exception) {
toast(R.string.toast_asset_copy_failed)
+ MmkvManager.removeAssetUrl(assetId)
}
}
}
@@ -252,7 +267,7 @@ class UserAssetActivity : BaseActivity() {
holder.itemUserAssetBinding.layoutEdit.visibility = GONE
holder.itemUserAssetBinding.layoutRemove.visibility = GONE
} else {
- holder.itemUserAssetBinding.layoutEdit.visibility = VISIBLE
+ holder.itemUserAssetBinding.layoutEdit.visibility = item.second.url.let { if (it == "file") GONE else VISIBLE }
holder.itemUserAssetBinding.layoutRemove.visibility = VISIBLE
}
@@ -262,7 +277,7 @@ class UserAssetActivity : BaseActivity() {
startActivity(intent)
}
holder.itemUserAssetBinding.layoutRemove.setOnClickListener {
-// file.delete()
+ file?.delete()
MmkvManager.removeAssetUrl(item.first)
binding.recyclerView.adapter?.notifyItemRemoved(position)
}
diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt
index 749c30cc..c032bef3 100644
--- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt
+++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UserAssetUrlActivity.kt
@@ -13,6 +13,7 @@ import com.v2ray.ang.dto.AssetUrlItem
import com.v2ray.ang.extension.toast
import com.v2ray.ang.util.MmkvManager
import com.v2ray.ang.util.Utils
+import java.io.File
class UserAssetUrlActivity : BaseActivity() {
private lateinit var binding: ActivityUserAssetUrlBinding
@@ -20,6 +21,7 @@ class UserAssetUrlActivity : BaseActivity() {
var del_config: MenuItem? = null
var save_config: MenuItem? = null
+ val extDir by lazy { File(Utils.userAssetPath(this)) }
private val assetStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_ASSET, MMKV.MULTI_PROCESS_MODE) }
private val editAssetId by lazy { intent.getStringExtra("assetId").orEmpty() }
@@ -65,6 +67,12 @@ class UserAssetUrlActivity : BaseActivity() {
var assetId = editAssetId
if (!json.isNullOrBlank()) {
assetItem = Gson().fromJson(json, AssetUrlItem::class.java)
+
+ // remove file associated with the asset
+ val file = extDir.resolve(assetItem.remarks)
+ if (file.exists()) {
+ file.delete()
+ }
} else {
assetId = Utils.getUuid()
assetItem = AssetUrlItem()
@@ -73,6 +81,14 @@ class UserAssetUrlActivity : BaseActivity() {
assetItem.remarks = binding.etRemarks.text.toString()
assetItem.url = binding.etUrl.text.toString()
+ // check remarks unique
+ val assetList = MmkvManager.decodeAssetUrls()
+ if (assetList.any { it.second.remarks == assetItem.remarks && it.first != assetId }) {
+ toast(R.string.msg_remark_is_duplicate)
+ return false
+ }
+
+
if (TextUtils.isEmpty(assetItem.remarks)) {
toast(R.string.sub_setting_remarks)
return false
diff --git a/V2rayNG/app/src/main/res/layout/item_recycler_user_asset.xml b/V2rayNG/app/src/main/res/layout/item_recycler_user_asset.xml
index 1f1e1533..7677d3ff 100644
--- a/V2rayNG/app/src/main/res/layout/item_recycler_user_asset.xml
+++ b/V2rayNG/app/src/main/res/layout/item_recycler_user_asset.xml
@@ -19,27 +19,45 @@
android:background="@color/colorPrimary"
android:foreground="?attr/selectableItemBackground"
android:padding="@dimen/nav_header_vertical_spacing">
-
+
+
-
-
+
+
+
+
+
+
أضف عنوان URL للأصل
لم يتم العثور على الملف
+ الملاحظات موجودة بالفعل
جار التحميل
بحث
تحديد الكل
diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml
index e0a9d4c0..6ba420f2 100644
--- a/V2rayNG/app/src/main/res/values-fa/strings.xml
+++ b/V2rayNG/app/src/main/res/values-fa/strings.xml
@@ -84,6 +84,7 @@
URL را اضافه کنید
فایل پیدا نشد
+ نام قبلاً وجود دارد
بارگذاری
جستجو
انتخاب همه
diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml
index 93253708..354cac8f 100644
--- a/V2rayNG/app/src/main/res/values-ru/strings.xml
+++ b/V2rayNG/app/src/main/res/values-ru/strings.xml
@@ -84,6 +84,7 @@
Добавить URL ресурса
Файл не найден
+ Замечания уже есть
Загрузка…
Поиск
Выбрать все
diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml
index bf2ad280..0b4d8bcd 100644
--- a/V2rayNG/app/src/main/res/values-vi/strings.xml
+++ b/V2rayNG/app/src/main/res/values-vi/strings.xml
@@ -84,6 +84,7 @@
Thêm URL nội dung
Không tìm thấy tập tin
+ Nhận xét đã tồn tại
Đang tải...
Tìm kiếm
Chọn tất cả
diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
index 887c25a8..00d0f539 100644
--- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml
@@ -85,6 +85,7 @@
添加资产网址
文件未找到
+ 备注已经存在
正在加载
搜索
全选
diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
index 3bc7cdd6..c81b140e 100644
--- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
+++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml
@@ -84,6 +84,7 @@
新增資產網址
文件未找到
+ 備註已經存在
載入
搜尋
全選
diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml
index 91616d3d..a518741c 100644
--- a/V2rayNG/app/src/main/res/values/strings.xml
+++ b/V2rayNG/app/src/main/res/values/strings.xml
@@ -92,6 +92,7 @@
Download files
Add asset URL
File not found
+ The remarks already exists