diff options
Diffstat (limited to 'android/src/main')
4 files changed, 16 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/NotificationBanner.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/NotificationBanner.kt index 83cc14b738..3965344f7a 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/NotificationBanner.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/NotificationBanner.kt @@ -193,13 +193,19 @@ class NotificationBanner( } } } + is ErrorStateCause.VpnPermissionDenied -> R.string.vpn_permission_denied_error } // if the error state is null, we can assume that we are secure if (errorState?.isBlocking ?: true) { showError(R.string.blocking_internet, messageText) } else { - showError(R.string.not_blocking_internet, R.string.failed_to_block_internet) + val updatedMessageText = when (cause) { + is ErrorStateCause.VpnPermissionDenied -> messageText + else -> R.string.failed_to_block_internet + } + + showError(R.string.not_blocking_internet, updatedMessageText) } } diff --git a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt index a36e0b1db6..f960f0c13f 100644 --- a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt +++ b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt @@ -18,6 +18,11 @@ open class TalpidVpnService : VpnService() { } fun createTun(config: TunConfig): Int { + if (VpnService.prepare(this) != null) { + // VPN permission wasn't granted + return -1 + } + val builder = Builder().apply { for (address in config.addresses) { addAddress(address, prefixForAddress(address)) diff --git a/android/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt b/android/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt index e289b59551..d35d0a428b 100644 --- a/android/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt +++ b/android/src/main/kotlin/net/mullvad/talpid/tunnel/ErrorStateCause.kt @@ -9,4 +9,5 @@ sealed class ErrorStateCause { class TunnelParameterError(val error: ParameterGenerationError) : ErrorStateCause() class IsOffline : ErrorStateCause() class TapAdapterProblem : ErrorStateCause() + class VpnPermissionDenied : ErrorStateCause() } diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index a9c5cdab2a..744ae5a0c1 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -120,6 +120,9 @@ server</string> <string name="start_tunnel_error">Failed to start tunnel connection</string> + <string name="vpn_permission_denied_error">VPN permission was + denied when creating the tunnel. Please try connecting + again.</string> <string name="no_matching_relay">No relay server matches the current settings</string> <string name="no_matching_bridge_relay">No bridge relay server |
