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