Option to enable exit confirmation
parent
d6ff996dbe
commit
334e08730e
@ -0,0 +1,54 @@
|
||||
package org.koitharu.kotatsu.main.ui
|
||||
|
||||
import android.view.View
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.android.ext.android.get
|
||||
import org.koitharu.kotatsu.R
|
||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||
import org.koitharu.kotatsu.core.prefs.observeAsFlow
|
||||
|
||||
class ExitCallback(
|
||||
private val activity: ComponentActivity,
|
||||
private val snackbarHost: View,
|
||||
) : OnBackPressedCallback(false) {
|
||||
|
||||
private var job: Job? = null
|
||||
|
||||
init {
|
||||
observeSettings()
|
||||
}
|
||||
|
||||
override fun handleOnBackPressed() {
|
||||
job?.cancel()
|
||||
job = activity.lifecycleScope.launch {
|
||||
resetExitConfirmation()
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun resetExitConfirmation() {
|
||||
isEnabled = false
|
||||
val snackbar = Snackbar.make(snackbarHost, R.string.confirm_exit, Snackbar.LENGTH_INDEFINITE)
|
||||
snackbar.show()
|
||||
delay(2000)
|
||||
snackbar.dismiss()
|
||||
isEnabled = true
|
||||
}
|
||||
|
||||
private fun observeSettings() {
|
||||
activity.get<AppSettings>()
|
||||
.observeAsFlow(AppSettings.KEY_EXIT_CONFIRM) { isExitConfirmationEnabled }
|
||||
.flowOn(Dispatchers.Default)
|
||||
.onEach { isEnabled = it }
|
||||
.launchIn(activity.lifecycleScope)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue