diff --git a/base/src/main/java/com/windscribe/vpn/alert/ForegroundAlert.kt b/base/src/main/java/com/windscribe/vpn/alert/ForegroundAlert.kt index 7c221fc7a..0449c7a98 100644 --- a/base/src/main/java/com/windscribe/vpn/alert/ForegroundAlert.kt +++ b/base/src/main/java/com/windscribe/vpn/alert/ForegroundAlert.kt @@ -19,7 +19,7 @@ fun showRetryDialog(message: String, retryCallBack: () -> Unit, cancelCallBack: dialog.dismiss() if (which == AlertDialog.BUTTON_POSITIVE) { retryCallBack() - }else if(which == AlertDialog.BUTTON_NEGATIVE){ + } else if (which == AlertDialog.BUTTON_NEGATIVE) { cancelCallBack() } } @@ -110,12 +110,39 @@ fun showAlertDialog( positionButtonLabel, DialogInterface.OnClickListener(function = listener) ) - setNegativeButton(negativeButtonLabel, DialogInterface.OnClickListener(function = listener)) + setNegativeButton( + negativeButtonLabel, + DialogInterface.OnClickListener(function = listener) + ) show() } } } +fun showErrorDialog(activity: Activity, message: String, callBack: () -> Unit) { + val builder = createDialogBuilder(activity, message) + activity.let { + it.runOnUiThread { + builder.setOnDismissListener { + callBack() + } + builder.setOnCancelListener { + callBack() + } + val listener = { dialog: DialogInterface, _: Int -> + dialog.dismiss() + } + with(builder) { + setNeutralButton( + appContext.getString(R.string.ok), + DialogInterface.OnClickListener(function = listener) + ) + show() + } + } + } +} + fun safeDialog(block: (activity: Activity) -> Unit) { appContext.activeActivity?.let { it.runOnUiThread { diff --git a/base/src/main/java/com/windscribe/vpn/backend/utils/VPNPermissionActivity.kt b/base/src/main/java/com/windscribe/vpn/backend/utils/VPNPermissionActivity.kt index c6e6a8c68..d8f8bce4f 100644 --- a/base/src/main/java/com/windscribe/vpn/backend/utils/VPNPermissionActivity.kt +++ b/base/src/main/java/com/windscribe/vpn/backend/utils/VPNPermissionActivity.kt @@ -15,6 +15,8 @@ import android.os.Bundle import com.windscribe.vpn.R.layout import com.windscribe.vpn.Windscribe import com.windscribe.vpn.Windscribe.Companion.appContext +import com.windscribe.vpn.alert.showAlertDialog +import com.windscribe.vpn.alert.showErrorDialog import com.windscribe.vpn.autoconnection.ProtocolInformation import com.windscribe.vpn.backend.VpnBackendHolder import com.windscribe.vpn.repository.LocationRepository @@ -121,9 +123,19 @@ class VPNPermissionActivity : Activity() { } } else if (resultCode == RESULT_CANCELED) { logger.debug("User denied VPN permission.") - scope.launch { - vpnController.disconnectAsync() - finish() + showErrorDialog(this, + "Windscribe requires VPN permission to configure VPN. " + + "Sometimes you may see this error if another VPN app is configured as 'Always on VPN'. " + + "Please turn off 'Always on' in all profiles.") { + scope.launch { + try { + vpnController.disconnectAsync() + } catch (e: Exception) { + logger.error("Failed to disconnect VPN: ${e.message}") + } finally { + finish() + } + } } } }