Skip to content

Commit 3b2e1cc

Browse files
CodeWithTamim2dust
authored andcommitted
Feature/add auto start
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
1 parent eff0ca8 commit 3b2e1cc

File tree

21 files changed

+102
-14
lines changed

21 files changed

+102
-14
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
3636
<uses-permission android:name="android.permission.INTERNET" />
3737
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
38-
<!-- <useapplications-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> -->
38+
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3939
<uses-permission android:name="android.permission.CAMERA" />
4040
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
4141
<uses-permission
@@ -305,6 +305,15 @@
305305
</intent-filter>
306306
</receiver>
307307

308+
<receiver
309+
android:exported="true"
310+
android:name=".receiver.BootReceiver"
311+
android:label="BootReceiver">
312+
<intent-filter>
313+
<action android:name="android.intent.action.BOOT_COMPLETED" />
314+
</intent-filter>
315+
</receiver>
316+
308317
<service
309318
android:exported="true"
310319
android:name=".service.QSTileService"

app/src/main/kotlin/com/neko/v2ray/AppConfig.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ object AppConfig {
5151
const val PREF_ALLOW_INSECURE = "pref_allow_insecure"
5252
const val PREF_SOCKS_PORT = "pref_socks_port"
5353
const val PREF_HTTP_PORT = "pref_http_port"
54-
5554
const val PREF_REMOTE_DNS = "pref_remote_dns"
5655
const val PREF_DOMESTIC_DNS = "pref_domestic_dns"
5756
const val PREF_DELAY_TEST_URL = "pref_delay_test_url"
5857
const val PREF_LOGLEVEL = "pref_core_loglevel"
5958
const val PREF_MODE = "pref_mode"
59+
const val PREF_IS_BOOTED = "pref_is_booted"
6060

6161
/** Cache keys. */
6262
const val CACHE_SUBSCRIPTION_ID = "cache_subscription_id"
@@ -109,6 +109,7 @@ object AppConfig {
109109
const val DNS_DIRECT = "223.5.5.5"
110110
const val DNS_VPN = "1.1.1.1"
111111

112+
112113
/** Ports and addresses for various services. */
113114
const val PORT_LOCAL_DNS = "10853"
114115
const val PORT_SOCKS = "10808"
@@ -152,4 +153,8 @@ object AppConfig {
152153
const val WIREGUARD = "wireguard://"
153154
const val TUIC = "tuic://"
154155
const val HYSTERIA2 = "hysteria2://"
156+
157+
/** Give a good name to this, IDK*/
158+
const val VPN = "VPN"
159+
155160
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.neko.v2ray.receiver
2+
3+
import android.content.BroadcastReceiver
4+
import android.content.Context
5+
import android.content.Intent
6+
import com.neko.v2ray.service.V2RayServiceManager
7+
import com.neko.v2ray.util.MmkvManager
8+
9+
class BootReceiver : BroadcastReceiver() {
10+
override fun onReceive(context: Context?, intent: Intent?) {
11+
if (Intent.ACTION_BOOT_COMPLETED == intent?.action && MmkvManager.decodeStartOnBoot()) {
12+
if (MmkvManager.getSelectServer().isNullOrEmpty()) {
13+
return
14+
}
15+
V2RayServiceManager.startV2Ray(context!!)
16+
}
17+
}
18+
}

app/src/main/kotlin/com/neko/v2ray/service/V2RayServiceManager.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import androidx.core.app.NotificationCompat
1616
import com.neko.v2ray.AppConfig
1717
import com.neko.v2ray.AppConfig.ANG_PACKAGE
1818
import com.neko.v2ray.AppConfig.TAG_DIRECT
19+
import com.neko.v2ray.AppConfig.VPN
1920
import com.neko.v2ray.R
2021
import com.neko.v2ray.dto.ServerConfig
2122
import com.neko.v2ray.extension.toSpeedString
@@ -72,7 +73,7 @@ object V2RayServiceManager {
7273
} else {
7374
context.toast(R.string.toast_services_start)
7475
}
75-
val intent = if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: "VPN") == "VPN") {
76+
val intent = if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: VPN) == VPN) {
7677
Intent(context.applicationContext, V2RayVpnService::class.java)
7778
} else {
7879
Intent(context.applicationContext, V2RayProxyOnlyService::class.java)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.google.android.material.navigation.NavigationView
3131
import com.google.android.material.tabs.TabLayout
3232
import com.tbruyelle.rxpermissions3.RxPermissions
3333
import com.neko.v2ray.AppConfig
34+
import com.neko.v2ray.AppConfig.VPN
3435
import com.neko.v2ray.R
3536
import com.neko.v2ray.databinding.ActivityMainBinding
3637
import com.neko.v2ray.dto.EConfigType
@@ -140,7 +141,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
140141
binding.fab.setOnClickListener {
141142
if (mainViewModel.isRunning.value == true) {
142143
Utils.stopVService(this)
143-
} else if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: "VPN") == "VPN") {
144+
} else if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: VPN) == VPN) {
144145
val intent = VpnService.prepare(this)
145146
if (intent == null) {
146147
startV2Ray()

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ import android.view.Menu
88
import android.view.MenuItem
99
import androidx.activity.viewModels
1010
import com.google.android.material.appbar.MaterialToolbar
11+
import com.google.android.material.appbar.CollapsingToolbarLayout
12+
import androidx.preference.Preference
1113
import androidx.preference.SwitchPreference
1214
import androidx.preference.EditTextPreference
1315
import androidx.preference.ListPreference
14-
import androidx.preference.Preference
1516
import androidx.preference.PreferenceFragmentCompat
1617
import androidx.work.ExistingPeriodicWorkPolicy
1718
import androidx.work.PeriodicWorkRequest
1819
import androidx.work.multiprocess.RemoteWorkManager
19-
import com.google.android.material.appbar.CollapsingToolbarLayout
2020
import com.neko.v2ray.AngApplication
2121
import com.neko.v2ray.AppConfig
22+
import com.neko.v2ray.AppConfig.VPN
2223
import com.neko.v2ray.R
2324
import com.neko.v2ray.extension.toLongEx
2425
import com.neko.v2ray.service.SubscriptionUpdater
@@ -194,7 +195,7 @@ class SettingsActivity : BaseActivity() {
194195

195196
override fun onStart() {
196197
super.onStart()
197-
updateMode(settingsStorage.decodeString(AppConfig.PREF_MODE, "VPN"))
198+
updateMode(settingsStorage.decodeString(AppConfig.PREF_MODE, VPN))
198199
localDns?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_LOCAL_DNS_ENABLED, false)
199200
fakeDns?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_FAKE_DNS_ENABLED, false)
200201
localDnsPort?.summary = settingsStorage.decodeString(AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PORT_LOCAL_DNS)
@@ -252,6 +253,7 @@ class SettingsActivity : BaseActivity() {
252253

253254
listOf(
254255
AppConfig.PREF_ROUTE_ONLY_ENABLED,
256+
AppConfig.PREF_IS_BOOTED,
255257
AppConfig.PREF_BYPASS_APPS,
256258
AppConfig.PREF_SPEED_ENABLED,
257259
AppConfig.PREF_CONFIRM_REMOVE,
@@ -280,7 +282,7 @@ class SettingsActivity : BaseActivity() {
280282
}
281283

282284
private fun updateMode(mode: String?) {
283-
val vpn = mode == "VPN"
285+
val vpn = mode == VPN
284286
perAppProxy?.isEnabled = vpn
285287
perAppProxy?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_PER_APP_PROXY, false)
286288
localDns?.isEnabled = vpn

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.neko.v2ray.util
22

33
import com.google.gson.Gson
44
import com.tencent.mmkv.MMKV
5+
import com.neko.v2ray.AppConfig.PREF_IS_BOOTED
56
import com.neko.v2ray.AppConfig.PREF_ROUTING_RULESET
67
import com.neko.v2ray.dto.AssetUrlItem
78
import com.neko.v2ray.dto.ProfileItem
@@ -307,4 +308,14 @@ object MmkvManager {
307308
}
308309

309310
//endregion
311+
312+
//region Others
313+
fun encodeStartOnBoot(startOnBoot: Boolean) {
314+
settingsStorage.encode(PREF_IS_BOOTED, startOnBoot)
315+
}
316+
fun decodeStartOnBoot(): Boolean {
317+
return settingsStorage.decodeBool(PREF_IS_BOOTED, false)
318+
}
319+
//endregion
320+
310321
}

app/src/main/kotlin/com/neko/v2ray/viewmodel/SettingsViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application
4949
}
5050

5151
AppConfig.PREF_ROUTE_ONLY_ENABLED,
52+
AppConfig.PREF_IS_BOOTED,
5253
AppConfig.PREF_SPEED_ENABLED,
5354
AppConfig.PREF_PROXY_SHARING,
5455
AppConfig.PREF_LOCAL_DNS_ENABLED,
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportHeight="24"
5+
android:viewportWidth="24">
6+
<path
7+
android:fillColor="#ff000000"
8+
android:pathData="M12.5,2C8.93,2 8.14,5.96 10.13,9.65C9.72,9.97 9.4,10.39 9.21,10.87C8.28,10.68 7.23,10.25 6.73,9.26C5.56,6.89 2,7 2,11.5C2,15.07 5.95,15.85 9.64,13.87C9.96,14.27 10.39,14.59 10.88,14.79C10.68,15.71 10.24,16.75 9.26,17.24C6.9,18.42 7,22 11.5,22C12.31,22 13,21.78 13.5,21.41C13.19,20.67 13,19.86 13,19C13,17.59 13.5,16.3 14.3,15.28C14.17,14.97 14.03,14.65 13.86,14.34C14.26,14 14.57,13.59 14.77,13.11C15.26,13.21 15.78,13.39 16.25,13.67C17.07,13.25 18,13 19,13C20.05,13 21.03,13.27 21.89,13.74C21.95,13.37 22,12.96 22,12.5C22,8.92 18.03,8.13 14.33,10.13C14,9.73 13.59,9.42 13.11,9.22C13.3,8.29 13.74,7.24 14.73,6.75C17.09,5.57 17,2 12.5,2M12,11C12.54,11 13,11.45 13,12C13,12.55 12.54,13 12,13C11.43,13 11,12.55 11,12C11,11.45 11.43,11 12,11M18,15C16.89,15 16,15.9 16,17V23H18V21H20V23H22V17C22,15.9 21.1,15 20,15M18,17H20V19H18Z" />
9+
</vector>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
<string name="title_vpn_settings">إعدادات VPN</string>
122122
<string name="title_pref_per_app_proxy">الوكيل لكل تطبيق</string>
123123
<string name="summary_pref_per_app_proxy">عام: التطبيق المحدد هو وكيل، ولم يتم تحديد اتصال مباشر؛ \nوضع التجاوز: التطبيق المحدد متصل مباشرة، الوكيل غير محدد. \nخيار تحديد تطبيق الوكيل تلقائيًا في القائمة</string>
124+
<string name="title_pref_is_booted">بدء التشغيل التلقائي</string>
125+
<string name="summary_pref_is_booted">بدء تشغيل VPN تلقائيًا إذا تم تحديد خادم بالفعل</string>
124126

125127
<string name="title_mux_settings">إعدادات مكس</string>
126128
<string name="title_pref_mux_enabled">تمكين مكس</string>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@
123123
<string name="title_vpn_settings">تنظیمات VPN</string>
124124
<string name="title_pref_per_app_proxy">پروکسی هر برنامه</string>
125125
<string name="summary_pref_per_app_proxy">عمومی: برنامه بررسی شده پروکسی است، اتصال مستقیم بدون علامت است. \nحالت دور زدن: برنامه علامت‌گذاری شده مستقیماً متصل است، پراکسی علامت‌گذاری نشده است. \nگزینه انتخاب خودکار برنامه پراکسی در منو</string>
126+
<string name="title_pref_is_booted">شروع خودکار</string>
127+
<string name="summary_pref_is_booted">اگر سروری قبلاً انتخاب شده باشد، VPN را به طور خودکار راه اندازی کنید</string>
126128

127129
<string name="title_mux_settings">تنظیمات Mux</string>
128130
<string name="title_pref_mux_enabled">Mux را فعال کنید</string>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
<string name="title_vpn_settings">Pengaturan VPN</string>
122122
<string name="title_pref_per_app_proxy">Proxy per aplikasi</string>
123123
<string name="summary_pref_per_app_proxy">Umum: Aplikasi yang dicentang adalah proxy, koneksi langsung tidak dicentang; \nmode bypass: aplikasi yang dicentang terhubung langsung, proxy yang tidak dicentang. \nPilihan untuk memilih aplikasi proxy secara otomatis di menu</string>
124+
<string name="title_pref_is_booted">Mulai otomatis</string>
125+
<string name="summary_pref_is_booted">Mulai VPN secara otomatis jika server telah dipilih</string>
124126

125127
<string name="title_mux_settings">Pengaturan Mux</string>
126128
<string name="title_pref_mux_enabled">Aktifkan Mux</string>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
<string name="title_vpn_settings">VPN設定</string>
122122
<string name="title_pref_per_app_proxy">アプリごとのプロキシ</string>
123123
<string name="summary_pref_per_app_proxy">一般: チェックされているアプリはプロキシ、チェックされていない場合は直接接続です。 \nバイパス モード: チェックされたアプリが直接接続され、チェックされていないプロキシ。 \nメニューでプロキシ アプリケーションを自動的に選択するオプション</string>
124+
<string name="title_pref_is_booted">自動スタート</string>
125+
<string name="summary_pref_is_booted">サーバーがすでに選択されている場合はVPNを自動的に開始します</string>
124126

125127
<string name="title_mux_settings">マルチプレクサ設定</string>
126128
<string name="title_pref_mux_enabled">マルチプレクサを有効にする</string>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@
121121
<string name="title_vpn_settings">Setelan VPN</string>
122122
<string name="title_pref_per_app_proxy">Proxy saben app</string>
123123
<string name="summary_pref_per_app_proxy">Umum: Aplikasi sing dicenthang minangka proxy, sambungan langsung ora dicenthang; \nmode bypass: app sing dicenthang nyambung langsung, proxy sing ora dicenthang. \nPilihan kanggo milih aplikasi proxy kanthi otomatis ing menu</string>
124+
<string name="title_pref_is_booted">Miwiti otomatis</string>
125+
<string name="summary_pref_is_booted">Miwiti VPN kanthi otomatis yen server wis dipilih</string>
124126

125127
<string name="title_mux_settings">Setelan Mux</string>
126128
<string name="title_pref_mux_enabled">Aktifake Mux</string>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121
<string name="title_vpn_settings">Настройки VPN</string>
122122
<string name="title_pref_per_app_proxy">Прокси для каждого приложения</string>
123123
<string name="summary_pref_per_app_proxy">Общее: проверенное приложение является прокси-сервером, не отмечено прямое соединение; \nрежим обхода: проверенное приложение подключено напрямую, прокси-сервер не проверен. \nВозможность автоматического выбора прокси-приложения в меню</string>
124-
124+
<string name="title_pref_is_booted">Автоматический запуск</string>
125+
<string name="summary_pref_is_booted">Автоматически запускать VPN, если сервер уже выбран</string>
126+
125127
<string name="title_mux_settings">Настройки мультиплексора</string>
126128
<string name="title_pref_mux_enabled">Включить мультиплексор</string>
127129
<string name="summary_pref_mux_enabled">Быстрее, но это может привести к нестабильному соединению.\nНастройте способы обработки TCP, UDP и QUIC ниже.</string>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121
<string name="title_vpn_settings">Setélan VPN</string>
122122
<string name="title_pref_per_app_proxy">Proksi per-aplikasi</string>
123123
<string name="summary_pref_per_app_proxy">Umum: Aplikasi anu dipariksa nyaéta proxy, sambungan langsung henteu dicentang; \nmodeu bypass: aplikasi nu dipariksa langsung nyambung, proxy teu dicentang. \nPilihan pikeun otomatis milih aplikasi proxy dina ménu</string>
124-
124+
<string name="title_pref_is_booted">Otomatis ngamimitian</string>
125+
<string name="summary_pref_is_booted">Otomatis ngamimitian VPN upami server parantos dipilih</string>
126+
125127
<string name="title_mux_settings">Setélan Mux</string>
126128
<string name="title_pref_mux_enabled">Aktipkeun Mux</string>
127129
<string name="summary_pref_mux_enabled">Langkung gancang, tapi tiasa nyababkeun konektipitas teu stabil\nsaluyukeun kumaha TCP, UDP sareng QUIC diatur di handap.</string>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121
<string name="title_vpn_settings">Cài đặt VPN</string>
122122
<string name="title_pref_per_app_proxy">Proxy trên mỗi ứng dụng</string>
123123
<string name="summary_pref_per_app_proxy">Chung: Ứng dụng đã kiểm tra là proxy, kết nối trực tiếp không được kiểm tra; \nchế độ bỏ qua: ứng dụng đã chọn được kết nối trực tiếp, proxy không được chọn. \nTùy chọn tự động chọn ứng dụng proxy trong menu</string>
124-
124+
<string name="title_pref_is_booted">Tự động khởi động</string>
125+
<string name="summary_pref_is_booted">Tự động khởi động VPN nếu máy chủ đã được chọn</string>
126+
125127
<string name="title_mux_settings">Cài đặt Mux</string>
126128
<string name="title_pref_mux_enabled">Kích hoạt Mux</string>
127129
<string name="summary_pref_mux_enabled">Nhanh hơn nhưng có thể khiến kết nối không ổn định\ntùy chỉnh cách xử lý TCP, UDP và QUIC bên dưới</string>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121
<string name="title_vpn_settings">VPN 设置</string>
122122
<string name="title_pref_per_app_proxy">每个应用程序代理</string>
123123
<string name="summary_pref_per_app_proxy">General:勾选App为代理,不勾选直连; \n绕过模式:选中应用程序直连,未选中代理。 \n菜单中自动选择代理应用程序的选项</string>
124-
124+
<string name="title_pref_is_booted">自动启动</string>
125+
<string name="summary_pref_is_booted">如果已选择服务器则自动启动 VPN</string>
126+
125127
<string name="title_mux_settings">复用器设置</string>
126128
<string name="title_pref_mux_enabled">启用复用器</string>
127129
<string name="summary_pref_mux_enabled">更快,但可能会导致连接不稳定\n自定义如何处理下面的 TCP、UDP 和 QUIC</string>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121
<string name="title_vpn_settings">VPN 設定</string>
122122
<string name="title_pref_per_app_proxy">每個應用程式代理</string>
123123
<string name="summary_pref_per_app_proxy">General:勾選App為代理,不勾選直連; \n繞過模式:選取應用程式直連,未選取代理程式。 \n選單中自動選擇代理應用程式的選項</string>
124-
124+
<string name="title_pref_is_booted">自動啟動</string>
125+
<string name="summary_pref_is_booted">如果已選擇伺服器,則自動啟動 VPN</string>
126+
125127
<string name="title_mux_settings">多工器設置</string>
126128
<string name="title_pref_mux_enabled">啟用復用器</string>
127129
<string name="summary_pref_mux_enabled">更快,但可能會導致連線不穩定\n自訂如何處理下面的 TCP、UDP 和 QUIC</string>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@
120120
<string name="title_advanced">Advanced Settings</string>
121121
<string name="title_vpn_settings">VPN Settings</string>
122122
<string name="title_pref_per_app_proxy">Per-app proxy</string>
123+
<string name="title_pref_is_booted">Auto start</string>
124+
<string name="summary_pref_is_booted">Automatically start VPN if a server has already been selected</string>
125+
123126
<string name="summary_pref_per_app_proxy">General: Checked App is proxy, unchecked direct connection; \nbypass mode: checked app directly connected, unchecked proxy. \nThe option to automatically select the proxy application in the menu</string>
124127

125128
<string name="title_mux_settings">Mux Settings</string>

app/src/main/res/xml/pref_settings.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@
2626
android:defaultValue="false"
2727
android:key="pref_route_only_enabled"
2828
android:icon="@drawable/uwu_ic_route"
29-
android:layout="@layout/uwu_bot_switch"
29+
android:layout="@layout/uwu_mid_switch"
3030
android:summary="@string/summary_pref_route_only_enabled"
3131
android:title="@string/title_pref_route_only_enabled" />
3232

33+
<SwitchPreference
34+
android:defaultValue="false"
35+
android:key="pref_is_booted"
36+
android:icon="@drawable/uwu_ic_autobot"
37+
android:layout="@layout/uwu_bot_switch"
38+
android:summary="@string/summary_pref_is_booted"
39+
android:title="@string/title_pref_is_booted" />
40+
3341
</PreferenceCategory>
3442

3543
<PreferenceCategory android:title="@string/title_vpn_settings">

0 commit comments

Comments
 (0)