handle upload file, improve asset ui, fix messages
This commit is contained in:
1 parent
3aff1800cd
commit
a33a698f38
10 files changed
+67
-11
No files matched your search
@@ -15,6 +15,7 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.google.gson.Gson
|
||||||
import com.tbruyelle.rxpermissions.RxPermissions
|
import com.tbruyelle.rxpermissions.RxPermissions
|
||||||
import com.tencent.mmkv.MMKV
|
import com.tencent.mmkv.MMKV
|
||||||
import com.v2ray.ang.AppConfig
|
import com.v2ray.ang.AppConfig
|
||||||
@@ -117,13 +118,27 @@ class UserAssetActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val chooseFile =
|
private val chooseFile =
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { it ->
|
||||||
val uri = it.data?.data
|
val uri = it.data?.data
|
||||||
if (it.resultCode == RESULT_OK && uri != null) {
|
if (it.resultCode == RESULT_OK && uri != null) {
|
||||||
|
val assetId = Utils.getUuid()
|
||||||
try {
|
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)
|
copyFile(uri)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
toast(R.string.toast_asset_copy_failed)
|
toast(R.string.toast_asset_copy_failed)
|
||||||
|
MmkvManager.removeAssetUrl(assetId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -252,7 +267,7 @@ class UserAssetActivity : BaseActivity() {
|
|||||||
holder.itemUserAssetBinding.layoutEdit.visibility = GONE
|
holder.itemUserAssetBinding.layoutEdit.visibility = GONE
|
||||||
holder.itemUserAssetBinding.layoutRemove.visibility = GONE
|
holder.itemUserAssetBinding.layoutRemove.visibility = GONE
|
||||||
} else {
|
} 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
|
holder.itemUserAssetBinding.layoutRemove.visibility = VISIBLE
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,7 +277,7 @@ class UserAssetActivity : BaseActivity() {
|
|||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
holder.itemUserAssetBinding.layoutRemove.setOnClickListener {
|
holder.itemUserAssetBinding.layoutRemove.setOnClickListener {
|
||||||
// file.delete()
|
file?.delete()
|
||||||
MmkvManager.removeAssetUrl(item.first)
|
MmkvManager.removeAssetUrl(item.first)
|
||||||
binding.recyclerView.adapter?.notifyItemRemoved(position)
|
binding.recyclerView.adapter?.notifyItemRemoved(position)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import com.v2ray.ang.dto.AssetUrlItem
|
|||||||
import com.v2ray.ang.extension.toast
|
import com.v2ray.ang.extension.toast
|
||||||
import com.v2ray.ang.util.MmkvManager
|
import com.v2ray.ang.util.MmkvManager
|
||||||
import com.v2ray.ang.util.Utils
|
import com.v2ray.ang.util.Utils
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
class UserAssetUrlActivity : BaseActivity() {
|
class UserAssetUrlActivity : BaseActivity() {
|
||||||
private lateinit var binding: ActivityUserAssetUrlBinding
|
private lateinit var binding: ActivityUserAssetUrlBinding
|
||||||
@@ -20,6 +21,7 @@ class UserAssetUrlActivity : BaseActivity() {
|
|||||||
var del_config: MenuItem? = null
|
var del_config: MenuItem? = null
|
||||||
var save_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 assetStorage by lazy { MMKV.mmkvWithID(MmkvManager.ID_ASSET, MMKV.MULTI_PROCESS_MODE) }
|
||||||
private val editAssetId by lazy { intent.getStringExtra("assetId").orEmpty() }
|
private val editAssetId by lazy { intent.getStringExtra("assetId").orEmpty() }
|
||||||
|
|
||||||
@@ -65,6 +67,12 @@ class UserAssetUrlActivity : BaseActivity() {
|
|||||||
var assetId = editAssetId
|
var assetId = editAssetId
|
||||||
if (!json.isNullOrBlank()) {
|
if (!json.isNullOrBlank()) {
|
||||||
assetItem = Gson().fromJson(json, AssetUrlItem::class.java)
|
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 {
|
} else {
|
||||||
assetId = Utils.getUuid()
|
assetId = Utils.getUuid()
|
||||||
assetItem = AssetUrlItem()
|
assetItem = AssetUrlItem()
|
||||||
@@ -73,6 +81,14 @@ class UserAssetUrlActivity : BaseActivity() {
|
|||||||
assetItem.remarks = binding.etRemarks.text.toString()
|
assetItem.remarks = binding.etRemarks.text.toString()
|
||||||
assetItem.url = binding.etUrl.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)) {
|
if (TextUtils.isEmpty(assetItem.remarks)) {
|
||||||
toast(R.string.sub_setting_remarks)
|
toast(R.string.sub_setting_remarks)
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -19,27 +19,45 @@
|
|||||||
android:background="@color/colorPrimary"
|
android:background="@color/colorPrimary"
|
||||||
android:foreground="?attr/selectableItemBackground"
|
android:foreground="?attr/selectableItemBackground"
|
||||||
android:padding="@dimen/nav_header_vertical_spacing">
|
android:padding="@dimen/nav_header_vertical_spacing">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingStart="9dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/asset_name"
|
android:id="@+id/asset_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:minLines="1"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
|
||||||
tools:text="Placeholder.dat" />
|
tools:text="Placeholder.dat" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
android:id="@+id/asset_properties"
|
android:id="@+id/asset_properties"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAlignment="textEnd"
|
android:lines="1"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
|
android:textSize="12sp"
|
||||||
tools:text="1MB . 2020.01.01" />
|
tools:text="1MB . 2020.01.01" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|||||||
@@ -81,6 +81,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">أضف عنوان URL للأصل</string>
|
<string name="title_user_asset_add_url">أضف عنوان URL للأصل</string>
|
||||||
<string name="msg_file_not_found">لم يتم العثور على الملف</string>
|
<string name="msg_file_not_found">لم يتم العثور على الملف</string>
|
||||||
|
<string name="msg_remark_is_duplicate">الملاحظات موجودة بالفعل</string>
|
||||||
<string name="msg_dialog_progress">جار التحميل</string>
|
<string name="msg_dialog_progress">جار التحميل</string>
|
||||||
<string name="menu_item_search">بحث</string>
|
<string name="menu_item_search">بحث</string>
|
||||||
<string name="menu_item_select_all">تحديد الكل</string>
|
<string name="menu_item_select_all">تحديد الكل</string>
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">URL را اضافه کنید</string>
|
<string name="title_user_asset_add_url">URL را اضافه کنید</string>
|
||||||
<string name="msg_file_not_found">فایل پیدا نشد</string>
|
<string name="msg_file_not_found">فایل پیدا نشد</string>
|
||||||
|
<string name="msg_remark_is_duplicate">نام قبلاً وجود دارد</string>
|
||||||
<string name="msg_dialog_progress">بارگذاری</string>
|
<string name="msg_dialog_progress">بارگذاری</string>
|
||||||
<string name="menu_item_search">جستجو</string>
|
<string name="menu_item_search">جستجو</string>
|
||||||
<string name="menu_item_select_all">انتخاب همه</string>
|
<string name="menu_item_select_all">انتخاب همه</string>
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">Добавить URL ресурса</string>
|
<string name="title_user_asset_add_url">Добавить URL ресурса</string>
|
||||||
<string name="msg_file_not_found">Файл не найден</string>
|
<string name="msg_file_not_found">Файл не найден</string>
|
||||||
|
<string name="msg_remark_is_duplicate">Замечания уже есть</string>
|
||||||
<string name="msg_dialog_progress">Загрузка…</string>
|
<string name="msg_dialog_progress">Загрузка…</string>
|
||||||
<string name="menu_item_search">Поиск</string>
|
<string name="menu_item_search">Поиск</string>
|
||||||
<string name="menu_item_select_all">Выбрать все</string>
|
<string name="menu_item_select_all">Выбрать все</string>
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">Thêm URL nội dung</string>
|
<string name="title_user_asset_add_url">Thêm URL nội dung</string>
|
||||||
<string name="msg_file_not_found">Không tìm thấy tập tin</string>
|
<string name="msg_file_not_found">Không tìm thấy tập tin</string>
|
||||||
|
<string name="msg_remark_is_duplicate">Nhận xét đã tồn tại</string>
|
||||||
<string name="msg_dialog_progress">Đang tải...</string>
|
<string name="msg_dialog_progress">Đang tải...</string>
|
||||||
<string name="menu_item_search">Tìm kiếm</string>
|
<string name="menu_item_search">Tìm kiếm</string>
|
||||||
<string name="menu_item_select_all">Chọn tất cả</string>
|
<string name="menu_item_select_all">Chọn tất cả</string>
|
||||||
|
|||||||
@@ -85,6 +85,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">添加资产网址</string>
|
<string name="title_user_asset_add_url">添加资产网址</string>
|
||||||
<string name="msg_file_not_found">文件未找到</string>
|
<string name="msg_file_not_found">文件未找到</string>
|
||||||
|
<string name="msg_remark_is_duplicate">备注已经存在</string>
|
||||||
<string name="msg_dialog_progress">正在加载</string>
|
<string name="msg_dialog_progress">正在加载</string>
|
||||||
<string name="menu_item_search">搜索</string>
|
<string name="menu_item_search">搜索</string>
|
||||||
<string name="menu_item_select_all">全选</string>
|
<string name="menu_item_select_all">全选</string>
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
<string name="title_user_asset_add_url">新增資產網址</string>
|
<string name="title_user_asset_add_url">新增資產網址</string>
|
||||||
<string name="msg_file_not_found">文件未找到</string>
|
<string name="msg_file_not_found">文件未找到</string>
|
||||||
|
<string name="msg_remark_is_duplicate">備註已經存在</string>
|
||||||
<string name="msg_dialog_progress">載入</string>
|
<string name="msg_dialog_progress">載入</string>
|
||||||
<string name="menu_item_search">搜尋</string>
|
<string name="menu_item_search">搜尋</string>
|
||||||
<string name="menu_item_select_all">全選</string>
|
<string name="menu_item_select_all">全選</string>
|
||||||
|
|||||||
@@ -92,6 +92,7 @@
|
|||||||
<string name="menu_item_download_file">Download files</string>
|
<string name="menu_item_download_file">Download files</string>
|
||||||
<string name="title_user_asset_add_url">Add asset URL</string>
|
<string name="title_user_asset_add_url">Add asset URL</string>
|
||||||
<string name="msg_file_not_found">File not found</string>
|
<string name="msg_file_not_found">File not found</string>
|
||||||
|
<string name="msg_remark_is_duplicate">The remarks already exists</string>
|
||||||
|
|
||||||
|
|
||||||
<!-- PerAppProxyActivity -->
|
<!-- PerAppProxyActivity -->
|
||||||
|
|||||||
Reference in new issue
Block a user