Skip to content

Commit 32778d1

Browse files
committed
ui: request intent permissions from hidden activity
Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent a870bf6 commit 32778d1

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

ui/src/main/java/com/wireguard/android/activity/TunnelToggleActivity.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,23 @@ import android.os.Bundle
1010
import android.service.quicksettings.TileService
1111
import android.util.Log
1212
import android.widget.Toast
13+
import androidx.activity.result.contract.ActivityResultContracts
1314
import androidx.annotation.RequiresApi
1415
import androidx.appcompat.app.AppCompatActivity
1516
import androidx.lifecycle.lifecycleScope
1617
import com.wireguard.android.Application
1718
import com.wireguard.android.QuickTileService
1819
import com.wireguard.android.R
20+
import com.wireguard.android.backend.GoBackend
1921
import com.wireguard.android.backend.Tunnel
2022
import com.wireguard.android.util.ErrorMessages
2123
import kotlinx.coroutines.launch
2224

2325
@RequiresApi(Build.VERSION_CODES.N)
2426
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() {
2730
val tunnel = Application.getTunnelManager().lastUsedTunnel ?: return
2831
lifecycleScope.launch {
2932
try {
@@ -42,6 +45,20 @@ class TunnelToggleActivity : AppCompatActivity() {
4245
}
4346
}
4447

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+
4562
companion object {
4663
private const val TAG = "WireGuard/TunnelToggleActivity"
4764
}

0 commit comments

Comments
 (0)