Skip to content

Commit

Permalink
Move part of implementation of ActionMode.Callback to the MultiSelect…
Browse files Browse the repository at this point in the history
…Fragment
  • Loading branch information
XiangRongLin committed Jul 19, 2019
1 parent 8620804 commit 515659e
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 113 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,18 @@ import com.kaiserpudding.howtheywrite.R

class AddCharactersFragment : BaseCharacterListFragment() {

override val actionModeCallback: ActionMode.Callback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
val inflater = mode.menuInflater
inflater.inflate(R.menu.selection_add_menu, menu)
mode.title = "${adapter.numberOfSelected} selected"
return true
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_confirm -> {
characterListViewModel.addCharactersToLesson(adapter.selectedIdArray)
mode.finish()
listener?.onFinish()
true
}
else -> false
override val actionMenuId = R.menu.selection_add_menu

override fun onMyActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_confirm -> {
characterListViewModel.addCharactersToLesson(adapter.selectedIdArray)
mode.finish()
listener?.onFinish()
true
}
else -> false
}

override fun onDestroyActionMode(mode: ActionMode) {
adapter.clearSelectedThenNotify()
actionMode = null
}

}

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,15 @@ import com.kaiserpudding.howtheywrite.shared.ConfirmationDialogFragment
class AllCharactersFragment : BaseCharacterListFragment(),
ConfirmationDialogFragment.ConfirmationDialogListener {

override val actionModeCallback: ActionMode.Callback = object : ActionMode.Callback {
override val actionMenuId = R.menu.selection_delete_menu

override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
val inflater = mode.menuInflater
inflater.inflate(R.menu.selection_delete_menu, menu)
mode.title = "${adapter.numberOfSelected} selected"
return true
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
else -> false
override fun onMyActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
}

override fun onDestroyActionMode(mode: ActionMode) {
adapter.clearSelectedThenNotify()
actionMode = null
else -> false
}
}

Expand All @@ -49,7 +32,7 @@ class AllCharactersFragment : BaseCharacterListFragment(),
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val view = super.onCreateView(inflater, container, savedInstanceState)
val view = super.onCreateView(inflater, container, savedInstanceState)

view.findViewById<Button>(R.id.to_quiz_button).visibility = View.GONE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,33 +25,16 @@ class CharacterListFragment
: BaseCharacterListFragment(),
ConfirmationDialogFragment.ConfirmationDialogListener {

override val actionModeCallback: ActionMode.Callback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
val inflater = mode.menuInflater
inflater.inflate(R.menu.selection_delete_menu, menu)
mode.title = "${adapter.numberOfSelected} selected"
return true
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override val actionMenuId = R.menu.selection_delete_menu

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
else -> false
override fun onMyActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
else -> false
}

override fun onDestroyActionMode(mode: ActionMode) {
adapter.clearSelectedThenNotify()
actionMode = null
}

}

override fun onActivityCreated(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,31 +31,16 @@ class LessonListFragment
private var listener: OnLessonListFragmentInteractionListener? = null
private lateinit var lessonListViewModel: LessonListViewModel

override val actionModeCallback: ActionMode.Callback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
val inflater = mode.menuInflater
inflater.inflate(R.menu.selection_delete_menu, menu)
mode.title = "${adapter.numberOfSelected} selected"
return true
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
else -> false
override val actionMenuId: Int
get() = R.menu.selection_delete_menu

override fun onMyActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_delete -> {
showConfirmationDialog()
true
}
}

override fun onDestroyActionMode(mode: ActionMode) {
adapter.clearSelectedThenNotify()
actionMode = null
else -> false
}
}

Expand All @@ -78,7 +63,8 @@ class LessonListFragment

//add observer to viewModel to set lessons into the adapter
lessonListViewModel.lessons.observe(this, Observer {
(adapter as LessonListAdapter).setLessons(it) })
(adapter as LessonListAdapter).setLessons(it)
})

val fab = view.findViewById<FloatingActionButton>(R.id.new_lessen_fab)
fab.setOnClickListener {
Expand All @@ -88,26 +74,15 @@ class LessonListFragment
return view
}

// private fun onListItemPressed(lessonId: Int, lessonName: String) {
// listener?.onLessonListItemInteraction(lessonId, lessonName)
// }

private fun onNewLessonButtonPressed() {
listener?.onToNewLessonInteraction()
}

// override fun onLessonListAdapterItemInteraction(lessonId: Int, lessonName: String) {
// onListItemPressed(lessonId, lessonName)
// }

override fun onListInteraction(itemId: Int) {
listener?.onLessonListItemInteraction(itemId)
}

// override fun onLessonListAdapterItemLongInteraction(lessonId: Int, lessonName: String) {
// adapter.toggleSelectedThenNotify(lessonId)
// }

private fun showConfirmationDialog() {
val dialog = ConfirmationDialogFragment(this)
dialog.show(childFragmentManager, "dialog")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.kaiserpudding.howtheywrite.shared.multiSelect

import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import androidx.fragment.app.Fragment

/**
Expand All @@ -15,9 +17,50 @@ abstract class MultiSelectFragment<T> : Fragment(),
MultiSelectAdapter.MultiSelectAdapterItemInteractionListener {

protected lateinit var adapter: MultiSelectAdapter<T>
protected abstract val actionModeCallback: ActionMode.Callback
protected var actionMode: ActionMode? = null

/**
* The id of the menu shown in the [ActionMode].
*/
protected abstract val actionMenuId: Int

/**
* [ActionMode.Callback] implementation which relies on subclasses implementing
* [actionMenuId] and [onMyActionItemClicked].
*/
private val actionModeCallback: ActionMode.Callback =
object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
val inflater = mode.menuInflater
inflater.inflate(actionMenuId, menu)
mode.title = "${adapter.numberOfSelected} selected"
return true
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return onMyActionItemClicked(mode, item)
}

override fun onDestroyActionMode(mode: ActionMode) {
adapter.clearSelectedThenNotify()
actionMode = null
}
}

/**
* Implementation for the [ActionMode.Callback.onActionItemClicked] method.
* Needs to handle click on items of menu with [actionMenuId].
*
* @param mode The current ActionMode
* @param item The item that was clicked
* @return true if this callback handled the event, false if the standard MenuItem invocation should continue.
*/
protected abstract fun onMyActionItemClicked(mode: ActionMode, item: MenuItem): Boolean

override fun onStop() {
super.onStop()
actionMode?.finish()
Expand Down

0 comments on commit 515659e

Please sign in to comment.