Skip to content

Commit 92eb43f

Browse files
2dustAnGgIt886
authored andcommitted
Add routing rule lock, keep this rule when import presets
1 parent 9744ca6 commit 92eb43f

File tree

19 files changed

+103
-19
lines changed

19 files changed

+103
-19
lines changed

app/src/main/kotlin/com/neko/v2ray/dto/RulesetItem.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ data class RulesetItem(
99
var network: String? = null,
1010
var protocol: List<String>? = null,
1111
var enabled: Boolean = true,
12+
var looked: Boolean? = false,
1213
)

app/src/main/kotlin/com/neko/v2ray/ui/MainRecyclerAdapter.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,14 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter<Mai
8585
}
8686

8787
// 隐藏主页服务器地址为xxx:xxx:***/xxx.xxx.xxx.***
88-
val strState = "${profile.server?.let {
89-
if (it.contains(":"))
90-
it.split(":").take(2).joinToString(":") + ":***"
91-
else
92-
it.split('.').dropLast(1).joinToString(".", postfix = ".***") }} : ${profile.serverPort}"
88+
val strState = "${
89+
profile.server?.let {
90+
if (it.contains(":"))
91+
it.split(":").take(2).joinToString(":", postfix = ":***")
92+
else
93+
it.split('.').dropLast(1).joinToString(".", postfix = ".***")
94+
}
95+
} : ${profile.serverPort}"
9396

9497
holder.itemMainBinding.tvStatistics.text = strState
9598

