Archived
Login page now disallows visiting a domain other than the school's login page to prevent a successful login from another domain allowing access to the app's content
This commit is contained in:
@@ -11,29 +11,33 @@ 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>() {
|
||||
/**
|
||||
* Adapter class used for displaying the courses as well as their associated colours in the
|
||||
* customisation dialog. Used in SettingsFragment.kt
|
||||
*
|
||||
* @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: OnClickListener) : RecyclerView.Adapter<ColourAdapter.ColourViewHolder>() {
|
||||
|
||||
private val mOnClickListener = onClickListener
|
||||
|
||||
class ColourViewHolder(view: View, clickListener: OnClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
internal class ColourViewHolder(view: View, private val 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)
|
||||
private val mClickListener = clickListener
|
||||
init { view.setOnClickListener(this) }
|
||||
|
||||
override fun onClick(v: View?) { mClickListener.onClick(adapterPosition, title.text.toString(), titleNoLang.text.toString()) }
|
||||
override fun onClick(v: View?) { clickListener.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)
|
||||
return ColourViewHolder(v, onClickListener)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ColourViewHolder, position: Int) {
|
||||
val currentItem = mColours[position]
|
||||
val currentItem = colours[position]
|
||||
|
||||
holder.title.text = currentItem.title
|
||||
holder.titleNoLang.text = currentItem.titleNoLang
|
||||
@@ -54,7 +58,7 @@ internal class ColourAdapter(private var mColours: List<Colour>, onClickListener
|
||||
holder.title.setTextColor(ContextCompat.getColor(holder.title.context, textColor))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = mColours.size
|
||||
override fun getItemCount(): Int = colours.size
|
||||
|
||||
internal interface OnClickListener {
|
||||
fun onClick(position: Int, title: String, titleNoLang: String)
|
||||
|
||||
@@ -5,39 +5,38 @@ 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
|
||||
/**
|
||||
* Adapter class used in FoodFragment.kt to display the food menu to the user
|
||||
*
|
||||
* @param foods a list of all food entries on the menu
|
||||
*/
|
||||
internal class FoodAdapter(private var foods: List<Food>) : RecyclerView.Adapter<FoodAdapter.FoodViewHolder>() {
|
||||
|
||||
class CardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
var mFood: TextView = itemView.findViewById(R.id.cardInfoText)
|
||||
internal class FoodViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
||||
var text: TextView = itemView.findViewById(R.id.cardInfoText)
|
||||
}
|
||||
|
||||
init {
|
||||
mFood = food
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FoodViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.just_a_card, parent, false)
|
||||
return CardViewHolder(v)
|
||||
return FoodViewHolder(v)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
|
||||
val currentItem = mFood!![position]
|
||||
override fun onBindViewHolder(holder: FoodViewHolder, position: Int) {
|
||||
val currentItem = foods[position]
|
||||
|
||||
holder.mFood.text = currentItem.food
|
||||
holder.text.text = currentItem.food
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return mFood!!.size
|
||||
return foods.size
|
||||
}
|
||||
|
||||
fun setFood(food: List<Food>) {
|
||||
mFood = food
|
||||
fun setFood(foods: List<Food>) {
|
||||
this.foods = foods
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,40 +10,39 @@ 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>() {
|
||||
/**
|
||||
* Adapter class used for displaying all available notification ringtones to the user up to
|
||||
* Android version 7 (Nougat). Used in SettingsFragment.kt
|
||||
*
|
||||
* @param ringtones a list of all ringtones including their URI
|
||||
* @param onClickListener a reference to an OnClickListener to set the ringtone
|
||||
*/
|
||||
internal class RingtoneAdapter(private val ringtones: List<Ringtone>, private val onClickListener: OnClickListener) : RecyclerView.Adapter<RingtoneAdapter.RingtoneViewHolder>() {
|
||||
|
||||
private val _onClickListener = onClickListener
|
||||
|
||||
class RingtoneViewHolder(view: View, clickListener: OnClickListener) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
internal class RingtoneViewHolder(view: View, private val 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 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
|
||||
)
|
||||
return RingtoneViewHolder(v, onClickListener)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RingtoneViewHolder, position: Int) {
|
||||
val currentItem = _ringtones[position]
|
||||
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
|
||||
))
|
||||
holder.cardView.setCardBackgroundColor(ContextCompat.getColor(holder.cardView.context, R.color.colorBackground))
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = _ringtones.size
|
||||
override fun getItemCount(): Int = ringtones.size
|
||||
|
||||
internal interface OnClickListener {
|
||||
fun onRingtoneClick(position: Int, name: String, uri: String)
|
||||
|
||||
+24
-65
@@ -1,6 +1,7 @@
|
||||
package com.denizd.substitutionplan.adapters
|
||||
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.text.SpannableString
|
||||
@@ -16,18 +17,20 @@ import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.denizd.substitutionplan.data.HelperFunctions
|
||||
import com.denizd.substitutionplan.R
|
||||
import com.denizd.substitutionplan.models.Subst
|
||||
import com.denizd.substitutionplan.models.Substitution
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import java.util.*
|
||||
|
||||
internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: SharedPreferences) : RecyclerView.Adapter<CardAdapter.CardViewHolder>() {
|
||||
/**
|
||||
* Adapter class for the Recycler View used to display the substitution plan in
|
||||
* PlanFragment.kt and its subclasses
|
||||
*
|
||||
* @param substitutions a list of all substitutions of data type Substitution
|
||||
* @param prefs a reference to the app's Shared Preferences used to get user-set colours
|
||||
*/
|
||||
internal class SubstitutionAdapter(private var substitutions: List<Substitution>, private val prefs: SharedPreferences) : RecyclerView.Adapter<SubstitutionAdapter.CardViewHolder>() {
|
||||
|
||||
private var colour = 0
|
||||
private var colourString = ""
|
||||
private var colorCheck = ""
|
||||
private val cancellations = arrayOf("eigenverantwortliches arbeiten", "entfall", "entfällt", "fällt aus", "freisetzung", "vtr. ohne lehrer")
|
||||
|
||||
class CardViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
internal class CardViewHolder(view: View) : RecyclerView.ViewHolder(view), View.OnClickListener {
|
||||
|
||||
var iconView: ImageView = view.findViewById(R.id.iconView)
|
||||
var group: TextView = view.findViewById(R.id.group)
|
||||
@@ -38,16 +41,16 @@ internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: S
|
||||
var additional: TextView = view.findViewById(R.id.additional)
|
||||
var teacher: TextView = view.findViewById(R.id.teacher)
|
||||
var spacer: TextView = view.findViewById(R.id.spacer)
|
||||
|
||||
var card: MaterialCardView = view.findViewById(R.id.planCard)
|
||||
val context: Context = card.context
|
||||
init { view.setOnClickListener(this) }
|
||||
override fun onClick(v: View?) {
|
||||
if (date.text.toString().length > 7 && date.text.toString().substring(3, 7) == "http") {
|
||||
try {
|
||||
CustomTabsIntent.Builder().build().launchUrl(card.context,
|
||||
Uri.parse(date.text.toString().substring(3)))
|
||||
CustomTabsIntent.Builder().build().launchUrl(context,
|
||||
Uri.parse(date.text.substring(3)))
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
Toast.makeText(card.context, card.context.getString(R.string.chrome_not_found), Toast.LENGTH_LONG).show()
|
||||
Toast.makeText(context, context.getString(R.string.chrome_not_found), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,12 +62,13 @@ internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: S
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
|
||||
val currentItem = mSubst[position]
|
||||
val currentItem = substitutions[position]
|
||||
var psa = false
|
||||
val strings = arrayOf(SpannableString(currentItem.group), SpannableString(currentItem.time),
|
||||
SpannableString(currentItem.course), SpannableString(currentItem.room),
|
||||
SpannableString(currentItem.teacher))
|
||||
var cardBackgroundColour = 0
|
||||
val cardBackgroundColour: Int
|
||||
var colour = 0
|
||||
|
||||
for (string in strings) {
|
||||
val questionMarkIndex = string.indexOf("?")
|
||||
@@ -76,11 +80,11 @@ internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: S
|
||||
val add = currentItem.additional.toLowerCase(Locale.ROOT)
|
||||
val type = currentItem.type.toLowerCase(Locale.ROOT)
|
||||
if (add.isNotEmpty()) {
|
||||
if (HelperFunctions.checkStringForArray(add, cancellations)) {
|
||||
if (HelperFunctions.checkStringForArray(add, HelperFunctions.cancellations)) {
|
||||
strikeThrough(strings)
|
||||
}
|
||||
} else {
|
||||
if (HelperFunctions.checkStringForArray(type, cancellations)) {
|
||||
if (HelperFunctions.checkStringForArray(type, HelperFunctions.cancellations)) {
|
||||
strikeThrough(strings)
|
||||
}
|
||||
}
|
||||
@@ -100,7 +104,7 @@ internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: S
|
||||
cardBackgroundColour = R.color.colorAccent
|
||||
View.GONE
|
||||
} else {
|
||||
colourString = getColourString(holder.course.text.toString())
|
||||
val colourString = HelperFunctions.getColourString(holder.course.text.toString())
|
||||
val colourPrefsInt = if (colourString.isNotEmpty()) {
|
||||
prefs.getString("card$colourString", "") ?: ""
|
||||
} else {
|
||||
@@ -150,58 +154,13 @@ internal class CardAdapter(private var mSubst: List<Subst>, private val prefs: S
|
||||
holder.teacher.setTextColor(textColor)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = mSubst.size
|
||||
override fun getItemCount(): Int = substitutions.size
|
||||
|
||||
fun setSubst(subst: List<Subst>) {
|
||||
mSubst = subst
|
||||
fun setSubst(substitutions: List<Substitution>) {
|
||||
this.substitutions = substitutions
|
||||
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) {
|
||||
""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun strikeThrough(strings: Array<SpannableString>) {
|
||||
for (i in 2..4) { strings[i].setSpan(StrikethroughSpan(), 0, strings[i].length, 0) }
|
||||
}
|
||||
Reference in New Issue
Block a user