ui: request intent permissions from hidden activity
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
a870bf6e04
commit
32778d1c03
@ -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"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user