summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-09-26 12:12:25 +0200
committerAlbin <albin@mullvad.net>2023-09-26 12:12:25 +0200
commitc9deafba75ec38f7bc4631d99417767002980b8e (patch)
tree5c001e9173a9efa8ba37db0817cd70a61cb8de3d
parent29bb3f728840f3766728000da5122f07ff3f0fdb (diff)
parentb9c814f858429b20dd640b786f8c586ea79ec08a (diff)
downloadmullvadvpn-c9deafba75ec38f7bc4631d99417767002980b8e.tar.xz
mullvadvpn-c9deafba75ec38f7bc4631d99417767002980b8e.zip
Merge branch 'fix-unused-bundled-relay-list-droid-363'
-rw-r--r--.github/workflows/android-app.yml2
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt16
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt23
3 files changed, 40 insertions, 1 deletions
diff --git a/.github/workflows/android-app.yml b/.github/workflows/android-app.yml
index 4dea9151d8..f6d56f318b 100644
--- a/.github/workflows/android-app.yml
+++ b/.github/workflows/android-app.yml
@@ -187,7 +187,7 @@ jobs:
- uses: actions/download-artifact@v3
with:
name: relay-list
- path: build/relays.json
+ path: build
- name: Build Android app
uses: burrunan/gradle-cache-action@v1
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
index 236cdeb84a..8cc292fb95 100644
--- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
+++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
@@ -1,5 +1,6 @@
package net.mullvad.mullvadvpn.service
+import java.io.File
import kotlin.properties.Delegates.observable
import kotlin.reflect.KClass
import kotlin.reflect.safeCast
@@ -13,6 +14,8 @@ import kotlinx.coroutines.channels.trySendBlocking
import net.mullvad.mullvadvpn.lib.common.util.Intermittent
import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointConfiguration
+private const val RELAYS_FILE = "relays.json"
+
class DaemonInstance(private val vpnService: MullvadVpnService) {
sealed class Command {
data class Start(val apiEndpointConfiguration: ApiEndpointConfiguration) : Command()
@@ -44,6 +47,8 @@ class DaemonInstance(private val vpnService: MullvadVpnService) {
GlobalScope.actor(Dispatchers.Default, Channel.UNLIMITED) {
var isRunning = true
+ prepareFiles()
+
while (isRunning) {
val startCommand = waitForCommand(channel, Command.Start::class) ?: break
startDaemon(startCommand.apiEndpointConfiguration)
@@ -67,6 +72,13 @@ class DaemonInstance(private val vpnService: MullvadVpnService) {
}
}
+ private fun prepareFiles() {
+ val shouldOverwriteRelayList =
+ lastUpdatedTime() > File(vpnService.filesDir, RELAYS_FILE).lastModified()
+
+ FileResourceExtractor(vpnService).apply { extract(RELAYS_FILE, shouldOverwriteRelayList) }
+ }
+
private suspend fun startDaemon(apiEndpointConfiguration: ApiEndpointConfiguration) {
val newDaemon =
MullvadDaemon(vpnService, apiEndpointConfiguration).apply {
@@ -83,4 +95,8 @@ class DaemonInstance(private val vpnService: MullvadVpnService) {
private fun stopDaemon() {
daemon?.shutdown()
}
+
+ private fun lastUpdatedTime(): Long {
+ return vpnService.run { packageManager.getPackageInfo(packageName, 0).lastUpdateTime }
+ }
}
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt
new file mode 100644
index 0000000000..71a05e6743
--- /dev/null
+++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt
@@ -0,0 +1,23 @@
+package net.mullvad.mullvadvpn.service
+
+import android.content.Context
+import java.io.File
+import java.io.FileOutputStream
+
+class FileResourceExtractor(val context: Context) {
+ fun extract(asset: String, force: Boolean = false) {
+ val destination = File(context.filesDir, asset)
+
+ if (!destination.exists() || force) {
+ extractFile(asset, destination)
+ }
+ }
+
+ private fun extractFile(asset: String, destination: File) {
+ val destinationStream = FileOutputStream(destination)
+
+ context.assets.open(asset).copyTo(destinationStream)
+
+ destinationStream.close()
+ }
+}