diff --git a/apps/tauri/src-tauri/gen/android/app/src/main/AndroidManifest.xml b/apps/tauri/src-tauri/gen/android/app/src/main/AndroidManifest.xml index cadb4d6..7d05c07 100644 --- a/apps/tauri/src-tauri/gen/android/app/src/main/AndroidManifest.xml +++ b/apps/tauri/src-tauri/gen/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + diff --git a/apps/tauri/src-tauri/gen/android/app/src/main/java/net/tensamin/client/MtpForegroundService.kt b/apps/tauri/src-tauri/gen/android/app/src/main/java/net/tensamin/client/MtpForegroundService.kt index 0c5d9e8..8b41c78 100644 --- a/apps/tauri/src-tauri/gen/android/app/src/main/java/net/tensamin/client/MtpForegroundService.kt +++ b/apps/tauri/src-tauri/gen/android/app/src/main/java/net/tensamin/client/MtpForegroundService.kt @@ -8,15 +8,30 @@ import android.app.Service import android.content.Context import android.content.Intent import android.content.pm.ServiceInfo +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities import android.os.Build import android.os.IBinder import androidx.core.app.NotificationCompat class MtpForegroundService : Service() { private var started = false + private val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) = refreshNotification() + override fun onLost(network: Network) = refreshNotification() + override fun onCapabilitiesChanged(network: Network, capabilities: NetworkCapabilities) = + refreshNotification() + } override fun onBind(intent: Intent?): IBinder? = null + override fun onCreate() { + super.onCreate() + getSystemService(ConnectivityManager::class.java) + .registerDefaultNetworkCallback(networkCallback) + } + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { if (intent?.action == ACTION_STOP) { MtpSecureStore.setEnabled(this, false) @@ -28,7 +43,8 @@ class MtpForegroundService : Service() { if (started) return START_STICKY createChannel(this) - val notification = buildNotification(this, "Connecting") + connectionStatus = "Connecting" + val notification = buildNotification(this, displayedStatus(this)) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { startForeground( NOTIFICATION_ID, @@ -65,20 +81,37 @@ class MtpForegroundService : Service() { } override fun onDestroy() { + getSystemService(ConnectivityManager::class.java).unregisterNetworkCallback(networkCallback) if (!MtpSecureStore.isEnabled(this)) NativeMtpBridge.nativeStop() super.onDestroy() } + private fun refreshNotification() { + updateNotification(this, connectionStatus) + } + companion object { private const val CHANNEL_ID = "tensamin-connection" private const val NOTIFICATION_ID = 2201 private const val ACTION_STOP = "net.tensamin.client.STOP_MTP" + @Volatile private var connectionStatus = "Connecting" fun updateNotification(context: Context, status: String) { if (!MtpSecureStore.isEnabled(context)) return + connectionStatus = status createChannel(context) context.getSystemService(NotificationManager::class.java) - .notify(NOTIFICATION_ID, buildNotification(context, status)) + .notify(NOTIFICATION_ID, buildNotification(context, displayedStatus(context))) + } + + private fun displayedStatus(context: Context): String { + val connectivity = context.getSystemService(ConnectivityManager::class.java) + val network = connectivity.activeNetwork ?: return "No network" + val capabilities = connectivity.getNetworkCapabilities(network) ?: return "No network" + return if ( + capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && + capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + ) connectionStatus else "No network" } private fun createChannel(context: Context) {