app/src/main/kotlin/com/neko/v2ray/ui/RoutingEditActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class RoutingEditActivity : BaseActivity() {
9191

9292
private fun bindingServer(rulesetItem: RulesetItem): Boolean {
9393
binding.etRemarks.text = Utils.getEditable(rulesetItem.remarks)
94+
binding.chkLocked.isChecked = rulesetItem.looked ?: false
9495
binding.etDomain.text = Utils.getEditable(rulesetItem.domain?.joinToString(","))
9596
binding.etIp.text = Utils.getEditable(rulesetItem.ip?.joinToString(","))
9697
binding.etPort.text = Utils.getEditable(rulesetItem.port)
@@ -112,6 +113,7 @@ class RoutingEditActivity : BaseActivity() {
112113
val rulesetItem = SettingsManager.getRoutingRuleset(position) ?: RulesetItem()
113114

114115
rulesetItem.remarks = binding.etRemarks.text.toString()
116+
rulesetItem.looked = binding.chkLocked.isChecked
115117
binding.etDomain.text.toString().let { rulesetItem.domain = if (it.isEmpty()) null else it.split(",").map { itt -> itt.trim() }.filter { itt -> itt.isNotEmpty() } }
116118
binding.etIp.text.toString().let { rulesetItem.ip = if (it.isEmpty()) null else it.split(",").map { itt -> itt.trim() }.filter { itt -> itt.isNotEmpty() } }
117119
binding.etProtocol.text.toString().let { rulesetItem.protocol = if (it.isEmpty()) null else it.split(",").map { itt -> itt.trim() }.filter { itt -> itt.isNotEmpty() } }

app/src/main/kotlin/com/neko/v2ray/ui/RoutingSettingRecyclerAdapter.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.graphics.Color
55
import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
8+
import androidx.core.view.isVisible
89
import androidx.recyclerview.widget.RecyclerView
910
import com.neko.v2ray.databinding.ItemRecyclerRoutingSettingBinding
1011
import com.neko.v2ray.helper.ItemTouchHelperAdapter
@@ -25,6 +26,7 @@ class RoutingSettingRecyclerAdapter(val activity: RoutingSettingActivity) : Recy
2526
holder.itemRoutingSettingBinding.domainIp.text = (ruleset.domain ?: ruleset.ip ?: ruleset.port)?.toString()
2627
holder.itemRoutingSettingBinding.outboundTag.text = ruleset.outboundTag
2728
holder.itemRoutingSettingBinding.chkEnable.isChecked = ruleset.enabled
29+
holder.itemRoutingSettingBinding.imgLocked.isVisible = ruleset.looked ?: false
2830
holder.itemView.setBackgroundColor(Color.TRANSPARENT)
2931

3032
holder.itemRoutingSettingBinding.layoutEdit.setOnClickListener {

app/src/main/kotlin/com/neko/v2ray/util/SettingsManager.kt

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,40 @@ import java.util.Collections
1212

1313
object SettingsManager {
1414

15-
fun initRoutingRulesets(context: Context, index: Int = 0) {
15+
fun initRoutingRulesets(context: Context) {
1616
val exist = MmkvManager.decodeRoutingRulesets()
17+
if (exist.isNullOrEmpty()) {
18+
val rulesetList = getPresetRoutingRulesets(context)
19+
MmkvManager.encodeRoutingRulesets(rulesetList)
20+
}
21+
}
1722

23+
private fun getPresetRoutingRulesets(context: Context, index: Int = 0): MutableList<RulesetItem>? {
1824
val fileName = when (index) {
1925
0 -> "custom_routing_white"
2026
1 -> "custom_routing_black"
2127
2 -> "custom_routing_global"
2228
else -> "custom_routing_white"
2329
}
24-
if (exist.isNullOrEmpty()) {
25-
val assets = Utils.readTextFromAssets(context, fileName)
26-
if (TextUtils.isEmpty(assets)) {
27-
return
28-
}
29-
30-
val rulesetList = Gson().fromJson(assets, Array<RulesetItem>::class.java).toMutableList()
31-
MmkvManager.encodeRoutingRulesets(rulesetList)
30+
val assets = Utils.readTextFromAssets(context, fileName)
31+
if (TextUtils.isEmpty(assets)) {
32+
return null
3233
}
34+
35+
return Gson().fromJson(assets, Array<RulesetItem>::class.java).toMutableList()
3336
}
3437

3538
fun resetRoutingRulesets(context: Context, index: Int) {
36-
MmkvManager.encodeRoutingRulesets(null)
37-
initRoutingRulesets(context, index)
39+
val rulesetNew: MutableList<RulesetItem> = mutableListOf()
40+
MmkvManager.decodeRoutingRulesets()?.forEach { key ->
41+
if (key.looked == true) {
42+
rulesetNew.add(key)
43+
}
44+
}
45+
46+
val rulesetList = getPresetRoutingRulesets(context, index) ?: return
47+
rulesetNew.addAll(rulesetList)
48+
MmkvManager.encodeRoutingRulesets(rulesetNew)
3849
}
3950

4051
fun getRoutingRuleset(index: Int): RulesetItem? {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="1024"
5+
android:viewportHeight="1024">
6+
7+
<path
8+
android:fillColor="#FF000000"
9+
android:pathData="M742.4,409.6L716.8,409.6L716.8,332.8C716.8,205.8 613.4,102.4 486.4,102.4S256,205.8 256,332.8L256,409.6h-25.6C188.1,409.6 153.6,444.1 153.6,486.4v409.6c0,42.3 34.5,76.8 76.8,76.8h512c42.3,0 76.8,-34.5 76.8,-76.8v-409.6c0,-42.3 -34.5,-76.8 -76.8,-76.8zM307.2,332.8C307.2,234 387.6,153.6 486.4,153.6S665.6,234 665.6,332.8L665.6,409.6L307.2,409.6L307.2,332.8zM768,896a25.6,25.6 0,0 1,-25.6 25.6h-512a25.6,25.6 0,0 1,-25.6 -25.6v-409.6a25.6,25.6 0,0 1,25.6 -25.6h512a25.6,25.6 0,0 1,25.6 25.6v409.6z" />
10+
11+
</vector>

app/src/main/res/layout/activity_routing_edit.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,24 @@
295295
android:inputType="text" />
296296
</com.google.android.material.textfield.TextInputLayout>
297297
</LinearLayout>
298+
<LinearLayout
299+
android:orientation="horizontal"
300+
android:layout_width="match_parent"
301+
android:layout_height="wrap_content"
302+
android:layout_marginTop="8.0dip"
303+
android:layout_marginBottom="8.0dip">
304+
<TextView
305+
android:layout_width="wrap_content"
306+
android:layout_height="wrap_content"
307+
android:text="@string/routing_settings_locked" />
308+
<com.neko.switchbutton.SwitchButton
309+
android:id="@+id/chk_locked"
310+
android:layout_width="wrap_content"
311+
android:layout_height="wrap_content"
312+
app:kswAnimationDuration="300"
313+
app:kswBackDrawable="@drawable/uwu_switch_track"
314+
app:kswThumbDrawable="@drawable/uwu_switch_thumb" />
315+
</LinearLayout>
298316
<LinearLayout
299317
android:orientation="vertical"
300318
android:layout_width="match_parent"

app/src/main/res/layout/item_recycler_routing_setting.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,37 @@
3535
android:layout_height="wrap_content"
3636
android:layout_weight="1.0"
3737
android:paddingStart="@dimen/padding_start">
38+
<<<<<<< HEAD:app/src/main/res/layout/item_recycler_routing_setting.xml
3839
<TextView
3940
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
4041
android:id="@+id/remarks"
4142
android:layout_width="wrap_content"
4243
android:layout_height="wrap_content"
4344
android:layout_marginTop="10.0dip" />
45+
=======
46+
47+
<LinearLayout
48+
android:layout_width="wrap_content"
49+
android:layout_height="wrap_content"
50+
android:orientation="horizontal">
51+
52+
<TextView
53+
android:id="@+id/remarks"
54+
android:layout_width="wrap_content"
55+
android:layout_height="wrap_content"
56+
android:textAppearance="@style/TextAppearance.AppCompat.Subhead" />
57+
58+
<ImageView
59+
android:id="@+id/img_locked"
60+
android:layout_gravity="center"
61+
android:layout_marginStart="@dimen/padding_start"
62+
android:layout_width="@dimen/padding"
63+
android:layout_height="@dimen/padding"
64+
app:srcCompat="@drawable/ic_lock_24dp" />
65+
66+
</LinearLayout>
67+
68+
>>>>>>> 9b86ba9e (Add routing rule lock, keep this rule when import presets):V2rayNG/app/src/main/res/layout/item_recycler_routing_setting.xml
4469
<TextView
4570
android:textAppearance="@style/TextAppearance.AppCompat.Small"
4671
android:id="@+id/domainIp"

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@
243243
<string name="routing_settings_add_rule">إضافة القاعدة</string>
244244
<string name="routing_settings_import_rulesets">استيراد مجموعة القواعد</string>
245245
<string name="routing_settings_import_rulesets_tip">سيتم حذف مجموعات القواعد الحالية، هل أنت متأكد من الاستمرار؟</string>
246-
246+
<string name="routing_settings_locked">مقفل، حافظ على هذه القاعدة عند استيراد الإعدادات المسبقة</string>
247+
247248
<string name="connection_test_pending">تحقق من الاتصال</string>
248249
<string name="connection_test_testing">اختبارات…</string>
249250
<string name="connection_test_available">نجاح: استغرق اتصال HTTP %dms</string>

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,8 @@
245245
<string name="routing_settings_add_rule">افزودن قانون</string>
246246
<string name="routing_settings_import_rulesets">وارد کردن مجموعه قوانین</string>
247247
<string name="routing_settings_import_rulesets_tip">مجموعه قوانین موجود حذف خواهند شد، آیا مطمئن هستید که ادامه می دهید؟</string>
248-
248+
<string name="routing_settings_locked">قفل است، این قانون را هنگام وارد کردن از پیش تنظیمات حفظ کنید</string>
249+
249250
<string name="connection_test_pending">اتصال را بررسی کنید</string>
250251
<string name="connection_test_testing">آزمایش کردن…</string>
251252
<string name="connection_test_available">موفقیت: اتصال HTTP %dms طول کشید</string>

app/src/main/res/values-in/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">Tambah aturan</string>
244244
<string name="routing_settings_import_rulesets">Impor rangkaian aturan</string>
245245
<string name="routing_settings_import_rulesets_tip">Rangkaian aturan yang ada akan dihapus, apakah Anda yakin untuk melanjutkan?</string>
246+
<string name="routing_settings_locked">Terkunci, pertahankan aturan ini saat mengimpor preset</string>
246247

247248
<string name="connection_test_pending">Periksa Konektivitas</string>
248249
<string name="connection_test_testing">Pengujian…</string>

app/src/main/res/values-ja/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">ルールを追加する</string>
244244
<string name="routing_settings_import_rulesets">ルールセットをインポートする</string>
245245
<string name="routing_settings_import_rulesets_tip">既存のルールセットは削除されます。続行しますか?</string>
246+
<string name="routing_settings_locked">ロックされています。プリセットをインポートするときにこのルールを維持します</string>
246247

247248
<string name="connection_test_pending">接続をチェックする</string>
248249
<string name="connection_test_testing">テスト中…</string>

app/src/main/res/values-jw/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">Tambah aturan</string>
244244
<string name="routing_settings_import_rulesets">Set aturan impor</string>
245245
<string name="routing_settings_import_rulesets_tip">Setel aturan sing ana bakal dibusak, sampeyan yakin bakal terus?</string>
246+
<string name="routing_settings_locked">Dikunci, tetep aturan iki nalika ngimpor preset</string>
246247

247248
<string name="connection_test_pending">Priksa Konektivitas</string>
248249
<string name="connection_test_testing">Tes…</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">Добавление правила</string>
244244
<string name="routing_settings_import_rulesets">Импорт набора правил</string>
245245
<string name="routing_settings_import_rulesets_tip">Существующие наборы правил будут удалены. Вы уверены, что хотите продолжить?</string>
246+
<string name="routing_settings_locked">Заблокировано, сохранить это правило при импорте предустановок</string>
246247

247248
<string name="connection_test_pending">Проверьте подключение</string>
248249
<string name="connection_test_testing">Тестирование…</string>

app/src/main/res/values-su/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">Tambahkeun aturan</string>
244244
<string name="routing_settings_import_rulesets">Impor set aturan</string>
245245
<string name="routing_settings_import_rulesets_tip">Setélan aturan anu aya bakal dipupus, naha anjeun yakin bakal neruskeun?</string>
246+
<string name="routing_settings_locked">Dikonci, jaga aturan ieu nalika impor preset</string>
246247

247248
<string name="connection_test_pending">Pariksa Konéktipitas</string>
248249
<string name="connection_test_testing">Nguji…</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">Thêm quy tắc</string>
244244
<string name="routing_settings_import_rulesets">Nhập bộ quy tắc</string>
245245
<string name="routing_settings_import_rulesets_tip">Bộ quy tắc hiện có sẽ bị xóa, bạn có chắc chắn muốn tiếp tục không?</string>
246+
<string name="routing_settings_locked">Đã khóa, giữ nguyên quy tắc này khi nhập cài đặt trước</string>
246247

247248
<string name="connection_test_pending">Kiểm tra kết nối</string>
248249
<string name="connection_test_testing">Đang thử nghiệm…</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">添加规则</string>
244244
<string name="routing_settings_import_rulesets">导入规则集</string>
245245
<string name="routing_settings_import_rulesets_tip">现有规则集将被删除,确定继续吗?</string>
246+
<string name="routing_settings_locked">已锁定,导入预设时保留此规则</string>
246247

247248
<string name="connection_test_pending">检查连接性</string>
248249
<string name="connection_test_testing">测试...</string>

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@
243243
<string name="routing_settings_add_rule">新增規則</string>
244244
<string name="routing_settings_import_rulesets">匯入規則集</string>
245245
<string name="routing_settings_import_rulesets_tip">現有規則集將被刪除,確定繼續嗎?</string>
246+
<string name="routing_settings_locked">鎖定,匯入預設時保留此規則</string>
246247

247248
<string name="connection_test_pending">檢查連接性</string>
248249
<string name="connection_test_testing">測試...</string>

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,13 +238,14 @@
238238

239239
<string name="routing_settings_domain_strategy">Domain strategy</string>
240240
<string name="routing_settings_title">Routing Settings</string>
241-
<string name="routing_settings_tips">Separated by commas(,)</string>
241+
<string name="routing_settings_tips">Separated by commas(,),choose domain or ip</string>
242242
<string name="routing_settings_save">Save</string>
243243
<string name="routing_settings_delete">Clear</string>
244244
<string name="routing_settings_rule_title">Routing Rule Settings</string>
245245
<string name="routing_settings_add_rule">Add rule</string>
246246
<string name="routing_settings_import_rulesets">Import ruleset</string>
247247
<string name="routing_settings_import_rulesets_tip">Existing rulesets will be deleted, are you sure to continue?</string>
248+
<string name="routing_settings_locked">Locked, keep this rule when import presets</string>
248249

249250
<string name="connection_test_pending">Check Connectivity</string>
250251
<string name="connection_test_testing">Testing…</string>

0 commit comments

Comments
 (0)