Add Assets From QRcode (#3933)

Add Capability to Import Geo Assets From QRcode
This commit is contained in:
Chocolate4U
2024-11-13 14:19:35 +03:30
committed by GitHub
parent 44723c56ad
commit bbf0b05b49
11 changed files with 61 additions and 4 deletions

View File

@@ -75,6 +75,7 @@ class UserAssetActivity : BaseActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
R.id.add_file -> showFileChooser().let { true }
R.id.add_url -> startActivity(Intent(this, UserAssetUrlActivity::class.java)).let { true }
R.id.add_qrcode -> importAssetFromQRcode().let { true }
R.id.download_file -> downloadGeoFiles().let { true }
else -> super.onOptionsItemSelected(item)
}
@@ -156,6 +157,40 @@ class UserAssetActivity : BaseActivity() {
null
}
private fun importAssetFromQRcode(): Boolean {
RxPermissions(this)
.request(Manifest.permission.CAMERA)
.subscribe {
if (it)
scanQRCodeForAssetURL.launch(Intent(this, ScannerActivity::class.java))
else
toast(R.string.toast_permission_denied)
}
return true
}
private val scanQRCodeForAssetURL = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
importAsset(it.data?.getStringExtra("SCAN_RESULT"))
}
}
private fun importAsset(url: String?): Boolean {
try {
if (!Utils.isValidUrl(url)) {
toast(R.string.toast_invalid_url)
return false
}
// Send URL to UserAssetUrlActivity for Processing
startActivity(Intent(this, UserAssetUrlActivity::class.java)
.putExtra(UserAssetUrlActivity.ASSET_URL_QRCODE, url))
} catch (e: Exception) {
e.printStackTrace()
return false
}
return true
}
private fun downloadGeoFiles() {
val dialog = AlertDialog.Builder(this)
.setView(LayoutProgressBinding.inflate(layoutInflater).root)

View File

@@ -14,6 +14,11 @@ import com.v2ray.ang.util.Utils
import java.io.File
class UserAssetUrlActivity : BaseActivity() {
// Receive QRcode URL from UserAssetActivity
companion object {
const val ASSET_URL_QRCODE = "ASSET_URL_QRCODE"
}
private val binding by lazy { ActivityUserAssetUrlBinding.inflate(layoutInflater) }
var del_config: MenuItem? = null
@@ -28,10 +33,15 @@ class UserAssetUrlActivity : BaseActivity() {
title = getString(R.string.title_user_asset_add_url)
val assetItem = MmkvManager.decodeAsset(editAssetId)
if (assetItem != null) {
bindingAsset(assetItem)
} else {
clearAsset()
val assetUrlQrcode = intent.getStringExtra(ASSET_URL_QRCODE)
val assetNameQrcode = File(assetUrlQrcode.toString()).name
when {
assetItem != null -> bindingAsset(assetItem)
assetUrlQrcode != null -> {
binding.etRemarks.setText(assetNameQrcode)
binding.etUrl.setText(assetUrlQrcode)
}
else -> clearAsset()
}
}

View File

@@ -14,6 +14,10 @@
android:id="@+id/add_url"
android:title="@string/menu_item_add_url"
app:showAsAction="never" />
<item
android:id="@+id/add_qrcode"
android:title="@string/menu_item_scan_qrcode"
app:showAsAction="never" />
</menu>
</item>
<item

View File

@@ -108,6 +108,7 @@
<string name="menu_item_add_asset">إضافة أصل</string>
<string name="menu_item_add_file">إضافة ملفات</string>
<string name="menu_item_add_url">إضافة URL</string>
<string name="menu_item_scan_qrcode">مسح رمز الاستجابة السريعة (QRcode)</string>
<string name="title_url" translatable="false">URL</string>
<string name="menu_item_download_file">تنزيل الملفات</string>
<string name="title_user_asset_add_url">إضافة عنوان URL للأصل</string>

View File

@@ -107,6 +107,7 @@
<string name="menu_item_add_asset">অ্যাসেট যোগ করুন</string>
<string name="menu_item_add_file">ফাইল যোগ করুন</string>
<string name="menu_item_add_url">URL যোগ করুন</string>
<string name="menu_item_scan_qrcode">QR কোড স্ক্যান করুন</string>
<string name="title_url" translatable="false">URL</string>
<string name="menu_item_download_file">ফাইল ডাউনলোড করুন</string>
<string name="title_user_asset_add_url">অ্যাসেট URL যোগ করুন</string>

View File

@@ -104,6 +104,7 @@
<string name="server_lab_request_host6">میزبان (SNI) (اختیاری)</string>
<string name="toast_asset_copy_failed">کپی فایل انجام نشد، لطفا از برنامه مدیریت فایل استفاده کنید</string>
<string name="menu_item_add_file">افزودن فایل ها</string>
<string name="menu_item_scan_qrcode">اسکن QRcode</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">دانلود فایل‌ ها</string>
<string name="toast_action_not_allowed">این عمل ممنوع است</string>

View File

@@ -106,6 +106,7 @@
<string name="menu_item_add_asset">Добавить ресурс</string>
<string name="menu_item_add_file">Добавить файлы</string>
<string name="menu_item_add_url">Добавить URL</string>
<string name="menu_item_scan_qrcode">Сканирование QR-кода</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">Загрузить файлы</string>
<string name="title_user_asset_add_url">Добавить URL ресурса</string>

View File

@@ -104,6 +104,7 @@
<string name="server_lab_request_host6">Host (SNI) (Không bắt buộc)</string>
<string name="toast_asset_copy_failed">Không thể sao chép tệp tin, hãy dùng trình quản lý tệp!</string>
<string name="menu_item_add_file">Thêm tệp</string>
<string name="menu_item_scan_qrcode">Quét mã QR</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">Tải xuống tệp tin</string>
<string name="toast_action_not_allowed">Hành động này bị cấm!</string>

View File

@@ -104,6 +104,7 @@
<string name="server_lab_request_host6">Host(SNI)(可选)</string>
<string name="toast_asset_copy_failed">失败, 请使用文件管理器</string>
<string name="menu_item_add_file">添加文件</string>
<string name="menu_item_scan_qrcode">扫描 QRcode</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">下载文件</string>
<string name="toast_action_not_allowed">禁止此项操作</string>

View File

@@ -104,6 +104,7 @@
<string name="server_lab_request_host6">Host(SNI)(可選)</string>
<string name="toast_asset_copy_failed">失敗,請使用檔案總管</string>
<string name="menu_item_add_file">新增檔案</string>
<string name="menu_item_scan_qrcode">掃描 QRcode</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">下載檔案</string>
<string name="toast_action_not_allowed">禁止此項操作</string>

View File

@@ -107,6 +107,7 @@
<string name="menu_item_add_asset">Add asset</string>
<string name="menu_item_add_file">Add files</string>
<string name="menu_item_add_url">Add URL</string>
<string name="menu_item_scan_qrcode">Scan QRcode</string>
<string name="title_url">URL</string>
<string name="menu_item_download_file">Download files</string>
<string name="title_user_asset_add_url">Add asset URL</string>