ui: request intent permissions from hidden activity

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2020-09-26 11:44:24 +02:00
parent a870bf6e04
commit 32778d1c03

View File

@ -10,20 +10,23 @@ import android.os.Bundle
import android.service.quicksettings.TileService import android.service.quicksettings.TileService
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.wireguard.android.Application import com.wireguard.android.Application
import com.wireguard.android.QuickTileService import com.wireguard.android.QuickTileService
import com.wireguard.android.R import com.wireguard.android.R
import com.wireguard.android.backend.GoBackend
import com.wireguard.android.backend.Tunnel import com.wireguard.android.backend.Tunnel
import com.wireguard.android.util.ErrorMessages import com.wireguard.android.util.ErrorMessages
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@RequiresApi(Build.VERSION_CODES.N) @RequiresApi(Build.VERSION_CODES.N)
class TunnelToggleActivity : AppCompatActivity() { class TunnelToggleActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { private val permissionActivityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { toggleTunnelWithPermissionsResult() }
super.onCreate(savedInstanceState)
private fun toggleTunnelWithPermissionsResult() {
val tunnel = Application.getTunnelManager().lastUsedTunnel ?: return val tunnel = Application.getTunnelManager().lastUsedTunnel ?: return
lifecycleScope.launch { lifecycleScope.launch {
try { try {
@ -42,6 +45,20 @@ class TunnelToggleActivity : AppCompatActivity() {
} }
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
if (Application.getBackend() is GoBackend) {
val intent = GoBackend.VpnService.prepare(this@TunnelToggleActivity)
if (intent != null) {
permissionActivityResultLauncher.launch(intent)
return@launch
}
}
toggleTunnelWithPermissionsResult()
}
}
companion object { companion object {
private const val TAG = "WireGuard/TunnelToggleActivity" private const val TAG = "WireGuard/TunnelToggleActivity"
} }