You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ytdl-android/app/src/main/java/com/deniscerri/ytdl/App.kt

82 lines
2.9 KiB
Kotlin

package com.deniscerri.ytdl
import android.app.Application
import android.os.Looper
import android.widget.Toast
import androidx.core.content.edit
import androidx.preference.PreferenceManager
import com.deniscerri.ytdl.util.NotificationUtil
import com.deniscerri.ytdl.util.ThemeUtil
import com.yausername.aria2c.Aria2c
import com.yausername.ffmpeg.FFmpeg
import com.yausername.youtubedl_android.YoutubeDL
import com.yausername.youtubedl_android.YoutubeDLException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
class App : Application() {
override fun onCreate() {
super.onCreate()
instance = this
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this@App)
setDefaultValues()
applicationScope = CoroutineScope(SupervisorJob())
applicationScope.launch((Dispatchers.IO)) {
try {
createNotificationChannels()
initLibraries()
val appVer = sharedPreferences.getString("version", "")!!
if(appVer.isEmpty() || appVer != BuildConfig.VERSION_NAME){
sharedPreferences.edit(commit = true){
putString("version", BuildConfig.VERSION_NAME)
}
}
}catch (e: Exception){
Looper.prepare().runCatching {
Toast.makeText(this@App, e.message, Toast.LENGTH_SHORT).show()
}
e.printStackTrace()
}
}
ThemeUtil.init(this)
}
@Throws(YoutubeDLException::class)
private fun initLibraries() {
YoutubeDL.getInstance().init(this)
FFmpeg.getInstance().init(this)
Aria2c.getInstance().init(this)
}
private fun setDefaultValues(){
val SPL = 1
val sp = PreferenceManager.getDefaultSharedPreferences(this)
if (sp.getInt("spl", 0) != SPL) {
PreferenceManager.setDefaultValues(this, R.xml.root_preferences, true)
PreferenceManager.setDefaultValues(this, R.xml.downloading_preferences, true)
PreferenceManager.setDefaultValues(this, R.xml.general_preferences, true)
PreferenceManager.setDefaultValues(this, R.xml.processing_preferences, true)
PreferenceManager.setDefaultValues(this, R.xml.folders_preference, true)
PreferenceManager.setDefaultValues(this, R.xml.updating_preferences, true)
PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, true)
sp.edit().putInt("spl", SPL).apply()
}
}
private fun createNotificationChannels() {
val notificationUtil = NotificationUtil(this)
notificationUtil.createNotificationChannel()
}
companion object {
private const val TAG = "App"
private lateinit var applicationScope: CoroutineScope
lateinit var instance: App
}
}