From 7a811f4152320dd59713295b3d24f0b374f31aba Mon Sep 17 00:00:00 2001 From: Zane Schepke Date: Fri, 11 Aug 2023 20:14:52 -0400 Subject: [PATCH] fix: bug causing crashes on older devices Fixes an issue where watcher service had the potential to crash on older devices if the job was not initialized fast enough. Optimize imports. Bump versions. --- app/build.gradle.kts | 8 ++++---- .../wireguardautotunnel/module/ServiceModule.kt | 3 --- .../wireguardautotunnel/receiver/BootReceiver.kt | 5 ++--- .../receiver/NotificationActionReceiver.kt | 4 ++-- .../WireGuardConnectivityWatcherService.kt | 14 +++++--------- .../service/foreground/WireGuardTunnelService.kt | 3 +-- .../ui/screens/settings/SettingsScreen.kt | 2 +- build.gradle.kts | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 9 files changed, 17 insertions(+), 26 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 51e242fc..c9a5dae6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -17,7 +17,7 @@ android { val versionMajor = 2 val versionMinor = 3 - val versionPatch = 3 + val versionPatch = 4 val versionBuild = 0 defaultConfig { @@ -89,7 +89,7 @@ dependencies { implementation("com.jakewharton.timber:timber:5.0.1") // compose navigation - implementation("androidx.navigation:navigation-compose:2.6.0") + implementation("androidx.navigation:navigation-compose:2.7.0") implementation("androidx.hilt:hilt-navigation-compose:1.0.0") // hilt @@ -110,7 +110,7 @@ dependencies { implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.1") //icons - implementation("androidx.compose.material:material-icons-extended:1.4.3") + implementation("androidx.compose.material:material-icons-extended:1.5.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") @@ -122,7 +122,7 @@ dependencies { implementation("com.google.firebase:firebase-analytics-ktx") //barcode scanning - implementation("com.google.android.gms:play-services-code-scanner:16.0.0") + implementation("com.google.android.gms:play-services-code-scanner:16.1.0") } kapt { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt index c6d3b4c8..59f66441 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/module/ServiceModule.kt @@ -1,7 +1,5 @@ package com.zaneschepke.wireguardautotunnel.module -import com.zaneschepke.wireguardautotunnel.service.barcode.CodeScanner -import com.zaneschepke.wireguardautotunnel.service.barcode.QRScanner import com.zaneschepke.wireguardautotunnel.service.network.MobileDataService import com.zaneschepke.wireguardautotunnel.service.network.NetworkService import com.zaneschepke.wireguardautotunnel.service.network.WifiService @@ -12,7 +10,6 @@ import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.android.components.ServiceComponent import dagger.hilt.android.scopes.ServiceScoped -import dagger.hilt.android.scopes.ViewModelScoped @Module @InstallIn(ServiceComponent::class) diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt index ca903138..db1c71bb 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/BootReceiver.kt @@ -9,10 +9,9 @@ import com.zaneschepke.wireguardautotunnel.service.foreground.Action import com.zaneschepke.wireguardautotunnel.service.foreground.ServiceTracker import com.zaneschepke.wireguardautotunnel.service.foreground.WireGuardConnectivityWatcherService import com.zaneschepke.wireguardautotunnel.service.tunnel.model.Settings -import com.zaneschepke.wireguardautotunnel.service.tunnel.model.TunnelConfig import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import javax.inject.Inject @@ -25,7 +24,7 @@ class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_BOOT_COMPLETED) { - CoroutineScope(SupervisorJob()).launch { + CoroutineScope(Dispatchers.IO).launch { try { val settings = settingsRepo.getAll() if (!settings.isNullOrEmpty()) { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt index 2f79f54e..d8cdf9ae 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/receiver/NotificationActionReceiver.kt @@ -11,7 +11,7 @@ import com.zaneschepke.wireguardautotunnel.service.foreground.WireGuardTunnelSer import com.zaneschepke.wireguardautotunnel.service.tunnel.model.Settings import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -23,7 +23,7 @@ class NotificationActionReceiver : BroadcastReceiver() { @Inject lateinit var settingsRepo : Repository override fun onReceive(context: Context, intent: Intent?) { - CoroutineScope(SupervisorJob()).launch { + CoroutineScope(Dispatchers.IO).launch { try { val settings = settingsRepo.getAll() if (!settings.isNullOrEmpty()) { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt index a205ca67..821ba98e 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardConnectivityWatcherService.kt @@ -8,8 +8,6 @@ import android.content.Intent import android.os.Bundle import android.os.PowerManager import android.os.SystemClock -import androidx.compose.runtime.collectAsState -import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.wireguard.android.backend.Tunnel import com.zaneschepke.wireguardautotunnel.Constants import com.zaneschepke.wireguardautotunnel.R @@ -23,11 +21,9 @@ import com.zaneschepke.wireguardautotunnel.service.tunnel.VpnService import com.zaneschepke.wireguardautotunnel.service.tunnel.model.Settings import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.first -import kotlinx.coroutines.flow.single import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @@ -128,20 +124,20 @@ class WireGuardConnectivityWatcherService : ForegroundService() { } private fun startWatcherJob() { - watcherJob = CoroutineScope(SupervisorJob()).launch { + watcherJob = CoroutineScope(Dispatchers.IO).launch { val settings = settingsRepo.getAll(); if(!settings.isNullOrEmpty()) { setting = settings[0] } - CoroutineScope(watcherJob).launch { + launch { watchForWifiConnectivityChanges() } if(setting.isTunnelOnMobileDataEnabled) { - CoroutineScope(watcherJob).launch { + launch { watchForMobileDataConnectivityChanges() } } - CoroutineScope(watcherJob).launch { + launch { manageVpn() } } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt index 26ad186a..614e92a4 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/service/foreground/WireGuardTunnelService.kt @@ -15,7 +15,6 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @@ -42,7 +41,7 @@ class WireGuardTunnelService : ForegroundService() { super.startService(extras) val tunnelConfigString = extras?.getString(getString(R.string.tunnel_extras_key)) cancelJob() - job = CoroutineScope(SupervisorJob()).launch { + job = CoroutineScope(Dispatchers.IO).launch { if(tunnelConfigString != null) { try { val tunnelConfig = TunnelConfig.from(tunnelConfigString) diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt index 713ac6e5..45e665ff 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/settings/SettingsScreen.kt @@ -335,7 +335,7 @@ fun SettingsScreen( FlowRow( modifier = Modifier.padding(screenPadding), horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalAlignment = Alignment.CenterVertically + verticalArrangement = Arrangement.SpaceEvenly ) { trustedSSIDs.forEach { ssid -> ClickableIconButton(onIconClick = { diff --git a/build.gradle.kts b/build.gradle.kts index d626eecc..1acbd182 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ buildscript { } plugins { - id("com.android.application") version "8.2.0-alpha08" apply false + id("com.android.application") version "8.2.0-alpha15" apply false id("org.jetbrains.kotlin.android") version "1.8.22" apply false id("com.google.dagger.hilt.android") version "2.44" apply false kotlin("plugin.serialization") version "1.8.22" apply false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 48218f72..96f2e7a9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Mon Apr 24 22:46:45 EDT 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists