mirror of
https://github.com/libre-tube/LibreTube.git
synced 2024-12-15 23:00:31 +05:30
110 lines
3.8 KiB
Kotlin
110 lines
3.8 KiB
Kotlin
package com.github.libretube
|
|
|
|
import android.app.Application
|
|
import android.os.StrictMode
|
|
import android.os.StrictMode.VmPolicy
|
|
import androidx.core.app.NotificationChannelCompat
|
|
import androidx.core.app.NotificationManagerCompat
|
|
import androidx.work.ExistingPeriodicWorkPolicy
|
|
import com.github.libretube.api.CronetHelper
|
|
import com.github.libretube.api.RetrofitInstance
|
|
import com.github.libretube.constants.BACKGROUND_CHANNEL_ID
|
|
import com.github.libretube.constants.DOWNLOAD_CHANNEL_ID
|
|
import com.github.libretube.constants.PUSH_CHANNEL_ID
|
|
import com.github.libretube.db.DatabaseHolder
|
|
import com.github.libretube.util.ExceptionHandler
|
|
import com.github.libretube.util.ImageHelper
|
|
import com.github.libretube.util.NotificationHelper
|
|
import com.github.libretube.util.PreferenceHelper
|
|
import com.github.libretube.util.ProxyHelper
|
|
|
|
class LibreTubeApp : Application() {
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
|
|
/**
|
|
* Initialize the needed notification channels for DownloadService and BackgroundMode
|
|
*/
|
|
initializeNotificationChannels()
|
|
|
|
/**
|
|
* Initialize the [PreferenceHelper]
|
|
*/
|
|
PreferenceHelper.initialize(applicationContext)
|
|
|
|
/**
|
|
* Initialize the [DatabaseHolder]
|
|
*/
|
|
DatabaseHolder().initializeDatabase(this)
|
|
|
|
/**
|
|
* Bypassing fileUriExposedException, see https://stackoverflow.com/questions/38200282/android-os-fileuriexposedexception-file-storage-emulated-0-test-txt-exposed
|
|
*/
|
|
val builder = VmPolicy.Builder()
|
|
StrictMode.setVmPolicy(builder.build())
|
|
|
|
/**
|
|
* Set the api and the auth api url
|
|
*/
|
|
RetrofitInstance.initialize()
|
|
CronetHelper.initCronet(this)
|
|
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)
|
|
}
|
|
|
|
/**
|
|
* Initializes the required notification channels for the app.
|
|
*/
|
|
private fun initializeNotificationChannels() {
|
|
val downloadChannel = NotificationChannelCompat.Builder(
|
|
DOWNLOAD_CHANNEL_ID,
|
|
NotificationManagerCompat.IMPORTANCE_NONE
|
|
)
|
|
.setName(getString(R.string.download_channel_name))
|
|
.setDescription(getString(R.string.download_channel_description))
|
|
.build()
|
|
val backgroundChannel = NotificationChannelCompat.Builder(
|
|
BACKGROUND_CHANNEL_ID,
|
|
NotificationManagerCompat.IMPORTANCE_LOW
|
|
)
|
|
.setName(getString(R.string.background_channel_name))
|
|
.setDescription(getString(R.string.background_channel_description))
|
|
.build()
|
|
val pushChannel = NotificationChannelCompat.Builder(
|
|
PUSH_CHANNEL_ID,
|
|
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,
|
|
backgroundChannel,
|
|
pushChannel
|
|
)
|
|
)
|
|
}
|
|
}
|