From 9fa8ca8c77e0e9bec9818ee5e9505e821428e31e Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 3 Apr 2023 19:37:51 +0200 Subject: ui: do not crash if tunnel preparation fails Signed-off-by: Jason A. Donenfeld --- .../com/wireguard/android/fragment/BaseFragment.kt | 20 ++++++++++++++------ ui/src/main/res/values/strings.xml | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'ui/src') diff --git a/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt b/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt index 569a6217..b70d53be 100644 --- a/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt +++ b/ui/src/main/java/com/wireguard/android/fragment/BaseFragment.kt @@ -67,12 +67,20 @@ abstract class BaseFragment : Fragment(), OnSelectedTunnelChangedListener { val activity = activity ?: return activity.lifecycleScope.launch { if (Application.getBackend() is GoBackend) { - val intent = GoBackend.VpnService.prepare(activity) - if (intent != null) { - pendingTunnel = tunnel - pendingTunnelUp = checked - permissionActivityResultLauncher.launch(intent) - return@launch + try { + val intent = GoBackend.VpnService.prepare(activity) + if (intent != null) { + pendingTunnel = tunnel + pendingTunnelUp = checked + permissionActivityResultLauncher.launch(intent) + return@launch + } + } catch (e: Throwable) { + val message = activity.getString(R.string.error_prepare, ErrorMessages[e]) + Snackbar.make(view, message, Snackbar.LENGTH_LONG) + .setAnchorView(view.findViewById(R.id.create_fab)) + .show() + Log.e(TAG, message, e) } } setTunnelStateWithPermissionsResult(tunnel, checked) diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 4952db51..bc85bdbf 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -120,6 +120,7 @@ Error bringing down tunnel: %s Error fetching apps list: %s Please obtain root access and try again + Error preparing tunnel: %s Error bringing up tunnel: %s Exclude private IPs Generate new private key -- cgit v1.2.3