Skip to content

Commit 5373579

Browse files
authored
Import rulesets from qrcode (#3991)
* Renamed functions to be more semantically accurate * Import rulesets from qrcode Add capability to import rulesets from qrcode fixes and improvements
1 parent 9b4cc20 commit 5373579

File tree

12 files changed

+72
-16
lines changed

12 files changed

+72
-16
lines changed

V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ object SettingsManager {
4343
}
4444

4545

46-
fun resetRoutingRulesets(context: Context, index: Int) {
46+
fun resetRoutingRulesetsFromPresets(context: Context, index: Int) {
4747
val rulesetList = getPresetRoutingRulesets(context, index) ?: return
4848
resetRoutingRulesetsCommon(rulesetList)
4949
}
5050

51-
fun resetRoutingRulesetsFromClipboard(content: String?): Boolean {
51+
fun resetRoutingRulesets(content: String?): Boolean {
5252
if (content.isNullOrEmpty()) {
5353
return false
5454
}

V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingSettingActivity.kt

+46-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.v2ray.ang.ui
22

3+
import android.Manifest
34
import android.content.Intent
45
import android.os.Bundle
56
import android.view.Menu
67
import android.view.MenuItem
78
import android.view.View
89
import android.widget.AdapterView
10+
import androidx.activity.result.contract.ActivityResultContracts
911
import androidx.appcompat.app.AlertDialog
1012
import androidx.lifecycle.lifecycleScope
1113
import androidx.recyclerview.widget.ItemTouchHelper
1214
import androidx.recyclerview.widget.LinearLayoutManager
15+
import com.tbruyelle.rxpermissions3.RxPermissions
1316
import com.v2ray.ang.AppConfig
1417
import com.v2ray.ang.R
1518
import com.v2ray.ang.databinding.ActivityRoutingSettingBinding
@@ -83,13 +86,13 @@ class RoutingSettingActivity : BaseActivity() {
8386
true
8487
}
8588

86-
R.id.import_rulesets -> {
89+
R.id.import_predefined_rulesets -> {
8790
AlertDialog.Builder(this).setMessage(R.string.routing_settings_import_rulesets_tip)
8891
.setPositiveButton(android.R.string.ok) { _, _ ->
8992
AlertDialog.Builder(this).setItems(preset_rulesets.asList().toTypedArray()) { _, i ->
9093
try {
9194
lifecycleScope.launch(Dispatchers.IO) {
92-
SettingsManager.resetRoutingRulesets(this@RoutingSettingActivity, i)
95+
SettingsManager.resetRoutingRulesetsFromPresets(this@RoutingSettingActivity, i)
9396
launch(Dispatchers.Main) {
9497
refreshData()
9598
toast(R.string.toast_success)
@@ -120,7 +123,7 @@ class RoutingSettingActivity : BaseActivity() {
120123
return@setPositiveButton
121124
}
122125
lifecycleScope.launch(Dispatchers.IO) {
123-
val result = SettingsManager.resetRoutingRulesetsFromClipboard(clipboard)
126+
val result = SettingsManager.resetRoutingRulesets(clipboard)
124127
withContext(Dispatchers.Main) {
125128
if (result) {
126129
refreshData()
@@ -138,6 +141,18 @@ class RoutingSettingActivity : BaseActivity() {
138141
true
139142
}
140143

144+
R.id.import_rulesets_from_qrcode -> {
145+
RxPermissions(this)
146+
.request(Manifest.permission.CAMERA)
147+
.subscribe {
148+
if (it)
149+
scanQRcodeForRulesets.launch(Intent(this, ScannerActivity::class.java))
150+
else
151+
toast(R.string.toast_permission_denied)
152+
}
153+
true
154+
}
155+
141156

142157
R.id.export_rulesets_to_clipboard -> {
143158
val rulesetList = MmkvManager.decodeRoutingRulesets()
@@ -153,6 +168,34 @@ class RoutingSettingActivity : BaseActivity() {
153168
else -> super.onOptionsItemSelected(item)
154169
}
155170

171+
private val scanQRcodeForRulesets = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
172+
if (it.resultCode == RESULT_OK) {
173+
importRulesetsFromQRcode(it.data?.getStringExtra("SCAN_RESULT"))
174+
}
175+
}
176+
177+
private fun importRulesetsFromQRcode(qrcode: String?): Boolean {
178+
AlertDialog.Builder(this).setMessage(R.string.routing_settings_import_rulesets_tip)
179+
.setPositiveButton(android.R.string.ok) { _, _ ->
180+
lifecycleScope.launch(Dispatchers.IO) {
181+
val result = SettingsManager.resetRoutingRulesets(qrcode)
182+
withContext(Dispatchers.Main) {
183+
if (result) {
184+
refreshData()
185+
toast(R.string.toast_success)
186+
} else {
187+
toast(R.string.toast_failure)
188+
}
189+
}
190+
}
191+
}
192+
.setNegativeButton(android.R.string.no) { _, _ ->
193+
//do nothing
194+
}
195+
.show()
196+
return true
197+
}
198+
156199
fun refreshData() {
157200
rulesets.clear()
158201
rulesets.addAll(MmkvManager.decodeRoutingRulesets() ?: mutableListOf())

V2rayNG/app/src/main/res/menu/menu_routing_setting.xml

+6-2
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@
1111
android:icon="@drawable/ic_file_24dp"
1212
android:title="@string/title_user_asset_setting" />
1313
<item
14-
android:id="@+id/import_rulesets"
15-
android:title="@string/routing_settings_import_rulesets"
14+
android:id="@+id/import_predefined_rulesets"
15+
android:title="@string/routing_settings_import_predefined_rulesets"
1616
app:showAsAction="never" />
1717
<item
1818
android:id="@+id/import_rulesets_from_clipboard"
1919
android:title="@string/routing_settings_import_rulesets_from_clipboard"
2020
app:showAsAction="never" />
21+
<item
22+
android:id="@+id/import_rulesets_from_qrcode"
23+
android:title="@string/routing_settings_import_rulesets_from_qrcode"
24+
app:showAsAction="never" />
2125
<item
2226
android:id="@+id/export_rulesets_to_clipboard"
2327
android:title="@string/routing_settings_export_rulesets_to_clipboard"

V2rayNG/app/src/main/res/values-ar/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,10 @@
267267
<string name="routing_settings_delete">مسح</string>
268268
<string name="routing_settings_rule_title">Routing Rule Settings</string>
269269
<string name="routing_settings_add_rule">Add rule</string>
270-
<string name="routing_settings_import_rulesets">Import ruleset</string>
270+
<string name="routing_settings_import_predefined_rulesets">استيراد مجموعات قواعد محددة مسبقاً</string>
271271
<string name="routing_settings_import_rulesets_tip">Existing rulesets will be deleted, are you sure to continue?</string>
272272
<string name="routing_settings_import_rulesets_from_clipboard">Import ruleset from clipboard</string>
273+
<string name="routing_settings_import_rulesets_from_qrcode">استيراد مجموعة قواعد من رمز الاستجابة السريعة</string>
273274
<string name="routing_settings_export_rulesets_to_clipboard">Export ruleset to clipboard</string>
274275
<string name="routing_settings_locked">Locked, keep this rule when import presets</string>
275276

V2rayNG/app/src/main/res/values-bn/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@
265265
<string name="routing_settings_delete">মুছে ফেলুন</string>
266266
<string name="routing_settings_rule_title">Routing Rule Settings</string>
267267
<string name="routing_settings_add_rule">Add rule</string>
268-
<string name="routing_settings_import_rulesets">Import ruleset</string>
268+
<string name="routing_settings_import_predefined_rulesets">পূর্বনির্ধারিত নিয়মাবলী আমদানি করুন</string>
269269
<string name="routing_settings_import_rulesets_tip">Existing rulesets will be deleted, are you sure to continue?</string>
270270
<string name="routing_settings_import_rulesets_from_clipboard">Import ruleset from clipboard</string>
271+
<string name="routing_settings_import_rulesets_from_qrcode">QRcode থেকে রুলসেট আমদানি করুন</string>
271272
<string name="routing_settings_export_rulesets_to_clipboard">Export ruleset to clipboard</string>
272273
<string name="routing_settings_locked">Locked, keep this rule when import presets</string>
273274

V2rayNG/app/src/main/res/values-bqi-rIR/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,10 @@
267267
<string name="routing_settings_delete">روفتن</string>
268268
<string name="routing_settings_rule_title">سامووا قانۉݩ تور جوستن</string>
269269
<string name="routing_settings_add_rule">ازاف کردن قانۉݩ</string>
270-
<string name="routing_settings_import_rulesets">و من ٱووردن قانووا</string>
270+
<string name="routing_settings_import_predefined_rulesets">و من ٱووردن قانووا</string>
271271
<string name="routing_settings_import_rulesets_tip">قانووایی ک هیم سکو هڌسۉݩ پاک ابۊن، هنی هم اخۊی پاکسۉݩ کۊنی؟</string>
272272
<string name="routing_settings_import_rulesets_from_clipboard">و من ٱووردن قانووا ز کلیپ بورد</string>
273+
<string name="routing_settings_import_rulesets_from_qrcode">و من ٱووردن قانووا ز QRcode</string>
273274
<string name="routing_settings_export_rulesets_to_clipboard">و در کشیڌن قانووا وو زفت من کلیپ بورد</string>
274275
<string name="routing_settings_locked">چفت هڌ، ای قانؤنن مجال و من ٱووردن ز پؽش سامووا زفت کۊنین</string>
275276
<string name="routing_settings_domain" translatable="false">domain</string>

V2rayNG/app/src/main/res/values-fa/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,10 @@
263263
<string name="routing_settings_delete">حذف</string>
264264
<string name="routing_settings_rule_title">تنظیمات قانون مسیریابی</string>
265265
<string name="routing_settings_add_rule">اضافه کردن قانون</string>
266-
<string name="routing_settings_import_rulesets">وارد کردن مجموعه قوانین</string>
266+
<string name="routing_settings_import_predefined_rulesets">وارد کردن مجموعه قوانین از پیش تعریف شده</string>
267267
<string name="routing_settings_import_rulesets_tip">مجموعه قوانین موجود حذف خواهند شد، آیا مطمئن هستید که ادامه می دهید؟</string>
268268
<string name="routing_settings_import_rulesets_from_clipboard">وارد کردن مجموعه قوانین از کلیپ بورد</string>
269+
<string name="routing_settings_import_rulesets_from_qrcode">وارد کردن مجموعه قوانین از QRcode</string>
269270
<string name="routing_settings_export_rulesets_to_clipboard">صادر کردن مجموعه قوانین به کلیپ بورد</string>
270271
<string name="routing_settings_locked">قفل است، این قانون را هنگام وارد کردن از پیش تنظیم‌ها حفظ کنید</string>
271272

V2rayNG/app/src/main/res/values-ru/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,10 @@
266266
<string name="routing_settings_delete">Очистить</string>
267267
<string name="routing_settings_rule_title">Настройка правил маршрутизации</string>
268268
<string name="routing_settings_add_rule">Добавить правило</string>
269-
<string name="routing_settings_import_rulesets">Импорт правил</string>
269+
<string name="routing_settings_import_predefined_rulesets">Импорт предопределенных наборов правил</string>
270270
<string name="routing_settings_import_rulesets_tip">Существующие правила будут удалены. Продолжить?</string>
271271
<string name="routing_settings_import_rulesets_from_clipboard">Импорт правил из буфера обмена</string>
272+
<string name="routing_settings_import_rulesets_from_qrcode">Импорт набора правил из QRcode</string>
272273
<string name="routing_settings_export_rulesets_to_clipboard">Экспорт правил в буфер обмена</string>
273274
<string name="routing_settings_locked">Постоянное (сохранится при импорте правил)</string>
274275
<string name="routing_settings_domain">Домен</string>

V2rayNG/app/src/main/res/values-vi/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,10 @@
266266
<string name="routing_settings_delete">Xoá</string>
267267
<string name="routing_settings_rule_title">Routing Rule Settings</string>
268268
<string name="routing_settings_add_rule">Add rule</string>
269-
<string name="routing_settings_import_rulesets">Import ruleset</string>
269+
<string name="routing_settings_import_predefined_rulesets">Nhập các bộ quy tắc được xác định trước</string>
270270
<string name="routing_settings_import_rulesets_tip">Existing rulesets will be deleted, are you sure to continue?</string>
271271
<string name="routing_settings_import_rulesets_from_clipboard">Import ruleset from clipboard</string>
272+
<string name="routing_settings_import_rulesets_from_qrcode">Nhập bộ quy tắc từ QRcode</string>
272273
<string name="routing_settings_export_rulesets_to_clipboard">Export ruleset to clipboard</string>
273274
<string name="routing_settings_locked">Locked, keep this rule when import presets</string>
274275

V2rayNG/app/src/main/res/values-zh-rCN/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,10 @@
263263
<string name="routing_settings_delete">清空</string>
264264
<string name="routing_settings_rule_title">路由规则设置</string>
265265
<string name="routing_settings_add_rule">添加规则</string>
266-
<string name="routing_settings_import_rulesets">导入预设规则集</string>
266+
<string name="routing_settings_import_predefined_rulesets">导入预定义规则集</string>
267267
<string name="routing_settings_import_rulesets_tip">将删除现有的规则集,是否确定继续?</string>
268268
<string name="routing_settings_import_rulesets_from_clipboard">从剪贴板导入规则集</string>
269+
<string name="routing_settings_import_rulesets_from_qrcode">从 QRcode 导入规则集</string>
269270
<string name="routing_settings_export_rulesets_to_clipboard">导出规则集至剪贴板</string>
270271
<string name="routing_settings_locked">锁定中,导入预设时不删除此规则</string>
271272

V2rayNG/app/src/main/res/values-zh-rTW/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@
265265
<string name="routing_settings_delete">清除</string>
266266
<string name="routing_settings_rule_title">路由規則設定</string>
267267
<string name="routing_settings_add_rule">新增規則</string>
268-
<string name="routing_settings_import_rulesets">匯入預設規則集</string>
268+
<string name="routing_settings_import_predefined_rulesets">匯入預先定義的規則集</string>
269269
<string name="routing_settings_import_rulesets_tip">將刪除現有的規則集,是否確定繼續? </string>
270270
<string name="routing_settings_import_rulesets_from_clipboard">從剪貼簿匯入規則集</string>
271+
<string name="routing_settings_import_rulesets_from_qrcode">從 QRcode 匯入規則集</string>
271272
<string name="routing_settings_export_rulesets_to_clipboard">匯出規則集至剪貼簿</string>
272273
<string name="routing_settings_locked">鎖定中,匯入預設時不刪除此規則</string>
273274

V2rayNG/app/src/main/res/values/strings.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -270,9 +270,10 @@
270270
<string name="routing_settings_delete">Clear</string>
271271
<string name="routing_settings_rule_title">Routing Rule Settings</string>
272272
<string name="routing_settings_add_rule">Add rule</string>
273-
<string name="routing_settings_import_rulesets">Import ruleset</string>
273+
<string name="routing_settings_import_predefined_rulesets">Import predefined rulesets</string>
274274
<string name="routing_settings_import_rulesets_tip">Existing rulesets will be deleted, are you sure to continue?</string>
275275
<string name="routing_settings_import_rulesets_from_clipboard">Import ruleset from clipboard</string>
276+
<string name="routing_settings_import_rulesets_from_qrcode">Import ruleset from QRcode</string>
276277
<string name="routing_settings_export_rulesets_to_clipboard">Export ruleset to clipboard</string>
277278
<string name="routing_settings_locked">Locked, keep this rule when import presets</string>
278279
<string name="routing_settings_domain" translatable="false">domain</string>

0 commit comments

Comments
 (0)