mirror of
https://github.com/clangen/musikcube.git
synced 2024-10-02 04:52:32 +00:00
Refactor back button handling to get rid of deprecation warnings.
This commit is contained in:
parent
5e576d5860
commit
1ea0e67785
@ -96,8 +96,9 @@ class TrackDownloadActivity: BaseActivity() {
|
||||
cancel()
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
override fun onInterceptBackButton(): Boolean {
|
||||
confirmCancelDialog()
|
||||
return true
|
||||
}
|
||||
|
||||
private fun cancel() {
|
||||
|
@ -9,6 +9,7 @@ import android.view.KeyEvent
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
@ -29,7 +30,7 @@ import io.casey.musikcube.remote.ui.shared.mixin.RunnerMixin
|
||||
import io.casey.musikcube.remote.ui.shared.mixin.ViewModelMixin
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
|
||||
abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.TaskCallbacks {
|
||||
abstract class BaseActivity: AppCompatActivity(), ViewModel.Provider, Runner.TaskCallbacks {
|
||||
protected var disposables = CompositeDisposable()
|
||||
private set
|
||||
|
||||
@ -55,6 +56,7 @@ abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.Ta
|
||||
prefs = getSharedPreferences(Prefs.NAME, Context.MODE_PRIVATE)
|
||||
volumeControlStream = AudioManager.STREAM_MUSIC
|
||||
mixins.onCreate(savedInstanceState ?: Bundle())
|
||||
onBackPressedDispatcher.addCallback(this, backHandler)
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
@ -97,19 +99,42 @@ abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.Ta
|
||||
mixins.onDestroy()
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
override fun onNavigateUp(): Boolean {
|
||||
if (!navigateBack()) {
|
||||
finish()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun navigateBack(): Boolean {
|
||||
(top as? IBackHandler)?.let {
|
||||
if (it.onBackPressed()) {
|
||||
return
|
||||
if (it.onInterceptBackButton()) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
when {
|
||||
fm.backStackEntryCount > 1 -> fm.popBackStack()
|
||||
else -> super.onBackPressed()
|
||||
if (onInterceptBackButton()) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (fm.backStackEntryCount >= 1) {
|
||||
fm.popBackStack()
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
private val backHandler = object: OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
if (!navigateBack()) {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun onInterceptBackButton(): Boolean = false
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
||||
if (mixin(PlaybackMixin::class.java)?.onKeyDown(keyCode) == true) {
|
||||
return true
|
||||
|
@ -1,5 +1,5 @@
|
||||
package io.casey.musikcube.remote.ui.shared.activity
|
||||
|
||||
interface IBackHandler {
|
||||
fun onBackPressed(): Boolean
|
||||
fun onInterceptBackButton(): Boolean
|
||||
}
|
@ -19,6 +19,7 @@ import android.widget.CompoundButton
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.content.ContextCompat
|
||||
@ -276,9 +277,9 @@ inline fun <reified T: BaseFragment> T.withTitleOverride(activity: AppCompatActi
|
||||
|
||||
fun BaseFragment.initToolbarIfNecessary(view: View, showFilter: Boolean = true) {
|
||||
view.findViewById<Toolbar>(R.id.toolbar)?.let {
|
||||
it.navigationIcon = appCompatActivity.getDrawable(R.drawable.ic_back)
|
||||
it.navigationIcon = AppCompatResources.getDrawable(appCompatActivity, R.drawable.ic_back)
|
||||
it.setNavigationOnClickListener {
|
||||
appCompatActivity.onBackPressed()
|
||||
appCompatActivity.onNavigateUp()
|
||||
}
|
||||
if (showFilter) {
|
||||
this.addFilterAction(it.menu, this as? IFilterable)
|
||||
|
@ -169,7 +169,7 @@ open class BaseFragment: Fragment(), ViewModel.Provider, IBackHandler {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean =
|
||||
override fun onInterceptBackButton(): Boolean =
|
||||
toolbar?.collapseActionViewIfExpanded() ?: false
|
||||
|
||||
override fun <T: ViewModel<*>> createViewModel(): T? = null
|
||||
|
@ -6,6 +6,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
@ -45,14 +46,7 @@ class EditPlaylistActivity: BaseActivity() {
|
||||
adapter = EditPlaylistAdapter(viewModel, touchHelper, prefs)
|
||||
setupDefaultRecyclerView(recycler, adapter)
|
||||
setResult(RESULT_CANCELED)
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (viewModel.modified) {
|
||||
ConfirmDiscardChangesDialog.show(this)
|
||||
return
|
||||
}
|
||||
super.onBackPressed()
|
||||
onBackPressedDispatcher.addCallback(this, backHandler)
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
@ -80,6 +74,16 @@ class EditPlaylistActivity: BaseActivity() {
|
||||
))
|
||||
}
|
||||
|
||||
private val backHandler = object: OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
if (viewModel.modified) {
|
||||
ConfirmDiscardChangesDialog.show(this@EditPlaylistActivity)
|
||||
return
|
||||
}
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun <T: ViewModel<*>> createViewModel(): T {
|
||||
@Suppress("unchecked_cast")
|
||||
return EditPlaylistViewModel(extras.getLong(EXTRA_PLAYLIST_ID, -1L)) as T
|
||||
|
Loading…
Reference in New Issue
Block a user