diff options
| author | Kalle Lindström <karl.lindstrom@mullvad.net> | 2025-08-04 16:46:21 +0200 |
|---|---|---|
| committer | Kalle Lindström <karl.lindstrom@mullvad.net> | 2025-08-04 16:46:21 +0200 |
| commit | beed5dc2c6e161d431bd455ff42e262899224bd4 (patch) | |
| tree | a0b240addd05e10ac3dd7eb8c9ee125f861d0b3f /android | |
| parent | 58a7bc56f599174f458afba90d53c495cdec9e59 (diff) | |
| parent | bd2077587a5409e01fcb889d89394c891a0fdd8d (diff) | |
| download | mullvadvpn-beed5dc2c6e161d431bd455ff42e262899224bd4.tar.xz mullvadvpn-beed5dc2c6e161d431bd455ff42e262899224bd4.zip | |
Merge branch 'use-go-async-api-in-more-broadcast-receivers'
Diffstat (limited to 'android')
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 -> |
