package com.github.libretube import android.app.Application import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationManagerCompat import androidx.work.ExistingPeriodicWorkPolicy import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.NotificationHelper import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ProxyHelper import com.github.libretube.helpers.ShortcutHelper import com.github.libretube.util.ExceptionHandler class LibreTubeApp : Application() { override fun onCreate() { super.onCreate() instance = this /** * Initialize the needed notification channels for DownloadService and BackgroundMode */ initializeNotificationChannels() /** * Initialize the [PreferenceHelper] */ PreferenceHelper.initialize(applicationContext) /** * Set the api and the auth api url */ ImageHelper.initializeImageLoader(this) /** * Initialize the notification listener in the background */ NotificationHelper.enqueueWork( context = this, existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.KEEP ) /** * Fetch the image proxy URL for local playlists and the watch history */ ProxyHelper.fetchProxyUrl() /** * Handler for uncaught exceptions */ val defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler() val exceptionHandler = ExceptionHandler(defaultExceptionHandler) Thread.setDefaultUncaughtExceptionHandler(exceptionHandler) /** * Dynamically create App Shortcuts */ ShortcutHelper.createShortcuts(this) } /** * Initializes the required notification channels for the app. */ private fun initializeNotificationChannels() { val downloadChannel = NotificationChannelCompat.Builder( PLAYLIST_DOWNLOAD_ENQUEUE_CHANNEL_NAME, NotificationManagerCompat.IMPORTANCE_LOW ) .setName(getString(R.string.download_playlist)) .setDescription(getString(R.string.enqueue_playlist_description)) .build() val playlistDownloadEnqueueChannel = NotificationChannelCompat.Builder( DOWNLOAD_CHANNEL_NAME, NotificationManagerCompat.IMPORTANCE_LOW ) .setName(getString(R.string.download_channel_name)) .setDescription(getString(R.string.download_channel_description)) .build() val playerChannel = NotificationChannelCompat.Builder( PLAYER_CHANNEL_NAME, NotificationManagerCompat.IMPORTANCE_LOW ) .setName(getString(R.string.player_channel_name)) .setDescription(getString(R.string.player_channel_description)) .build() val pushChannel = NotificationChannelCompat.Builder( PUSH_CHANNEL_NAME, NotificationManagerCompat.IMPORTANCE_DEFAULT ) .setName(getString(R.string.push_channel_name)) .setDescription(getString(R.string.push_channel_description)) .build() val notificationManager = NotificationManagerCompat.from(this) notificationManager.createNotificationChannelsCompat( listOf( downloadChannel, playlistDownloadEnqueueChannel, pushChannel, playerChannel ) ) } companion object { lateinit var instance: LibreTubeApp const val DOWNLOAD_CHANNEL_NAME = "download_service" const val PLAYLIST_DOWNLOAD_ENQUEUE_CHANNEL_NAME = "playlist_download_enqueue" const val PLAYER_CHANNEL_NAME = "player_mode" const val PUSH_CHANNEL_NAME = "notification_worker" } }