Skip to content

Commit 92a0414

Browse files
add keep awake controller
1 parent 714e465 commit 92a0414

10 files changed

Lines changed: 48 additions & 0 deletions

File tree

V2rayNG/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3030
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
3131
<uses-permission android:name="android.permission.INTERNET" />
32+
<uses-permission android:name="android.permission.WAKE_LOCK" />
3233
<uses-permission android:name="android.permission.CAMERA" />
3334
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"
3435
tools:ignore="ForegroundServicesPolicy" />

V2rayNG/app/src/main/java/com/v2ray/ang/AppConfig.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ object AppConfig {
116116
const val PREF_CUSTOM_DPI = "pref_custom_dpi"
117117
const val PREF_SOUND_ON_CONNECT = "pref_sound_on_connect"
118118
const val PREF_SHOW_SPLASH = "pref_show_splash_screen"
119+
const val PREF_KEEP_AWAKE = "pref_keep_awake"
119120

120121
// Profile banner, sheet banner, home banner & username
121122
const val PREF_CUSTOM_PROFILE_NAME = "custom_profile_name"

V2rayNG/app/src/main/java/com/v2ray/ang/service/CoreVpnService.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.net.ProxyInfo
1313
import android.net.VpnService
1414
import android.os.Build
1515
import android.os.ParcelFileDescriptor
16+
import android.os.PowerManager
1617
import android.os.StrictMode
1718
import androidx.annotation.RequiresApi
1819
import com.v2ray.ang.AppConfig
@@ -35,6 +36,7 @@ class CoreVpnService : VpnService(), ServiceControl {
3536
private lateinit var mInterface: ParcelFileDescriptor
3637
private var isRunning = false
3738
private var tun2SocksService: Tun2SocksControl? = null
39+
private var wakeLock: PowerManager.WakeLock? = null
3840

3941
/**destroy
4042
* Unfortunately registerDefaultNetworkCallback is going to return our VPN interface: https://android.googlesource.com/platform/frameworks/base/+/dda156ab0c5d66ad82bdcf76cda07cbc0a9c8a2e
@@ -202,6 +204,14 @@ class CoreVpnService : VpnService(), ServiceControl {
202204
try {
203205
mInterface = builder.establish()!!
204206
isRunning = true
207+
if (MmkvManager.decodeSettingsBool(AppConfig.PREF_KEEP_AWAKE, false)) {
208+
val pm = getSystemService(POWER_SERVICE) as PowerManager
209+
wakeLock = pm.newWakeLock(
210+
PowerManager.PARTIAL_WAKE_LOCK,
211+
"${AppConfig.TAG}:VpnWakeLock"
212+
).also { it.acquire() }
213+
LogUtil.i(AppConfig.TAG, "StartCore-VPN: WakeLock acquired")
214+
}
205215
if (MmkvManager.decodeSettingsBool(AppConfig.PREF_SOUND_ON_CONNECT, true)) {
206216
SoundPlayer.playConnect(this)
207217
}
@@ -351,6 +361,13 @@ class CoreVpnService : VpnService(), ServiceControl {
351361

352362
private fun stopAllService(isForced: Boolean = true) {
353363
isRunning = false
364+
wakeLock?.let {
365+
if (it.isHeld) {
366+
it.release()
367+
LogUtil.i(AppConfig.TAG, "StartCore-VPN: WakeLock released")
368+
}
369+
}
370+
wakeLock = null
354371
if (MmkvManager.decodeSettingsBool(AppConfig.PREF_SOUND_ON_CONNECT, true)) {
355372
SoundPlayer.playDisconnect(this)
356373
}

V2rayNG/app/src/main/java/com/v2ray/ang/ui/preference/activity/VpnSettingsActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class VpnSettingsActivity : BaseActivity() {
6262
private val hevTunLogLevel by lazy { findPreference<ListPreference>(AppConfig.PREF_HEV_TUNNEL_LOGLEVEL) }
6363
private val hevTunRwTimeout by lazy { findPreference<EditTextPreference>(AppConfig.PREF_HEV_TUNNEL_RW_TIMEOUT) }
6464
private val navigatePerAppProxy by lazy { findPreference<Preference>(AppConfig.PREF_NAVIGATE_PER_APP_PROXY_SETTINGS) }
65+
private val keepAwake by lazy { findPreference<SwitchPreferenceCompat>(AppConfig.PREF_KEEP_AWAKE) }
6566

6667
override fun onCreatePreferences(bundle: Bundle?, s: String?) {
6768
preferenceManager.preferenceDataStore = MmkvPreferenceDataStore()
@@ -132,6 +133,7 @@ class VpnSettingsActivity : BaseActivity() {
132133
vpnInterfaceAddress?.isEnabled = vpn
133134
vpnMtu?.isEnabled = vpn
134135
useHevTun?.isEnabled = vpn
136+
keepAwake?.isEnabled = vpn
135137
}
136138

137139
private fun updateLocalDns(enabled: Boolean) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:width="24dp"
4+
android:height="24dp"
5+
android:viewportWidth="24"
6+
android:viewportHeight="24">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M7,2v11h3v9l7,-12h-4l4,-8z" />
10+
</vector>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,8 @@
537537
<string name="pref_show_splash_summary">Tampilin splash screen pas aplikasi dibuka</string>
538538
<string name="title_pref_dynamic_color_banner">Tema Dinamis dari Banner Beranda</string>
539539
<string name="summary_pref_dynamic_color_banner">Skema warna tema bakal otomatis nyesuaiin sama gambar Banner Beranda kamu.</string>
540+
<string name="title_pref_keep_awake">Bikin HP tetep aktif</string>
541+
<string name="summary_pref_keep_awake">Nahan partial wake lock pas VPN lagi nyambung. Dibutuhin buat HP Xiaomi/HyperOS; kalau di Samsung/Pixel malah bikin boros baterai — mending biarin mati aja.</string>
540542

541543
<string name="uwu_banner_settings_title">Halo disana…</string>
542544
<string name="uwu_banner_settings_summary">"Met dateng di menu

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,8 @@
556556
<string name="pref_show_splash_summary">Показывать заставку при запуске приложения</string>
557557
<string name="title_pref_dynamic_color_banner">Динамическая тема от баннера главного экрана</string>
558558
<string name="summary_pref_dynamic_color_banner">Цветовая схема темы будет динамически подстраиваться под изображение баннера на главном экране.</string>
559+
<string name="title_pref_keep_awake">Не давать устройству уснуть</string>
560+
<string name="summary_pref_keep_awake">Удерживать частичную блокировку сна (partial wake lock) при подключенном VPN. Необходимо на Xiaomi/HyperOS; на Samsung/Pixel это только разряжает батарею — оставьте выключенным.</string>
559561

560562
<string name="uwu_banner_settings_title">Привет...</string>
561563
<string name="uwu_banner_settings_summary">"Добро пожаловать в

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,8 @@
535535
<string name="pref_show_splash_summary">在运行应用时显示启动画面</string>
536536
<string name="title_pref_dynamic_color_banner">基于主页横幅的动态主题</string>
537537
<string name="summary_pref_dynamic_color_banner">主题配色方案将根据您的主页横幅图片进行动态调整。</string>
538+
<string name="title_pref_keep_awake">保持设备唤醒</string>
539+
<string name="summary_pref_keep_awake">在 VPN 连接时保持部分唤醒锁 (partial wake lock)。小米/HyperOS 设备需要开启此项;在三星/Pixel 上开启只会徒增耗电 —— 建议保持关闭。</string>
538540

539541
<string name="uwu_banner_settings_title">你好呀……</string>
540542
<string name="uwu_banner_settings_summary">"欢迎来到设置菜单,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,8 @@
573573
<string name="pref_show_splash_summary">Show splash screen when application is run</string>
574574
<string name="title_pref_dynamic_color_banner">Dynamic Theme from Home Banner</string>
575575
<string name="summary_pref_dynamic_color_banner">The theme color scheme will dynamically adapt to your Home Banner image.</string>
576+
<string name="title_pref_keep_awake">Keep device awake</string>
577+
<string name="summary_pref_keep_awake">Hold a partial wake lock while the VPN is connected. Needed on Xiaomi/HyperOS; on Samsung/Pixel it just drains battery — leave off.</string>
576578

577579
<string name="uwu_banner_settings_title">Hello there...</string>
578580
<string name="uwu_banner_settings_summary">"Welcome to the settings

V2rayNG/app/src/main/res/xml/pref_vpn_settings.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212
android:summary="@string/summary_pref_ipv6_enabled"
1313
android:title="@string/title_pref_ipv6_enabled" />
1414

15+
<androidx.preference.SwitchPreferenceCompat
16+
android:icon="@drawable/ic_flash_on"
17+
app:layout="@layout/uwu_mid_switch"
18+
app:widgetLayout="@layout/uwu_widget_material_switch"
19+
android:defaultValue="false"
20+
android:key="pref_keep_awake"
21+
android:summary="@string/summary_pref_keep_awake"
22+
android:title="@string/title_pref_keep_awake" />
23+
1524
<androidx.preference.SwitchPreferenceCompat
1625
android:icon="@drawable/ic_domain"
1726
app:layout="@layout/uwu_mid_switch"

0 commit comments

Comments
 (0)