androidApp/src/androidMain/kotlin/org/jetbrains/kotlinconf/android/MainActivity.kt (60 lines of code) (raw):
package org.jetbrains.kotlinconf.android
import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.mmk.kmpnotifier.extensions.onCreateOrOnNewIntent
import com.mmk.kmpnotifier.notification.NotifierManager
import org.jetbrains.kotlinconf.App
import org.jetbrains.kotlinconf.EXTRA_LOCAL_NOTIFICATION_ID
import org.jetbrains.kotlinconf.PermissionHandler
import org.jetbrains.kotlinconf.navigation.navigateByLocalNotificationId
import org.koin.mp.KoinPlatform
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
installSplashScreen()
processIntent(intent)
KoinPlatform.getKoin().declare(PermissionHandler(activity = this))
setContent {
App(
onThemeChange = { isDarkMode ->
val systemBarStyle = SystemBarStyle.auto(
lightScrim = Color.TRANSPARENT,
darkScrim = Color.TRANSPARENT,
detectDarkMode = { isDarkMode }
)
enableEdgeToEdge(
statusBarStyle = systemBarStyle,
navigationBarStyle = systemBarStyle,
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// Don't enforce scrim https://issuetracker.google.com/issues/298296168
window.isNavigationBarContrastEnforced = false
}
},
)
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
processIntent(intent)
}
private fun processIntent(intent: Intent?) {
if (intent == null) return
try {
val notificationId = intent.getStringExtra(EXTRA_LOCAL_NOTIFICATION_ID)
if (notificationId != null) {
// Local notification clicked
navigateByLocalNotificationId(notificationId)
return
}
// Process push notifications
NotifierManager.onCreateOrOnNewIntent(intent)
} catch (e: Exception) {
return
}
}
}