@@ -10,20 +10,23 @@ import android.os.Bundle
10
10
import android.service.quicksettings.TileService
11
11
import android.util.Log
12
12
import android.widget.Toast
13
+ import androidx.activity.result.contract.ActivityResultContracts
13
14
import androidx.annotation.RequiresApi
14
15
import androidx.appcompat.app.AppCompatActivity
15
16
import androidx.lifecycle.lifecycleScope
16
17
import com.wireguard.android.Application
17
18
import com.wireguard.android.QuickTileService
18
19
import com.wireguard.android.R
20
+ import com.wireguard.android.backend.GoBackend
19
21
import com.wireguard.android.backend.Tunnel
20
22
import com.wireguard.android.util.ErrorMessages
21
23
import kotlinx.coroutines.launch
22
24
23
25
@RequiresApi(Build .VERSION_CODES .N )
24
26
class TunnelToggleActivity : AppCompatActivity () {
25
- override fun onCreate (savedInstanceState : Bundle ? ) {
26
- super .onCreate(savedInstanceState)
27
+ private val permissionActivityResultLauncher = registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { toggleTunnelWithPermissionsResult() }
28
+
29
+ private fun toggleTunnelWithPermissionsResult () {
27
30
val tunnel = Application .getTunnelManager().lastUsedTunnel ? : return
28
31
lifecycleScope.launch {
29
32
try {
@@ -42,6 +45,20 @@ class TunnelToggleActivity : AppCompatActivity() {
42
45
}
43
46
}
44
47
48
+ override fun onCreate (savedInstanceState : Bundle ? ) {
49
+ super .onCreate(savedInstanceState)
50
+ lifecycleScope.launch {
51
+ if (Application .getBackend() is GoBackend ) {
52
+ val intent = GoBackend .VpnService .prepare(this @TunnelToggleActivity)
53
+ if (intent != null ) {
54
+ permissionActivityResultLauncher.launch(intent)
55
+ return @launch
56
+ }
57
+ }
58
+ toggleTunnelWithPermissionsResult()
59
+ }
60
+ }
61
+
45
62
companion object {
46
63
private const val TAG = " WireGuard/TunnelToggleActivity"
47
64
}
0 commit comments