import android.app.AlertDialog
import android.os.Bundle
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.activity.viewModels
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
private val TAG = "MainActivity"
private val backCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
handleAppExit()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedDispatcher.addCallback(this, backCallback)
}
private fun handleAppExit() {
backCallback.isEnabled = false
lifecycleScope.launch(Dispatchers.IO) {
try {
//判断是否需要提示
val isBeConfirm = true
if (isBeConfirm) {
withContext(Dispatchers.Main) {
showExitConfirmationDialog()
}
} else {
withContext(Dispatchers.Main) {
finish()
}
}
} catch (e: Exception) {
Timber.tag(TAG).e(e)
if (e !is CancellationException) {
withContext(Dispatchers.Main) {
finish()
}
}
} finally {
withContext(Dispatchers.Main) {
backCallback.isEnabled = true
}
}
}
}
private fun showExitConfirmationDialog() {
AlertDialog.Builder(this)
.setTitle("还不能退出")
.setMessage("退出后,会如何?")
.setPositiveButton("继续退出") { dialog, which ->
finish()
}
.setNegativeButton("取消") { dialog, which ->
dialog.dismiss()
}
.setCancelable(false)
.show()
}
}