package com.nuvio.app import android.content.Intent import android.content.res.Configuration import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.SystemBarStyle import androidx.appcompat.app.AppCompatActivity import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import com.nuvio.app.core.auth.AuthStorage import com.nuvio.app.core.deeplink.handleAppUrl import com.nuvio.app.core.storage.PlatformLocalAccountDataCleaner import com.nuvio.app.features.addons.AddonStorage import com.nuvio.app.features.collection.CollectionStorage import com.nuvio.app.features.downloads.DownloadsLiveStatusPlatform import com.nuvio.app.features.downloads.DownloadsPlatformDownloader import com.nuvio.app.features.downloads.DownloadsStorage import com.nuvio.app.features.library.LibraryStorage import com.nuvio.app.features.details.MetaScreenSettingsStorage import com.nuvio.app.features.home.HomeCatalogSettingsStorage import com.nuvio.app.features.mdblist.MdbListSettingsStorage import com.nuvio.app.features.notifications.EpisodeReleaseNotificationPlatform import com.nuvio.app.features.notifications.EpisodeReleaseNotificationsStorage import com.nuvio.app.features.player.PlayerSettingsStorage import com.nuvio.app.features.player.PlayerPictureInPictureManager import com.nuvio.app.features.plugins.PluginStorage import com.nuvio.app.features.profiles.AvatarStorage import com.nuvio.app.features.profiles.ProfilePinCacheStorage import com.nuvio.app.features.profiles.ProfileStorage import com.nuvio.app.features.details.SeasonViewModeStorage import com.nuvio.app.features.search.SearchHistoryStorage import com.nuvio.app.features.settings.ThemeSettingsStorage import com.nuvio.app.features.trakt.TraktAuthStorage import com.nuvio.app.features.trakt.TraktCommentsStorage import com.nuvio.app.features.trakt.TraktLibraryStorage import com.nuvio.app.features.tmdb.TmdbSettingsStorage import com.nuvio.app.features.updater.AndroidAppUpdaterPlatform import com.nuvio.app.core.ui.PosterCardStyleStorage import com.nuvio.app.features.watched.WatchedStorage import com.nuvio.app.features.streams.StreamLinkCacheStorage import com.nuvio.app.features.watchprogress.ContinueWatchingEnrichmentStorage import com.nuvio.app.features.watchprogress.ContinueWatchingPreferencesStorage import com.nuvio.app.features.watchprogress.ResumePromptStorage import com.nuvio.app.features.watchprogress.WatchProgressStorage class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { installSplashScreen() enableEdgeToEdge( statusBarStyle = SystemBarStyle.dark( scrim = android.graphics.Color.TRANSPARENT, ), navigationBarStyle = SystemBarStyle.dark( scrim = 0xFF020404.toInt(), ), ) ThemeSettingsStorage.initialize(applicationContext) super.onCreate(savedInstanceState) window.setBackgroundDrawableResource(R.color.nuvio_background) AddonStorage.initialize(applicationContext) AuthStorage.initialize(applicationContext) LibraryStorage.initialize(applicationContext) WatchedStorage.initialize(applicationContext) MetaScreenSettingsStorage.initialize(applicationContext) HomeCatalogSettingsStorage.initialize(applicationContext) PlayerSettingsStorage.initialize(applicationContext) ProfileStorage.initialize(applicationContext) AvatarStorage.initialize(applicationContext) ProfilePinCacheStorage.initialize(applicationContext) SearchHistoryStorage.initialize(applicationContext) SeasonViewModeStorage.initialize(applicationContext) PosterCardStyleStorage.initialize(applicationContext) TmdbSettingsStorage.initialize(applicationContext) MdbListSettingsStorage.initialize(applicationContext) TraktAuthStorage.initialize(applicationContext) TraktCommentsStorage.initialize(applicationContext) TraktLibraryStorage.initialize(applicationContext) ContinueWatchingPreferencesStorage.initialize(applicationContext) ResumePromptStorage.initialize(applicationContext) ContinueWatchingEnrichmentStorage.initialize(applicationContext) EpisodeReleaseNotificationsStorage.initialize(applicationContext) WatchProgressStorage.initialize(applicationContext) StreamLinkCacheStorage.initialize(applicationContext) PluginStorage.initialize(applicationContext) CollectionStorage.initialize(applicationContext) DownloadsStorage.initialize(applicationContext) DownloadsPlatformDownloader.initialize(applicationContext) DownloadsLiveStatusPlatform.initialize(applicationContext) AndroidAppUpdaterPlatform.initialize(applicationContext) PlatformLocalAccountDataCleaner.initialize(applicationContext) EpisodeReleaseNotificationPlatform.initialize(applicationContext) EpisodeReleaseNotificationPlatform.bindActivity(this) handleIncomingAppIntent(intent) setContent { App() } } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) handleIncomingAppIntent(intent) } override fun onUserLeaveHint() { super.onUserLeaveHint() PlayerPictureInPictureManager.onUserLeaveHint(this) } override fun onPictureInPictureModeChanged( isInPictureInPictureMode: Boolean, newConfig: Configuration, ) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) PlayerPictureInPictureManager.onPictureInPictureModeChanged(this, isInPictureInPictureMode) } override fun onDestroy() { EpisodeReleaseNotificationPlatform.unbindActivity(this) super.onDestroy() } override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: IntArray, ) { if (EpisodeReleaseNotificationPlatform.handlePermissionRequestResult(requestCode, grantResults)) { return } super.onRequestPermissionsResult(requestCode, permissions, grantResults) } private fun handleIncomingAppIntent(intent: Intent?) { val appUrl = intent?.dataString?.trim().orEmpty() if (appUrl.isBlank()) return handleAppUrl(appUrl) } }