Skip to content

Commit 37944e9

Browse files
committed
Add VPN check to proxy confirmation dialog and manual enable
- Add VPN warning text in ProxyConfirmSheet when VPN is active - Check VPN status before enabling proxy in confirmProxy() and onEnableProxy() - Add translations for proxy_saved_vpn_active_dialog and proxy_enable_failed_vpn_active - Expose VpnDetector through AppContainer and RootComponent
1 parent e8b0523 commit 37944e9

11 files changed

Lines changed: 48 additions & 5 deletions

File tree

app/src/main/java/org/monogram/app/MainContent.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,19 @@ private fun ProxyConfirmSheet(root: RootComponent) {
199199
}
200200
}
201201

202-
Spacer(modifier = Modifier.height(24.dp))
202+
Spacer(modifier = Modifier.height(8.dp))
203+
204+
val vpnActive by root.vpnDetector.isVpnActive.collectAsState()
205+
if (vpnActive) {
206+
Text(
207+
text = stringResource(R.string.proxy_saved_vpn_active_dialog),
208+
style = MaterialTheme.typography.bodyMedium,
209+
color = MaterialTheme.colorScheme.warning,
210+
modifier = Modifier.padding(horizontal = 4.dp, vertical = 8.dp)
211+
)
212+
}
213+
214+
Spacer(modifier = Modifier.height(16.dp))
203215

204216
Row(
205217
modifier = Modifier.fillMaxWidth(),
@@ -220,7 +232,8 @@ private fun ProxyConfirmSheet(root: RootComponent) {
220232
root.confirmProxy(
221233
proxyConfirmState.server!!,
222234
proxyConfirmState.port!!,
223-
proxyConfirmState.type!!
235+
proxyConfirmState.type!!,
236+
vpnActive
224237
)
225238
},
226239
modifier = Modifier

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="proxy_port">Порт</string>
1616
<string name="proxy_type">Тип</string>
1717
<string name="proxy_unknown">Неизвестно</string>
18+
<string name="proxy_saved_vpn_active_dialog">Прокси сохранено, но не включено из-за активной VPN</string>
19+
<string name="proxy_enable_failed_vpn_active">Невозможно включить прокси: VPN активна</string>
1820
<string name="cancel">Отмена</string>
1921
<string name="connect">Подключиться</string>
2022

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="proxy_port">Port</string>
1616
<string name="proxy_type">Typ</string>
1717
<string name="proxy_unknown">Neznáme</string>
18+
<string name="proxy_saved_vpn_active_dialog">Proxy uložené, ale neaktivované kvôli aktívnej VPN</string>
19+
<string name="proxy_enable_failed_vpn_active">Nemožno aktivovať proxy: VPN je aktívna</string>
1820
<string name="cancel">Zrušiť</string>
1921
<string name="connect">Pripojiť</string>
2022

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="proxy_port">Порт</string>
1616
<string name="proxy_type">Тип</string>
1717
<string name="proxy_unknown">Невідомо</string>
18+
<string name="proxy_saved_vpn_active_dialog">Проксі збережено, але не увімкнено через активну VPN</string>
19+
<string name="proxy_enable_failed_vpn_active">Неможливо увімкнути проксі: VPN активна</string>
1820
<string name="cancel">Скасувати</string>
1921
<string name="connect">Підключитися</string>
2022

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="proxy_port">端口</string>
1616
<string name="proxy_type">类型</string>
1717
<string name="proxy_unknown">未知</string>
18+
<string name="proxy_saved_vpn_active_dialog">代理已保存,但因 VPN 处于活动状态而未启用</string>
19+
<string name="proxy_enable_failed_vpn_active">无法启用代理:VPN 处于活动状态</string>
1820
<string name="cancel">取消</string>
1921
<string name="connect">连接</string>
2022

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
<string name="proxy_port">Port</string>
1616
<string name="proxy_type">Type</string>
1717
<string name="proxy_unknown">Unknown</string>
18+
<string name="proxy_saved_vpn_active_dialog">Proxy saved but not enabled due to active VPN</string>
19+
<string name="proxy_enable_failed_vpn_active">Cannot enable proxy: VPN is active</string>
1820
<string name="cancel">Cancel</string>
1921
<string name="connect">Connect</string>
2022

presentation/src/main/java/org/monogram/presentation/di/AppContainer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.monogram.core.DispatcherProvider
66
import org.monogram.core.Logger
77
import org.monogram.domain.managers.*
88
import org.monogram.domain.repository.*
9+
import org.monogram.data.infra.VpnDetector
910
import org.monogram.presentation.core.util.AppPreferences
1011
import org.monogram.presentation.core.util.IDownloadUtils
1112
import org.monogram.presentation.features.chats.currentChat.components.ExoPlayerCache
@@ -48,6 +49,7 @@ interface UtilsContainer {
4849
val clipManager: ClipManager
4950
val dispatcherProvider: DispatcherProvider
5051
val logger: Logger
52+
val vpnDetector: VpnDetector
5153
fun messageDisplayer(): MessageDisplayer
5254
fun externalNavigator(): ExternalNavigator
5355
fun phoneManager(): PhoneManager

presentation/src/main/java/org/monogram/presentation/di/KoinAppContainer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.monogram.core.DispatcherProvider
77
import org.monogram.core.Logger
88
import org.monogram.domain.managers.*
99
import org.monogram.domain.repository.*
10+
import org.monogram.data.infra.VpnDetector
1011
import org.monogram.presentation.core.util.AppPreferences
1112
import org.monogram.presentation.core.util.IDownloadUtils
1213
import org.monogram.presentation.features.chats.currentChat.components.ExoPlayerCache
@@ -49,6 +50,7 @@ class KoinUtilsContainer(private val koin: Koin) : UtilsContainer {
4950
override val clipManager: ClipManager by lazy { koin.get() }
5051
override val dispatcherProvider: DispatcherProvider by lazy { koin.get() }
5152
override val logger: Logger by lazy { koin.get() }
53+
override val vpnDetector: VpnDetector by lazy { koin.get() }
5254

5355
override fun messageDisplayer(): MessageDisplayer = koin.get()
5456
override fun externalNavigator(): ExternalNavigator = koin.get()

presentation/src/main/java/org/monogram/presentation/root/DefaultRootComponent.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import kotlinx.coroutines.launch
1515
import kotlinx.coroutines.withContext
1616
import kotlinx.parcelize.Parcelize
1717
import kotlinx.serialization.Serializable
18+
import org.monogram.data.infra.VpnDetector
1819
import org.monogram.domain.managers.PhoneManager
1920
import org.monogram.domain.models.MessageContent
2021
import org.monogram.domain.models.ProxyTypeModel
@@ -69,9 +70,11 @@ class DefaultRootComponent(
6970
private val updateRepository: UpdateRepository = container.repositories.updateRepository
7071
private val userRepository: UserRepository = container.repositories.userRepository
7172
private val cacheProvider: CacheProvider = container.cacheProvider
73+
private val vpnDetector: VpnDetector = container.utils.vpnDetector
7274

7375
override val appPreferences: AppPreferences = container.preferences.appPreferences
7476
override val videoPlayerPool: VideoPlayerPool = container.utils.videoPlayerPool
77+
override val vpnDetector: VpnDetector = vpnDetector
7578

7679
private val navigation = StackNavigation<Config>()
7780
private val scope = componentScope
@@ -322,11 +325,16 @@ class DefaultRootComponent(
322325
_proxyToConfirm.update { RootComponent.ProxyConfirmState() }
323326
}
324327

325-
override fun confirmProxy(server: String, port: Int, type: ProxyTypeModel) {
328+
override fun confirmProxy(server: String, port: Int, type: ProxyTypeModel, vpnActive: Boolean = false) {
326329
scope.launch {
327-
externalProxyRepository.addProxy(server, port, true, type)
330+
val isVpnActive = vpnActive || vpnDetector.isVpnActive.value
331+
externalProxyRepository.addProxy(server, port, !isVpnActive, type)
328332
dismissProxyConfirm()
329-
messageDisplayer.show("Proxy added and enabled")
333+
if (isVpnActive) {
334+
messageDisplayer.show(container.utils.stringProvider().getString("proxy_saved_vpn_active_dialog"))
335+
} else {
336+
messageDisplayer.show("Proxy added and enabled")
337+
}
330338
}
331339
}
332340

presentation/src/main/java/org/monogram/presentation/root/RootComponent.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import org.monogram.presentation.settings.sessions.SessionsComponent
4040
import org.monogram.presentation.settings.settings.SettingsComponent
4141
import org.monogram.presentation.settings.stickers.StickersComponent
4242
import org.monogram.presentation.settings.storage.StorageUsageComponent
43+
import org.monogram.data.infra.VpnDetector
4344

4445
interface RootComponent {
4546
val backHandler: BackHandler
@@ -51,6 +52,7 @@ interface RootComponent {
5152
val isBiometricEnabled: StateFlow<Boolean>
5253
val videoPlayerPool: VideoPlayerPool
5354
val appPreferences: AppPreferences
55+
val vpnDetector: VpnDetector
5456

5557
fun onBack()
5658
fun handleLink(link: String)

0 commit comments

Comments
 (0)