From e76cd62d0fdf96dc9b0c2651010e0cd9cc8c3319 Mon Sep 17 00:00:00 2001 From: Hidden-Node Date: Fri, 24 Jul 2026 16:38:38 +0330 Subject: [PATCH] refactor(service): inject ProfileRepository via Hilt in vpn and tile services MasterDnsVpnService and VpnTileService now use @AndroidEntryPoint with @Inject lateinit var profileRepository: ProfileRepository instead of bypassing Hilt via AppDatabase.getInstance(...).profileDao(). Removes the now-unused AppDatabase import from both service files. Plan 016. --- .../com/masterdns/vpn/service/MasterDnsVpnService.kt | 11 ++++++++--- .../java/com/masterdns/vpn/service/VpnTileService.kt | 12 ++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/masterdns/vpn/service/MasterDnsVpnService.kt b/android/app/src/main/java/com/masterdns/vpn/service/MasterDnsVpnService.kt index 1abd169..40fe926 100644 --- a/android/app/src/main/java/com/masterdns/vpn/service/MasterDnsVpnService.kt +++ b/android/app/src/main/java/com/masterdns/vpn/service/MasterDnsVpnService.kt @@ -15,10 +15,11 @@ import com.google.gson.reflect.TypeToken import com.masterdns.vpn.App import com.masterdns.vpn.MainActivity import com.masterdns.vpn.R -import com.masterdns.vpn.data.local.AppDatabase +import com.masterdns.vpn.data.repository.ProfileRepository import com.masterdns.vpn.util.ConfigGenerator import com.masterdns.vpn.util.GlobalSettingsStore import com.masterdns.vpn.util.VpnManager +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.* import java.io.File import java.io.FileInputStream @@ -28,8 +29,10 @@ import java.net.InetAddress import java.net.InetSocketAddress import java.net.ServerSocket import java.net.Socket +import javax.inject.Inject import kotlin.coroutines.coroutineContext +@AndroidEntryPoint class MasterDnsVpnService : VpnService() { companion object { @@ -83,6 +86,9 @@ class MasterDnsVpnService : VpnService() { @Volatile private var activeLocalSocksPort: Int = DEFAULT_SOCKS_PORT + @Inject + lateinit var profileRepository: ProfileRepository + /** * Close any ParcelFileDescriptor left from a previous session before we * attempt establish() again. The fd must be closed AFTER the Go core @@ -136,8 +142,7 @@ class MasterDnsVpnService : VpnService() { acquireWakeLock() // Load profile from DB - val db = AppDatabase.getInstance(this@MasterDnsVpnService) - val profile = db.profileDao().getProfileById(profileId) + val profile = profileRepository.getProfileById(profileId) ?: throw IllegalStateException("Profile not found") val socksPort = profile.listenPort.takeIf { it in 1..65535 } ?: DEFAULT_SOCKS_PORT activeLocalSocksPort = socksPort diff --git a/android/app/src/main/java/com/masterdns/vpn/service/VpnTileService.kt b/android/app/src/main/java/com/masterdns/vpn/service/VpnTileService.kt index ac9fffa..5192f23 100644 --- a/android/app/src/main/java/com/masterdns/vpn/service/VpnTileService.kt +++ b/android/app/src/main/java/com/masterdns/vpn/service/VpnTileService.kt @@ -8,19 +8,25 @@ import android.service.quicksettings.TileService import androidx.annotation.RequiresApi import com.masterdns.vpn.MainActivity import com.masterdns.vpn.R -import com.masterdns.vpn.data.local.AppDatabase +import com.masterdns.vpn.data.repository.ProfileRepository import com.masterdns.vpn.util.VpnManager +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.launch +import javax.inject.Inject +@AndroidEntryPoint @RequiresApi(Build.VERSION_CODES.N) class VpnTileService : TileService() { private val tileScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + @Inject + lateinit var profileRepository: ProfileRepository + override fun onStartListening() { super.onStartListening() updateTile() @@ -50,9 +56,7 @@ class VpnTileService : TileService() { } tileScope.launch(Dispatchers.IO) { - val selectedProfile = AppDatabase.getInstance(this@VpnTileService) - .profileDao() - .getSelectedProfile() + val selectedProfile = profileRepository.getSelectedProfile() launch(Dispatchers.Main) { if (selectedProfile != null) {