Skip to content

Commit 3e9941e

Browse files
committed
feat: Toasts only if app active
1 parent a874435 commit 3e9941e

3 files changed

Lines changed: 48 additions & 17 deletions

File tree

app/src/main/java/com/sameerasw/airsync/AirSyncApp.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,42 @@
11
package com.sameerasw.airsync
22

3+
import android.app.Activity
34
import android.app.Application
5+
import android.os.Bundle
46
import com.sameerasw.airsync.data.local.DataStoreManager
57
import io.sentry.android.core.SentryAndroid
68
import kotlinx.coroutines.flow.first
79
import kotlinx.coroutines.runBlocking
810

911
class AirSyncApp : Application() {
12+
private var activityCount = 0
13+
14+
companion object {
15+
private var instance: AirSyncApp? = null
16+
fun isAppForeground(): Boolean = instance?.isForeground() ?: false
17+
}
18+
1019
override fun onCreate() {
1120
super.onCreate()
21+
instance = this
1222
initSentry()
23+
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
24+
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
25+
override fun onActivityStarted(activity: Activity) {
26+
activityCount++
27+
}
28+
override fun onActivityResumed(activity: Activity) {}
29+
override fun onActivityPaused(activity: Activity) {}
30+
override fun onActivityStopped(activity: Activity) {
31+
activityCount--
32+
}
33+
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
34+
override fun onActivityDestroyed(activity: Activity) {}
35+
})
1336
}
1437

38+
private fun isForeground(): Boolean = activityCount > 0
39+
1540
private fun initSentry() {
1641
val dataStoreManager = DataStoreManager.getInstance(this)
1742
val isEnabled = runBlocking { dataStoreManager.getSentryReportingEnabled().first() }

app/src/main/java/com/sameerasw/airsync/utils/WebSocketMessageHandler.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -523,12 +523,14 @@ object WebSocketMessageHandler {
523523
// Version compatibility check
524524
val minVersion = BuildConfig.MIN_MAC_APP_VERSION
525525
if (isVersionOutdated(macVersion, minVersion)) {
526-
launch(Dispatchers.Main) {
527-
Toast.makeText(
528-
context,
529-
"Mac app is outdated ($macVersion < $minVersion). Please update the mac app and reconnect.",
530-
Toast.LENGTH_LONG
531-
).show()
526+
if (com.sameerasw.airsync.AirSyncApp.isAppForeground()) {
527+
launch(Dispatchers.Main) {
528+
Toast.makeText(
529+
context,
530+
"Mac app is outdated ($macVersion < $minVersion). Please update the mac app and reconnect.",
531+
Toast.LENGTH_LONG
532+
).show()
533+
}
532534
}
533535
}
534536

app/src/main/java/com/sameerasw/airsync/utils/WebSocketUtil.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -347,9 +347,11 @@ object WebSocketUtil {
347347
) {
348348
if (webSocket == WebSocketUtil.webSocket) {
349349
if (code != 1000) {
350-
CoroutineScope(Dispatchers.Main).launch {
351-
val msg = reason.ifEmpty { "Unknown Server Disconnect" }
352-
android.widget.Toast.makeText(context, "Disconnected: $msg", android.widget.Toast.LENGTH_SHORT).show()
350+
if (com.sameerasw.airsync.AirSyncApp.isAppForeground()) {
351+
CoroutineScope(Dispatchers.Main).launch {
352+
val msg = reason.ifEmpty { "Unknown Server Disconnect" }
353+
android.widget.Toast.makeText(context, "Disconnected: $msg", android.widget.Toast.LENGTH_SHORT).show()
354+
}
353355
}
354356
}
355357
isConnected.set(false)
@@ -391,15 +393,17 @@ object WebSocketUtil {
391393

392394
if (wasActive || isFinalManualAttempt) {
393395
if (manualAttempt || isSocketOpen.get()) {
394-
CoroutineScope(Dispatchers.Main).launch {
395-
val msg = when (t) {
396-
is java.net.ConnectException -> "Connection Refused (Is AirSync Mac running?)"
397-
is java.net.SocketTimeoutException -> "Could not discover your mac"
398-
is java.net.UnknownHostException -> "Could not reach your mac"
399-
is java.io.EOFException, is java.net.SocketException -> "Lost connection to your mac"
400-
else -> t.message ?: "Unknown connection error"
396+
if (com.sameerasw.airsync.AirSyncApp.isAppForeground()) {
397+
CoroutineScope(Dispatchers.Main).launch {
398+
val msg = when (t) {
399+
is java.net.ConnectException -> "Connection Refused (Is AirSync Mac running?)"
400+
is java.net.SocketTimeoutException -> "Could not discover your mac"
401+
is java.net.UnknownHostException -> "Could not reach your mac"
402+
is java.io.EOFException, is java.net.SocketException -> "Lost connection to your mac"
403+
else -> t.message ?: "Unknown connection error"
404+
}
405+
android.widget.Toast.makeText(context, "AirSync: $msg", android.widget.Toast.LENGTH_LONG).show()
401406
}
402-
android.widget.Toast.makeText(context, "AirSync: $msg", android.widget.Toast.LENGTH_LONG).show()
403407
}
404408
}
405409
isConnected.set(false)

0 commit comments

Comments
 (0)