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()
|
cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onInterceptBackButton(): Boolean {
|
||||||
confirmCancelDialog()
|
confirmCancelDialog()
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun cancel() {
|
private fun cancel() {
|
||||||
|
@ -9,6 +9,7 @@ import android.view.KeyEvent
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentManager
|
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.casey.musikcube.remote.ui.shared.mixin.ViewModelMixin
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
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()
|
protected var disposables = CompositeDisposable()
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -55,6 +56,7 @@ abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.Ta
|
|||||||
prefs = getSharedPreferences(Prefs.NAME, Context.MODE_PRIVATE)
|
prefs = getSharedPreferences(Prefs.NAME, Context.MODE_PRIVATE)
|
||||||
volumeControlStream = AudioManager.STREAM_MUSIC
|
volumeControlStream = AudioManager.STREAM_MUSIC
|
||||||
mixins.onCreate(savedInstanceState ?: Bundle())
|
mixins.onCreate(savedInstanceState ?: Bundle())
|
||||||
|
onBackPressedDispatcher.addCallback(this, backHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
@ -97,18 +99,41 @@ abstract class BaseActivity : AppCompatActivity(), ViewModel.Provider, Runner.Ta
|
|||||||
mixins.onDestroy()
|
mixins.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onNavigateUp(): Boolean {
|
||||||
|
if (!navigateBack()) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun navigateBack(): Boolean {
|
||||||
(top as? IBackHandler)?.let {
|
(top as? IBackHandler)?.let {
|
||||||
if (it.onBackPressed()) {
|
if (it.onInterceptBackButton()) {
|
||||||
return
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
when {
|
if (onInterceptBackButton()) {
|
||||||
fm.backStackEntryCount > 1 -> fm.popBackStack()
|
return true
|
||||||
else -> super.onBackPressed()
|
}
|
||||||
|
|
||||||
|
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 {
|
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
||||||
if (mixin(PlaybackMixin::class.java)?.onKeyDown(keyCode) == true) {
|
if (mixin(PlaybackMixin::class.java)?.onKeyDown(keyCode) == true) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package io.casey.musikcube.remote.ui.shared.activity
|
package io.casey.musikcube.remote.ui.shared.activity
|
||||||
|
|
||||||
interface IBackHandler {
|
interface IBackHandler {
|
||||||
fun onBackPressed(): Boolean
|
fun onInterceptBackButton(): Boolean
|
||||||
}
|
}
|
@ -19,6 +19,7 @@ import android.widget.CompoundButton
|
|||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.content.ContextCompat
|
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) {
|
fun BaseFragment.initToolbarIfNecessary(view: View, showFilter: Boolean = true) {
|
||||||
view.findViewById<Toolbar>(R.id.toolbar)?.let {
|
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 {
|
it.setNavigationOnClickListener {
|
||||||
appCompatActivity.onBackPressed()
|
appCompatActivity.onNavigateUp()
|
||||||
}
|
}
|
||||||
if (showFilter) {
|
if (showFilter) {
|
||||||
this.addFilterAction(it.menu, this as? IFilterable)
|
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
|
toolbar?.collapseActionViewIfExpanded() ?: false
|
||||||
|
|
||||||
override fun <T: ViewModel<*>> createViewModel(): T? = null
|
override fun <T: ViewModel<*>> createViewModel(): T? = null
|
||||||
|
@ -6,6 +6,7 @@ import android.content.Intent
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
@ -45,14 +46,7 @@ class EditPlaylistActivity: BaseActivity() {
|
|||||||
adapter = EditPlaylistAdapter(viewModel, touchHelper, prefs)
|
adapter = EditPlaylistAdapter(viewModel, touchHelper, prefs)
|
||||||
setupDefaultRecyclerView(recycler, adapter)
|
setupDefaultRecyclerView(recycler, adapter)
|
||||||
setResult(RESULT_CANCELED)
|
setResult(RESULT_CANCELED)
|
||||||
}
|
onBackPressedDispatcher.addCallback(this, backHandler)
|
||||||
|
|
||||||
override fun onBackPressed() {
|
|
||||||
if (viewModel.modified) {
|
|
||||||
ConfirmDiscardChangesDialog.show(this)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
super.onBackPressed()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
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 {
|
override fun <T: ViewModel<*>> createViewModel(): T {
|
||||||
@Suppress("unchecked_cast")
|
@Suppress("unchecked_cast")
|
||||||
return EditPlaylistViewModel(extras.getLong(EXTRA_PLAYLIST_ID, -1L)) as T
|
return EditPlaylistViewModel(extras.getLong(EXTRA_PLAYLIST_ID, -1L)) as T
|
||||||
|
Loading…
Reference in New Issue
Block a user