summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorKalle Lindström <karl.lindstrom@mullvad.net>2025-08-04 16:46:21 +0200
committerKalle Lindström <karl.lindstrom@mullvad.net>2025-08-04 16:46:21 +0200
commitbeed5dc2c6e161d431bd455ff42e262899224bd4 (patch)
treea0b240addd05e10ac3dd7eb8c9ee125f861d0b3f /android/app/src
parent58a7bc56f599174f458afba90d53c495cdec9e59 (diff)
parentbd2077587a5409e01fcb889d89394c891a0fdd8d (diff)
downloadmullvadvpn-beed5dc2c6e161d431bd455ff42e262899224bd4.tar.xz
mullvadvpn-beed5dc2c6e161d431bd455ff42e262899224bd4.zip
Merge branch 'use-go-async-api-in-more-broadcast-receivers'
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/AndroidManifest.xml8
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/ScheduleNotificationBootCompletedReceiver.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/TimeChangedReceiver.kt31
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/ChangelogRepository.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/UserPreferencesRepository.kt19
5 files changed, 6 insertions, 59 deletions
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 60a9c3ddff..60b1374db1 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -130,14 +130,6 @@
android:name=".receiver.NotificationAlarmReceiver"
android:exported="false" />
<receiver
- android:name=".receiver.TimeChangedReceiver"
- android:exported="false">
- <intent-filter>
- <action android:name="android.intent.action.TIME_SET" />
- <action android:name="android.intent.action.TIMEZONE_CHANGED" />
- </intent-filter>
- </receiver>
- <receiver
android:name=".receiver.AutoStartVpnBootCompletedReceiver"
android:enabled="false"
android:exported="false">
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/ScheduleNotificationBootCompletedReceiver.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/ScheduleNotificationBootCompletedReceiver.kt
index 3bd8c9be79..d7ad2660e4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/ScheduleNotificationBootCompletedReceiver.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/ScheduleNotificationBootCompletedReceiver.kt
@@ -4,9 +4,9 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import co.touchlab.kermit.Logger
-import kotlinx.coroutines.runBlocking
import net.mullvad.mullvadvpn.repository.UserPreferencesRepository
import net.mullvad.mullvadvpn.usecase.ScheduleNotificationAlarmUseCase
+import net.mullvad.mullvadvpn.util.goAsync
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
@@ -20,7 +20,7 @@ class ScheduleNotificationBootCompletedReceiver : BroadcastReceiver(), KoinCompo
Logger.d(
"Scheduling notification alarm from ScheduleNotificationBootCompletedReceiver"
)
- runBlocking { scheduleAccountExpiryNotification(context) }
+ goAsync { scheduleAccountExpiryNotification(context) }
}
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/TimeChangedReceiver.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/TimeChangedReceiver.kt
deleted file mode 100644
index 3b37aaa1db..0000000000
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/receiver/TimeChangedReceiver.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package net.mullvad.mullvadvpn.receiver
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import co.touchlab.kermit.Logger
-import kotlinx.coroutines.runBlocking
-import net.mullvad.mullvadvpn.repository.UserPreferencesRepository
-import net.mullvad.mullvadvpn.usecase.ScheduleNotificationAlarmUseCase
-import org.koin.core.component.KoinComponent
-import org.koin.core.component.inject
-
-class TimeChangedReceiver : BroadcastReceiver(), KoinComponent {
- private val userPreferencesRepository by inject<UserPreferencesRepository>()
- private val scheduleNotificationAlarmUseCase by inject<ScheduleNotificationAlarmUseCase>()
-
- override fun onReceive(context: Context?, intent: Intent?) {
- if (
- intent?.action == Intent.ACTION_TIME_CHANGED ||
- intent?.action == Intent.ACTION_TIMEZONE_CHANGED
- ) {
- runBlocking {
- val expiry = userPreferencesRepository.accountExpiry()
- if (context != null && expiry != null) {
- Logger.d("Scheduling notification alarm from TimeChangedReceiver")
- scheduleNotificationAlarmUseCase(context, expiry)
- }
- }
- }
- }
-}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/ChangelogRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/ChangelogRepository.kt
index 171eb116b1..020a9c23d3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/ChangelogRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/ChangelogRepository.kt
@@ -21,7 +21,8 @@ class ChangelogRepository(
dispatcher: CoroutineDispatcher = Dispatchers.IO,
) {
val hasUnreadChangelog: StateFlow<Boolean> =
- userPreferencesRepository.preferencesFlow
+ userPreferencesRepository
+ .preferencesFlow()
.map {
getLastVersionChanges().isNotEmpty() &&
buildVersion.code > it.lastShownChangelogVersionCode
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/UserPreferencesRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/UserPreferencesRepository.kt
index 85d70c6109..cc7e255696 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/UserPreferencesRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/UserPreferencesRepository.kt
@@ -1,13 +1,10 @@
package net.mullvad.mullvadvpn.repository
import androidx.datastore.core.DataStore
-import co.touchlab.kermit.Logger
-import java.io.IOException
import java.time.Instant
import java.time.ZoneId
import java.time.ZonedDateTime
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.first
import net.mullvad.mullvadvpn.lib.model.BuildVersion
@@ -15,21 +12,9 @@ class UserPreferencesRepository(
private val userPreferencesStore: DataStore<UserPreferences>,
private val buildVersion: BuildVersion,
) {
+ fun preferencesFlow(): Flow<UserPreferences> = userPreferencesStore.data
- // Note: this should not be made into a StateFlow. See:
- // https://developer.android.com/reference/kotlin/androidx/datastore/core/DataStore#data()
- val preferencesFlow: Flow<UserPreferences> =
- userPreferencesStore.data.catch { exception ->
- // dataStore.data throws an IOException when an error is encountered when reading data
- if (exception is IOException) {
- Logger.e("Error reading user preferences file, falling back to default.", exception)
- emit(UserPreferences.getDefaultInstance())
- } else {
- throw exception
- }
- }
-
- suspend fun preferences(): UserPreferences = preferencesFlow.first()
+ suspend fun preferences(): UserPreferences = userPreferencesStore.data.first()
suspend fun setPrivacyDisclosureAccepted() {
userPreferencesStore.updateData { prefs ->