/* * Copyright © 2017-2019 WireGuard LLC. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ package com.wireguard.android.activity import android.content.ComponentName import android.os.Build import android.os.Bundle import android.service.quicksettings.TileService import android.util.Log import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.wireguard.android.Application import com.wireguard.android.QuickTileService import com.wireguard.android.R import com.wireguard.android.backend.Tunnel import com.wireguard.android.util.ErrorMessages import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @RequiresApi(Build.VERSION_CODES.N) class TunnelToggleActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val tunnel = Application.getTunnelManager().lastUsedTunnel ?: return lifecycleScope.launch(Dispatchers.Main.immediate) { try { tunnel.setStateAsync(Tunnel.State.TOGGLE) } catch (e: Throwable) { TileService.requestListeningState(this@TunnelToggleActivity, ComponentName(this@TunnelToggleActivity, QuickTileService::class.java)) val error = ErrorMessages[e] val message = getString(R.string.toggle_error, error) Log.e(TAG, message, e) Toast.makeText(this@TunnelToggleActivity, message, Toast.LENGTH_LONG).show() finishAffinity() return@launch } TileService.requestListeningState(this@TunnelToggleActivity, ComponentName(this@TunnelToggleActivity, QuickTileService::class.java)) finishAffinity() } } companion object { private const val TAG = "WireGuard/TunnelToggleActivity" } }