Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,25 @@ package com.ichi2.anki.preferences.reviewer

import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.textview.MaterialTextView
import com.ichi2.anki.R
import com.ichi2.anki.utils.ext.findViewById
import com.ichi2.anki.databinding.ReviewerMenuDisplayTypeBinding
import com.ichi2.anki.databinding.ReviewerMenuItemBinding

/**
* Provides bindings from menu items and display types (headings) to [RecyclerView] views
* and support for dragging menu items to change display types or reorder.
*
* Handles ViewHolders for two classes:
* * [ReviewerMenuSettingsRecyclerItem.DisplayType] - Headings: Always show, Menu only, etc...
* * [DisplayTypeViewHolder]
* * [ReviewerMenuSettingsRecyclerItem.Action] - Study screen menu items: Undo, Flag, etc...
* * [ActionViewHolder]
*
* @see ReviewerMenuSettingsFragment
* @see ReviewerMenuSettingsRecyclerItem
*/
class ReviewerMenuSettingsAdapter(
private val items: List<ReviewerMenuSettingsRecyclerItem>,
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
Expand All @@ -36,12 +46,12 @@ class ReviewerMenuSettingsAdapter(
val inflater = LayoutInflater.from(parent.context)
return when (viewType) {
ReviewerMenuSettingsRecyclerItem.ACTION_VIEW_TYPE -> {
val itemView = inflater.inflate(R.layout.reviewer_menu_item, parent, false)
ActionViewHolder(itemView)
val binding = ReviewerMenuItemBinding.inflate(inflater, parent, false)
ActionViewHolder(binding)
}
ReviewerMenuSettingsRecyclerItem.DISPLAY_TYPE_VIEW_TYPE -> {
val itemView = inflater.inflate(R.layout.reviewer_menu_display_type, parent, false)
DisplayTypeViewHolder(itemView)
val binding = ReviewerMenuDisplayTypeBinding.inflate(inflater, parent, false)
DisplayTypeViewHolder(binding)
}
else -> throw IllegalArgumentException("Unexpected viewType")
}
Expand Down Expand Up @@ -70,13 +80,13 @@ class ReviewerMenuSettingsAdapter(

/** @see [R.layout.reviewer_menu_item] */
private inner class ActionViewHolder(
itemView: View,
) : RecyclerView.ViewHolder(itemView) {
private val binding: ReviewerMenuItemBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(action: ViewerAction) {
findViewById<TextView>(R.id.title).text = action.title(itemView.context)
action.drawableRes?.let { findViewById<AppCompatImageView>(R.id.icon).setBackgroundResource(it) }
binding.title.text = action.title(itemView.context)
action.drawableRes?.let { binding.icon.setBackgroundResource(it) }

findViewById<AppCompatImageView>(R.id.drag_handle).setOnTouchListener { _, event ->
binding.dragHandle.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
onDragHandleTouchedListener?.invoke(this)
}
Expand All @@ -87,10 +97,10 @@ class ReviewerMenuSettingsAdapter(

/** @see [R.layout.reviewer_menu_display_type] */
private class DisplayTypeViewHolder(
itemView: View,
) : RecyclerView.ViewHolder(itemView) {
private val binding: ReviewerMenuDisplayTypeBinding,
) : RecyclerView.ViewHolder(binding.root) {
fun bind(displayCategory: MenuDisplayType) {
findViewById<MaterialTextView>(R.id.title).setText(displayCategory.title)
binding.title.setText(displayCategory.title)
}
}
}
Expand Down