Archived
Refactor to organise the project and change visibility modifiers
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
package com.denizd.substitutionplan.adapters
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.net.Uri
|
||||
import android.preference.PreferenceManager
|
||||
import android.text.SpannableString
|
||||
import android.text.style.StrikethroughSpan
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.browser.customtabs.CustomTabsIntent
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.denizd.substitutionplan.data.MiscData
|
||||
import com.denizd.substitutionplan.R
|
||||
import com.denizd.substitutionplan.models.Subst
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import java.util.*
|
||||
|
||||
internal class CardAdapter(private var mSubst: List<Subst>) : RecyclerView.Adapter<CardAdapter.CardViewHolder>() {
|
||||
|
||||
private var colour = 0
|
||||
private var colourString = ""
|
||||
private var colorCheck = ""
|
||||
|
||||
class CardViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
|
||||
var mImageView: ImageView = itemView.findViewById(R.id.iconView)
|
||||
var mGroup: TextView = itemView.findViewById(R.id.group)
|
||||
var mDate: TextView = itemView.findViewById(R.id.date)
|
||||
var mTime: TextView = itemView.findViewById(R.id.time)
|
||||
var mCourse: TextView = itemView.findViewById(R.id.course)
|
||||
var mRoom: TextView = itemView.findViewById(R.id.room)
|
||||
var mAdditional: TextView = itemView.findViewById(R.id.additional)
|
||||
var mCard: MaterialCardView = itemView.findViewById(R.id.planCard)
|
||||
init { view.setOnClickListener(this) }
|
||||
override fun onClick(v: View?) {
|
||||
if (mDate.text.toString().length > 7 && mDate.text.toString().substring(3, 7) == "http") {
|
||||
try {
|
||||
CustomTabsIntent.Builder().build().launchUrl(mCard.context,
|
||||
Uri.parse(mDate.text.toString().substring(3)))
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
Toast.makeText(mCard.context, mCard.context.getString(R.string.chromeCompatibleNotFound), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.course_card, parent, false)
|
||||
return CardViewHolder(v)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
|
||||
val currentItem = mSubst[position]
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(holder.mImageView.context)
|
||||
var psa = false
|
||||
val strings = arrayOf(SpannableString(currentItem.group), SpannableString(currentItem.time),
|
||||
SpannableString(currentItem.course), SpannableString(currentItem.room))
|
||||
for (item in strings) {
|
||||
val qmark = item.indexOf("?")
|
||||
if (qmark != -1) {
|
||||
item.setSpan(StrikethroughSpan(), 0, qmark, 0)
|
||||
}
|
||||
}
|
||||
with (currentItem.additional.toLowerCase(Locale.ROOT)) {
|
||||
if (contains("eigenverantwortliches arbeiten") || contains("entfall") || contains("fällt aus")) {
|
||||
strings[2].setSpan(StrikethroughSpan(), 0, strings[2].length, 0)
|
||||
strings[3].setSpan(StrikethroughSpan(), 0, strings[3].length, 0)
|
||||
}
|
||||
}
|
||||
|
||||
holder.mImageView.setImageResource(
|
||||
MiscData.getIconForCourse(
|
||||
currentItem.course
|
||||
)
|
||||
)
|
||||
holder.mGroup.setText(strings[0], TextView.BufferType.SPANNABLE)
|
||||
holder.mTime.setText(strings[1], TextView.BufferType.SPANNABLE)
|
||||
holder.mCourse.setText(strings[2], TextView.BufferType.SPANNABLE)
|
||||
holder.mRoom.setText(strings[3], TextView.BufferType.SPANNABLE)
|
||||
holder.mAdditional.text = currentItem.additional
|
||||
|
||||
if (currentItem.date.isNotEmpty() && currentItem.date.substring(0, 3) == "psa") {
|
||||
psa = true
|
||||
holder.mDate.visibility = View.GONE
|
||||
holder.mDate.text = currentItem.date
|
||||
holder.mTime.text = " "
|
||||
holder.mImageView.setImageResource(R.drawable.ic_idea)
|
||||
holder.mCard.setCardBackgroundColor(ContextCompat.getColor(holder.mImageView.context,
|
||||
R.color.colorAccent
|
||||
))
|
||||
} else {
|
||||
holder.mDate.visibility = View.VISIBLE
|
||||
holder.mDate.text = currentItem.date
|
||||
}
|
||||
|
||||
if (!psa) {
|
||||
colourString = getColourString(holder.mCourse.text.toString())
|
||||
val colourPrefsInt = if (colourString.isNotEmpty()) {
|
||||
prefs.getString("card$colourString", "") ?: ""
|
||||
} else {
|
||||
""
|
||||
}
|
||||
colour = MiscData.getColourForString(colourPrefsInt)
|
||||
if (colour != 0) {
|
||||
holder.mCard.setCardBackgroundColor(ContextCompat.getColor(holder.mCourse.context, colour))
|
||||
} else {
|
||||
holder.mCard.setCardBackgroundColor(ContextCompat.getColor(holder.mCourse.context,
|
||||
R.color.colorBackgroundLight
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
val textColor = ContextCompat.getColor(holder.mImageView.context, if (psa) {
|
||||
R.color.colorBackground
|
||||
} else {
|
||||
when (colour) {
|
||||
R.color.bgPureWhite -> R.color.colorTextDark
|
||||
R.color.bgPureBlack -> R.color.colorTextLight
|
||||
else -> R.color.colorText
|
||||
}
|
||||
})
|
||||
holder.mImageView.setColorFilter(textColor)
|
||||
holder.mGroup.setTextColor(textColor)
|
||||
holder.mDate.setTextColor(textColor)
|
||||
holder.mTime.setTextColor(textColor)
|
||||
holder.mCourse.setTextColor(textColor)
|
||||
holder.mRoom.setTextColor(textColor)
|
||||
holder.mAdditional.setTextColor(textColor)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = mSubst.size
|
||||
|
||||
fun setSubst(subst: List<Subst>) {
|
||||
mSubst = subst
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
private fun getColourString(course: String): String {
|
||||
return try {
|
||||
colorCheck = course.toLowerCase(Locale.ROOT).substring(0, 3)
|
||||
when (colorCheck) {
|
||||
"deu", "dep", "daz", "fda" -> "German"
|
||||
"mat", "map" -> "Maths"
|
||||
"eng", "enp", "ena" -> "English"
|
||||
"spo", "spp", "spth" -> "PhysEd"
|
||||
"pol", "pop" -> "Politics"
|
||||
"dar", "dap" -> "Theatre"
|
||||
"phy", "php" -> "Physics"
|
||||
"bio", "bip", "nw1", "nw2", "nw3", "nw4" -> "Biology"
|
||||
"che", "chp" -> "Chemistry"
|
||||
"phi", "psp" -> "Philosophy"
|
||||
"laa", "laf", "lat" -> "Latin"
|
||||
"spa", "spf" -> "Spanish"
|
||||
"fra", "frf", "frz" -> "French"
|
||||
"inf" -> "Compsci"
|
||||
"ges" -> "History"
|
||||
"rel" -> "Religion"
|
||||
"geg" -> "Geography"
|
||||
"kun" -> "Arts"
|
||||
"mus" -> "Music"
|
||||
"tue" -> "Turkish"
|
||||
"chi" -> "Chinese"
|
||||
"gll" -> "GLL"
|
||||
"wat" -> "WAT"
|
||||
"för" -> "Forder"
|
||||
"met", "wpb" -> "WP"
|
||||
else -> ""
|
||||
}
|
||||
} catch (e: StringIndexOutOfBoundsException) {
|
||||
try {
|
||||
colorCheck = course.toLowerCase(Locale.ROOT).substring(0, 2)
|
||||
when (colorCheck) {
|
||||
"nw" -> "Biology"
|
||||
"wp" -> "WP"
|
||||
else -> ""
|
||||
}
|
||||
} catch (e2: StringIndexOutOfBoundsException) {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
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
|
||||
|
||||
internal class ColourAdapter(private var mColours: List<Colour>, onClickListener: OnClickListener) : RecyclerView.Adapter<ColourAdapter.ColourViewHolder>() {
|
||||
|
||||
val mOnClickListener = onClickListener
|
||||
|
||||
class ColourViewHolder(view: View, clickListener: OnClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
val title: TextView = view.findViewById(R.id.item_text)
|
||||
var image: ImageView = view.findViewById(R.id.item_image)
|
||||
val titleNoLang: TextView = view.findViewById(R.id.item_text_no_lang)
|
||||
val cardView: MaterialCardView = view.findViewById(R.id.cardView)
|
||||
val mClickListener = clickListener
|
||||
init { view.setOnClickListener(this) }
|
||||
|
||||
override fun onClick(v: View?) { mClickListener.onClick(adapterPosition, title.text.toString(), titleNoLang.text.toString()) }
|
||||
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ColourViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
|
||||
return ColourViewHolder(
|
||||
v,
|
||||
mOnClickListener
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ColourViewHolder, position: Int) {
|
||||
val currentItem = mColours[position]
|
||||
|
||||
holder.title.text = currentItem.title
|
||||
holder.titleNoLang.text = currentItem.titleNoLang
|
||||
holder.image.setImageDrawable(ContextCompat.getDrawable(holder.image.context, currentItem.icon))
|
||||
val colour = if (currentItem.colour != 0) {
|
||||
currentItem.colour
|
||||
} else {
|
||||
R.color.colorBackgroundLight
|
||||
}
|
||||
holder.cardView.setCardBackgroundColor(ContextCompat.getColor(holder.image.context, colour))
|
||||
|
||||
val textColor = when (colour) {
|
||||
R.color.bgPureWhite -> R.color.colorTextDark
|
||||
R.color.bgPureBlack -> R.color.colorTextLight
|
||||
else -> R.color.colorText
|
||||
}
|
||||
holder.image.setColorFilter(ContextCompat.getColor(holder.image.context, textColor))
|
||||
holder.title.setTextColor(ContextCompat.getColor(holder.title.context, textColor))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = mColours.size
|
||||
|
||||
fun setColours(colours: List<Colour>) {
|
||||
mColours = colours
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
public interface OnClickListener {
|
||||
fun onClick(position: Int, title: String, titleNoLang: String)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.denizd.substitutionplan.adapters
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
|
||||
import java.util.ArrayList
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.denizd.substitutionplan.models.Food
|
||||
import com.denizd.substitutionplan.R
|
||||
|
||||
internal class FoodAdapter(food: ArrayList<Food>) : RecyclerView.Adapter<FoodAdapter.CardViewHolder>() {
|
||||
private var mFood: List<Food>? = null
|
||||
|
||||
class CardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
var mFood: TextView = itemView.findViewById(R.id.cardInfoText)
|
||||
}
|
||||
|
||||
init {
|
||||
mFood = food
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.just_a_card, parent, false)
|
||||
return CardViewHolder(v)
|
||||
}
|
||||
|
||||
fun getFoodAt(i: Int): Food {
|
||||
return mFood!![i]
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
|
||||
val currentItem = mFood!![position]
|
||||
|
||||
holder.mFood.text = currentItem.food
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return mFood!!.size
|
||||
}
|
||||
|
||||
fun setFood(food: List<Food>) {
|
||||
mFood = food
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.denizd.substitutionplan.adapters
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.denizd.substitutionplan.R
|
||||
import com.denizd.substitutionplan.models.Ringtone
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
|
||||
internal class RingtoneAdapter(private var _ringtones: List<Ringtone>, onClickListener: OnClickListener) : RecyclerView.Adapter<RingtoneAdapter.RingtoneViewHolder>() {
|
||||
|
||||
private val _onClickListener = onClickListener
|
||||
|
||||
class RingtoneViewHolder(view: View, clickListener: OnClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
val name: TextView = view.findViewById(R.id.item_text)
|
||||
val uri: TextView = view.findViewById(R.id.item_text_no_lang)
|
||||
val cardView: MaterialCardView = view.findViewById(R.id.cardView)
|
||||
private val _clickListener = clickListener
|
||||
init { view.setOnClickListener(this) }
|
||||
|
||||
override fun onClick(v: View?) { _clickListener.onRingtoneClick(adapterPosition, name.text.toString(), uri.text.toString()) }
|
||||
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RingtoneViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
|
||||
return RingtoneViewHolder(
|
||||
v,
|
||||
_onClickListener
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RingtoneViewHolder, position: Int) {
|
||||
val currentItem = _ringtones[position]
|
||||
|
||||
holder.name.text = currentItem.name
|
||||
holder.uri.text = currentItem.uri
|
||||
holder.cardView.setCardBackgroundColor(ContextCompat.getColor(holder.cardView.context,
|
||||
R.color.colorBackground
|
||||
))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = _ringtones.size
|
||||
|
||||
fun setRingtones(ringtones: List<Ringtone>) {
|
||||
_ringtones = ringtones
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
public interface OnClickListener {
|
||||
fun onRingtoneClick(position: Int, name: String, uri: String)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user