summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 13:26:13 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 13:26:13 -0300
commit1d9a3f9c6a3bc536de0a92654d87f982ef2bb219 (patch)
treeebd42c2c07f08dceff370b77b64bcde9b2592c99 /android/src
parent0f260b311c5cd4e9ee14f93e352910b5a2e1f394 (diff)
parent19364df3fffdeb24d24e0600bf79cd00976822f0 (diff)
downloadmullvadvpn-1d9a3f9c6a3bc536de0a92654d87f982ef2bb219.tar.xz
mullvadvpn-1d9a3f9c6a3bc536de0a92654d87f982ef2bb219.zip
Merge branch 'android-daemon'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ApiRootCaFile.kt29
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt27
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadDaemon.kt10
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()
+}