diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 13:26:13 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-22 13:26:13 -0300 |
| commit | 1d9a3f9c6a3bc536de0a92654d87f982ef2bb219 (patch) | |
| tree | ebd42c2c07f08dceff370b77b64bcde9b2592c99 /android/src/main | |
| parent | 0f260b311c5cd4e9ee14f93e352910b5a2e1f394 (diff) | |
| parent | 19364df3fffdeb24d24e0600bf79cd00976822f0 (diff) | |
| download | mullvadvpn-1d9a3f9c6a3bc536de0a92654d87f982ef2bb219.tar.xz mullvadvpn-1d9a3f9c6a3bc536de0a92654d87f982ef2bb219.zip | |
Merge branch 'android-daemon'
Diffstat (limited to 'android/src/main')
3 files changed, 66 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ApiRootCaFile.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ApiRootCaFile.kt new file mode 100644 index 0000000000..dc8af32ce2 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ApiRootCaFile.kt @@ -0,0 +1,29 @@ +package net.mullvad.mullvadvpn + +import java.io.File +import java.io.FileOutputStream +import java.io.InputStream + +import android.content.Context + +private const val API_ROOT_CA_FILE = "api_root_ca.pem" +private const val API_ROOT_CA_PATH = "/data/data/net.mullvad.mullvadvpn/api_root_ca.pem" + +class ApiRootCaFile { + fun extract(context: Context) { + if (!File(API_ROOT_CA_PATH).exists()) { + extractFile(context, API_ROOT_CA_FILE, API_ROOT_CA_PATH) + } + } + + private fun extractFile(context: Context, asset: String, destination: String) { + val destinationStream = FileOutputStream(destination) + + context + .assets + .open(asset) + .copyTo(destinationStream) + + destinationStream.close() + } +} diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt index b7b0e8fa8c..b751bf63d9 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt @@ -1,24 +1,51 @@ package net.mullvad.mullvadvpn +import kotlinx.coroutines.async +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job + import android.os.Bundle import android.support.v4.app.FragmentActivity class MainActivity : FragmentActivity() { + val activityCreated = CompletableDeferred<Unit>() + + val asyncDaemon = startDaemon() + val daemon + get() = runBlocking { asyncDaemon.await() } + var selectedRelayItemCode: String? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) + activityCreated.complete(Unit) + if (savedInstanceState == null) { addInitialFragment() } } + override fun onDestroy() { + asyncDaemon.cancel() + + super.onDestroy() + } + private fun addInitialFragment() { supportFragmentManager?.beginTransaction()?.apply { add(R.id.main_fragment, LoginFragment()) commit() } } + + private fun startDaemon() = GlobalScope.async(Dispatchers.Default) { + activityCreated.await() + ApiRootCaFile().extract(this@MainActivity) + MullvadDaemon() + } } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt new file mode 100644 index 0000000000..d5ab845f89 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt @@ -0,0 +1,10 @@ +package net.mullvad.mullvadvpn + +class MullvadDaemon { + init { + System.loadLibrary("mullvad_jni") + initialize() + } + + private external fun initialize() +} |
