mirror of
https://gitlab.com/ultrasonic/ultrasonic.git
synced 2025-06-14 22:42:10 +03:00
Don't ecit the process, and reinit Koin on resume
This commit is contained in:
parent
5e0dd14c4f
commit
1e571e165c
@ -42,10 +42,10 @@ import androidx.preference.PreferenceManager
|
|||||||
import com.google.android.material.button.MaterialButton
|
import com.google.android.material.button.MaterialButton
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||||
import kotlin.system.exitProcess
|
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
import org.moire.ultrasonic.R
|
import org.moire.ultrasonic.R
|
||||||
|
import org.moire.ultrasonic.app.UApp
|
||||||
import org.moire.ultrasonic.data.ActiveServerProvider
|
import org.moire.ultrasonic.data.ActiveServerProvider
|
||||||
import org.moire.ultrasonic.data.ServerSettingDao
|
import org.moire.ultrasonic.data.ServerSettingDao
|
||||||
import org.moire.ultrasonic.fragment.OnBackPressedHandler
|
import org.moire.ultrasonic.fragment.OnBackPressedHandler
|
||||||
@ -99,6 +99,17 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
private var cachedServerCount: Int = 0
|
private var cachedServerCount: Int = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
Timber.d("onCreate called")
|
||||||
|
|
||||||
|
// First check if Koin has been started
|
||||||
|
|
||||||
|
if (UApp.instance != null && !UApp.instance!!.initiated) {
|
||||||
|
Timber.d("Starting Koin")
|
||||||
|
UApp.instance!!.startKoin()
|
||||||
|
} else {
|
||||||
|
Timber.d("No need to start Koin")
|
||||||
|
}
|
||||||
|
|
||||||
setUncaughtExceptionHandler()
|
setUncaughtExceptionHandler()
|
||||||
Util.applyTheme(this)
|
Util.applyTheme(this)
|
||||||
|
|
||||||
@ -226,6 +237,7 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
Timber.d("onResume called")
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
Storage.reset()
|
Storage.reset()
|
||||||
@ -239,9 +251,11 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
Timber.d("onDestroy called")
|
||||||
rxBusSubscription.dispose()
|
rxBusSubscription.dispose()
|
||||||
imageLoaderProvider.clearImageLoader()
|
imageLoaderProvider.clearImageLoader()
|
||||||
|
UApp.instance!!.shutdownKoin()
|
||||||
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||||
@ -366,9 +380,9 @@ class NavigationActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun exit() {
|
private fun exit() {
|
||||||
|
Timber.d("User choose to exit the app")
|
||||||
lifecycleSupport.onDestroy()
|
lifecycleSupport.onDestroy()
|
||||||
finishAndRemoveTask()
|
finishAndRemoveTask()
|
||||||
exitProcess(0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showWelcomeDialog() {
|
private fun showWelcomeDialog() {
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package org.moire.ultrasonic.app
|
package org.moire.ultrasonic.app
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.StrictMode
|
|
||||||
import androidx.multidex.MultiDexApplication
|
import androidx.multidex.MultiDexApplication
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.android.ext.koin.androidContext
|
import org.koin.android.ext.koin.androidContext
|
||||||
import org.koin.core.context.startKoin
|
import org.koin.core.context.startKoin
|
||||||
|
import org.koin.core.context.stopKoin
|
||||||
import org.koin.core.logger.Level
|
import org.koin.core.logger.Level
|
||||||
import org.moire.ultrasonic.BuildConfig
|
import org.moire.ultrasonic.BuildConfig
|
||||||
import org.moire.ultrasonic.di.appPermanentStorage
|
import org.moire.ultrasonic.di.appPermanentStorage
|
||||||
@ -31,17 +31,22 @@ class UApp : MultiDexApplication() {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
instance = this
|
instance = this
|
||||||
if (BuildConfig.DEBUG)
|
// if (BuildConfig.DEBUG)
|
||||||
StrictMode.enableDefaults()
|
// StrictMode.enableDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var initiated = false
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
|
initiated = true
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Timber.plant(DebugTree())
|
Timber.plant(DebugTree())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Timber.d("onCreate called")
|
||||||
|
|
||||||
// In general we should not access the settings from the main thread to avoid blocking...
|
// In general we should not access the settings from the main thread to avoid blocking...
|
||||||
ioScope.launch {
|
ioScope.launch {
|
||||||
if (Settings.debugLogToFile) {
|
if (Settings.debugLogToFile) {
|
||||||
@ -49,8 +54,12 @@ class UApp : MultiDexApplication() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startKoin()
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun startKoin() {
|
||||||
startKoin {
|
startKoin {
|
||||||
// TODO Currently there is a bug in Koin which makes necessary to set the loglevel to ERROR
|
// TODO Currently there is a bug in Koin which makes necessary to set the log level to ERROR
|
||||||
logger(TimberKoinLogger(Level.ERROR))
|
logger(TimberKoinLogger(Level.ERROR))
|
||||||
// logger(TimberKoinLogger(Level.INFO))
|
// logger(TimberKoinLogger(Level.INFO))
|
||||||
|
|
||||||
@ -67,8 +76,13 @@ class UApp : MultiDexApplication() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun shutdownKoin() {
|
||||||
|
stopKoin()
|
||||||
|
initiated = false
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private var instance: UApp? = null
|
var instance: UApp? = null
|
||||||
|
|
||||||
fun applicationContext(): Context {
|
fun applicationContext(): Context {
|
||||||
return instance!!.applicationContext
|
return instance!!.applicationContext
|
||||||
|
@ -66,6 +66,7 @@ class Downloader(
|
|||||||
private val rxBusSubscription: CompositeDisposable = CompositeDisposable()
|
private val rxBusSubscription: CompositeDisposable = CompositeDisposable()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
Timber.i("Init called")
|
||||||
// Check downloads if the playlist changed
|
// Check downloads if the playlist changed
|
||||||
rxBusSubscription += RxBus.playlistObservable.subscribe {
|
rxBusSubscription += RxBus.playlistObservable.subscribe {
|
||||||
Timber.v("Playlist has changed, checking Downloads...")
|
Timber.v("Playlist has changed, checking Downloads...")
|
||||||
|
@ -76,6 +76,8 @@ class MediaPlayerController(
|
|||||||
|
|
||||||
var controller: MediaController? = null
|
var controller: MediaController? = null
|
||||||
|
|
||||||
|
private lateinit var listeners: Player.Listener
|
||||||
|
|
||||||
fun onCreate(onCreated: () -> Unit) {
|
fun onCreate(onCreated: () -> Unit) {
|
||||||
if (created) return
|
if (created) return
|
||||||
externalStorageMonitor.onCreate { reset() }
|
externalStorageMonitor.onCreate { reset() }
|
||||||
@ -86,7 +88,7 @@ class MediaPlayerController(
|
|||||||
|
|
||||||
Timber.i("MediaController Instance received")
|
Timber.i("MediaController Instance received")
|
||||||
|
|
||||||
controller?.addListener(object : Player.Listener {
|
listeners = object : Player.Listener {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Log all events
|
* Log all events
|
||||||
@ -134,7 +136,9 @@ class MediaPlayerController(
|
|||||||
playerStateChangedHandler()
|
playerStateChangedHandler()
|
||||||
publishPlaybackState()
|
publishPlaybackState()
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
|
controller?.addListener(listeners)
|
||||||
|
|
||||||
onCreated()
|
onCreated()
|
||||||
|
|
||||||
@ -224,6 +228,12 @@ class MediaPlayerController(
|
|||||||
|
|
||||||
fun onDestroy() {
|
fun onDestroy() {
|
||||||
if (!created) return
|
if (!created) return
|
||||||
|
|
||||||
|
// First stop listening to events
|
||||||
|
rxBusSubscription.dispose()
|
||||||
|
controller?.removeListener(listeners)
|
||||||
|
|
||||||
|
// Shutdown the rest
|
||||||
val context = UApp.applicationContext()
|
val context = UApp.applicationContext()
|
||||||
externalStorageMonitor.onDestroy()
|
externalStorageMonitor.onDestroy()
|
||||||
context.stopService(Intent(context, DownloadService::class.java))
|
context.stopService(Intent(context, DownloadService::class.java))
|
||||||
@ -457,6 +467,9 @@ class MediaPlayerController(
|
|||||||
|
|
||||||
@Synchronized
|
@Synchronized
|
||||||
private fun serializeCurrentSession() {
|
private fun serializeCurrentSession() {
|
||||||
|
// Don't serialize invalid sessions
|
||||||
|
if (currentMediaItemIndex == -1) return
|
||||||
|
|
||||||
playbackStateSerializer.serialize(
|
playbackStateSerializer.serialize(
|
||||||
legacyPlaylistManager.playlist,
|
legacyPlaylistManager.playlist,
|
||||||
currentMediaItemIndex,
|
currentMediaItemIndex,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user