Changed colour picker from a single palette dialog to recycler view to gain parity with iOS-version

This commit is contained in:
Deniz Düzgören
2019-10-15 08:29:53 +02:00
parent cad72fb90a
commit 3b239fc22d
20 changed files with 262 additions and 494 deletions
@@ -0,0 +1,58 @@
package com.denizd.substitutionplan.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.denizd.substitutionplan.models.Colour
import com.denizd.substitutionplan.R
import com.google.android.material.card.MaterialCardView
/**
* Adapter class used for displaying the colours available for tinting courses on the substitution
* plan. Used in SettingsFragment.kt
*
* @param colours a list of all available colours
* @param onClickListener a reference to an OnClickListener
*/
internal class ColourPickerAdapter(private var colours: List<Colour>, private val onClickListener: OnColourClickListener) : RecyclerView.Adapter<ColourPickerAdapter.ColourPickerViewHolder>() {
internal class ColourPickerViewHolder(view: View, private val clickListener: OnColourClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
val title: TextView = view.findViewById(R.id.item_text)
var image: ImageView = view.findViewById(R.id.item_image)
var colourNoLang = ""
init { view.setOnClickListener(this) }
override fun onClick(v: View?) { clickListener.onColourClick(adapterPosition, colourNoLang) }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ColourPickerViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.colour_picker_item, parent, false)
return ColourPickerViewHolder(v, onClickListener)
}
override fun onBindViewHolder(holder: ColourPickerViewHolder, position: Int) {
val currentItem = colours[position]
holder.title.text = currentItem.title
holder.colourNoLang = currentItem.titleNoLang
val bg = ContextCompat.getDrawable(holder.image.context, R.drawable.circle)
bg?.setTint((ContextCompat.getColor(holder.image.context, if (currentItem.colour != 0) {
currentItem.colour
} else {
R.color.colorBackgroundLight
})))
holder.image.background = bg
}
override fun getItemCount(): Int = colours.size
internal interface OnColourClickListener {
fun onColourClick(position: Int, colourNoLang: String)
}
}
@@ -18,25 +18,25 @@ import com.google.android.material.card.MaterialCardView
* @param colours a list of all courses and their associated colour
* @param onClickListener a reference to an OnClickListener
*/
internal class ColourAdapter(private var colours: List<Colour>, private val onClickListener: OnColourClickListener) : RecyclerView.Adapter<ColourAdapter.ColourViewHolder>() {
internal class CourseColourAdapter(private var colours: List<Colour>, private val onClickListener: OnCourseColourClickListener) : RecyclerView.Adapter<CourseColourAdapter.CourseColourViewHolder>() {
internal class ColourViewHolder(view: View, private val clickListener: OnColourClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
internal class CourseColourViewHolder(view: View, private val clickListener: OnCourseColourClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
val title: TextView = view.findViewById(R.id.item_text)
var image: ImageView = view.findViewById(R.id.item_image)
var titleNoLang: String = ""
val cardView: MaterialCardView = view.findViewById(R.id.cardView)
init { view.setOnClickListener(this) }
override fun onClick(v: View?) { clickListener.onColourClick(adapterPosition, title.text.toString(), titleNoLang) }
override fun onClick(v: View?) { clickListener.onCourseClick(adapterPosition, title.text.toString(), titleNoLang) }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ColourViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
return ColourViewHolder(v, onClickListener)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CourseColourViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.course_colour_picker_item, parent, false)
return CourseColourViewHolder(v, onClickListener)
}
override fun onBindViewHolder(holder: ColourViewHolder, position: Int) {
override fun onBindViewHolder(holder: CourseColourViewHolder, position: Int) {
val currentItem = colours[position]
holder.title.text = currentItem.title
@@ -60,7 +60,7 @@ internal class ColourAdapter(private var colours: List<Colour>, private val onCl
override fun getItemCount(): Int = colours.size
internal interface OnColourClickListener {
fun onColourClick(position: Int, title: String, titleNoLang: String)
internal interface OnCourseColourClickListener {
fun onCourseClick(position: Int, title: String, titleNoLang: String)
}
}
@@ -32,7 +32,7 @@ internal class RingtoneAdapter(private val ringtones: List<Ringtone>, private va
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RingtoneViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
val v = LayoutInflater.from(parent.context).inflate(R.layout.course_colour_picker_item, parent, false)
return RingtoneViewHolder(v, onClickListener)
}
@@ -119,7 +119,7 @@ internal class SubstitutionAdapter(private var substitutions: List<Substitution>
} else {
""
}
colour = HelperFunctions.getColourForString(colourPrefsInt)
colour = HelperFunctions.getColourForString(colourPrefsInt, holder.context)
cardBackgroundColour = if (colour != 0) {
colour
} else {